ai.matey.backend 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/index.js +60 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/providers/ai21.js +331 -0
- package/dist/cjs/providers/ai21.js.map +1 -0
- package/dist/cjs/providers/anthropic.js +664 -0
- package/dist/cjs/providers/anthropic.js.map +1 -0
- package/dist/cjs/providers/anyscale.js +338 -0
- package/dist/cjs/providers/anyscale.js.map +1 -0
- package/dist/cjs/providers/aws-bedrock.js +374 -0
- package/dist/cjs/providers/aws-bedrock.js.map +1 -0
- package/dist/cjs/providers/azure-openai.js +406 -0
- package/dist/cjs/providers/azure-openai.js.map +1 -0
- package/dist/cjs/providers/cerebras.js +356 -0
- package/dist/cjs/providers/cerebras.js.map +1 -0
- package/dist/cjs/providers/cloudflare.js +359 -0
- package/dist/cjs/providers/cloudflare.js.map +1 -0
- package/dist/cjs/providers/cohere.js +368 -0
- package/dist/cjs/providers/cohere.js.map +1 -0
- package/dist/cjs/providers/deepinfra.js +343 -0
- package/dist/cjs/providers/deepinfra.js.map +1 -0
- package/dist/cjs/providers/deepseek.js +104 -0
- package/dist/cjs/providers/deepseek.js.map +1 -0
- package/dist/cjs/providers/fireworks.js +363 -0
- package/dist/cjs/providers/fireworks.js.map +1 -0
- package/dist/cjs/providers/gemini.js +292 -0
- package/dist/cjs/providers/gemini.js.map +1 -0
- package/dist/cjs/providers/groq.js +143 -0
- package/dist/cjs/providers/groq.js.map +1 -0
- package/dist/cjs/providers/huggingface.js +392 -0
- package/dist/cjs/providers/huggingface.js.map +1 -0
- package/dist/cjs/providers/lmstudio.js +144 -0
- package/dist/cjs/providers/lmstudio.js.map +1 -0
- package/dist/cjs/providers/mistral.js +288 -0
- package/dist/cjs/providers/mistral.js.map +1 -0
- package/dist/cjs/providers/nvidia.js +167 -0
- package/dist/cjs/providers/nvidia.js.map +1 -0
- package/dist/cjs/providers/ollama.js +257 -0
- package/dist/cjs/providers/ollama.js.map +1 -0
- package/dist/cjs/providers/openai.js +640 -0
- package/dist/cjs/providers/openai.js.map +1 -0
- package/dist/cjs/providers/openrouter.js +379 -0
- package/dist/cjs/providers/openrouter.js.map +1 -0
- package/dist/cjs/providers/perplexity.js +372 -0
- package/dist/cjs/providers/perplexity.js.map +1 -0
- package/dist/cjs/providers/replicate.js +340 -0
- package/dist/cjs/providers/replicate.js.map +1 -0
- package/dist/cjs/providers/together-ai.js +341 -0
- package/dist/cjs/providers/together-ai.js.map +1 -0
- package/dist/cjs/providers/xai.js +339 -0
- package/dist/cjs/providers/xai.js.map +1 -0
- package/dist/cjs/shared.js +279 -0
- package/dist/cjs/shared.js.map +1 -0
- package/dist/esm/index.js +44 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/providers/ai21.js +327 -0
- package/dist/esm/providers/ai21.js.map +1 -0
- package/dist/esm/providers/anthropic.js +660 -0
- package/dist/esm/providers/anthropic.js.map +1 -0
- package/dist/esm/providers/anyscale.js +334 -0
- package/dist/esm/providers/anyscale.js.map +1 -0
- package/dist/esm/providers/aws-bedrock.js +370 -0
- package/dist/esm/providers/aws-bedrock.js.map +1 -0
- package/dist/esm/providers/azure-openai.js +402 -0
- package/dist/esm/providers/azure-openai.js.map +1 -0
- package/dist/esm/providers/cerebras.js +352 -0
- package/dist/esm/providers/cerebras.js.map +1 -0
- package/dist/esm/providers/cloudflare.js +355 -0
- package/dist/esm/providers/cloudflare.js.map +1 -0
- package/dist/esm/providers/cohere.js +364 -0
- package/dist/esm/providers/cohere.js.map +1 -0
- package/dist/esm/providers/deepinfra.js +339 -0
- package/dist/esm/providers/deepinfra.js.map +1 -0
- package/dist/esm/providers/deepseek.js +99 -0
- package/dist/esm/providers/deepseek.js.map +1 -0
- package/dist/esm/providers/fireworks.js +359 -0
- package/dist/esm/providers/fireworks.js.map +1 -0
- package/dist/esm/providers/gemini.js +288 -0
- package/dist/esm/providers/gemini.js.map +1 -0
- package/dist/esm/providers/groq.js +138 -0
- package/dist/esm/providers/groq.js.map +1 -0
- package/dist/esm/providers/huggingface.js +387 -0
- package/dist/esm/providers/huggingface.js.map +1 -0
- package/dist/esm/providers/lmstudio.js +139 -0
- package/dist/esm/providers/lmstudio.js.map +1 -0
- package/dist/esm/providers/mistral.js +284 -0
- package/dist/esm/providers/mistral.js.map +1 -0
- package/dist/esm/providers/nvidia.js +162 -0
- package/dist/esm/providers/nvidia.js.map +1 -0
- package/dist/esm/providers/ollama.js +253 -0
- package/dist/esm/providers/ollama.js.map +1 -0
- package/dist/esm/providers/openai.js +636 -0
- package/dist/esm/providers/openai.js.map +1 -0
- package/dist/esm/providers/openrouter.js +375 -0
- package/dist/esm/providers/openrouter.js.map +1 -0
- package/dist/esm/providers/perplexity.js +368 -0
- package/dist/esm/providers/perplexity.js.map +1 -0
- package/dist/esm/providers/replicate.js +336 -0
- package/dist/esm/providers/replicate.js.map +1 -0
- package/dist/esm/providers/together-ai.js +337 -0
- package/dist/esm/providers/together-ai.js.map +1 -0
- package/dist/esm/providers/xai.js +335 -0
- package/dist/esm/providers/xai.js.map +1 -0
- package/dist/esm/shared.js +272 -0
- package/dist/esm/shared.js.map +1 -0
- package/dist/types/index.d.ts +38 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/providers/ai21.d.ts +106 -0
- package/dist/types/providers/ai21.d.ts.map +1 -0
- package/dist/types/providers/anthropic.d.ts +194 -0
- package/dist/types/providers/anthropic.d.ts.map +1 -0
- package/dist/types/providers/anyscale.d.ts +109 -0
- package/dist/types/providers/anyscale.d.ts.map +1 -0
- package/dist/types/providers/aws-bedrock.d.ts +152 -0
- package/dist/types/providers/aws-bedrock.d.ts.map +1 -0
- package/dist/types/providers/azure-openai.d.ts +142 -0
- package/dist/types/providers/azure-openai.d.ts.map +1 -0
- package/dist/types/providers/cerebras.d.ts +130 -0
- package/dist/types/providers/cerebras.d.ts.map +1 -0
- package/dist/types/providers/cloudflare.d.ts +125 -0
- package/dist/types/providers/cloudflare.d.ts.map +1 -0
- package/dist/types/providers/cohere.d.ts +114 -0
- package/dist/types/providers/cohere.d.ts.map +1 -0
- package/dist/types/providers/deepinfra.d.ts +118 -0
- package/dist/types/providers/deepinfra.d.ts.map +1 -0
- package/dist/types/providers/deepseek.d.ts +68 -0
- package/dist/types/providers/deepseek.d.ts.map +1 -0
- package/dist/types/providers/fireworks.d.ts +127 -0
- package/dist/types/providers/fireworks.d.ts.map +1 -0
- package/dist/types/providers/gemini.d.ts +71 -0
- package/dist/types/providers/gemini.d.ts.map +1 -0
- package/dist/types/providers/groq.d.ts +83 -0
- package/dist/types/providers/groq.d.ts.map +1 -0
- package/dist/types/providers/huggingface.d.ts +154 -0
- package/dist/types/providers/huggingface.d.ts.map +1 -0
- package/dist/types/providers/lmstudio.d.ts +88 -0
- package/dist/types/providers/lmstudio.d.ts.map +1 -0
- package/dist/types/providers/mistral.d.ts +65 -0
- package/dist/types/providers/mistral.d.ts.map +1 -0
- package/dist/types/providers/nvidia.d.ts +100 -0
- package/dist/types/providers/nvidia.d.ts.map +1 -0
- package/dist/types/providers/ollama.d.ts +59 -0
- package/dist/types/providers/ollama.d.ts.map +1 -0
- package/dist/types/providers/openai.d.ts +205 -0
- package/dist/types/providers/openai.d.ts.map +1 -0
- package/dist/types/providers/openrouter.d.ts +135 -0
- package/dist/types/providers/openrouter.d.ts.map +1 -0
- package/dist/types/providers/perplexity.d.ts +116 -0
- package/dist/types/providers/perplexity.d.ts.map +1 -0
- package/dist/types/providers/replicate.d.ts +91 -0
- package/dist/types/providers/replicate.d.ts.map +1 -0
- package/dist/types/providers/together-ai.d.ts +118 -0
- package/dist/types/providers/together-ai.d.ts.map +1 -0
- package/dist/types/providers/xai.d.ts +119 -0
- package/dist/types/providers/xai.d.ts.map +1 -0
- package/dist/types/shared.d.ts +116 -0
- package/dist/types/shared.d.ts.map +1 -0
- package/package.json +327 -0
- package/readme.md +86 -0
|
@@ -0,0 +1,640 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI Backend Adapter
|
|
4
|
+
*
|
|
5
|
+
* Adapts Universal IR to OpenAI Chat Completions API.
|
|
6
|
+
* Handles OpenAI's in-messages system message strategy and 0-2 temperature range.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.OpenAIBackendAdapter = void 0;
|
|
12
|
+
const ai_matey_errors_1 = require("ai.matey.errors");
|
|
13
|
+
const ai_matey_utils_1 = require("ai.matey.utils");
|
|
14
|
+
const ai_matey_utils_2 = require("ai.matey.utils");
|
|
15
|
+
const ai_matey_utils_3 = require("ai.matey.utils");
|
|
16
|
+
const shared_js_1 = require("../shared.js");
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// OpenAI Backend Adapter
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Backend adapter for OpenAI Chat Completions API.
|
|
22
|
+
*/
|
|
23
|
+
class OpenAIBackendAdapter {
|
|
24
|
+
metadata;
|
|
25
|
+
config;
|
|
26
|
+
baseURL;
|
|
27
|
+
modelCache;
|
|
28
|
+
/**
|
|
29
|
+
* Create a new OpenAI backend adapter.
|
|
30
|
+
*
|
|
31
|
+
* @param config Backend adapter configuration
|
|
32
|
+
* @param metadataOverride Optional metadata to override defaults (used by subclasses)
|
|
33
|
+
*/
|
|
34
|
+
constructor(config, metadataOverride) {
|
|
35
|
+
this.config = config;
|
|
36
|
+
this.baseURL = config.baseURL || 'https://api.openai.com/v1';
|
|
37
|
+
this.modelCache = (0, ai_matey_utils_2.getModelCache)(config.modelsCacheScope || 'global');
|
|
38
|
+
// Default OpenAI metadata
|
|
39
|
+
const defaultMetadata = {
|
|
40
|
+
name: 'openai-backend',
|
|
41
|
+
version: '1.0.0',
|
|
42
|
+
provider: 'OpenAI',
|
|
43
|
+
capabilities: {
|
|
44
|
+
streaming: true,
|
|
45
|
+
multiModal: true,
|
|
46
|
+
tools: true,
|
|
47
|
+
maxContextTokens: 128000,
|
|
48
|
+
systemMessageStrategy: 'in-messages',
|
|
49
|
+
supportsMultipleSystemMessages: false, // OpenAI prefers single system message
|
|
50
|
+
supportsTemperature: true,
|
|
51
|
+
supportsTopP: true,
|
|
52
|
+
supportsTopK: false,
|
|
53
|
+
supportsSeed: true,
|
|
54
|
+
supportsFrequencyPenalty: true,
|
|
55
|
+
supportsPresencePenalty: true,
|
|
56
|
+
maxStopSequences: 4,
|
|
57
|
+
},
|
|
58
|
+
config: {
|
|
59
|
+
baseURL: this.baseURL,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
// Apply metadata overrides if provided (for subclasses)
|
|
63
|
+
this.metadata = metadataOverride
|
|
64
|
+
? {
|
|
65
|
+
...defaultMetadata,
|
|
66
|
+
...metadataOverride,
|
|
67
|
+
capabilities: {
|
|
68
|
+
...defaultMetadata.capabilities,
|
|
69
|
+
...metadataOverride.capabilities,
|
|
70
|
+
},
|
|
71
|
+
config: {
|
|
72
|
+
...defaultMetadata.config,
|
|
73
|
+
...metadataOverride.config,
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
: defaultMetadata;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Execute non-streaming chat completion request.
|
|
80
|
+
*/
|
|
81
|
+
async execute(request, signal) {
|
|
82
|
+
try {
|
|
83
|
+
// Convert IR to OpenAI format
|
|
84
|
+
const openaiRequest = this.fromIR(request);
|
|
85
|
+
// Make HTTP request
|
|
86
|
+
const startTime = Date.now();
|
|
87
|
+
const response = await this.makeRequest(openaiRequest, signal);
|
|
88
|
+
// Convert response to IR
|
|
89
|
+
const irResponse = this.toIR(response, request, Date.now() - startTime);
|
|
90
|
+
return irResponse;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Re-throw adapter errors
|
|
94
|
+
if (error instanceof ai_matey_errors_1.AdapterConversionError ||
|
|
95
|
+
error instanceof ai_matey_errors_1.NetworkError ||
|
|
96
|
+
error instanceof ai_matey_errors_1.ProviderError) {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
// Wrap unknown errors
|
|
100
|
+
throw new ai_matey_errors_1.ProviderError({
|
|
101
|
+
code: ai_matey_errors_1.ErrorCode.PROVIDER_ERROR,
|
|
102
|
+
message: `OpenAI request failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
103
|
+
isRetryable: true,
|
|
104
|
+
provenance: {
|
|
105
|
+
backend: this.metadata.name,
|
|
106
|
+
},
|
|
107
|
+
cause: error instanceof Error ? error : undefined,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Execute streaming chat completion request.
|
|
113
|
+
*/
|
|
114
|
+
async *executeStream(request, signal) {
|
|
115
|
+
try {
|
|
116
|
+
// Convert IR to OpenAI format
|
|
117
|
+
const openaiRequest = this.fromIR(request);
|
|
118
|
+
openaiRequest.stream = true;
|
|
119
|
+
// Get effective streaming configuration
|
|
120
|
+
const streamingConfig = (0, ai_matey_utils_3.mergeStreamingConfig)(this.config.streaming);
|
|
121
|
+
const effectiveMode = (0, ai_matey_utils_3.getEffectiveStreamMode)(request.streamMode, undefined, streamingConfig);
|
|
122
|
+
const includeBoth = streamingConfig.includeBoth || effectiveMode === 'accumulated';
|
|
123
|
+
// Make streaming HTTP request
|
|
124
|
+
const response = await fetch(`${this.baseURL}/chat/completions`, {
|
|
125
|
+
method: 'POST',
|
|
126
|
+
headers: this.getHeaders(),
|
|
127
|
+
body: JSON.stringify(openaiRequest),
|
|
128
|
+
signal,
|
|
129
|
+
});
|
|
130
|
+
if (!response.ok) {
|
|
131
|
+
const errorBody = await response.text();
|
|
132
|
+
throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, errorBody, {
|
|
133
|
+
backend: this.metadata.name,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (!response.body) {
|
|
137
|
+
throw new ai_matey_errors_1.StreamError({
|
|
138
|
+
code: ai_matey_errors_1.ErrorCode.STREAM_INTERRUPTED,
|
|
139
|
+
message: 'Response body is null',
|
|
140
|
+
provenance: {
|
|
141
|
+
backend: this.metadata.name,
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Parse SSE stream
|
|
146
|
+
let sequence = 0;
|
|
147
|
+
let contentBuffer = '';
|
|
148
|
+
let finishReasonReceived;
|
|
149
|
+
let usage;
|
|
150
|
+
// Yield start chunk
|
|
151
|
+
yield {
|
|
152
|
+
type: 'start',
|
|
153
|
+
sequence: sequence++,
|
|
154
|
+
metadata: {
|
|
155
|
+
...request.metadata,
|
|
156
|
+
provenance: {
|
|
157
|
+
...request.metadata.provenance,
|
|
158
|
+
backend: this.metadata.name,
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
// Read stream
|
|
163
|
+
const reader = response.body.getReader();
|
|
164
|
+
const decoder = new TextDecoder();
|
|
165
|
+
let buffer = '';
|
|
166
|
+
try {
|
|
167
|
+
while (true) {
|
|
168
|
+
const { done, value } = await reader.read();
|
|
169
|
+
if (done) {
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
buffer += decoder.decode(value, { stream: true });
|
|
173
|
+
const lines = buffer.split('\n');
|
|
174
|
+
buffer = lines.pop() || '';
|
|
175
|
+
for (const line of lines) {
|
|
176
|
+
// Skip empty lines
|
|
177
|
+
if (!line.trim()) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (line.startsWith('data: ')) {
|
|
181
|
+
const data = line.slice(6).trim();
|
|
182
|
+
if (data === '[DONE]') {
|
|
183
|
+
// Stream complete - yield done chunk if not already sent
|
|
184
|
+
if (!finishReasonReceived) {
|
|
185
|
+
const message = {
|
|
186
|
+
role: 'assistant',
|
|
187
|
+
content: contentBuffer,
|
|
188
|
+
};
|
|
189
|
+
yield {
|
|
190
|
+
type: 'done',
|
|
191
|
+
sequence: sequence++,
|
|
192
|
+
finishReason: 'stop',
|
|
193
|
+
usage,
|
|
194
|
+
message,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
const chunk = JSON.parse(data);
|
|
201
|
+
// Validate chunk structure
|
|
202
|
+
if (!chunk.choices || chunk.choices.length === 0) {
|
|
203
|
+
console.warn('Invalid chunk structure: no choices', chunk);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const choice = chunk.choices[0];
|
|
207
|
+
if (!choice) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
// Content delta
|
|
211
|
+
if (choice.delta.content) {
|
|
212
|
+
contentBuffer += choice.delta.content;
|
|
213
|
+
// Build content chunk with optional accumulated field
|
|
214
|
+
const contentChunk = {
|
|
215
|
+
type: 'content',
|
|
216
|
+
sequence: sequence++,
|
|
217
|
+
delta: choice.delta.content,
|
|
218
|
+
role: 'assistant',
|
|
219
|
+
};
|
|
220
|
+
// Add accumulated field if configured
|
|
221
|
+
if (includeBoth) {
|
|
222
|
+
contentChunk.accumulated = contentBuffer;
|
|
223
|
+
}
|
|
224
|
+
yield contentChunk;
|
|
225
|
+
}
|
|
226
|
+
// Tool calls delta (not implemented yet - Phase 5)
|
|
227
|
+
if (choice.delta.tool_calls) {
|
|
228
|
+
// TODO: Handle tool call deltas in Phase 5
|
|
229
|
+
console.warn('Tool calls delta received but not yet implemented');
|
|
230
|
+
}
|
|
231
|
+
// Finish reason
|
|
232
|
+
if (choice.finish_reason && !finishReasonReceived) {
|
|
233
|
+
finishReasonReceived = this.mapFinishReason(choice.finish_reason);
|
|
234
|
+
// Build final message
|
|
235
|
+
const message = {
|
|
236
|
+
role: 'assistant',
|
|
237
|
+
content: contentBuffer,
|
|
238
|
+
};
|
|
239
|
+
yield {
|
|
240
|
+
type: 'done',
|
|
241
|
+
sequence: sequence++,
|
|
242
|
+
finishReason: finishReasonReceived,
|
|
243
|
+
usage,
|
|
244
|
+
message,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (parseError) {
|
|
249
|
+
// Log parse errors but continue streaming
|
|
250
|
+
console.warn('Failed to parse SSE chunk:', data, parseError);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else if (line.startsWith('event:')) {
|
|
255
|
+
// OpenAI doesn't typically use event: lines, but handle them
|
|
256
|
+
const eventType = line.slice(6).trim();
|
|
257
|
+
if (eventType === 'error') {
|
|
258
|
+
// Error event type
|
|
259
|
+
console.warn('Error event type detected');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// If stream ended without finish_reason, yield a done chunk
|
|
265
|
+
if (!finishReasonReceived) {
|
|
266
|
+
const message = {
|
|
267
|
+
role: 'assistant',
|
|
268
|
+
content: contentBuffer,
|
|
269
|
+
};
|
|
270
|
+
yield {
|
|
271
|
+
type: 'done',
|
|
272
|
+
sequence: sequence++,
|
|
273
|
+
finishReason: 'stop',
|
|
274
|
+
usage,
|
|
275
|
+
message,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
finally {
|
|
280
|
+
reader.releaseLock();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
// Yield error chunk
|
|
285
|
+
yield {
|
|
286
|
+
type: 'error',
|
|
287
|
+
sequence: 0,
|
|
288
|
+
error: {
|
|
289
|
+
code: error instanceof Error ? error.name : 'UNKNOWN_ERROR',
|
|
290
|
+
message: error instanceof Error ? error.message : String(error),
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Health check to verify OpenAI API is accessible.
|
|
297
|
+
*/
|
|
298
|
+
async healthCheck() {
|
|
299
|
+
try {
|
|
300
|
+
const response = await fetch(`${this.baseURL}/models`, {
|
|
301
|
+
method: 'GET',
|
|
302
|
+
headers: this.getHeaders(),
|
|
303
|
+
signal: AbortSignal.timeout(5000),
|
|
304
|
+
});
|
|
305
|
+
return response.ok;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Estimate cost for a request (rough heuristic).
|
|
313
|
+
*/
|
|
314
|
+
estimateCost(request) {
|
|
315
|
+
// Use shared token estimation utility
|
|
316
|
+
const estimatedInputTokens = (0, shared_js_1.estimateTokens)(request);
|
|
317
|
+
// Rough cost: $0.01 per 1000 tokens (varies by model)
|
|
318
|
+
return Promise.resolve((estimatedInputTokens / 1000) * 0.01);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* List available models from OpenAI.
|
|
322
|
+
*
|
|
323
|
+
* This method supports three sources:
|
|
324
|
+
* 1. Static config (config.models) - highest priority
|
|
325
|
+
* 2. Cache (if enabled and not expired)
|
|
326
|
+
* 3. Remote API (/v1/models endpoint)
|
|
327
|
+
*/
|
|
328
|
+
async listModels(options) {
|
|
329
|
+
try {
|
|
330
|
+
// 1. Check static config override first
|
|
331
|
+
if (this.config.models && !options?.forceRefresh) {
|
|
332
|
+
return (0, shared_js_1.buildStaticResult)(this.config.models, 'openai');
|
|
333
|
+
}
|
|
334
|
+
// 2. Check cache
|
|
335
|
+
if (this.config.cacheModels !== false && !options?.forceRefresh) {
|
|
336
|
+
const cached = this.modelCache.get(this.metadata.name);
|
|
337
|
+
if (cached) {
|
|
338
|
+
return (0, shared_js_1.applyModelFilter)(cached, options?.filter);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// 3. Fetch from OpenAI API
|
|
342
|
+
const endpoint = this.config.modelsEndpoint || `${this.baseURL}/models`;
|
|
343
|
+
const response = await fetch(endpoint, {
|
|
344
|
+
method: 'GET',
|
|
345
|
+
headers: this.getHeaders(),
|
|
346
|
+
signal: AbortSignal.timeout(this.config.timeout || 30000),
|
|
347
|
+
});
|
|
348
|
+
if (!response.ok) {
|
|
349
|
+
throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, await response.text(), {
|
|
350
|
+
backend: this.metadata.name,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
const data = (await response.json());
|
|
354
|
+
// 4. Transform to AIModel format
|
|
355
|
+
const models = data.data.map((model) => this.transformOpenAIModel(model));
|
|
356
|
+
// 5. Build result
|
|
357
|
+
const result = {
|
|
358
|
+
models,
|
|
359
|
+
source: 'remote',
|
|
360
|
+
fetchedAt: Date.now(),
|
|
361
|
+
isComplete: true,
|
|
362
|
+
};
|
|
363
|
+
// 6. Cache the result
|
|
364
|
+
if (this.config.cacheModels !== false) {
|
|
365
|
+
const ttl = this.config.modelsCacheTTL || 3600000; // 1 hour default
|
|
366
|
+
this.modelCache.set(this.metadata.name, result, ttl);
|
|
367
|
+
}
|
|
368
|
+
// 7. Apply filter if requested
|
|
369
|
+
return (0, shared_js_1.applyModelFilter)(result, options?.filter);
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
// If we have a cached result, return it as fallback
|
|
373
|
+
if (!options?.forceRefresh) {
|
|
374
|
+
const cached = this.modelCache.get(this.metadata.name);
|
|
375
|
+
if (cached) {
|
|
376
|
+
return cached;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// Re-throw known errors
|
|
380
|
+
if (error instanceof ai_matey_errors_1.ProviderError || error instanceof ai_matey_errors_1.NetworkError) {
|
|
381
|
+
throw error;
|
|
382
|
+
}
|
|
383
|
+
// Wrap unknown errors
|
|
384
|
+
throw new ai_matey_errors_1.ProviderError({
|
|
385
|
+
code: ai_matey_errors_1.ErrorCode.PROVIDER_ERROR,
|
|
386
|
+
message: `Failed to list OpenAI models: ${error instanceof Error ? error.message : String(error)}`,
|
|
387
|
+
isRetryable: true,
|
|
388
|
+
provenance: {
|
|
389
|
+
backend: this.metadata.name,
|
|
390
|
+
},
|
|
391
|
+
cause: error instanceof Error ? error : undefined,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Invalidate the cached model list.
|
|
397
|
+
*
|
|
398
|
+
* Forces the next listModels() call to fetch fresh data from the API
|
|
399
|
+
* (unless static models are configured).
|
|
400
|
+
*
|
|
401
|
+
* @returns This adapter for method chaining
|
|
402
|
+
*/
|
|
403
|
+
invalidateModelCache() {
|
|
404
|
+
this.modelCache.invalidate(this.metadata.name);
|
|
405
|
+
return this;
|
|
406
|
+
}
|
|
407
|
+
// ==========================================================================
|
|
408
|
+
// Private Helper Methods
|
|
409
|
+
// ==========================================================================
|
|
410
|
+
/**
|
|
411
|
+
* Convert IR request to OpenAI format.
|
|
412
|
+
*
|
|
413
|
+
* Public method for testing and debugging - see what will be sent to OpenAI.
|
|
414
|
+
*/
|
|
415
|
+
fromIR(request) {
|
|
416
|
+
try {
|
|
417
|
+
// Normalize system messages (OpenAI uses in-messages strategy)
|
|
418
|
+
const { messages } = (0, ai_matey_utils_1.normalizeSystemMessages)(request.messages, this.metadata.capabilities.systemMessageStrategy, this.metadata.capabilities.supportsMultipleSystemMessages);
|
|
419
|
+
// Convert messages
|
|
420
|
+
const openaiMessages = messages.map((msg) => this.convertMessageToOpenAI(msg));
|
|
421
|
+
// Build OpenAI request
|
|
422
|
+
const openaiRequest = {
|
|
423
|
+
model: request.parameters?.model || this.config.defaultModel || 'gpt-3.5-turbo',
|
|
424
|
+
messages: openaiMessages,
|
|
425
|
+
temperature: request.parameters?.temperature,
|
|
426
|
+
max_tokens: request.parameters?.maxTokens,
|
|
427
|
+
top_p: request.parameters?.topP,
|
|
428
|
+
frequency_penalty: request.parameters?.frequencyPenalty,
|
|
429
|
+
presence_penalty: request.parameters?.presencePenalty,
|
|
430
|
+
stop: request.parameters?.stopSequences ? [...request.parameters.stopSequences] : undefined,
|
|
431
|
+
stream: request.stream,
|
|
432
|
+
user: request.parameters?.user,
|
|
433
|
+
seed: request.parameters?.seed,
|
|
434
|
+
};
|
|
435
|
+
return openaiRequest;
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
throw new ai_matey_errors_1.AdapterConversionError({
|
|
439
|
+
code: ai_matey_errors_1.ErrorCode.ADAPTER_CONVERSION_ERROR,
|
|
440
|
+
message: `Failed to convert IR to OpenAI format: ${error instanceof Error ? error.message : String(error)}`,
|
|
441
|
+
provenance: {
|
|
442
|
+
backend: this.metadata.name,
|
|
443
|
+
},
|
|
444
|
+
cause: error instanceof Error ? error : undefined,
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Convert OpenAI response to IR format.
|
|
450
|
+
*
|
|
451
|
+
* Public method for testing and debugging - parse OpenAI responses manually.
|
|
452
|
+
*/
|
|
453
|
+
toIR(response, originalRequest, latencyMs) {
|
|
454
|
+
try {
|
|
455
|
+
const choice = response.choices[0];
|
|
456
|
+
if (!choice) {
|
|
457
|
+
throw new Error('No choices in OpenAI response');
|
|
458
|
+
}
|
|
459
|
+
// Convert message
|
|
460
|
+
const message = {
|
|
461
|
+
role: 'assistant',
|
|
462
|
+
content: this.convertMessageContentFromOpenAI(choice.message.content),
|
|
463
|
+
};
|
|
464
|
+
// Map finish reason
|
|
465
|
+
const finishReason = this.mapFinishReason(choice.finish_reason || 'stop');
|
|
466
|
+
// Build IR response
|
|
467
|
+
const irResponse = {
|
|
468
|
+
message,
|
|
469
|
+
finishReason,
|
|
470
|
+
usage: response.usage
|
|
471
|
+
? {
|
|
472
|
+
promptTokens: response.usage.prompt_tokens,
|
|
473
|
+
completionTokens: response.usage.completion_tokens,
|
|
474
|
+
totalTokens: response.usage.total_tokens,
|
|
475
|
+
}
|
|
476
|
+
: undefined,
|
|
477
|
+
metadata: {
|
|
478
|
+
...originalRequest.metadata,
|
|
479
|
+
providerResponseId: response.id,
|
|
480
|
+
provenance: {
|
|
481
|
+
...originalRequest.metadata.provenance,
|
|
482
|
+
backend: this.metadata.name,
|
|
483
|
+
},
|
|
484
|
+
custom: {
|
|
485
|
+
...originalRequest.metadata.custom,
|
|
486
|
+
openaiResponseId: response.id,
|
|
487
|
+
latencyMs,
|
|
488
|
+
},
|
|
489
|
+
},
|
|
490
|
+
raw: response,
|
|
491
|
+
};
|
|
492
|
+
return irResponse;
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
throw new ai_matey_errors_1.AdapterConversionError({
|
|
496
|
+
code: ai_matey_errors_1.ErrorCode.ADAPTER_CONVERSION_ERROR,
|
|
497
|
+
message: `Failed to convert OpenAI response to IR: ${error instanceof Error ? error.message : String(error)}`,
|
|
498
|
+
provenance: {
|
|
499
|
+
backend: this.metadata.name,
|
|
500
|
+
},
|
|
501
|
+
cause: error instanceof Error ? error : undefined,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Convert IR message to OpenAI message.
|
|
507
|
+
*/
|
|
508
|
+
convertMessageToOpenAI(message) {
|
|
509
|
+
// Convert content
|
|
510
|
+
let content;
|
|
511
|
+
if (typeof message.content === 'string') {
|
|
512
|
+
content = message.content;
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
// Convert content blocks
|
|
516
|
+
content = message.content.map((block) => {
|
|
517
|
+
switch (block.type) {
|
|
518
|
+
case 'text':
|
|
519
|
+
return { type: 'text', text: block.text };
|
|
520
|
+
case 'image':
|
|
521
|
+
if (block.source.type === 'url') {
|
|
522
|
+
return {
|
|
523
|
+
type: 'image_url',
|
|
524
|
+
image_url: { url: block.source.url },
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
// Convert base64 to data URL
|
|
529
|
+
const dataUrl = `data:${block.source.mediaType};base64,${block.source.data}`;
|
|
530
|
+
return {
|
|
531
|
+
type: 'image_url',
|
|
532
|
+
image_url: { url: dataUrl },
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
default:
|
|
536
|
+
// Fallback to text for unsupported types
|
|
537
|
+
return { type: 'text', text: JSON.stringify(block) };
|
|
538
|
+
}
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
return {
|
|
542
|
+
role: message.role,
|
|
543
|
+
content,
|
|
544
|
+
name: message.name,
|
|
545
|
+
};
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Convert OpenAI message content to string.
|
|
549
|
+
*/
|
|
550
|
+
convertMessageContentFromOpenAI(content) {
|
|
551
|
+
if (typeof content === 'string') {
|
|
552
|
+
return content;
|
|
553
|
+
}
|
|
554
|
+
// Extract text from content blocks
|
|
555
|
+
return content
|
|
556
|
+
.map((block) => {
|
|
557
|
+
if (block.type === 'text') {
|
|
558
|
+
return block.text;
|
|
559
|
+
}
|
|
560
|
+
return '';
|
|
561
|
+
})
|
|
562
|
+
.join('');
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Map OpenAI finish reason to IR finish reason.
|
|
566
|
+
*/
|
|
567
|
+
mapFinishReason(finishReason) {
|
|
568
|
+
switch (finishReason) {
|
|
569
|
+
case 'stop':
|
|
570
|
+
return 'stop';
|
|
571
|
+
case 'length':
|
|
572
|
+
return 'length';
|
|
573
|
+
case 'tool_calls':
|
|
574
|
+
return 'tool_calls';
|
|
575
|
+
case 'content_filter':
|
|
576
|
+
return 'content_filter';
|
|
577
|
+
default:
|
|
578
|
+
return 'stop';
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Make HTTP request to OpenAI API.
|
|
583
|
+
*/
|
|
584
|
+
async makeRequest(request, signal) {
|
|
585
|
+
try {
|
|
586
|
+
const response = await fetch(`${this.baseURL}/chat/completions`, {
|
|
587
|
+
method: 'POST',
|
|
588
|
+
headers: this.getHeaders(),
|
|
589
|
+
body: JSON.stringify(request),
|
|
590
|
+
signal,
|
|
591
|
+
});
|
|
592
|
+
if (!response.ok) {
|
|
593
|
+
const errorBody = await response.text();
|
|
594
|
+
throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, errorBody, {
|
|
595
|
+
backend: this.metadata.name,
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
const data = (await response.json());
|
|
599
|
+
return data;
|
|
600
|
+
}
|
|
601
|
+
catch (error) {
|
|
602
|
+
if (error instanceof TypeError && error.message.includes('fetch')) {
|
|
603
|
+
throw new ai_matey_errors_1.NetworkError({
|
|
604
|
+
code: ai_matey_errors_1.ErrorCode.NETWORK_ERROR,
|
|
605
|
+
message: `Network request failed: ${error.message}`,
|
|
606
|
+
provenance: {
|
|
607
|
+
backend: this.metadata.name,
|
|
608
|
+
},
|
|
609
|
+
cause: error,
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
throw error;
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Get HTTP headers for OpenAI API requests.
|
|
617
|
+
*/
|
|
618
|
+
getHeaders() {
|
|
619
|
+
return {
|
|
620
|
+
'Content-Type': 'application/json',
|
|
621
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
622
|
+
...this.config.headers,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
/**
|
|
626
|
+
* Transform OpenAI model object to AIModel.
|
|
627
|
+
*/
|
|
628
|
+
transformOpenAIModel(model) {
|
|
629
|
+
return {
|
|
630
|
+
id: model.id,
|
|
631
|
+
name: model.id, // OpenAI doesn't provide separate display names
|
|
632
|
+
created: new Date(model.created * 1000).toISOString(),
|
|
633
|
+
ownedBy: model.owned_by,
|
|
634
|
+
// Note: OpenAI /models endpoint doesn't include capability info
|
|
635
|
+
// This would need to be enriched from a static mapping if needed
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
exports.OpenAIBackendAdapter = OpenAIBackendAdapter;
|
|
640
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|