ai.matey.frontend 0.2.0 → 0.3.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/CHANGELOG.md +40 -0
- package/dist/cjs/adapters/anthropic.js +156 -16
- package/dist/cjs/adapters/anthropic.js.map +1 -1
- package/dist/cjs/adapters/chrome-ai.js +58 -0
- package/dist/cjs/adapters/chrome-ai.js.map +1 -1
- package/dist/cjs/adapters/gemini.js +57 -0
- package/dist/cjs/adapters/gemini.js.map +1 -1
- package/dist/cjs/adapters/generic.js +56 -4
- package/dist/cjs/adapters/generic.js.map +1 -1
- package/dist/cjs/adapters/mistral.js +59 -0
- package/dist/cjs/adapters/mistral.js.map +1 -1
- package/dist/cjs/adapters/ollama.js +59 -0
- package/dist/cjs/adapters/ollama.js.map +1 -1
- package/dist/cjs/adapters/openai.js +199 -32
- package/dist/cjs/adapters/openai.js.map +1 -1
- package/dist/esm/adapters/anthropic.js +156 -16
- package/dist/esm/adapters/anthropic.js.map +1 -1
- package/dist/esm/adapters/chrome-ai.js +58 -0
- package/dist/esm/adapters/chrome-ai.js.map +1 -1
- package/dist/esm/adapters/gemini.js +57 -0
- package/dist/esm/adapters/gemini.js.map +1 -1
- package/dist/esm/adapters/generic.js +56 -4
- package/dist/esm/adapters/generic.js.map +1 -1
- package/dist/esm/adapters/mistral.js +59 -0
- package/dist/esm/adapters/mistral.js.map +1 -1
- package/dist/esm/adapters/ollama.js +59 -0
- package/dist/esm/adapters/ollama.js.map +1 -1
- package/dist/esm/adapters/openai.js +199 -32
- package/dist/esm/adapters/openai.js.map +1 -1
- package/dist/types/adapters/anthropic.d.ts +254 -8
- package/dist/types/adapters/anthropic.d.ts.map +1 -1
- package/dist/types/adapters/chrome-ai.d.ts +95 -0
- package/dist/types/adapters/chrome-ai.d.ts.map +1 -1
- package/dist/types/adapters/gemini.d.ts +170 -0
- package/dist/types/adapters/gemini.d.ts.map +1 -1
- package/dist/types/adapters/generic.d.ts +56 -4
- package/dist/types/adapters/generic.d.ts.map +1 -1
- package/dist/types/adapters/mistral.d.ts +143 -0
- package/dist/types/adapters/mistral.d.ts.map +1 -1
- package/dist/types/adapters/ollama.d.ts +132 -0
- package/dist/types/adapters/ollama.d.ts.map +1 -1
- package/dist/types/adapters/openai.d.ts +252 -8
- package/dist/types/adapters/openai.d.ts.map +1 -1
- package/package.json +2 -3
|
@@ -21,6 +21,27 @@ class MistralFrontendAdapter {
|
|
|
21
21
|
supportsMultipleSystemMessages: false,
|
|
22
22
|
},
|
|
23
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* Convert Mistral API request to Universal IR format.
|
|
26
|
+
*
|
|
27
|
+
* This method transforms a Mistral-formatted request into the standardized
|
|
28
|
+
* Intermediate Representation (IR) format. Since Mistral's format is similar
|
|
29
|
+
* to OpenAI and close to IR, this is largely a pass-through adapter with
|
|
30
|
+
* field name mapping (e.g., random_seed → seed).
|
|
31
|
+
*
|
|
32
|
+
* @param request - Mistral API request
|
|
33
|
+
* @returns Promise resolving to IR chat request
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const adapter = new MistralFrontendAdapter();
|
|
38
|
+
* const irRequest = await adapter.toIR({
|
|
39
|
+
* model: 'mistral-small',
|
|
40
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
41
|
+
* temperature: 0.7
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
24
45
|
toIR(request) {
|
|
25
46
|
const messages = request.messages.map((msg) => ({
|
|
26
47
|
role: msg.role,
|
|
@@ -43,6 +64,24 @@ class MistralFrontendAdapter {
|
|
|
43
64
|
stream: request.stream,
|
|
44
65
|
});
|
|
45
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Convert Universal IR response back to Mistral API format.
|
|
69
|
+
*
|
|
70
|
+
* This method transforms the standardized IR response into the format
|
|
71
|
+
* expected by Mistral's API. It handles message conversion, finish reason
|
|
72
|
+
* mapping (stop, length, model_length), and usage statistics formatting
|
|
73
|
+
* specific to Mistral's response structure.
|
|
74
|
+
*
|
|
75
|
+
* @param response - Universal IR chat response
|
|
76
|
+
* @returns Promise resolving to Mistral API response
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const adapter = new MistralFrontendAdapter();
|
|
81
|
+
* const mistralResponse = await adapter.fromIR(irResponse);
|
|
82
|
+
* console.log(mistralResponse.choices[0].message.content);
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
46
85
|
fromIR(response) {
|
|
47
86
|
return Promise.resolve({
|
|
48
87
|
id: `mistral-${Date.now()}`,
|
|
@@ -72,6 +111,26 @@ class MistralFrontendAdapter {
|
|
|
72
111
|
: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
|
|
73
112
|
});
|
|
74
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Convert Universal IR stream to Mistral Server-Sent Events format.
|
|
116
|
+
*
|
|
117
|
+
* This async generator method transforms a stream of IR chunks into
|
|
118
|
+
* Mistral-formatted SSE responses. It yields Server-Sent Event strings
|
|
119
|
+
* with the "data: " prefix containing JSON with delta content, and
|
|
120
|
+
* emits "data: [DONE]" when the stream completes.
|
|
121
|
+
*
|
|
122
|
+
* @param stream - Universal IR chat stream
|
|
123
|
+
* @param _options - Optional stream conversion options (currently unused)
|
|
124
|
+
* @yields Server-Sent Event formatted strings
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const adapter = new MistralFrontendAdapter();
|
|
129
|
+
* for await (const sseData of adapter.fromIRStream(irStream)) {
|
|
130
|
+
* console.log(sseData); // "data: {...}\n\n" or "data: [DONE]\n\n"
|
|
131
|
+
* }
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
75
134
|
async *fromIRStream(stream, _options) {
|
|
76
135
|
for await (const chunk of stream) {
|
|
77
136
|
if (chunk.type === 'content') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mistral.js","sourceRoot":"","sources":["../../../src/adapters/mistral.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"mistral.js","sourceRoot":"","sources":["../../../src/adapters/mistral.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,27 @@ class OllamaFrontendAdapter {
|
|
|
22
22
|
supportsMultipleSystemMessages: false,
|
|
23
23
|
},
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Convert Ollama API request to Universal IR format.
|
|
27
|
+
*
|
|
28
|
+
* This method transforms an Ollama-formatted request into the standardized
|
|
29
|
+
* Intermediate Representation (IR) format. It handles Ollama's unique
|
|
30
|
+
* structure where parameters are nested in an `options` object, and maps
|
|
31
|
+
* Ollama-specific field names (e.g., num_predict → maxTokens).
|
|
32
|
+
*
|
|
33
|
+
* @param request - Ollama API request
|
|
34
|
+
* @returns Promise resolving to IR chat request
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const adapter = new OllamaFrontendAdapter();
|
|
39
|
+
* const irRequest = await adapter.toIR({
|
|
40
|
+
* model: 'llama2',
|
|
41
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
42
|
+
* options: { temperature: 0.7, num_predict: 100 }
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
25
46
|
toIR(request) {
|
|
26
47
|
const messages = request.messages.map((msg) => ({
|
|
27
48
|
role: msg.role,
|
|
@@ -45,6 +66,24 @@ class OllamaFrontendAdapter {
|
|
|
45
66
|
stream: request.stream,
|
|
46
67
|
});
|
|
47
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Convert Universal IR response back to Ollama API format.
|
|
71
|
+
*
|
|
72
|
+
* This method transforms the standardized IR response into the format
|
|
73
|
+
* expected by Ollama's API. It handles message conversion, formats the
|
|
74
|
+
* timestamp as ISO string, and maps usage statistics to Ollama's format
|
|
75
|
+
* (prompt_eval_count and eval_count instead of token counts).
|
|
76
|
+
*
|
|
77
|
+
* @param response - Universal IR chat response
|
|
78
|
+
* @returns Promise resolving to Ollama API response
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const adapter = new OllamaFrontendAdapter();
|
|
83
|
+
* const ollamaResponse = await adapter.fromIR(irResponse);
|
|
84
|
+
* console.log(ollamaResponse.message.content);
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
48
87
|
fromIR(response) {
|
|
49
88
|
return Promise.resolve({
|
|
50
89
|
model: response.metadata.custom?.model || 'unknown',
|
|
@@ -58,6 +97,26 @@ class OllamaFrontendAdapter {
|
|
|
58
97
|
eval_count: response.usage?.completionTokens,
|
|
59
98
|
});
|
|
60
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Convert Universal IR stream to Ollama streaming format.
|
|
102
|
+
*
|
|
103
|
+
* This async generator method transforms a stream of IR chunks into
|
|
104
|
+
* Ollama-formatted responses. It yields newline-delimited JSON objects
|
|
105
|
+
* (not SSE format) with each chunk containing a message and done flag,
|
|
106
|
+
* emitting `done: true` when the stream completes.
|
|
107
|
+
*
|
|
108
|
+
* @param stream - Universal IR chat stream
|
|
109
|
+
* @param _options - Optional stream conversion options (currently unused)
|
|
110
|
+
* @yields Newline-delimited JSON strings
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const adapter = new OllamaFrontendAdapter();
|
|
115
|
+
* for await (const jsonLine of adapter.fromIRStream(irStream)) {
|
|
116
|
+
* console.log(jsonLine); // '{"message":{"content":"text"},"done":false}\n'
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
61
120
|
async *fromIRStream(stream, _options) {
|
|
62
121
|
for await (const chunk of stream) {
|
|
63
122
|
if (chunk.type === 'content') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/adapters/ollama.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/adapters/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,26 @@ class OpenAIFrontendAdapter {
|
|
|
39
39
|
},
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
|
-
* Convert OpenAI request to Universal IR.
|
|
42
|
+
* Convert OpenAI Chat Completions API request to Universal IR format.
|
|
43
|
+
*
|
|
44
|
+
* This method transforms an OpenAI-formatted request into the standardized
|
|
45
|
+
* Intermediate Representation (IR) format used across all AI Matey adapters.
|
|
46
|
+
* Since OpenAI's format is similar to IR, this is largely a pass-through
|
|
47
|
+
* with field name mapping.
|
|
48
|
+
*
|
|
49
|
+
* @param request - OpenAI Chat Completions API request
|
|
50
|
+
* @returns Promise resolving to IR chat request
|
|
51
|
+
* @throws {AdapterConversionError} If conversion fails
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const adapter = new OpenAIFrontendAdapter();
|
|
56
|
+
* const irRequest = await adapter.toIR({
|
|
57
|
+
* model: 'gpt-4',
|
|
58
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
59
|
+
* temperature: 0.7
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
43
62
|
*/
|
|
44
63
|
toIR(request) {
|
|
45
64
|
try {
|
|
@@ -59,6 +78,19 @@ class OpenAIFrontendAdapter {
|
|
|
59
78
|
seed: request.seed,
|
|
60
79
|
user: request.user,
|
|
61
80
|
},
|
|
81
|
+
tools: request.tools?.map((tool) => ({
|
|
82
|
+
name: tool.function.name,
|
|
83
|
+
description: tool.function.description ?? '',
|
|
84
|
+
parameters: (tool.function.parameters ?? {
|
|
85
|
+
type: 'object',
|
|
86
|
+
properties: {},
|
|
87
|
+
}),
|
|
88
|
+
})),
|
|
89
|
+
toolChoice: request.tool_choice === undefined
|
|
90
|
+
? undefined
|
|
91
|
+
: typeof request.tool_choice === 'string'
|
|
92
|
+
? request.tool_choice
|
|
93
|
+
: { name: request.tool_choice.function.name },
|
|
62
94
|
stream: request.stream ?? false,
|
|
63
95
|
metadata: {
|
|
64
96
|
requestId: crypto.randomUUID(),
|
|
@@ -82,7 +114,22 @@ class OpenAIFrontendAdapter {
|
|
|
82
114
|
}
|
|
83
115
|
}
|
|
84
116
|
/**
|
|
85
|
-
* Convert Universal IR response to OpenAI format.
|
|
117
|
+
* Convert Universal IR response back to OpenAI Chat Completions API format.
|
|
118
|
+
*
|
|
119
|
+
* This method transforms the standardized IR response into the format
|
|
120
|
+
* expected by OpenAI's Chat Completions API. It handles message conversion,
|
|
121
|
+
* finish reason mapping, and usage statistics formatting.
|
|
122
|
+
*
|
|
123
|
+
* @param response - Universal IR chat response
|
|
124
|
+
* @returns Promise resolving to OpenAI Chat Completions response
|
|
125
|
+
* @throws {AdapterConversionError} If conversion fails
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const adapter = new OpenAIFrontendAdapter();
|
|
130
|
+
* const openaiResponse = await adapter.fromIR(irResponse);
|
|
131
|
+
* console.log(openaiResponse.choices[0].message.content);
|
|
132
|
+
* ```
|
|
86
133
|
*/
|
|
87
134
|
fromIR(response) {
|
|
88
135
|
try {
|
|
@@ -125,7 +172,25 @@ class OpenAIFrontendAdapter {
|
|
|
125
172
|
}
|
|
126
173
|
}
|
|
127
174
|
/**
|
|
128
|
-
* Convert Universal IR stream to OpenAI SSE format.
|
|
175
|
+
* Convert Universal IR stream to OpenAI Server-Sent Events (SSE) format.
|
|
176
|
+
*
|
|
177
|
+
* This async generator method transforms a stream of IR chunks into
|
|
178
|
+
* OpenAI-formatted streaming chunks. It handles stream mode conversion
|
|
179
|
+
* (delta/full/text), tracks message metadata, and emits properly
|
|
180
|
+
* formatted SSE events compatible with OpenAI's streaming API.
|
|
181
|
+
*
|
|
182
|
+
* @param stream - Universal IR chat stream
|
|
183
|
+
* @param options - Optional stream conversion options (stream mode, etc.)
|
|
184
|
+
* @yields OpenAI-formatted streaming chunks
|
|
185
|
+
* @throws {AdapterConversionError} If stream conversion fails
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```typescript
|
|
189
|
+
* const adapter = new OpenAIFrontendAdapter();
|
|
190
|
+
* for await (const chunk of adapter.fromIRStream(irStream)) {
|
|
191
|
+
* console.log(chunk.choices[0].delta.content);
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
129
194
|
*/
|
|
130
195
|
async *fromIRStream(stream, options) {
|
|
131
196
|
try {
|
|
@@ -134,6 +199,8 @@ class OpenAIFrontendAdapter {
|
|
|
134
199
|
let messageId = '';
|
|
135
200
|
let model = '';
|
|
136
201
|
let created = 0;
|
|
202
|
+
// Tool-call ids already announced (id/name are only emitted once per call)
|
|
203
|
+
const announcedToolCalls = new Map();
|
|
137
204
|
for await (const chunk of processedStream) {
|
|
138
205
|
switch (chunk.type) {
|
|
139
206
|
case 'start':
|
|
@@ -142,6 +209,47 @@ class OpenAIFrontendAdapter {
|
|
|
142
209
|
model = chunk.metadata.provenance?.backend || 'unknown';
|
|
143
210
|
created = Math.floor(chunk.metadata.timestamp / 1000);
|
|
144
211
|
break;
|
|
212
|
+
case 'tool_use': {
|
|
213
|
+
const isFirst = !announcedToolCalls.has(chunk.id);
|
|
214
|
+
const index = isFirst
|
|
215
|
+
? (chunk.index ?? announcedToolCalls.size)
|
|
216
|
+
: announcedToolCalls.get(chunk.id);
|
|
217
|
+
if (isFirst) {
|
|
218
|
+
announcedToolCalls.set(chunk.id, index);
|
|
219
|
+
}
|
|
220
|
+
yield {
|
|
221
|
+
id: messageId,
|
|
222
|
+
object: 'chat.completion.chunk',
|
|
223
|
+
created,
|
|
224
|
+
model,
|
|
225
|
+
choices: [
|
|
226
|
+
{
|
|
227
|
+
index: 0,
|
|
228
|
+
delta: {
|
|
229
|
+
tool_calls: [
|
|
230
|
+
{
|
|
231
|
+
index,
|
|
232
|
+
...(isFirst
|
|
233
|
+
? {
|
|
234
|
+
id: chunk.id,
|
|
235
|
+
type: 'function',
|
|
236
|
+
function: {
|
|
237
|
+
name: chunk.name,
|
|
238
|
+
arguments: chunk.inputDelta ?? '',
|
|
239
|
+
},
|
|
240
|
+
}
|
|
241
|
+
: {
|
|
242
|
+
function: { arguments: chunk.inputDelta ?? '' },
|
|
243
|
+
}),
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
finish_reason: null,
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
};
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
145
253
|
case 'content':
|
|
146
254
|
// Emit content delta
|
|
147
255
|
yield {
|
|
@@ -197,6 +305,24 @@ class OpenAIFrontendAdapter {
|
|
|
197
305
|
* Convert OpenAI message to IR message.
|
|
198
306
|
*/
|
|
199
307
|
convertMessageToIR(message) {
|
|
308
|
+
// Tool result message (role 'tool') becomes a tool_result content block
|
|
309
|
+
if (message.role === 'tool' && message.tool_call_id) {
|
|
310
|
+
return {
|
|
311
|
+
role: 'tool',
|
|
312
|
+
content: [
|
|
313
|
+
{
|
|
314
|
+
type: 'tool_result',
|
|
315
|
+
toolUseId: message.tool_call_id,
|
|
316
|
+
content: typeof message.content === 'string'
|
|
317
|
+
? message.content
|
|
318
|
+
: message.content
|
|
319
|
+
.map((block) => (block.type === 'text' ? block.text : ''))
|
|
320
|
+
.join(''),
|
|
321
|
+
},
|
|
322
|
+
],
|
|
323
|
+
name: message.name,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
200
326
|
// Convert content
|
|
201
327
|
let content;
|
|
202
328
|
if (typeof message.content === 'string') {
|
|
@@ -218,51 +344,92 @@ class OpenAIFrontendAdapter {
|
|
|
218
344
|
}
|
|
219
345
|
});
|
|
220
346
|
}
|
|
347
|
+
// Assistant tool calls become tool_use content blocks
|
|
348
|
+
if (message.tool_calls && message.tool_calls.length > 0) {
|
|
349
|
+
const blocks = typeof content === 'string' ? (content ? [{ type: 'text', text: content }] : []) : content;
|
|
350
|
+
content = [
|
|
351
|
+
...blocks,
|
|
352
|
+
...message.tool_calls.map((call) => ({
|
|
353
|
+
type: 'tool_use',
|
|
354
|
+
id: call.id,
|
|
355
|
+
name: call.function.name,
|
|
356
|
+
input: this.parseToolArguments(call.function.arguments),
|
|
357
|
+
})),
|
|
358
|
+
];
|
|
359
|
+
}
|
|
221
360
|
return {
|
|
222
361
|
role: message.role,
|
|
223
362
|
content,
|
|
224
363
|
name: message.name,
|
|
225
364
|
};
|
|
226
365
|
}
|
|
366
|
+
/**
|
|
367
|
+
* Parse tool-call arguments defensively (malformed JSON degrades to {}).
|
|
368
|
+
*/
|
|
369
|
+
parseToolArguments(args) {
|
|
370
|
+
try {
|
|
371
|
+
const parsed = JSON.parse(args);
|
|
372
|
+
if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
373
|
+
return parsed;
|
|
374
|
+
}
|
|
375
|
+
return {};
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
return {};
|
|
379
|
+
}
|
|
380
|
+
}
|
|
227
381
|
/**
|
|
228
382
|
* Convert IR message to OpenAI message.
|
|
229
383
|
*/
|
|
230
384
|
convertMessageFromIR(message) {
|
|
231
|
-
// Convert content
|
|
232
|
-
let content;
|
|
233
385
|
if (typeof message.content === 'string') {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
case 'text':
|
|
240
|
-
return { type: 'text', text: block.text };
|
|
241
|
-
case 'image':
|
|
242
|
-
if (block.source.type === 'url') {
|
|
243
|
-
return {
|
|
244
|
-
type: 'image_url',
|
|
245
|
-
image_url: { url: block.source.url },
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
// Convert base64 to data URL
|
|
250
|
-
const dataUrl = `data:${block.source.mediaType};base64,${block.source.data}`;
|
|
251
|
-
return {
|
|
252
|
-
type: 'image_url',
|
|
253
|
-
image_url: { url: dataUrl },
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
default:
|
|
257
|
-
// Fallback to text
|
|
258
|
-
return { type: 'text', text: JSON.stringify(block) };
|
|
259
|
-
}
|
|
260
|
-
});
|
|
386
|
+
return {
|
|
387
|
+
role: message.role,
|
|
388
|
+
content: message.content,
|
|
389
|
+
name: message.name,
|
|
390
|
+
};
|
|
261
391
|
}
|
|
392
|
+
// Separate tool calls from displayable content
|
|
393
|
+
const toolUses = message.content.filter((block) => block.type === 'tool_use');
|
|
394
|
+
const otherBlocks = message.content.filter((block) => block.type !== 'tool_use');
|
|
395
|
+
const content = otherBlocks.map((block) => {
|
|
396
|
+
switch (block.type) {
|
|
397
|
+
case 'text':
|
|
398
|
+
return { type: 'text', text: block.text };
|
|
399
|
+
case 'image':
|
|
400
|
+
if (block.source.type === 'url') {
|
|
401
|
+
return {
|
|
402
|
+
type: 'image_url',
|
|
403
|
+
image_url: { url: block.source.url },
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
// Convert base64 to data URL
|
|
408
|
+
const dataUrl = `data:${block.source.mediaType};base64,${block.source.data}`;
|
|
409
|
+
return {
|
|
410
|
+
type: 'image_url',
|
|
411
|
+
image_url: { url: dataUrl },
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
default:
|
|
415
|
+
// Fallback to text
|
|
416
|
+
return { type: 'text', text: JSON.stringify(block) };
|
|
417
|
+
}
|
|
418
|
+
});
|
|
262
419
|
return {
|
|
263
420
|
role: message.role,
|
|
264
421
|
content,
|
|
265
422
|
name: message.name,
|
|
423
|
+
tool_calls: toolUses.length > 0
|
|
424
|
+
? toolUses.map((block) => ({
|
|
425
|
+
id: block.id,
|
|
426
|
+
type: 'function',
|
|
427
|
+
function: {
|
|
428
|
+
name: block.name,
|
|
429
|
+
arguments: JSON.stringify(block.input),
|
|
430
|
+
},
|
|
431
|
+
}))
|
|
432
|
+
: undefined,
|
|
266
433
|
};
|
|
267
434
|
}
|
|
268
435
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
|