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.
- package/LICENSE +21 -0
- package/dist/cjs/adapters/anthropic.js +328 -0
- package/dist/cjs/adapters/anthropic.js.map +1 -0
- package/dist/cjs/adapters/chrome-ai.js +55 -0
- package/dist/cjs/adapters/chrome-ai.js.map +1 -0
- package/dist/cjs/adapters/gemini.js +95 -0
- package/dist/cjs/adapters/gemini.js.map +1 -0
- package/dist/cjs/adapters/generic.js +165 -0
- package/dist/cjs/adapters/generic.js.map +1 -0
- package/dist/cjs/adapters/mistral.js +87 -0
- package/dist/cjs/adapters/mistral.js.map +1 -0
- package/dist/cjs/adapters/ollama.js +73 -0
- package/dist/cjs/adapters/ollama.js.map +1 -0
- package/dist/cjs/adapters/openai.js +287 -0
- package/dist/cjs/adapters/openai.js.map +1 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/adapters/anthropic.js +324 -0
- package/dist/esm/adapters/anthropic.js.map +1 -0
- package/dist/esm/adapters/chrome-ai.js +51 -0
- package/dist/esm/adapters/chrome-ai.js.map +1 -0
- package/dist/esm/adapters/gemini.js +91 -0
- package/dist/esm/adapters/gemini.js.map +1 -0
- package/dist/esm/adapters/generic.js +160 -0
- package/dist/esm/adapters/generic.js.map +1 -0
- package/dist/esm/adapters/mistral.js +83 -0
- package/dist/esm/adapters/mistral.js.map +1 -0
- package/dist/esm/adapters/ollama.js +69 -0
- package/dist/esm/adapters/ollama.js.map +1 -0
- package/dist/esm/adapters/openai.js +283 -0
- package/dist/esm/adapters/openai.js.map +1 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/types/adapters/anthropic.d.ts +149 -0
- package/dist/types/adapters/anthropic.d.ts.map +1 -0
- package/dist/types/adapters/chrome-ai.d.ts +25 -0
- package/dist/types/adapters/chrome-ai.d.ts.map +1 -0
- package/dist/types/adapters/gemini.d.ts +55 -0
- package/dist/types/adapters/gemini.d.ts.map +1 -0
- package/dist/types/adapters/generic.d.ts +122 -0
- package/dist/types/adapters/generic.d.ts.map +1 -0
- package/dist/types/adapters/mistral.d.ts +47 -0
- package/dist/types/adapters/mistral.d.ts.map +1 -0
- package/dist/types/adapters/ollama.d.ts +44 -0
- package/dist/types/adapters/ollama.d.ts.map +1 -0
- package/dist/types/adapters/openai.d.ts +116 -0
- package/dist/types/adapters/openai.d.ts.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +144 -0
- 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
|