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,165 @@
1
+ "use strict";
2
+ /**
3
+ * Generic Frontend Adapter
4
+ *
5
+ * A passthrough frontend adapter that accepts and returns IR format directly.
6
+ * Use this when you want to work with the universal IR format without
7
+ * any provider-specific conversions.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { GenericFrontendAdapter } from 'ai.matey.frontend/generic';
12
+ * import { Bridge } from 'ai.matey.core';
13
+ *
14
+ * const frontend = new GenericFrontendAdapter();
15
+ * const bridge = new Bridge(frontend, backend);
16
+ *
17
+ * // Request and response are both in IR format
18
+ * const response = await bridge.chat({
19
+ * messages: [{ role: 'user', content: 'Hello!' }],
20
+ * parameters: { model: 'gpt-4' },
21
+ * metadata: { requestId: 'req_123', timestamp: Date.now(), provenance: {} },
22
+ * });
23
+ * ```
24
+ *
25
+ * @module
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.GenericFrontendAdapter = void 0;
29
+ exports.createGenericFrontend = createGenericFrontend;
30
+ // ============================================================================
31
+ // Generic Frontend Adapter
32
+ // ============================================================================
33
+ /**
34
+ * Passthrough frontend adapter for IR format.
35
+ *
36
+ * This adapter accepts IR requests directly and returns IR responses without
37
+ * any conversion. It's useful for:
38
+ *
39
+ * - **Direct IR access**: Work with the universal format without provider wrappers
40
+ * - **Testing**: Test bridges and backends without conversion overhead
41
+ * - **Custom integrations**: Build tools that operate at the IR level
42
+ * - **Format normalization**: Use when your application already produces IR
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // Basic usage
47
+ * const frontend = new GenericFrontendAdapter();
48
+ *
49
+ * // With custom configuration
50
+ * const frontend = new GenericFrontendAdapter({
51
+ * name: 'my-app-frontend',
52
+ * trackProvenance: true,
53
+ * maxContextTokens: 128000,
54
+ * });
55
+ * ```
56
+ */
57
+ class GenericFrontendAdapter {
58
+ metadata;
59
+ config;
60
+ constructor(config = {}) {
61
+ this.config = config;
62
+ this.metadata = {
63
+ name: config.name ?? 'generic-frontend',
64
+ version: '1.0.0',
65
+ provider: 'Generic',
66
+ capabilities: {
67
+ streaming: true,
68
+ multiModal: true,
69
+ tools: true,
70
+ maxContextTokens: config.maxContextTokens,
71
+ supportedModels: config.supportedModels,
72
+ systemMessageStrategy: 'in-messages',
73
+ supportsMultipleSystemMessages: true,
74
+ supportsTemperature: true,
75
+ supportsTopP: true,
76
+ supportsTopK: true,
77
+ supportsSeed: true,
78
+ supportsFrequencyPenalty: true,
79
+ supportsPresencePenalty: true,
80
+ },
81
+ };
82
+ }
83
+ /**
84
+ * Pass through IR request (no conversion needed).
85
+ *
86
+ * Optionally adds provenance tracking if enabled.
87
+ */
88
+ toIR(request) {
89
+ // Optionally add provenance
90
+ if (this.config.trackProvenance !== false) {
91
+ return Promise.resolve({
92
+ ...request,
93
+ metadata: {
94
+ ...request.metadata,
95
+ provenance: {
96
+ ...request.metadata.provenance,
97
+ frontend: this.metadata.name,
98
+ },
99
+ },
100
+ });
101
+ }
102
+ return Promise.resolve(request);
103
+ }
104
+ /**
105
+ * Pass through IR response (no conversion needed).
106
+ */
107
+ fromIR(response) {
108
+ return Promise.resolve(response);
109
+ }
110
+ /**
111
+ * Pass through IR stream chunks (no conversion needed).
112
+ */
113
+ async *fromIRStream(stream, _options) {
114
+ for await (const chunk of stream) {
115
+ yield chunk;
116
+ }
117
+ }
118
+ /**
119
+ * Validate IR request structure.
120
+ *
121
+ * Only performs validation if `validateRequests` is enabled in config.
122
+ */
123
+ validate(request) {
124
+ if (!this.config.validateRequests) {
125
+ return Promise.resolve();
126
+ }
127
+ // Basic validation
128
+ if (!request.messages || request.messages.length === 0) {
129
+ return Promise.reject(new Error('Request must contain at least one message'));
130
+ }
131
+ if (!request.metadata?.requestId) {
132
+ return Promise.reject(new Error('Request must have a requestId in metadata'));
133
+ }
134
+ if (typeof request.metadata.timestamp !== 'number') {
135
+ return Promise.reject(new Error('Request must have a numeric timestamp in metadata'));
136
+ }
137
+ return Promise.resolve();
138
+ }
139
+ }
140
+ exports.GenericFrontendAdapter = GenericFrontendAdapter;
141
+ // ============================================================================
142
+ // Factory Function
143
+ // ============================================================================
144
+ /**
145
+ * Create a new Generic Frontend Adapter instance.
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * const frontend = createGenericFrontend();
150
+ *
151
+ * // Or with configuration
152
+ * const frontend = createGenericFrontend({
153
+ * name: 'my-frontend',
154
+ * trackProvenance: true,
155
+ * });
156
+ * ```
157
+ */
158
+ function createGenericFrontend(config) {
159
+ return new GenericFrontendAdapter(config);
160
+ }
161
+ // ============================================================================
162
+ // Default Export
163
+ // ============================================================================
164
+ exports.default = GenericFrontendAdapter;
165
+ //# 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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"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * Mistral Frontend Adapter
4
+ *
5
+ * Pass-through adapter for Mistral format.
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MistralFrontendAdapter = void 0;
11
+ class MistralFrontendAdapter {
12
+ metadata = {
13
+ name: 'mistral-frontend',
14
+ version: '1.0.0',
15
+ provider: 'Mistral',
16
+ capabilities: {
17
+ streaming: true,
18
+ multiModal: false,
19
+ tools: true,
20
+ systemMessageStrategy: 'in-messages',
21
+ supportsMultipleSystemMessages: false,
22
+ },
23
+ };
24
+ toIR(request) {
25
+ const messages = request.messages.map((msg) => ({
26
+ role: msg.role,
27
+ content: msg.content,
28
+ }));
29
+ return Promise.resolve({
30
+ messages,
31
+ parameters: {
32
+ model: request.model,
33
+ temperature: request.temperature,
34
+ maxTokens: request.max_tokens,
35
+ topP: request.top_p,
36
+ seed: request.random_seed,
37
+ },
38
+ metadata: {
39
+ requestId: `mistral-${Date.now()}`,
40
+ timestamp: Date.now(),
41
+ provenance: { frontend: this.metadata.name },
42
+ },
43
+ stream: request.stream,
44
+ });
45
+ }
46
+ fromIR(response) {
47
+ return Promise.resolve({
48
+ id: `mistral-${Date.now()}`,
49
+ object: 'chat.completion',
50
+ created: Math.floor(Date.now() / 1000),
51
+ model: response.metadata.custom?.model || 'mistral-small',
52
+ choices: [
53
+ {
54
+ index: 0,
55
+ message: {
56
+ role: 'assistant',
57
+ content: typeof response.message.content === 'string' ? response.message.content : '',
58
+ },
59
+ finish_reason: response.finishReason === 'stop'
60
+ ? 'stop'
61
+ : response.finishReason === 'length'
62
+ ? 'length'
63
+ : null,
64
+ },
65
+ ],
66
+ usage: response.usage
67
+ ? {
68
+ prompt_tokens: response.usage.promptTokens,
69
+ completion_tokens: response.usage.completionTokens,
70
+ total_tokens: response.usage.totalTokens,
71
+ }
72
+ : { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
73
+ });
74
+ }
75
+ async *fromIRStream(stream, _options) {
76
+ for await (const chunk of stream) {
77
+ if (chunk.type === 'content') {
78
+ yield `data: ${JSON.stringify({ choices: [{ delta: { content: chunk.delta } }] })}\n\n`;
79
+ }
80
+ else if (chunk.type === 'done') {
81
+ yield `data: [DONE]\n\n`;
82
+ }
83
+ }
84
+ }
85
+ }
86
+ exports.MistralFrontendAdapter = MistralFrontendAdapter;
87
+ //# 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,73 @@
1
+ "use strict";
2
+ /**
3
+ * Ollama Frontend Adapter
4
+ *
5
+ * Adapts Ollama API format to Universal IR.
6
+ * Ollama uses a local server with OpenAI-compatible chat format.
7
+ *
8
+ * @module
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.OllamaFrontendAdapter = void 0;
12
+ class OllamaFrontendAdapter {
13
+ metadata = {
14
+ name: 'ollama-frontend',
15
+ version: '1.0.0',
16
+ provider: 'Ollama',
17
+ capabilities: {
18
+ streaming: true,
19
+ multiModal: false,
20
+ tools: false,
21
+ systemMessageStrategy: 'in-messages',
22
+ supportsMultipleSystemMessages: false,
23
+ },
24
+ };
25
+ toIR(request) {
26
+ const messages = request.messages.map((msg) => ({
27
+ role: msg.role,
28
+ content: msg.content,
29
+ }));
30
+ return Promise.resolve({
31
+ messages,
32
+ parameters: {
33
+ model: request.model,
34
+ temperature: request.options?.temperature,
35
+ topP: request.options?.top_p,
36
+ topK: request.options?.top_k,
37
+ maxTokens: request.options?.num_predict,
38
+ stopSequences: request.options?.stop,
39
+ },
40
+ metadata: {
41
+ requestId: `ollama-${Date.now()}`,
42
+ timestamp: Date.now(),
43
+ provenance: { frontend: this.metadata.name },
44
+ },
45
+ stream: request.stream,
46
+ });
47
+ }
48
+ fromIR(response) {
49
+ return Promise.resolve({
50
+ model: response.metadata.custom?.model || 'unknown',
51
+ created_at: new Date().toISOString(),
52
+ message: {
53
+ role: 'assistant',
54
+ content: typeof response.message.content === 'string' ? response.message.content : '',
55
+ },
56
+ done: true,
57
+ prompt_eval_count: response.usage?.promptTokens,
58
+ eval_count: response.usage?.completionTokens,
59
+ });
60
+ }
61
+ async *fromIRStream(stream, _options) {
62
+ for await (const chunk of stream) {
63
+ if (chunk.type === 'content') {
64
+ yield JSON.stringify({ message: { content: chunk.delta }, done: false }) + '\n';
65
+ }
66
+ else if (chunk.type === 'done') {
67
+ yield JSON.stringify({ message: { content: '' }, done: true }) + '\n';
68
+ }
69
+ }
70
+ }
71
+ }
72
+ exports.OllamaFrontendAdapter = OllamaFrontendAdapter;
73
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/adapters/ollama.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAuCH,MAAa,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;AAjED,sDAiEC"}
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Frontend Adapter
4
+ *
5
+ * Adapts OpenAI Chat Completions API format to Universal IR.
6
+ * Since OpenAI format is similar to IR, this is mostly a pass-through adapter.
7
+ *
8
+ * @module
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.OpenAIFrontendAdapter = void 0;
12
+ const ai_matey_errors_1 = require("ai.matey.errors");
13
+ const ai_matey_utils_1 = require("ai.matey.utils");
14
+ // ============================================================================
15
+ // OpenAI Frontend Adapter
16
+ // ============================================================================
17
+ /**
18
+ * Frontend adapter for OpenAI Chat Completions API.
19
+ */
20
+ class OpenAIFrontendAdapter {
21
+ metadata = {
22
+ name: 'openai-frontend',
23
+ version: '1.0.0',
24
+ provider: 'OpenAI',
25
+ capabilities: {
26
+ streaming: true,
27
+ multiModal: true,
28
+ tools: true,
29
+ maxContextTokens: 128000,
30
+ systemMessageStrategy: 'in-messages',
31
+ supportsMultipleSystemMessages: true,
32
+ supportsTemperature: true,
33
+ supportsTopP: true,
34
+ supportsTopK: false,
35
+ supportsSeed: true,
36
+ supportsFrequencyPenalty: true,
37
+ supportsPresencePenalty: true,
38
+ maxStopSequences: 4,
39
+ },
40
+ };
41
+ /**
42
+ * Convert OpenAI request to Universal IR.
43
+ */
44
+ toIR(request) {
45
+ try {
46
+ // Convert messages
47
+ const messages = request.messages.map((msg) => this.convertMessageToIR(msg));
48
+ // Build IR request
49
+ const irRequest = {
50
+ messages,
51
+ parameters: {
52
+ model: request.model,
53
+ temperature: request.temperature,
54
+ maxTokens: request.max_tokens,
55
+ topP: request.top_p,
56
+ frequencyPenalty: request.frequency_penalty,
57
+ presencePenalty: request.presence_penalty,
58
+ stopSequences: typeof request.stop === 'string' ? [request.stop] : request.stop,
59
+ seed: request.seed,
60
+ user: request.user,
61
+ },
62
+ stream: request.stream ?? false,
63
+ metadata: {
64
+ requestId: crypto.randomUUID(),
65
+ timestamp: Date.now(),
66
+ provenance: {
67
+ frontend: this.metadata.name,
68
+ },
69
+ },
70
+ };
71
+ return Promise.resolve(irRequest);
72
+ }
73
+ catch (error) {
74
+ throw new ai_matey_errors_1.AdapterConversionError({
75
+ code: ai_matey_errors_1.ErrorCode.ADAPTER_CONVERSION_ERROR,
76
+ message: `Failed to convert OpenAI request to IR: ${error instanceof Error ? error.message : String(error)}`,
77
+ provenance: {
78
+ frontend: this.metadata.name,
79
+ },
80
+ cause: error instanceof Error ? error : undefined,
81
+ });
82
+ }
83
+ }
84
+ /**
85
+ * Convert Universal IR response to OpenAI format.
86
+ */
87
+ fromIR(response) {
88
+ try {
89
+ // Convert message
90
+ const message = this.convertMessageFromIR(response.message);
91
+ // Map finish reason
92
+ const finishReason = this.mapFinishReason(response.finishReason);
93
+ // Build OpenAI response
94
+ const openaiResponse = {
95
+ id: response.metadata.requestId,
96
+ object: 'chat.completion',
97
+ created: Math.floor(response.metadata.timestamp / 1000),
98
+ model: response.metadata.provenance?.backend || 'unknown',
99
+ choices: [
100
+ {
101
+ index: 0,
102
+ message,
103
+ finish_reason: finishReason,
104
+ },
105
+ ],
106
+ usage: response.usage
107
+ ? {
108
+ prompt_tokens: response.usage.promptTokens,
109
+ completion_tokens: response.usage.completionTokens,
110
+ total_tokens: response.usage.totalTokens,
111
+ }
112
+ : undefined,
113
+ };
114
+ return Promise.resolve(openaiResponse);
115
+ }
116
+ catch (error) {
117
+ throw new ai_matey_errors_1.AdapterConversionError({
118
+ code: ai_matey_errors_1.ErrorCode.ADAPTER_CONVERSION_ERROR,
119
+ message: `Failed to convert IR response to OpenAI format: ${error instanceof Error ? error.message : String(error)}`,
120
+ provenance: {
121
+ frontend: this.metadata.name,
122
+ },
123
+ cause: error instanceof Error ? error : undefined,
124
+ });
125
+ }
126
+ }
127
+ /**
128
+ * Convert Universal IR stream to OpenAI SSE format.
129
+ */
130
+ async *fromIRStream(stream, options) {
131
+ try {
132
+ // Apply stream mode conversion if options provided
133
+ const processedStream = options ? (0, ai_matey_utils_1.convertStreamMode)(stream, options) : stream;
134
+ let messageId = '';
135
+ let model = '';
136
+ let created = 0;
137
+ for await (const chunk of processedStream) {
138
+ switch (chunk.type) {
139
+ case 'start':
140
+ // Extract metadata
141
+ messageId = chunk.metadata.requestId;
142
+ model = chunk.metadata.provenance?.backend || 'unknown';
143
+ created = Math.floor(chunk.metadata.timestamp / 1000);
144
+ break;
145
+ case 'content':
146
+ // Emit content delta
147
+ yield {
148
+ id: messageId,
149
+ object: 'chat.completion.chunk',
150
+ created,
151
+ model,
152
+ choices: [
153
+ {
154
+ index: 0,
155
+ delta: {
156
+ content: chunk.delta,
157
+ },
158
+ finish_reason: null,
159
+ },
160
+ ],
161
+ };
162
+ break;
163
+ case 'done': {
164
+ // Emit finish chunk
165
+ const finishReason = this.mapFinishReason(chunk.finishReason);
166
+ yield {
167
+ id: messageId,
168
+ object: 'chat.completion.chunk',
169
+ created,
170
+ model,
171
+ choices: [
172
+ {
173
+ index: 0,
174
+ delta: {},
175
+ finish_reason: finishReason,
176
+ },
177
+ ],
178
+ };
179
+ break;
180
+ }
181
+ case 'error':
182
+ // OpenAI doesn't have a standard error event in SSE
183
+ // We'll just stop the stream
184
+ break;
185
+ }
186
+ }
187
+ }
188
+ catch {
189
+ // Silently end stream on error
190
+ // OpenAI SSE format doesn't have a standard error event
191
+ }
192
+ }
193
+ // ==========================================================================
194
+ // Private Helper Methods
195
+ // ==========================================================================
196
+ /**
197
+ * Convert OpenAI message to IR message.
198
+ */
199
+ convertMessageToIR(message) {
200
+ // Convert content
201
+ let content;
202
+ if (typeof message.content === 'string') {
203
+ content = message.content;
204
+ }
205
+ else {
206
+ content = message.content.map((block) => {
207
+ if (block.type === 'text') {
208
+ return { type: 'text', text: block.text };
209
+ }
210
+ else {
211
+ return {
212
+ type: 'image',
213
+ source: {
214
+ type: 'url',
215
+ url: block.image_url.url,
216
+ },
217
+ };
218
+ }
219
+ });
220
+ }
221
+ return {
222
+ role: message.role,
223
+ content,
224
+ name: message.name,
225
+ };
226
+ }
227
+ /**
228
+ * Convert IR message to OpenAI message.
229
+ */
230
+ convertMessageFromIR(message) {
231
+ // Convert content
232
+ let content;
233
+ if (typeof message.content === 'string') {
234
+ content = message.content;
235
+ }
236
+ else {
237
+ content = message.content.map((block) => {
238
+ switch (block.type) {
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
+ });
261
+ }
262
+ return {
263
+ role: message.role,
264
+ content,
265
+ name: message.name,
266
+ };
267
+ }
268
+ /**
269
+ * Map IR finish reason to OpenAI finish reason.
270
+ */
271
+ mapFinishReason(finishReason) {
272
+ switch (finishReason) {
273
+ case 'stop':
274
+ return 'stop';
275
+ case 'length':
276
+ return 'length';
277
+ case 'tool_calls':
278
+ return 'tool_calls';
279
+ case 'content_filter':
280
+ return 'content_filter';
281
+ default:
282
+ return null;
283
+ }
284
+ }
285
+ }
286
+ exports.OpenAIFrontendAdapter = OpenAIFrontendAdapter;
287
+ //# 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,34 @@
1
+ "use strict";
2
+ /**
3
+ * AI Matey Frontend Adapters
4
+ *
5
+ * Consolidated package containing all frontend adapters.
6
+ * Each frontend adapter handles converting provider-specific
7
+ * request/response formats to Universal IR and vice versa.
8
+ *
9
+ * @module ai.matey.frontend
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
23
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ // Frontend adapters
27
+ __exportStar(require("./adapters/openai.js"), exports);
28
+ __exportStar(require("./adapters/anthropic.js"), exports);
29
+ __exportStar(require("./adapters/gemini.js"), exports);
30
+ __exportStar(require("./adapters/mistral.js"), exports);
31
+ __exportStar(require("./adapters/ollama.js"), exports);
32
+ __exportStar(require("./adapters/chrome-ai.js"), exports);
33
+ __exportStar(require("./adapters/generic.js"), exports);
34
+ //# sourceMappingURL=index.js.map