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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;AAEH,oBAAoB;AACpB,uDAAqC;AACrC,0DAAwC;AACxC,uDAAqC;AACrC,wDAAsC;AACtC,uDAAqC;AACrC,0DAAwC;AACxC,wDAAsC"}
@@ -0,0 +1,324 @@
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 { AdapterConversionError, ErrorCode } from 'ai.matey.errors';
10
+ import { convertStreamMode } from 'ai.matey.utils';
11
+ // ============================================================================
12
+ // Anthropic Frontend Adapter
13
+ // ============================================================================
14
+ /**
15
+ * Frontend adapter for Anthropic Messages API.
16
+ */
17
+ export class AnthropicFrontendAdapter {
18
+ metadata = {
19
+ name: 'anthropic-frontend',
20
+ version: '1.0.0',
21
+ provider: 'Anthropic',
22
+ capabilities: {
23
+ streaming: true,
24
+ multiModal: true,
25
+ tools: true,
26
+ maxContextTokens: 200000,
27
+ systemMessageStrategy: 'separate-parameter',
28
+ supportsMultipleSystemMessages: false, // Anthropic merges multiple system messages
29
+ supportsTemperature: true,
30
+ supportsTopP: true,
31
+ supportsTopK: true,
32
+ },
33
+ };
34
+ /**
35
+ * Convert Anthropic request to Universal IR.
36
+ */
37
+ toIR(request) {
38
+ try {
39
+ // Convert messages
40
+ const messages = request.messages.map((msg) => this.convertMessageToIR(msg));
41
+ // Add system message if present
42
+ if (request.system) {
43
+ const systemMessage = {
44
+ role: 'system',
45
+ content: request.system,
46
+ };
47
+ messages.unshift(systemMessage);
48
+ }
49
+ // Build IR request
50
+ const irRequest = {
51
+ messages,
52
+ parameters: {
53
+ model: request.model,
54
+ temperature: request.temperature,
55
+ maxTokens: request.max_tokens,
56
+ topP: request.top_p,
57
+ topK: request.top_k,
58
+ stopSequences: request.stop_sequences,
59
+ },
60
+ stream: request.stream ?? false,
61
+ metadata: {
62
+ requestId: crypto.randomUUID(),
63
+ timestamp: Date.now(),
64
+ provenance: {
65
+ frontend: this.metadata.name,
66
+ },
67
+ custom: {
68
+ anthropicMetadata: request.metadata,
69
+ },
70
+ },
71
+ };
72
+ return Promise.resolve(irRequest);
73
+ }
74
+ catch (error) {
75
+ throw new AdapterConversionError({
76
+ code: ErrorCode.ADAPTER_CONVERSION_ERROR,
77
+ message: `Failed to convert Anthropic request to IR: ${error instanceof Error ? error.message : String(error)}`,
78
+ provenance: {
79
+ frontend: this.metadata.name,
80
+ },
81
+ cause: error instanceof Error ? error : undefined,
82
+ });
83
+ }
84
+ }
85
+ /**
86
+ * Convert Universal IR response to Anthropic format.
87
+ */
88
+ fromIR(response) {
89
+ try {
90
+ // Convert message content
91
+ const content = this.convertContentFromIR(response.message.content);
92
+ // Map finish reason
93
+ const stopReason = this.mapFinishReason(response.finishReason);
94
+ // Build Anthropic response
95
+ const anthropicResponse = {
96
+ id: response.metadata.requestId,
97
+ type: 'message',
98
+ role: 'assistant',
99
+ content,
100
+ model: response.metadata.provenance?.backend || 'unknown',
101
+ stop_reason: stopReason,
102
+ usage: {
103
+ input_tokens: response.usage?.promptTokens ?? 0,
104
+ output_tokens: response.usage?.completionTokens ?? 0,
105
+ },
106
+ };
107
+ return Promise.resolve(anthropicResponse);
108
+ }
109
+ catch (error) {
110
+ throw new AdapterConversionError({
111
+ code: ErrorCode.ADAPTER_CONVERSION_ERROR,
112
+ message: `Failed to convert IR response to Anthropic format: ${error instanceof Error ? error.message : String(error)}`,
113
+ provenance: {
114
+ frontend: this.metadata.name,
115
+ },
116
+ cause: error instanceof Error ? error : undefined,
117
+ });
118
+ }
119
+ }
120
+ /**
121
+ * Convert Universal IR stream to Anthropic SSE format.
122
+ */
123
+ async *fromIRStream(stream, options) {
124
+ try {
125
+ // Apply stream mode conversion if options provided
126
+ const processedStream = options ? convertStreamMode(stream, options) : stream;
127
+ for await (const chunk of processedStream) {
128
+ switch (chunk.type) {
129
+ case 'start':
130
+ // Emit message_start event
131
+ yield {
132
+ type: 'message_start',
133
+ message: {
134
+ id: chunk.metadata.requestId,
135
+ type: 'message',
136
+ role: 'assistant',
137
+ model: chunk.metadata.provenance?.backend || 'unknown',
138
+ },
139
+ };
140
+ // Emit content_block_start
141
+ yield {
142
+ type: 'content_block_start',
143
+ index: 0,
144
+ content_block: { type: 'text', text: '' },
145
+ };
146
+ break;
147
+ case 'content':
148
+ // Emit content delta
149
+ yield {
150
+ type: 'content_block_delta',
151
+ index: 0,
152
+ delta: { type: 'text_delta', text: chunk.delta },
153
+ };
154
+ break;
155
+ case 'done': {
156
+ // Emit content_block_stop
157
+ yield {
158
+ type: 'content_block_stop',
159
+ index: 0,
160
+ };
161
+ // Emit message_delta with stop reason
162
+ const stopReason = this.mapFinishReason(chunk.finishReason);
163
+ yield {
164
+ type: 'message_delta',
165
+ delta: {
166
+ stop_reason: stopReason || 'end_turn',
167
+ },
168
+ usage: {
169
+ output_tokens: chunk.usage?.completionTokens ?? 0,
170
+ },
171
+ };
172
+ // Emit message_stop
173
+ yield {
174
+ type: 'message_stop',
175
+ };
176
+ break;
177
+ }
178
+ case 'error':
179
+ // Emit error event
180
+ yield {
181
+ type: 'error',
182
+ error: {
183
+ type: chunk.error.code,
184
+ message: chunk.error.message,
185
+ },
186
+ };
187
+ break;
188
+ }
189
+ }
190
+ }
191
+ catch (error) {
192
+ // Emit error event
193
+ yield {
194
+ type: 'error',
195
+ error: {
196
+ type: 'stream_error',
197
+ message: error instanceof Error ? error.message : String(error),
198
+ },
199
+ };
200
+ }
201
+ }
202
+ // ==========================================================================
203
+ // Private Helper Methods
204
+ // ==========================================================================
205
+ /**
206
+ * Convert Anthropic message to IR message.
207
+ */
208
+ convertMessageToIR(message) {
209
+ // Convert content
210
+ let content;
211
+ if (typeof message.content === 'string') {
212
+ content = message.content;
213
+ }
214
+ else {
215
+ content = message.content.map((block) => this.convertContentBlockToIR(block));
216
+ }
217
+ return {
218
+ role: message.role,
219
+ content,
220
+ };
221
+ }
222
+ /**
223
+ * Convert Anthropic content block to IR content block.
224
+ */
225
+ convertContentBlockToIR(block) {
226
+ switch (block.type) {
227
+ case 'text':
228
+ return {
229
+ type: 'text',
230
+ text: block.text,
231
+ };
232
+ case 'image':
233
+ if (block.source.type === 'url') {
234
+ return {
235
+ type: 'image',
236
+ source: {
237
+ type: 'url',
238
+ url: block.source.url,
239
+ },
240
+ };
241
+ }
242
+ else {
243
+ return {
244
+ type: 'image',
245
+ source: {
246
+ type: 'base64',
247
+ mediaType: block.source.media_type,
248
+ data: block.source.data,
249
+ },
250
+ };
251
+ }
252
+ case 'tool_use':
253
+ return {
254
+ type: 'tool_use',
255
+ id: block.id,
256
+ name: block.name,
257
+ input: block.input,
258
+ };
259
+ default:
260
+ // Unknown block type, convert to text
261
+ return {
262
+ type: 'text',
263
+ text: JSON.stringify(block),
264
+ };
265
+ }
266
+ }
267
+ /**
268
+ * Convert IR content to Anthropic content blocks.
269
+ */
270
+ convertContentFromIR(content) {
271
+ if (typeof content === 'string') {
272
+ return [{ type: 'text', text: content }];
273
+ }
274
+ return content.map((block) => {
275
+ switch (block.type) {
276
+ case 'text':
277
+ return { type: 'text', text: block.text };
278
+ case 'image':
279
+ if (block.source.type === 'url') {
280
+ return {
281
+ type: 'image',
282
+ source: { type: 'url', url: block.source.url },
283
+ };
284
+ }
285
+ else {
286
+ return {
287
+ type: 'image',
288
+ source: {
289
+ type: 'base64',
290
+ media_type: block.source.mediaType,
291
+ data: block.source.data,
292
+ },
293
+ };
294
+ }
295
+ case 'tool_use':
296
+ return {
297
+ type: 'tool_use',
298
+ id: block.id,
299
+ name: block.name,
300
+ input: block.input,
301
+ };
302
+ default:
303
+ // Fallback to text
304
+ return { type: 'text', text: JSON.stringify(block) };
305
+ }
306
+ });
307
+ }
308
+ /**
309
+ * Map IR finish reason to Anthropic stop reason.
310
+ */
311
+ mapFinishReason(finishReason) {
312
+ switch (finishReason) {
313
+ case 'stop':
314
+ return 'end_turn';
315
+ case 'length':
316
+ return 'max_tokens';
317
+ case 'tool_calls':
318
+ return 'tool_use';
319
+ default:
320
+ return null;
321
+ }
322
+ }
323
+ }
324
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/adapters/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Chrome AI Frontend Adapter
3
+ *
4
+ * Pass-through adapter for Chrome AI format.
5
+ *
6
+ * @module
7
+ */
8
+ import { convertStreamMode } from 'ai.matey.utils';
9
+ export class ChromeAIFrontendAdapter {
10
+ metadata = {
11
+ name: 'chrome-ai-frontend',
12
+ version: '1.0.0',
13
+ provider: 'Chrome AI',
14
+ capabilities: {
15
+ streaming: true,
16
+ multiModal: false,
17
+ tools: false,
18
+ systemMessageStrategy: 'prepend-user',
19
+ supportsMultipleSystemMessages: false,
20
+ },
21
+ };
22
+ toIR(request) {
23
+ return Promise.resolve({
24
+ messages: [{ role: 'user', content: request.prompt }],
25
+ parameters: {
26
+ temperature: request.temperature,
27
+ topK: request.topK,
28
+ },
29
+ metadata: {
30
+ requestId: `chrome-ai-${Date.now()}`,
31
+ timestamp: Date.now(),
32
+ provenance: { frontend: this.metadata.name },
33
+ },
34
+ });
35
+ }
36
+ fromIR(response) {
37
+ return Promise.resolve({
38
+ text: typeof response.message.content === 'string' ? response.message.content : '',
39
+ });
40
+ }
41
+ async *fromIRStream(stream, options) {
42
+ // Apply stream mode conversion if options provided
43
+ const processedStream = options ? convertStreamMode(stream, options) : stream;
44
+ for await (const chunk of processedStream) {
45
+ if (chunk.type === 'content') {
46
+ yield chunk.delta;
47
+ }
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=chrome-ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome-ai.js","sourceRoot":"","sources":["../../../src/adapters/chrome-ai.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAYnD,MAAM,OAAO,uBAAuB;IACzB,QAAQ,GAAoB;QACnC,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE;YACZ,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,KAAK;YACZ,qBAAqB,EAAE,cAAc;YACrC,8BAA8B,EAAE,KAAK;SACtC;KACF,CAAC;IAEF,IAAI,CAAC,OAAwB;QAC3B,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACrD,UAAU,EAAE;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB;YACD,QAAQ,EAAE;gBACR,SAAS,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE;gBACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;aAC7C;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,QAAwB;QAC7B,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;SACnF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAC,YAAY,CACjB,MAAqC,EACrC,OAAiC;QAEjC,mDAAmD;QACnD,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAE9E,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,KAAK,CAAC,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Gemini Frontend Adapter
3
+ *
4
+ * Adapts Google Gemini API format to Universal IR.
5
+ * Handles Gemini's systemInstruction field and content array format.
6
+ *
7
+ * @module
8
+ */
9
+ export class GeminiFrontendAdapter {
10
+ metadata = {
11
+ name: 'gemini-frontend',
12
+ version: '1.0.0',
13
+ provider: 'Google Gemini',
14
+ capabilities: {
15
+ streaming: true,
16
+ multiModal: true,
17
+ tools: true,
18
+ systemMessageStrategy: 'separate-parameter',
19
+ supportsMultipleSystemMessages: false,
20
+ },
21
+ };
22
+ toIR(request) {
23
+ const messages = request.contents.map((c) => ({
24
+ role: c.role === 'model' ? 'assistant' : 'user',
25
+ content: c.parts
26
+ .map((p) => 'text' in p ? p.text : '')
27
+ .join(''),
28
+ }));
29
+ if (request.systemInstruction) {
30
+ messages.unshift({
31
+ role: 'system',
32
+ content: request.systemInstruction.parts.map((p) => p.text).join(''),
33
+ });
34
+ }
35
+ return Promise.resolve({
36
+ messages,
37
+ parameters: {
38
+ temperature: request.generationConfig?.temperature
39
+ ? request.generationConfig.temperature * 2
40
+ : undefined,
41
+ topP: request.generationConfig?.topP,
42
+ topK: request.generationConfig?.topK,
43
+ maxTokens: request.generationConfig?.maxOutputTokens,
44
+ stopSequences: request.generationConfig?.stopSequences,
45
+ },
46
+ metadata: {
47
+ requestId: 'gemini-' + Date.now(),
48
+ timestamp: Date.now(),
49
+ provenance: { frontend: this.metadata.name },
50
+ },
51
+ });
52
+ }
53
+ fromIR(response) {
54
+ return Promise.resolve({
55
+ candidates: [
56
+ {
57
+ content: {
58
+ role: 'model',
59
+ parts: [
60
+ {
61
+ text: typeof response.message.content === 'string' ? response.message.content : '',
62
+ },
63
+ ],
64
+ },
65
+ finishReason: response.finishReason === 'stop'
66
+ ? 'STOP'
67
+ : response.finishReason === 'length'
68
+ ? 'MAX_TOKENS'
69
+ : 'OTHER',
70
+ },
71
+ ],
72
+ usageMetadata: response.usage
73
+ ? {
74
+ promptTokenCount: response.usage.promptTokens,
75
+ candidatesTokenCount: response.usage.completionTokens,
76
+ totalTokenCount: response.usage.totalTokens,
77
+ }
78
+ : undefined,
79
+ });
80
+ }
81
+ async *fromIRStream(stream, _options) {
82
+ for await (const chunk of stream) {
83
+ if (chunk.type === 'content') {
84
+ yield 'data: ' +
85
+ JSON.stringify({ candidates: [{ content: { parts: [{ text: chunk.delta }] } }] }) +
86
+ '\n\n';
87
+ }
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/adapters/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Generic Frontend Adapter
3
+ *
4
+ * A passthrough frontend adapter that accepts and returns IR format directly.
5
+ * Use this when you want to work with the universal IR format without
6
+ * any provider-specific conversions.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { GenericFrontendAdapter } from 'ai.matey.frontend/generic';
11
+ * import { Bridge } from 'ai.matey.core';
12
+ *
13
+ * const frontend = new GenericFrontendAdapter();
14
+ * const bridge = new Bridge(frontend, backend);
15
+ *
16
+ * // Request and response are both in IR format
17
+ * const response = await bridge.chat({
18
+ * messages: [{ role: 'user', content: 'Hello!' }],
19
+ * parameters: { model: 'gpt-4' },
20
+ * metadata: { requestId: 'req_123', timestamp: Date.now(), provenance: {} },
21
+ * });
22
+ * ```
23
+ *
24
+ * @module
25
+ */
26
+ // ============================================================================
27
+ // Generic Frontend Adapter
28
+ // ============================================================================
29
+ /**
30
+ * Passthrough frontend adapter for IR format.
31
+ *
32
+ * This adapter accepts IR requests directly and returns IR responses without
33
+ * any conversion. It's useful for:
34
+ *
35
+ * - **Direct IR access**: Work with the universal format without provider wrappers
36
+ * - **Testing**: Test bridges and backends without conversion overhead
37
+ * - **Custom integrations**: Build tools that operate at the IR level
38
+ * - **Format normalization**: Use when your application already produces IR
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // Basic usage
43
+ * const frontend = new GenericFrontendAdapter();
44
+ *
45
+ * // With custom configuration
46
+ * const frontend = new GenericFrontendAdapter({
47
+ * name: 'my-app-frontend',
48
+ * trackProvenance: true,
49
+ * maxContextTokens: 128000,
50
+ * });
51
+ * ```
52
+ */
53
+ export class GenericFrontendAdapter {
54
+ metadata;
55
+ config;
56
+ constructor(config = {}) {
57
+ this.config = config;
58
+ this.metadata = {
59
+ name: config.name ?? 'generic-frontend',
60
+ version: '1.0.0',
61
+ provider: 'Generic',
62
+ capabilities: {
63
+ streaming: true,
64
+ multiModal: true,
65
+ tools: true,
66
+ maxContextTokens: config.maxContextTokens,
67
+ supportedModels: config.supportedModels,
68
+ systemMessageStrategy: 'in-messages',
69
+ supportsMultipleSystemMessages: true,
70
+ supportsTemperature: true,
71
+ supportsTopP: true,
72
+ supportsTopK: true,
73
+ supportsSeed: true,
74
+ supportsFrequencyPenalty: true,
75
+ supportsPresencePenalty: true,
76
+ },
77
+ };
78
+ }
79
+ /**
80
+ * Pass through IR request (no conversion needed).
81
+ *
82
+ * Optionally adds provenance tracking if enabled.
83
+ */
84
+ toIR(request) {
85
+ // Optionally add provenance
86
+ if (this.config.trackProvenance !== false) {
87
+ return Promise.resolve({
88
+ ...request,
89
+ metadata: {
90
+ ...request.metadata,
91
+ provenance: {
92
+ ...request.metadata.provenance,
93
+ frontend: this.metadata.name,
94
+ },
95
+ },
96
+ });
97
+ }
98
+ return Promise.resolve(request);
99
+ }
100
+ /**
101
+ * Pass through IR response (no conversion needed).
102
+ */
103
+ fromIR(response) {
104
+ return Promise.resolve(response);
105
+ }
106
+ /**
107
+ * Pass through IR stream chunks (no conversion needed).
108
+ */
109
+ async *fromIRStream(stream, _options) {
110
+ for await (const chunk of stream) {
111
+ yield chunk;
112
+ }
113
+ }
114
+ /**
115
+ * Validate IR request structure.
116
+ *
117
+ * Only performs validation if `validateRequests` is enabled in config.
118
+ */
119
+ validate(request) {
120
+ if (!this.config.validateRequests) {
121
+ return Promise.resolve();
122
+ }
123
+ // Basic validation
124
+ if (!request.messages || request.messages.length === 0) {
125
+ return Promise.reject(new Error('Request must contain at least one message'));
126
+ }
127
+ if (!request.metadata?.requestId) {
128
+ return Promise.reject(new Error('Request must have a requestId in metadata'));
129
+ }
130
+ if (typeof request.metadata.timestamp !== 'number') {
131
+ return Promise.reject(new Error('Request must have a numeric timestamp in metadata'));
132
+ }
133
+ return Promise.resolve();
134
+ }
135
+ }
136
+ // ============================================================================
137
+ // Factory Function
138
+ // ============================================================================
139
+ /**
140
+ * Create a new Generic Frontend Adapter instance.
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * const frontend = createGenericFrontend();
145
+ *
146
+ * // Or with configuration
147
+ * const frontend = createGenericFrontend({
148
+ * name: 'my-frontend',
149
+ * trackProvenance: true,
150
+ * });
151
+ * ```
152
+ */
153
+ export function createGenericFrontend(config) {
154
+ return new GenericFrontendAdapter(config);
155
+ }
156
+ // ============================================================================
157
+ // Default Export
158
+ // ============================================================================
159
+ export default GenericFrontendAdapter;
160
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/adapters/generic.ts"],"names":[],"mappings":"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"}