ai.matey.frontend 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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/adapters/anthropic.js +328 -0
  3. package/dist/cjs/adapters/anthropic.js.map +1 -0
  4. package/dist/cjs/adapters/chrome-ai.js +55 -0
  5. package/dist/cjs/adapters/chrome-ai.js.map +1 -0
  6. package/dist/cjs/adapters/gemini.js +95 -0
  7. package/dist/cjs/adapters/gemini.js.map +1 -0
  8. package/dist/cjs/adapters/generic.js +165 -0
  9. package/dist/cjs/adapters/generic.js.map +1 -0
  10. package/dist/cjs/adapters/mistral.js +87 -0
  11. package/dist/cjs/adapters/mistral.js.map +1 -0
  12. package/dist/cjs/adapters/ollama.js +73 -0
  13. package/dist/cjs/adapters/ollama.js.map +1 -0
  14. package/dist/cjs/adapters/openai.js +287 -0
  15. package/dist/cjs/adapters/openai.js.map +1 -0
  16. package/dist/cjs/index.js +34 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/esm/adapters/anthropic.js +324 -0
  19. package/dist/esm/adapters/anthropic.js.map +1 -0
  20. package/dist/esm/adapters/chrome-ai.js +51 -0
  21. package/dist/esm/adapters/chrome-ai.js.map +1 -0
  22. package/dist/esm/adapters/gemini.js +91 -0
  23. package/dist/esm/adapters/gemini.js.map +1 -0
  24. package/dist/esm/adapters/generic.js +160 -0
  25. package/dist/esm/adapters/generic.js.map +1 -0
  26. package/dist/esm/adapters/mistral.js +83 -0
  27. package/dist/esm/adapters/mistral.js.map +1 -0
  28. package/dist/esm/adapters/ollama.js +69 -0
  29. package/dist/esm/adapters/ollama.js.map +1 -0
  30. package/dist/esm/adapters/openai.js +283 -0
  31. package/dist/esm/adapters/openai.js.map +1 -0
  32. package/dist/esm/index.js +18 -0
  33. package/dist/esm/index.js.map +1 -0
  34. package/dist/types/adapters/anthropic.d.ts +149 -0
  35. package/dist/types/adapters/anthropic.d.ts.map +1 -0
  36. package/dist/types/adapters/chrome-ai.d.ts +25 -0
  37. package/dist/types/adapters/chrome-ai.d.ts.map +1 -0
  38. package/dist/types/adapters/gemini.d.ts +55 -0
  39. package/dist/types/adapters/gemini.d.ts.map +1 -0
  40. package/dist/types/adapters/generic.d.ts +122 -0
  41. package/dist/types/adapters/generic.d.ts.map +1 -0
  42. package/dist/types/adapters/mistral.d.ts +47 -0
  43. package/dist/types/adapters/mistral.d.ts.map +1 -0
  44. package/dist/types/adapters/ollama.d.ts +44 -0
  45. package/dist/types/adapters/ollama.d.ts.map +1 -0
  46. package/dist/types/adapters/openai.d.ts +116 -0
  47. package/dist/types/adapters/openai.d.ts.map +1 -0
  48. package/dist/types/index.d.ts +17 -0
  49. package/dist/types/index.d.ts.map +1 -0
  50. package/package.json +144 -0
  51. package/readme.md +62 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Mistral Frontend Adapter
3
+ *
4
+ * Pass-through adapter for Mistral format.
5
+ *
6
+ * @module
7
+ */
8
+ export class MistralFrontendAdapter {
9
+ metadata = {
10
+ name: 'mistral-frontend',
11
+ version: '1.0.0',
12
+ provider: 'Mistral',
13
+ capabilities: {
14
+ streaming: true,
15
+ multiModal: false,
16
+ tools: true,
17
+ systemMessageStrategy: 'in-messages',
18
+ supportsMultipleSystemMessages: false,
19
+ },
20
+ };
21
+ toIR(request) {
22
+ const messages = request.messages.map((msg) => ({
23
+ role: msg.role,
24
+ content: msg.content,
25
+ }));
26
+ return Promise.resolve({
27
+ messages,
28
+ parameters: {
29
+ model: request.model,
30
+ temperature: request.temperature,
31
+ maxTokens: request.max_tokens,
32
+ topP: request.top_p,
33
+ seed: request.random_seed,
34
+ },
35
+ metadata: {
36
+ requestId: `mistral-${Date.now()}`,
37
+ timestamp: Date.now(),
38
+ provenance: { frontend: this.metadata.name },
39
+ },
40
+ stream: request.stream,
41
+ });
42
+ }
43
+ fromIR(response) {
44
+ return Promise.resolve({
45
+ id: `mistral-${Date.now()}`,
46
+ object: 'chat.completion',
47
+ created: Math.floor(Date.now() / 1000),
48
+ model: response.metadata.custom?.model || 'mistral-small',
49
+ choices: [
50
+ {
51
+ index: 0,
52
+ message: {
53
+ role: 'assistant',
54
+ content: typeof response.message.content === 'string' ? response.message.content : '',
55
+ },
56
+ finish_reason: response.finishReason === 'stop'
57
+ ? 'stop'
58
+ : response.finishReason === 'length'
59
+ ? 'length'
60
+ : null,
61
+ },
62
+ ],
63
+ usage: response.usage
64
+ ? {
65
+ prompt_tokens: response.usage.promptTokens,
66
+ completion_tokens: response.usage.completionTokens,
67
+ total_tokens: response.usage.totalTokens,
68
+ }
69
+ : { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
70
+ });
71
+ }
72
+ async *fromIRStream(stream, _options) {
73
+ for await (const chunk of stream) {
74
+ if (chunk.type === 'content') {
75
+ yield `data: ${JSON.stringify({ choices: [{ delta: { content: chunk.delta } }] })}\n\n`;
76
+ }
77
+ else if (chunk.type === 'done') {
78
+ yield `data: [DONE]\n\n`;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=mistral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral.js","sourceRoot":"","sources":["../../../src/adapters/mistral.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Ollama Frontend Adapter
3
+ *
4
+ * Adapts Ollama API format to Universal IR.
5
+ * Ollama uses a local server with OpenAI-compatible chat format.
6
+ *
7
+ * @module
8
+ */
9
+ export class OllamaFrontendAdapter {
10
+ metadata = {
11
+ name: 'ollama-frontend',
12
+ version: '1.0.0',
13
+ provider: 'Ollama',
14
+ capabilities: {
15
+ streaming: true,
16
+ multiModal: false,
17
+ tools: false,
18
+ systemMessageStrategy: 'in-messages',
19
+ supportsMultipleSystemMessages: false,
20
+ },
21
+ };
22
+ toIR(request) {
23
+ const messages = request.messages.map((msg) => ({
24
+ role: msg.role,
25
+ content: msg.content,
26
+ }));
27
+ return Promise.resolve({
28
+ messages,
29
+ parameters: {
30
+ model: request.model,
31
+ temperature: request.options?.temperature,
32
+ topP: request.options?.top_p,
33
+ topK: request.options?.top_k,
34
+ maxTokens: request.options?.num_predict,
35
+ stopSequences: request.options?.stop,
36
+ },
37
+ metadata: {
38
+ requestId: `ollama-${Date.now()}`,
39
+ timestamp: Date.now(),
40
+ provenance: { frontend: this.metadata.name },
41
+ },
42
+ stream: request.stream,
43
+ });
44
+ }
45
+ fromIR(response) {
46
+ return Promise.resolve({
47
+ model: response.metadata.custom?.model || 'unknown',
48
+ created_at: new Date().toISOString(),
49
+ message: {
50
+ role: 'assistant',
51
+ content: typeof response.message.content === 'string' ? response.message.content : '',
52
+ },
53
+ done: true,
54
+ prompt_eval_count: response.usage?.promptTokens,
55
+ eval_count: response.usage?.completionTokens,
56
+ });
57
+ }
58
+ async *fromIRStream(stream, _options) {
59
+ for await (const chunk of stream) {
60
+ if (chunk.type === 'content') {
61
+ yield JSON.stringify({ message: { content: chunk.delta }, done: false }) + '\n';
62
+ }
63
+ else if (chunk.type === 'done') {
64
+ yield JSON.stringify({ message: { content: '' }, done: true }) + '\n';
65
+ }
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/adapters/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuCH,MAAM,OAAO,qBAAqB;IACvB,QAAQ,GAAoB;QACnC,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE;YACZ,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,KAAK;YACZ,qBAAqB,EAAE,aAAa;YACpC,8BAA8B,EAAE,KAAK;SACtC;KACF,CAAC;IAEF,IAAI,CAAC,OAAsB;QACzB,MAAM,QAAQ,GAAgB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAkB,EAAE,EAAE,CAAC,CAAC;YAC1E,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC,CAAC;QAEJ,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,QAAQ;YACR,UAAU,EAAE;gBACV,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW;gBACzC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK;gBAC5B,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK;gBAC5B,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW;gBACvC,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI;aACrC;YACD,QAAQ,EAAE;gBACR,SAAS,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;gBACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;aAC7C;YACD,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,QAAwB;QAC7B,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,KAAK,EAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAgB,IAAI,SAAS;YAC/D,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;aACtF;YACD,IAAI,EAAE,IAAI;YACV,iBAAiB,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY;YAC/C,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,gBAAgB;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAC,YAAY,CACjB,MAAqC,EACrC,QAAkC;QAElC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;YAClF,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * OpenAI Frontend Adapter
3
+ *
4
+ * Adapts OpenAI Chat Completions API format to Universal IR.
5
+ * Since OpenAI format is similar to IR, this is mostly a pass-through adapter.
6
+ *
7
+ * @module
8
+ */
9
+ import { AdapterConversionError, ErrorCode } from 'ai.matey.errors';
10
+ import { convertStreamMode } from 'ai.matey.utils';
11
+ // ============================================================================
12
+ // OpenAI Frontend Adapter
13
+ // ============================================================================
14
+ /**
15
+ * Frontend adapter for OpenAI Chat Completions API.
16
+ */
17
+ export class OpenAIFrontendAdapter {
18
+ metadata = {
19
+ name: 'openai-frontend',
20
+ version: '1.0.0',
21
+ provider: 'OpenAI',
22
+ capabilities: {
23
+ streaming: true,
24
+ multiModal: true,
25
+ tools: true,
26
+ maxContextTokens: 128000,
27
+ systemMessageStrategy: 'in-messages',
28
+ supportsMultipleSystemMessages: true,
29
+ supportsTemperature: true,
30
+ supportsTopP: true,
31
+ supportsTopK: false,
32
+ supportsSeed: true,
33
+ supportsFrequencyPenalty: true,
34
+ supportsPresencePenalty: true,
35
+ maxStopSequences: 4,
36
+ },
37
+ };
38
+ /**
39
+ * Convert OpenAI request to Universal IR.
40
+ */
41
+ toIR(request) {
42
+ try {
43
+ // Convert messages
44
+ const messages = request.messages.map((msg) => this.convertMessageToIR(msg));
45
+ // Build IR request
46
+ const irRequest = {
47
+ messages,
48
+ parameters: {
49
+ model: request.model,
50
+ temperature: request.temperature,
51
+ maxTokens: request.max_tokens,
52
+ topP: request.top_p,
53
+ frequencyPenalty: request.frequency_penalty,
54
+ presencePenalty: request.presence_penalty,
55
+ stopSequences: typeof request.stop === 'string' ? [request.stop] : request.stop,
56
+ seed: request.seed,
57
+ user: request.user,
58
+ },
59
+ stream: request.stream ?? false,
60
+ metadata: {
61
+ requestId: crypto.randomUUID(),
62
+ timestamp: Date.now(),
63
+ provenance: {
64
+ frontend: this.metadata.name,
65
+ },
66
+ },
67
+ };
68
+ return Promise.resolve(irRequest);
69
+ }
70
+ catch (error) {
71
+ throw new AdapterConversionError({
72
+ code: ErrorCode.ADAPTER_CONVERSION_ERROR,
73
+ message: `Failed to convert OpenAI request to IR: ${error instanceof Error ? error.message : String(error)}`,
74
+ provenance: {
75
+ frontend: this.metadata.name,
76
+ },
77
+ cause: error instanceof Error ? error : undefined,
78
+ });
79
+ }
80
+ }
81
+ /**
82
+ * Convert Universal IR response to OpenAI format.
83
+ */
84
+ fromIR(response) {
85
+ try {
86
+ // Convert message
87
+ const message = this.convertMessageFromIR(response.message);
88
+ // Map finish reason
89
+ const finishReason = this.mapFinishReason(response.finishReason);
90
+ // Build OpenAI response
91
+ const openaiResponse = {
92
+ id: response.metadata.requestId,
93
+ object: 'chat.completion',
94
+ created: Math.floor(response.metadata.timestamp / 1000),
95
+ model: response.metadata.provenance?.backend || 'unknown',
96
+ choices: [
97
+ {
98
+ index: 0,
99
+ message,
100
+ finish_reason: finishReason,
101
+ },
102
+ ],
103
+ usage: response.usage
104
+ ? {
105
+ prompt_tokens: response.usage.promptTokens,
106
+ completion_tokens: response.usage.completionTokens,
107
+ total_tokens: response.usage.totalTokens,
108
+ }
109
+ : undefined,
110
+ };
111
+ return Promise.resolve(openaiResponse);
112
+ }
113
+ catch (error) {
114
+ throw new AdapterConversionError({
115
+ code: ErrorCode.ADAPTER_CONVERSION_ERROR,
116
+ message: `Failed to convert IR response to OpenAI format: ${error instanceof Error ? error.message : String(error)}`,
117
+ provenance: {
118
+ frontend: this.metadata.name,
119
+ },
120
+ cause: error instanceof Error ? error : undefined,
121
+ });
122
+ }
123
+ }
124
+ /**
125
+ * Convert Universal IR stream to OpenAI SSE format.
126
+ */
127
+ async *fromIRStream(stream, options) {
128
+ try {
129
+ // Apply stream mode conversion if options provided
130
+ const processedStream = options ? convertStreamMode(stream, options) : stream;
131
+ let messageId = '';
132
+ let model = '';
133
+ let created = 0;
134
+ for await (const chunk of processedStream) {
135
+ switch (chunk.type) {
136
+ case 'start':
137
+ // Extract metadata
138
+ messageId = chunk.metadata.requestId;
139
+ model = chunk.metadata.provenance?.backend || 'unknown';
140
+ created = Math.floor(chunk.metadata.timestamp / 1000);
141
+ break;
142
+ case 'content':
143
+ // Emit content delta
144
+ yield {
145
+ id: messageId,
146
+ object: 'chat.completion.chunk',
147
+ created,
148
+ model,
149
+ choices: [
150
+ {
151
+ index: 0,
152
+ delta: {
153
+ content: chunk.delta,
154
+ },
155
+ finish_reason: null,
156
+ },
157
+ ],
158
+ };
159
+ break;
160
+ case 'done': {
161
+ // Emit finish chunk
162
+ const finishReason = this.mapFinishReason(chunk.finishReason);
163
+ yield {
164
+ id: messageId,
165
+ object: 'chat.completion.chunk',
166
+ created,
167
+ model,
168
+ choices: [
169
+ {
170
+ index: 0,
171
+ delta: {},
172
+ finish_reason: finishReason,
173
+ },
174
+ ],
175
+ };
176
+ break;
177
+ }
178
+ case 'error':
179
+ // OpenAI doesn't have a standard error event in SSE
180
+ // We'll just stop the stream
181
+ break;
182
+ }
183
+ }
184
+ }
185
+ catch {
186
+ // Silently end stream on error
187
+ // OpenAI SSE format doesn't have a standard error event
188
+ }
189
+ }
190
+ // ==========================================================================
191
+ // Private Helper Methods
192
+ // ==========================================================================
193
+ /**
194
+ * Convert OpenAI message to IR message.
195
+ */
196
+ convertMessageToIR(message) {
197
+ // Convert content
198
+ let content;
199
+ if (typeof message.content === 'string') {
200
+ content = message.content;
201
+ }
202
+ else {
203
+ content = message.content.map((block) => {
204
+ if (block.type === 'text') {
205
+ return { type: 'text', text: block.text };
206
+ }
207
+ else {
208
+ return {
209
+ type: 'image',
210
+ source: {
211
+ type: 'url',
212
+ url: block.image_url.url,
213
+ },
214
+ };
215
+ }
216
+ });
217
+ }
218
+ return {
219
+ role: message.role,
220
+ content,
221
+ name: message.name,
222
+ };
223
+ }
224
+ /**
225
+ * Convert IR message to OpenAI message.
226
+ */
227
+ convertMessageFromIR(message) {
228
+ // Convert content
229
+ let content;
230
+ if (typeof message.content === 'string') {
231
+ content = message.content;
232
+ }
233
+ else {
234
+ content = message.content.map((block) => {
235
+ switch (block.type) {
236
+ case 'text':
237
+ return { type: 'text', text: block.text };
238
+ case 'image':
239
+ if (block.source.type === 'url') {
240
+ return {
241
+ type: 'image_url',
242
+ image_url: { url: block.source.url },
243
+ };
244
+ }
245
+ else {
246
+ // Convert base64 to data URL
247
+ const dataUrl = `data:${block.source.mediaType};base64,${block.source.data}`;
248
+ return {
249
+ type: 'image_url',
250
+ image_url: { url: dataUrl },
251
+ };
252
+ }
253
+ default:
254
+ // Fallback to text
255
+ return { type: 'text', text: JSON.stringify(block) };
256
+ }
257
+ });
258
+ }
259
+ return {
260
+ role: message.role,
261
+ content,
262
+ name: message.name,
263
+ };
264
+ }
265
+ /**
266
+ * Map IR finish reason to OpenAI finish reason.
267
+ */
268
+ mapFinishReason(finishReason) {
269
+ switch (finishReason) {
270
+ case 'stop':
271
+ return 'stop';
272
+ case 'length':
273
+ return 'length';
274
+ case 'tool_calls':
275
+ return 'tool_calls';
276
+ case 'content_filter':
277
+ return 'content_filter';
278
+ default:
279
+ return null;
280
+ }
281
+ }
282
+ }
283
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * AI Matey Frontend Adapters
3
+ *
4
+ * Consolidated package containing all frontend adapters.
5
+ * Each frontend adapter handles converting provider-specific
6
+ * request/response formats to Universal IR and vice versa.
7
+ *
8
+ * @module ai.matey.frontend
9
+ */
10
+ // Frontend adapters
11
+ export * from './adapters/openai.js';
12
+ export * from './adapters/anthropic.js';
13
+ export * from './adapters/gemini.js';
14
+ export * from './adapters/mistral.js';
15
+ export * from './adapters/ollama.js';
16
+ export * from './adapters/chrome-ai.js';
17
+ export * from './adapters/generic.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAoB;AACpB,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Anthropic Frontend Adapter
3
+ *
4
+ * Adapts Anthropic Messages API format to Universal IR.
5
+ * Handles Anthropic's separate system parameter and content block structure.
6
+ *
7
+ * @module
8
+ */
9
+ import type { FrontendAdapter, AdapterMetadata } from 'ai.matey.types';
10
+ import type { IRChatRequest, IRChatResponse, IRChatStream } from 'ai.matey.types';
11
+ import type { StreamConversionOptions } from 'ai.matey.types';
12
+ /**
13
+ * Anthropic message content block.
14
+ */
15
+ export type AnthropicContentBlock = {
16
+ type: 'text';
17
+ text: string;
18
+ } | {
19
+ type: 'image';
20
+ source: {
21
+ type: 'url';
22
+ url: string;
23
+ } | {
24
+ type: 'base64';
25
+ media_type: string;
26
+ data: string;
27
+ };
28
+ } | {
29
+ type: 'tool_use';
30
+ id: string;
31
+ name: string;
32
+ input: Record<string, unknown>;
33
+ };
34
+ /**
35
+ * Anthropic message.
36
+ */
37
+ export interface AnthropicMessage {
38
+ role: 'user' | 'assistant';
39
+ content: string | AnthropicContentBlock[];
40
+ }
41
+ /**
42
+ * Anthropic Messages API request.
43
+ */
44
+ export interface AnthropicRequest {
45
+ model: string;
46
+ messages: AnthropicMessage[];
47
+ system?: string;
48
+ max_tokens: number;
49
+ temperature?: number;
50
+ top_p?: number;
51
+ top_k?: number;
52
+ stop_sequences?: string[];
53
+ stream?: boolean;
54
+ metadata?: {
55
+ user_id?: string;
56
+ };
57
+ }
58
+ /**
59
+ * Anthropic Messages API response.
60
+ */
61
+ export interface AnthropicResponse {
62
+ id: string;
63
+ type: 'message';
64
+ role: 'assistant';
65
+ content: AnthropicContentBlock[];
66
+ model: string;
67
+ stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null;
68
+ stop_sequence?: string | null;
69
+ usage: {
70
+ input_tokens: number;
71
+ output_tokens: number;
72
+ };
73
+ }
74
+ /**
75
+ * Anthropic SSE stream event.
76
+ */
77
+ export type AnthropicStreamEvent = {
78
+ type: 'message_start';
79
+ message: Partial<AnthropicResponse>;
80
+ } | {
81
+ type: 'content_block_start';
82
+ index: number;
83
+ content_block: AnthropicContentBlock;
84
+ } | {
85
+ type: 'content_block_delta';
86
+ index: number;
87
+ delta: {
88
+ type: 'text_delta';
89
+ text: string;
90
+ } | {
91
+ type: 'input_json_delta';
92
+ partial_json: string;
93
+ };
94
+ } | {
95
+ type: 'content_block_stop';
96
+ index: number;
97
+ } | {
98
+ type: 'message_delta';
99
+ delta: {
100
+ stop_reason: string;
101
+ stop_sequence?: string | null;
102
+ };
103
+ usage: {
104
+ output_tokens: number;
105
+ };
106
+ } | {
107
+ type: 'message_stop';
108
+ } | {
109
+ type: 'error';
110
+ error: {
111
+ type: string;
112
+ message: string;
113
+ };
114
+ };
115
+ /**
116
+ * Frontend adapter for Anthropic Messages API.
117
+ */
118
+ export declare class AnthropicFrontendAdapter implements FrontendAdapter<AnthropicRequest, AnthropicResponse, AnthropicStreamEvent> {
119
+ readonly metadata: AdapterMetadata;
120
+ /**
121
+ * Convert Anthropic request to Universal IR.
122
+ */
123
+ toIR(request: AnthropicRequest): Promise<IRChatRequest>;
124
+ /**
125
+ * Convert Universal IR response to Anthropic format.
126
+ */
127
+ fromIR(response: IRChatResponse): Promise<AnthropicResponse>;
128
+ /**
129
+ * Convert Universal IR stream to Anthropic SSE format.
130
+ */
131
+ fromIRStream(stream: IRChatStream, options?: StreamConversionOptions): AsyncGenerator<AnthropicStreamEvent, void, undefined>;
132
+ /**
133
+ * Convert Anthropic message to IR message.
134
+ */
135
+ private convertMessageToIR;
136
+ /**
137
+ * Convert Anthropic content block to IR content block.
138
+ */
139
+ private convertContentBlockToIR;
140
+ /**
141
+ * Convert IR content to Anthropic content blocks.
142
+ */
143
+ private convertContentFromIR;
144
+ /**
145
+ * Map IR finish reason to Anthropic stop reason.
146
+ */
147
+ private mapFinishReason;
148
+ }
149
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/adapters/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EAGb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAQ9D;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IACE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7F,GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,qBAAqB,CAAA;CAAE,GACpF;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EACD;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACpC;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD,GACD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7C;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC,GACD;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAMhE;;GAEG;AACH,qBAAa,wBAAyB,YAAW,eAAe,CAC9D,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,CACrB;IACC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAehC;IAEF;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmDvD;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmC5D;;OAEG;IACI,YAAY,CACjB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,uBAAuB,GAChC,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC;IAuFxD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA6C/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4C5B;;OAEG;IACH,OAAO,CAAC,eAAe;CAcxB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Chrome AI Frontend Adapter
3
+ *
4
+ * Pass-through adapter for Chrome AI format.
5
+ *
6
+ * @module
7
+ */
8
+ import type { FrontendAdapter, AdapterMetadata } from 'ai.matey.types';
9
+ import type { IRChatRequest, IRChatResponse, IRStreamChunk } from 'ai.matey.types';
10
+ import type { StreamConversionOptions } from 'ai.matey.types';
11
+ export interface ChromeAIRequest {
12
+ prompt: string;
13
+ temperature?: number;
14
+ topK?: number;
15
+ }
16
+ export interface ChromeAIResponse {
17
+ text: string;
18
+ }
19
+ export declare class ChromeAIFrontendAdapter implements FrontendAdapter<ChromeAIRequest, ChromeAIResponse> {
20
+ readonly metadata: AdapterMetadata;
21
+ toIR(request: ChromeAIRequest): Promise<IRChatRequest>;
22
+ fromIR(response: IRChatResponse): Promise<ChromeAIResponse>;
23
+ fromIRStream(stream: AsyncGenerator<IRStreamChunk>, options?: StreamConversionOptions): AsyncGenerator<string>;
24
+ }
25
+ //# sourceMappingURL=chrome-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome-ai.d.ts","sourceRoot":"","sources":["../../../src/adapters/chrome-ai.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,uBAAwB,YAAW,eAAe,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAChG,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAWhC;IAEF,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAetD,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAMpD,YAAY,CACjB,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,EACrC,OAAO,CAAC,EAAE,uBAAuB,GAChC,cAAc,CAAC,MAAM,CAAC;CAU1B"}