ai.matey.cli 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/cjs/convert-request.js +365 -0
- package/dist/cjs/convert-request.js.map +1 -0
- package/dist/cjs/convert-response.js +211 -0
- package/dist/cjs/convert-response.js.map +1 -0
- package/dist/cjs/converters/request-converters.js +183 -0
- package/dist/cjs/converters/request-converters.js.map +1 -0
- package/dist/cjs/converters/response-converters.js +203 -0
- package/dist/cjs/converters/response-converters.js.map +1 -0
- package/dist/cjs/create-backend.js +569 -0
- package/dist/cjs/create-backend.js.map +1 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/main.js +181 -0
- package/dist/cjs/main.js.map +1 -0
- package/dist/cjs/ollama/commands/list.js +70 -0
- package/dist/cjs/ollama/commands/list.js.map +1 -0
- package/dist/cjs/ollama/commands/ps.js +80 -0
- package/dist/cjs/ollama/commands/ps.js.map +1 -0
- package/dist/cjs/ollama/commands/pull.js +198 -0
- package/dist/cjs/ollama/commands/pull.js.map +1 -0
- package/dist/cjs/ollama/commands/run.js +279 -0
- package/dist/cjs/ollama/commands/run.js.map +1 -0
- package/dist/cjs/ollama/commands/show.js +138 -0
- package/dist/cjs/ollama/commands/show.js.map +1 -0
- package/dist/cjs/ollama/index.js +238 -0
- package/dist/cjs/ollama/index.js.map +1 -0
- package/dist/cjs/ollama/types.js +10 -0
- package/dist/cjs/ollama/types.js.map +1 -0
- package/dist/cjs/proxy.js +406 -0
- package/dist/cjs/proxy.js.map +1 -0
- package/dist/cjs/utils/backend-loader.js +112 -0
- package/dist/cjs/utils/backend-loader.js.map +1 -0
- package/dist/cjs/utils/index.js +29 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/model-translation.js +138 -0
- package/dist/cjs/utils/model-translation.js.map +1 -0
- package/dist/cjs/utils/output-formatter.js +241 -0
- package/dist/cjs/utils/output-formatter.js.map +1 -0
- package/dist/cjs/utils/pipeline-inspector.js +90 -0
- package/dist/cjs/utils/pipeline-inspector.js.map +1 -0
- package/dist/cjs/utils/state-manager.js +114 -0
- package/dist/cjs/utils/state-manager.js.map +1 -0
- package/dist/esm/convert-request.js +331 -0
- package/dist/esm/convert-request.js.map +1 -0
- package/dist/esm/convert-response.js +177 -0
- package/dist/esm/convert-response.js.map +1 -0
- package/dist/esm/converters/request-converters.js +175 -0
- package/dist/esm/converters/request-converters.js.map +1 -0
- package/dist/esm/converters/response-converters.js +191 -0
- package/dist/esm/converters/response-converters.js.map +1 -0
- package/dist/esm/create-backend.js +533 -0
- package/dist/esm/create-backend.js.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/main.js +149 -0
- package/dist/esm/main.js.map +1 -0
- package/dist/esm/ollama/commands/list.js +67 -0
- package/dist/esm/ollama/commands/list.js.map +1 -0
- package/dist/esm/ollama/commands/ps.js +77 -0
- package/dist/esm/ollama/commands/ps.js.map +1 -0
- package/dist/esm/ollama/commands/pull.js +195 -0
- package/dist/esm/ollama/commands/pull.js.map +1 -0
- package/dist/esm/ollama/commands/run.js +243 -0
- package/dist/esm/ollama/commands/run.js.map +1 -0
- package/dist/esm/ollama/commands/show.js +135 -0
- package/dist/esm/ollama/commands/show.js.map +1 -0
- package/dist/esm/ollama/index.js +235 -0
- package/dist/esm/ollama/index.js.map +1 -0
- package/dist/esm/ollama/types.js +9 -0
- package/dist/esm/ollama/types.js.map +1 -0
- package/dist/esm/proxy.js +403 -0
- package/dist/esm/proxy.js.map +1 -0
- package/dist/esm/utils/backend-loader.js +74 -0
- package/dist/esm/utils/backend-loader.js.map +1 -0
- package/dist/esm/utils/index.js +13 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/model-translation.js +99 -0
- package/dist/esm/utils/model-translation.js.map +1 -0
- package/dist/esm/utils/output-formatter.js +224 -0
- package/dist/esm/utils/output-formatter.js.map +1 -0
- package/dist/esm/utils/pipeline-inspector.js +84 -0
- package/dist/esm/utils/pipeline-inspector.js.map +1 -0
- package/dist/esm/utils/state-manager.js +111 -0
- package/dist/esm/utils/state-manager.js.map +1 -0
- package/dist/types/convert-request.d.ts +15 -0
- package/dist/types/convert-request.d.ts.map +1 -0
- package/dist/types/convert-response.d.ts +16 -0
- package/dist/types/convert-response.d.ts.map +1 -0
- package/dist/types/converters/request-converters.d.ts +139 -0
- package/dist/types/converters/request-converters.d.ts.map +1 -0
- package/dist/types/converters/response-converters.d.ts +134 -0
- package/dist/types/converters/response-converters.d.ts.map +1 -0
- package/dist/types/create-backend.d.ts +20 -0
- package/dist/types/create-backend.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/main.d.ts +19 -0
- package/dist/types/main.d.ts.map +1 -0
- package/dist/types/ollama/commands/list.d.ts +32 -0
- package/dist/types/ollama/commands/list.d.ts.map +1 -0
- package/dist/types/ollama/commands/ps.d.ts +27 -0
- package/dist/types/ollama/commands/ps.d.ts.map +1 -0
- package/dist/types/ollama/commands/pull.d.ts +21 -0
- package/dist/types/ollama/commands/pull.d.ts.map +1 -0
- package/dist/types/ollama/commands/run.d.ts +48 -0
- package/dist/types/ollama/commands/run.d.ts.map +1 -0
- package/dist/types/ollama/commands/show.d.ts +36 -0
- package/dist/types/ollama/commands/show.d.ts.map +1 -0
- package/dist/types/ollama/index.d.ts +12 -0
- package/dist/types/ollama/index.d.ts.map +1 -0
- package/dist/types/ollama/types.d.ts +58 -0
- package/dist/types/ollama/types.d.ts.map +1 -0
- package/dist/types/proxy.d.ts +16 -0
- package/dist/types/proxy.d.ts.map +1 -0
- package/dist/types/utils/backend-loader.d.ts +55 -0
- package/dist/types/utils/backend-loader.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +13 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/model-translation.d.ts +64 -0
- package/dist/types/utils/model-translation.d.ts.map +1 -0
- package/dist/types/utils/output-formatter.d.ts +113 -0
- package/dist/types/utils/output-formatter.d.ts.map +1 -0
- package/dist/types/utils/pipeline-inspector.d.ts +50 -0
- package/dist/types/utils/pipeline-inspector.d.ts.map +1 -0
- package/dist/types/utils/state-manager.d.ts +91 -0
- package/dist/types/utils/state-manager.d.ts.map +1 -0
- package/package.json +75 -0
- package/readme.md +32 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI Tool for Converting Requests
|
|
4
|
+
*
|
|
5
|
+
* Convert between Universal IR requests and various provider formats.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ai-matey convert-request --from openai --to ir --input request.json
|
|
9
|
+
* ai-matey convert-request --from ir --to anthropic --input request.json
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { readFile } from 'node:fs/promises';
|
|
14
|
+
import { stdin } from 'node:process';
|
|
15
|
+
import { toOpenAIRequest, toAnthropicRequest, toGeminiRequest, toOllamaRequest, toMistralRequest, toMultipleRequestFormats, } from './converters/request-converters.js';
|
|
16
|
+
function parseArgs(args) {
|
|
17
|
+
const parsed = {
|
|
18
|
+
from: 'ir',
|
|
19
|
+
to: 'openai',
|
|
20
|
+
pretty: true,
|
|
21
|
+
};
|
|
22
|
+
for (let i = 0; i < args.length; i++) {
|
|
23
|
+
const arg = args[i];
|
|
24
|
+
switch (arg) {
|
|
25
|
+
case '--from':
|
|
26
|
+
case '-f':
|
|
27
|
+
parsed.from = args[++i] || 'ir';
|
|
28
|
+
break;
|
|
29
|
+
case '--to':
|
|
30
|
+
case '-t':
|
|
31
|
+
parsed.to = args[++i] || 'openai';
|
|
32
|
+
break;
|
|
33
|
+
case '--input':
|
|
34
|
+
case '-i':
|
|
35
|
+
parsed.input = args[++i];
|
|
36
|
+
break;
|
|
37
|
+
case '--output':
|
|
38
|
+
case '-o':
|
|
39
|
+
parsed.output = args[++i];
|
|
40
|
+
break;
|
|
41
|
+
case '--no-pretty':
|
|
42
|
+
parsed.pretty = false;
|
|
43
|
+
break;
|
|
44
|
+
case '--help':
|
|
45
|
+
case '-h':
|
|
46
|
+
parsed.help = true;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
52
|
+
// ============================================================================
|
|
53
|
+
// Help Text
|
|
54
|
+
// ============================================================================
|
|
55
|
+
const SUPPORTED_FORMATS = ['ir', 'openai', 'anthropic', 'gemini', 'ollama', 'mistral'];
|
|
56
|
+
function printHelp() {
|
|
57
|
+
console.log(`
|
|
58
|
+
AI.Matey Request Converter
|
|
59
|
+
Convert between Universal IR requests and provider formats
|
|
60
|
+
|
|
61
|
+
USAGE:
|
|
62
|
+
ai-matey convert-request [OPTIONS]
|
|
63
|
+
|
|
64
|
+
OPTIONS:
|
|
65
|
+
-f, --from <format> Source format (${SUPPORTED_FORMATS.join(', ')}, or 'all')
|
|
66
|
+
-t, --to <format> Target format (${SUPPORTED_FORMATS.join(', ')}, or 'all')
|
|
67
|
+
-i, --input <file> Input file (JSON). If omitted, reads from stdin
|
|
68
|
+
-o, --output <file> Output file. If omitted, writes to stdout
|
|
69
|
+
--no-pretty Disable pretty-printing
|
|
70
|
+
-h, --help Show this help message
|
|
71
|
+
|
|
72
|
+
FORMATS:
|
|
73
|
+
ir - Universal Intermediate Representation
|
|
74
|
+
${SUPPORTED_FORMATS.filter((f) => f !== 'ir')
|
|
75
|
+
.map((f) => ` ${f.padEnd(12)} - ${f.charAt(0).toUpperCase() + f.slice(1)} format`)
|
|
76
|
+
.join('\n ')}
|
|
77
|
+
all - Convert to all formats (for debugging)
|
|
78
|
+
|
|
79
|
+
EXAMPLES:
|
|
80
|
+
# Convert IR to OpenAI format
|
|
81
|
+
ai-matey convert-request --from ir --to openai --input ir-request.json
|
|
82
|
+
|
|
83
|
+
# Convert OpenAI to IR (useful for migration)
|
|
84
|
+
ai-matey convert-request --from openai --to ir --input openai-request.json
|
|
85
|
+
|
|
86
|
+
# Convert from stdin
|
|
87
|
+
cat request.json | ai-matey convert-request --from ir --to anthropic
|
|
88
|
+
|
|
89
|
+
# Save to file
|
|
90
|
+
ai-matey convert-request -f ir -t gemini -i request.json -o gemini-request.json
|
|
91
|
+
|
|
92
|
+
# Convert IR to all formats for comparison
|
|
93
|
+
ai-matey convert-request -f ir -t all -i request.json
|
|
94
|
+
`);
|
|
95
|
+
}
|
|
96
|
+
// ============================================================================
|
|
97
|
+
// Input/Output Functions
|
|
98
|
+
// ============================================================================
|
|
99
|
+
async function readInput(inputFile) {
|
|
100
|
+
let content;
|
|
101
|
+
if (inputFile) {
|
|
102
|
+
// Read from file
|
|
103
|
+
content = await readFile(inputFile, 'utf-8');
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Read from stdin
|
|
107
|
+
const chunks = [];
|
|
108
|
+
for await (const chunk of stdin) {
|
|
109
|
+
chunks.push(chunk);
|
|
110
|
+
}
|
|
111
|
+
content = Buffer.concat(chunks).toString('utf-8');
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
return JSON.parse(content);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
throw new Error(`Invalid JSON input: ${error instanceof Error ? error.message : String(error)}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function formatOutput(data, pretty) {
|
|
121
|
+
return pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);
|
|
122
|
+
}
|
|
123
|
+
// ============================================================================
|
|
124
|
+
// Conversion Functions
|
|
125
|
+
// ============================================================================
|
|
126
|
+
/**
|
|
127
|
+
* Convert from provider format to IR.
|
|
128
|
+
* This is a basic implementation that handles common cases.
|
|
129
|
+
*/
|
|
130
|
+
function toIRRequest(data, sourceFormat) {
|
|
131
|
+
// For now, we'll do basic conversion
|
|
132
|
+
// This can be enhanced with proper type-safe converters later
|
|
133
|
+
switch (sourceFormat) {
|
|
134
|
+
case 'openai':
|
|
135
|
+
return {
|
|
136
|
+
messages: data.messages || [],
|
|
137
|
+
parameters: {
|
|
138
|
+
model: data.model,
|
|
139
|
+
temperature: data.temperature,
|
|
140
|
+
maxTokens: data.max_tokens,
|
|
141
|
+
topP: data.top_p,
|
|
142
|
+
frequencyPenalty: data.frequency_penalty,
|
|
143
|
+
presencePenalty: data.presence_penalty,
|
|
144
|
+
stopSequences: Array.isArray(data.stop) ? data.stop : data.stop ? [data.stop] : undefined,
|
|
145
|
+
},
|
|
146
|
+
stream: data.stream,
|
|
147
|
+
metadata: {
|
|
148
|
+
requestId: crypto.randomUUID(),
|
|
149
|
+
timestamp: Date.now(),
|
|
150
|
+
provenance: { frontend: 'openai' },
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
case 'anthropic':
|
|
154
|
+
return {
|
|
155
|
+
messages: data.messages || [],
|
|
156
|
+
parameters: {
|
|
157
|
+
model: data.model,
|
|
158
|
+
temperature: data.temperature,
|
|
159
|
+
maxTokens: data.max_tokens,
|
|
160
|
+
topP: data.top_p,
|
|
161
|
+
topK: data.top_k,
|
|
162
|
+
stopSequences: data.stop_sequences,
|
|
163
|
+
},
|
|
164
|
+
stream: data.stream,
|
|
165
|
+
metadata: {
|
|
166
|
+
requestId: crypto.randomUUID(),
|
|
167
|
+
timestamp: Date.now(),
|
|
168
|
+
provenance: { frontend: 'anthropic' },
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
case 'gemini':
|
|
172
|
+
// Gemini has different structure - contents instead of messages
|
|
173
|
+
const messages = (data.contents || []).map((content) => ({
|
|
174
|
+
role: content.role === 'model' ? 'assistant' : content.role,
|
|
175
|
+
content: content.parts?.map((p) => p.text).join('') || '',
|
|
176
|
+
}));
|
|
177
|
+
return {
|
|
178
|
+
messages,
|
|
179
|
+
parameters: {
|
|
180
|
+
model: data.model,
|
|
181
|
+
temperature: data.generationConfig?.temperature,
|
|
182
|
+
maxTokens: data.generationConfig?.maxOutputTokens,
|
|
183
|
+
topP: data.generationConfig?.topP,
|
|
184
|
+
topK: data.generationConfig?.topK,
|
|
185
|
+
stopSequences: data.generationConfig?.stopSequences,
|
|
186
|
+
},
|
|
187
|
+
metadata: {
|
|
188
|
+
requestId: crypto.randomUUID(),
|
|
189
|
+
timestamp: Date.now(),
|
|
190
|
+
provenance: { frontend: 'gemini' },
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
case 'ollama':
|
|
194
|
+
return {
|
|
195
|
+
messages: data.messages || [],
|
|
196
|
+
parameters: {
|
|
197
|
+
model: data.model,
|
|
198
|
+
temperature: data.options?.temperature,
|
|
199
|
+
topP: data.options?.top_p,
|
|
200
|
+
topK: data.options?.top_k,
|
|
201
|
+
},
|
|
202
|
+
stream: data.stream,
|
|
203
|
+
metadata: {
|
|
204
|
+
requestId: crypto.randomUUID(),
|
|
205
|
+
timestamp: Date.now(),
|
|
206
|
+
provenance: { frontend: 'ollama' },
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
case 'mistral':
|
|
210
|
+
return {
|
|
211
|
+
messages: data.messages || [],
|
|
212
|
+
parameters: {
|
|
213
|
+
model: data.model,
|
|
214
|
+
temperature: data.temperature,
|
|
215
|
+
maxTokens: data.max_tokens,
|
|
216
|
+
topP: data.top_p,
|
|
217
|
+
},
|
|
218
|
+
stream: data.stream,
|
|
219
|
+
metadata: {
|
|
220
|
+
requestId: crypto.randomUUID(),
|
|
221
|
+
timestamp: Date.now(),
|
|
222
|
+
provenance: { frontend: 'mistral' },
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
default:
|
|
226
|
+
throw new Error(`Unsupported source format: ${sourceFormat}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// Main Function
|
|
231
|
+
// ============================================================================
|
|
232
|
+
async function main() {
|
|
233
|
+
const args = parseArgs(process.argv.slice(2));
|
|
234
|
+
if (args.help) {
|
|
235
|
+
printHelp();
|
|
236
|
+
process.exit(0);
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
// Read input
|
|
240
|
+
const input = await readInput(args.input);
|
|
241
|
+
// Convert
|
|
242
|
+
let result;
|
|
243
|
+
if (args.from === 'ir') {
|
|
244
|
+
// Convert FROM IR TO provider format
|
|
245
|
+
const irRequest = input;
|
|
246
|
+
if (args.to === 'all') {
|
|
247
|
+
// Convert to all formats
|
|
248
|
+
result = toMultipleRequestFormats(irRequest, [
|
|
249
|
+
'openai',
|
|
250
|
+
'anthropic',
|
|
251
|
+
'gemini',
|
|
252
|
+
'ollama',
|
|
253
|
+
'mistral',
|
|
254
|
+
]);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// Convert to specific format
|
|
258
|
+
switch (args.to) {
|
|
259
|
+
case 'ir':
|
|
260
|
+
result = irRequest; // No conversion needed
|
|
261
|
+
break;
|
|
262
|
+
case 'openai':
|
|
263
|
+
result = toOpenAIRequest(irRequest);
|
|
264
|
+
break;
|
|
265
|
+
case 'anthropic':
|
|
266
|
+
result = toAnthropicRequest(irRequest);
|
|
267
|
+
break;
|
|
268
|
+
case 'gemini':
|
|
269
|
+
result = toGeminiRequest(irRequest);
|
|
270
|
+
break;
|
|
271
|
+
case 'ollama':
|
|
272
|
+
result = toOllamaRequest(irRequest);
|
|
273
|
+
break;
|
|
274
|
+
case 'mistral':
|
|
275
|
+
result = toMistralRequest(irRequest);
|
|
276
|
+
break;
|
|
277
|
+
default:
|
|
278
|
+
throw new Error(`Unsupported target format: ${args.to}. Use --help to see available formats.`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else if (args.to === 'ir') {
|
|
283
|
+
// Convert FROM provider format TO IR
|
|
284
|
+
result = toIRRequest(input, args.from);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
// Convert FROM provider TO provider (via IR)
|
|
288
|
+
const irRequest = toIRRequest(input, args.from);
|
|
289
|
+
switch (args.to) {
|
|
290
|
+
case 'openai':
|
|
291
|
+
result = toOpenAIRequest(irRequest);
|
|
292
|
+
break;
|
|
293
|
+
case 'anthropic':
|
|
294
|
+
result = toAnthropicRequest(irRequest);
|
|
295
|
+
break;
|
|
296
|
+
case 'gemini':
|
|
297
|
+
result = toGeminiRequest(irRequest);
|
|
298
|
+
break;
|
|
299
|
+
case 'ollama':
|
|
300
|
+
result = toOllamaRequest(irRequest);
|
|
301
|
+
break;
|
|
302
|
+
case 'mistral':
|
|
303
|
+
result = toMistralRequest(irRequest);
|
|
304
|
+
break;
|
|
305
|
+
default:
|
|
306
|
+
throw new Error(`Unsupported target format: ${args.to}`);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Format and output
|
|
310
|
+
const output = formatOutput(result, args.pretty ?? true);
|
|
311
|
+
if (args.output) {
|
|
312
|
+
// Write to file
|
|
313
|
+
const { writeFile } = await import('node:fs/promises');
|
|
314
|
+
await writeFile(args.output, output, 'utf-8');
|
|
315
|
+
console.error(`✓ Converted from ${args.from} to ${args.to}: ${args.output}`);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
// Write to stdout
|
|
319
|
+
console.log(output);
|
|
320
|
+
}
|
|
321
|
+
process.exit(0);
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
console.error('Error:', error instanceof Error ? error.message : String(error));
|
|
325
|
+
console.error('\nRun with --help for usage information');
|
|
326
|
+
process.exit(1);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
// Export for use as module or subcommand
|
|
330
|
+
export { main };
|
|
331
|
+
//# sourceMappingURL=convert-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-request.js","sourceRoot":"","sources":["../../src/convert-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI Tool for Converting IR Responses
|
|
4
|
+
*
|
|
5
|
+
* Convert Universal IR responses to various frontend formats for debugging.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx ai-matey convert-response --format openai --input response.json
|
|
9
|
+
* npx ai-matey convert-response --format all --input response.json
|
|
10
|
+
* cat response.json | npx ai-matey convert-response --format anthropic
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { readFile } from 'node:fs/promises';
|
|
15
|
+
import { stdin } from 'node:process';
|
|
16
|
+
import { toOpenAI, toAnthropic, toGemini, toOllama, toMistral, toMultipleFormats, } from './converters/response-converters.js';
|
|
17
|
+
function parseArgs(args) {
|
|
18
|
+
const parsed = {
|
|
19
|
+
format: 'openai',
|
|
20
|
+
pretty: true,
|
|
21
|
+
};
|
|
22
|
+
for (let i = 0; i < args.length; i++) {
|
|
23
|
+
const arg = args[i];
|
|
24
|
+
switch (arg) {
|
|
25
|
+
case '--format':
|
|
26
|
+
case '-f':
|
|
27
|
+
parsed.format = args[++i] || 'openai';
|
|
28
|
+
break;
|
|
29
|
+
case '--input':
|
|
30
|
+
case '-i':
|
|
31
|
+
parsed.input = args[++i];
|
|
32
|
+
break;
|
|
33
|
+
case '--output':
|
|
34
|
+
case '-o':
|
|
35
|
+
parsed.output = args[++i];
|
|
36
|
+
break;
|
|
37
|
+
case '--no-pretty':
|
|
38
|
+
parsed.pretty = false;
|
|
39
|
+
break;
|
|
40
|
+
case '--help':
|
|
41
|
+
case '-h':
|
|
42
|
+
parsed.help = true;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return parsed;
|
|
47
|
+
}
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// Help Text
|
|
50
|
+
// ============================================================================
|
|
51
|
+
const SUPPORTED_FORMATS = ['openai', 'anthropic', 'gemini', 'ollama', 'mistral'];
|
|
52
|
+
function printHelp() {
|
|
53
|
+
console.log(`
|
|
54
|
+
AI.Matey Response Converter
|
|
55
|
+
Convert Universal IR responses to various frontend formats
|
|
56
|
+
|
|
57
|
+
USAGE:
|
|
58
|
+
npx ai-matey convert-response [OPTIONS]
|
|
59
|
+
|
|
60
|
+
OPTIONS:
|
|
61
|
+
-f, --format <format> Target format (${SUPPORTED_FORMATS.join(', ')}, or 'all')
|
|
62
|
+
-i, --input <file> Input file (JSON). If omitted, reads from stdin
|
|
63
|
+
-o, --output <file> Output file. If omitted, writes to stdout
|
|
64
|
+
--no-pretty Disable pretty-printing
|
|
65
|
+
-h, --help Show this help message
|
|
66
|
+
|
|
67
|
+
FORMATS:
|
|
68
|
+
${SUPPORTED_FORMATS.map((f) => ` ${f.padEnd(12)} - ${f.charAt(0).toUpperCase() + f.slice(1)} format`).join('\n ')}
|
|
69
|
+
all - Convert to all formats (for debugging)
|
|
70
|
+
|
|
71
|
+
EXAMPLES:
|
|
72
|
+
# Convert from file
|
|
73
|
+
npx ai-matey convert-response --format openai --input response.json
|
|
74
|
+
|
|
75
|
+
# Convert from stdin
|
|
76
|
+
cat response.json | npx ai-matey convert-response --format anthropic
|
|
77
|
+
|
|
78
|
+
# Save to file
|
|
79
|
+
npx ai-matey convert-response -f gemini -i response.json -o gemini-format.json
|
|
80
|
+
|
|
81
|
+
# Convert to all formats for debugging
|
|
82
|
+
npx ai-matey convert-response -f all -i response.json
|
|
83
|
+
|
|
84
|
+
# Compact output (no pretty-printing)
|
|
85
|
+
npx ai-matey convert-response -f openai -i response.json --no-pretty
|
|
86
|
+
`);
|
|
87
|
+
}
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Input/Output Functions
|
|
90
|
+
// ============================================================================
|
|
91
|
+
async function readInput(inputFile) {
|
|
92
|
+
let content;
|
|
93
|
+
if (inputFile) {
|
|
94
|
+
// Read from file
|
|
95
|
+
content = await readFile(inputFile, 'utf-8');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Read from stdin
|
|
99
|
+
const chunks = [];
|
|
100
|
+
for await (const chunk of stdin) {
|
|
101
|
+
chunks.push(chunk);
|
|
102
|
+
}
|
|
103
|
+
content = Buffer.concat(chunks).toString('utf-8');
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
return JSON.parse(content);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
throw new Error(`Invalid JSON input: ${error instanceof Error ? error.message : String(error)}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function formatOutput(data, pretty) {
|
|
113
|
+
return pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);
|
|
114
|
+
}
|
|
115
|
+
// ============================================================================
|
|
116
|
+
// Main Function
|
|
117
|
+
// ============================================================================
|
|
118
|
+
async function main() {
|
|
119
|
+
const args = parseArgs(process.argv.slice(2));
|
|
120
|
+
if (args.help) {
|
|
121
|
+
printHelp();
|
|
122
|
+
process.exit(0);
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
// Read input
|
|
126
|
+
const irResponse = await readInput(args.input);
|
|
127
|
+
// Convert to target format(s)
|
|
128
|
+
let result;
|
|
129
|
+
if (args.format === 'all') {
|
|
130
|
+
// Convert to all formats
|
|
131
|
+
result = await toMultipleFormats(irResponse, SUPPORTED_FORMATS);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Convert to specific format
|
|
135
|
+
switch (args.format) {
|
|
136
|
+
case 'openai':
|
|
137
|
+
result = await toOpenAI(irResponse);
|
|
138
|
+
break;
|
|
139
|
+
case 'anthropic':
|
|
140
|
+
result = await toAnthropic(irResponse);
|
|
141
|
+
break;
|
|
142
|
+
case 'gemini':
|
|
143
|
+
result = await toGemini(irResponse);
|
|
144
|
+
break;
|
|
145
|
+
case 'ollama':
|
|
146
|
+
result = await toOllama(irResponse);
|
|
147
|
+
break;
|
|
148
|
+
case 'mistral':
|
|
149
|
+
result = await toMistral(irResponse);
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
throw new Error(`Unsupported format: ${args.format}. Use --help to see available formats.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Format and output
|
|
156
|
+
const output = formatOutput(result, args.pretty ?? true);
|
|
157
|
+
if (args.output) {
|
|
158
|
+
// Write to file
|
|
159
|
+
const { writeFile } = await import('node:fs/promises');
|
|
160
|
+
await writeFile(args.output, output, 'utf-8');
|
|
161
|
+
console.error(`✓ Converted to ${args.format} format: ${args.output}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
// Write to stdout
|
|
165
|
+
console.log(output);
|
|
166
|
+
}
|
|
167
|
+
process.exit(0);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
console.error('Error:', error instanceof Error ? error.message : String(error));
|
|
171
|
+
console.error('\nRun with --help for usage information');
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Export for use as module or subcommand
|
|
176
|
+
export { main };
|
|
177
|
+
//# sourceMappingURL=convert-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-response.js","sourceRoot":"","sources":["../../src/convert-response.ts"],"names":[],"mappings":"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"}
|