@animalabs/membrane 0.5.69 → 0.5.71

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 (37) hide show
  1. package/dist/formatters/index.d.ts +1 -0
  2. package/dist/formatters/index.d.ts.map +1 -1
  3. package/dist/formatters/index.js +1 -0
  4. package/dist/formatters/index.js.map +1 -1
  5. package/dist/formatters/native.d.ts.map +1 -1
  6. package/dist/formatters/native.js +6 -0
  7. package/dist/formatters/native.js.map +1 -1
  8. package/dist/formatters/openai-responses.d.ts +23 -0
  9. package/dist/formatters/openai-responses.d.ts.map +1 -0
  10. package/dist/formatters/openai-responses.js +188 -0
  11. package/dist/formatters/openai-responses.js.map +1 -0
  12. package/dist/membrane.d.ts.map +1 -1
  13. package/dist/membrane.js +29 -2
  14. package/dist/membrane.js.map +1 -1
  15. package/dist/providers/anthropic.d.ts.map +1 -1
  16. package/dist/providers/anthropic.js +32 -3
  17. package/dist/providers/anthropic.js.map +1 -1
  18. package/dist/providers/index.d.ts +1 -0
  19. package/dist/providers/index.d.ts.map +1 -1
  20. package/dist/providers/index.js +1 -0
  21. package/dist/providers/index.js.map +1 -1
  22. package/dist/providers/openai-responses-api.d.ts +129 -0
  23. package/dist/providers/openai-responses-api.d.ts.map +1 -0
  24. package/dist/providers/openai-responses-api.js +479 -0
  25. package/dist/providers/openai-responses-api.js.map +1 -0
  26. package/dist/types/content.d.ts +26 -0
  27. package/dist/types/content.d.ts.map +1 -1
  28. package/dist/types/content.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/formatters/index.ts +4 -0
  31. package/src/formatters/native.ts +5 -0
  32. package/src/formatters/openai-responses.ts +220 -0
  33. package/src/membrane.ts +28 -2
  34. package/src/providers/anthropic.ts +32 -4
  35. package/src/providers/index.ts +11 -0
  36. package/src/providers/openai-responses-api.ts +653 -0
  37. package/src/types/content.ts +26 -0
@@ -0,0 +1,129 @@
1
+ /**
2
+ * OpenAI Responses API adapter.
3
+ *
4
+ * This is intentionally separate from `openai-responses.ts`. Despite its name,
5
+ * that compatibility-sensitive adapter targets the Images API.
6
+ *
7
+ * This adapter is stateless and provider-native: `ProviderRequest.messages` is
8
+ * sent verbatim as the Responses API `input` item array, and `outputItems`
9
+ * exposes the response's ordered output array verbatim for the next turn.
10
+ */
11
+ import type { ContentBlock, ProviderAdapter, ProviderRequest, ProviderRequestOptions, ProviderResponse, StreamCallbacks } from '../types/index.js';
12
+ export interface OpenAIResponsesInputItem {
13
+ type?: string;
14
+ id?: string | null;
15
+ [key: string]: unknown;
16
+ }
17
+ export interface OpenAIResponsesOutputItem {
18
+ type: string;
19
+ id?: string;
20
+ [key: string]: unknown;
21
+ }
22
+ export interface OpenAIResponsesAPIRequest {
23
+ model: string;
24
+ input: OpenAIResponsesInputItem[];
25
+ store: false;
26
+ include: string[];
27
+ instructions?: string;
28
+ max_output_tokens?: number;
29
+ temperature?: number;
30
+ top_p?: number;
31
+ tools?: unknown[];
32
+ stream?: boolean;
33
+ [key: string]: unknown;
34
+ }
35
+ export interface OpenAIResponsesAPIResponse {
36
+ id?: string;
37
+ object?: string;
38
+ model?: string;
39
+ output: OpenAIResponsesOutputItem[];
40
+ status?: string;
41
+ incomplete_details?: {
42
+ reason?: string | null;
43
+ } | null;
44
+ error?: {
45
+ code?: string | null;
46
+ message?: string | null;
47
+ } | null;
48
+ usage?: {
49
+ input_tokens?: number;
50
+ output_tokens?: number;
51
+ total_tokens?: number;
52
+ input_tokens_details?: {
53
+ cached_tokens?: number;
54
+ } | null;
55
+ output_tokens_details?: {
56
+ reasoning_tokens?: number;
57
+ } | null;
58
+ } | null;
59
+ [key: string]: unknown;
60
+ }
61
+ export type OpenAIResponsesAPIContentBlock = (ContentBlock & {
62
+ itemId?: string;
63
+ outputIndex: number;
64
+ contentIndex?: number;
65
+ phase?: 'commentary' | 'final_answer' | null;
66
+ rawItem?: OpenAIResponsesOutputItem;
67
+ }) | {
68
+ type: 'compaction';
69
+ id?: string;
70
+ encryptedContent: string;
71
+ createdBy?: string;
72
+ outputIndex: number;
73
+ rawItem: OpenAIResponsesOutputItem;
74
+ } | {
75
+ type: 'openai_response_item';
76
+ itemId?: string;
77
+ itemType: string;
78
+ outputIndex: number;
79
+ rawItem: OpenAIResponsesOutputItem;
80
+ };
81
+ export interface OpenAIResponsesAPIProviderResponse extends Omit<ProviderResponse, 'content' | 'raw'> {
82
+ content: OpenAIResponsesAPIContentBlock[];
83
+ /** Ordered, provider-native output items. Append these verbatim to the next input. */
84
+ outputItems: OpenAIResponsesOutputItem[];
85
+ raw: OpenAIResponsesAPIResponse | Record<string, unknown>;
86
+ }
87
+ export interface OpenAIResponsesAPIAdapterConfig {
88
+ /** API key (defaults to OPENAI_API_KEY). */
89
+ apiKey?: string;
90
+ /** API base URL (default: https://api.openai.com/v1). */
91
+ baseURL?: string;
92
+ /** Optional OpenAI organization ID. */
93
+ organization?: string;
94
+ /** Optional OpenAI project ID. */
95
+ project?: string;
96
+ /** Default maximum output tokens when the request does not provide one. */
97
+ defaultMaxTokens?: number;
98
+ /** Additional HTTP headers. */
99
+ extraHeaders?: Record<string, string>;
100
+ }
101
+ export declare class OpenAIResponsesAPIAdapter implements ProviderAdapter {
102
+ readonly name = "openai-responses-api";
103
+ private readonly apiKey;
104
+ private readonly baseURL;
105
+ private readonly organization?;
106
+ private readonly project?;
107
+ private readonly defaultMaxTokens;
108
+ private readonly extraHeaders;
109
+ constructor(config?: OpenAIResponsesAPIAdapterConfig);
110
+ supportsModel(_modelId: string): boolean;
111
+ complete(request: ProviderRequest, options?: ProviderRequestOptions): Promise<OpenAIResponsesAPIProviderResponse>;
112
+ stream(request: ProviderRequest, callbacks: StreamCallbacks, options?: ProviderRequestOptions): Promise<OpenAIResponsesAPIProviderResponse>;
113
+ private getHeaders;
114
+ private buildRequest;
115
+ private mergeEncryptedReasoningInclude;
116
+ private flattenInstructions;
117
+ private convertTools;
118
+ private parseResponse;
119
+ private outputToContent;
120
+ private extractReasoningText;
121
+ private asPhase;
122
+ private getStopReason;
123
+ private applyTextDelta;
124
+ private applyFunctionArgumentsDelta;
125
+ private assertSuccessfulHTTPResponse;
126
+ private assertSuccessfulAPIResponse;
127
+ private handleError;
128
+ }
129
+ //# sourceMappingURL=openai-responses-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses-api.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,479 @@
1
+ /**
2
+ * OpenAI Responses API adapter.
3
+ *
4
+ * This is intentionally separate from `openai-responses.ts`. Despite its name,
5
+ * that compatibility-sensitive adapter targets the Images API.
6
+ *
7
+ * This adapter is stateless and provider-native: `ProviderRequest.messages` is
8
+ * sent verbatim as the Responses API `input` item array, and `outputItems`
9
+ * exposes the response's ordered output array verbatim for the next turn.
10
+ */
11
+ import { MembraneError, abortError, authError, contextLengthError, networkError, rateLimitError, serverError, } from '../types/index.js';
12
+ import { createCombinedSignal, SSELineParser, safeParseJson } from './utils.js';
13
+ // ============================================================================
14
+ // Adapter
15
+ // ============================================================================
16
+ export class OpenAIResponsesAPIAdapter {
17
+ name = 'openai-responses-api';
18
+ apiKey;
19
+ baseURL;
20
+ organization;
21
+ project;
22
+ defaultMaxTokens;
23
+ extraHeaders;
24
+ constructor(config = {}) {
25
+ this.apiKey = config.apiKey ?? process.env.OPENAI_API_KEY ?? '';
26
+ this.baseURL = (config.baseURL ?? 'https://api.openai.com/v1').replace(/\/$/, '');
27
+ this.organization = config.organization;
28
+ this.project = config.project;
29
+ this.defaultMaxTokens = config.defaultMaxTokens ?? 4096;
30
+ this.extraHeaders = config.extraHeaders ?? {};
31
+ if (!this.apiKey) {
32
+ throw new Error('OpenAI API key not provided');
33
+ }
34
+ }
35
+ supportsModel(_modelId) {
36
+ return true;
37
+ }
38
+ async complete(request, options) {
39
+ const responsesRequest = this.buildRequest(request);
40
+ options?.onRequest?.(responsesRequest);
41
+ const { signal, cleanup } = createCombinedSignal(options?.signal, options?.timeoutMs);
42
+ try {
43
+ const response = await fetch(`${this.baseURL}/responses`, {
44
+ method: 'POST',
45
+ headers: this.getHeaders(),
46
+ body: JSON.stringify(responsesRequest),
47
+ signal,
48
+ });
49
+ await this.assertSuccessfulHTTPResponse(response);
50
+ const data = (await response.json());
51
+ this.assertSuccessfulAPIResponse(data);
52
+ return this.parseResponse(data, request.model, responsesRequest);
53
+ }
54
+ catch (error) {
55
+ throw this.handleError(error, responsesRequest);
56
+ }
57
+ finally {
58
+ cleanup?.();
59
+ }
60
+ }
61
+ async stream(request, callbacks, options) {
62
+ const responsesRequest = this.buildRequest(request);
63
+ responsesRequest.stream = true;
64
+ options?.onRequest?.(responsesRequest);
65
+ const { signal, cleanup } = createCombinedSignal(options?.signal, options?.timeoutMs);
66
+ try {
67
+ const response = await fetch(`${this.baseURL}/responses`, {
68
+ method: 'POST',
69
+ headers: this.getHeaders(),
70
+ body: JSON.stringify(responsesRequest),
71
+ signal,
72
+ });
73
+ await this.assertSuccessfulHTTPResponse(response);
74
+ const reader = response.body?.getReader();
75
+ if (!reader)
76
+ throw new Error('OpenAI Responses API returned no response body');
77
+ const decoder = new TextDecoder();
78
+ const parser = new SSELineParser();
79
+ const events = [];
80
+ const output = [];
81
+ let terminalResponse;
82
+ const processData = (data) => {
83
+ if (!data || data === '[DONE]')
84
+ return;
85
+ let event;
86
+ try {
87
+ event = JSON.parse(data);
88
+ }
89
+ catch {
90
+ return;
91
+ }
92
+ events.push(event);
93
+ if (event.type === 'response.output_text.delta') {
94
+ const delta = typeof event.delta === 'string' ? event.delta : '';
95
+ if (delta)
96
+ callbacks.onChunk(delta);
97
+ this.applyTextDelta(output, event);
98
+ }
99
+ else if (event.type === 'response.function_call_arguments.delta') {
100
+ this.applyFunctionArgumentsDelta(output, event);
101
+ }
102
+ else if (event.type === 'response.output_item.added' ||
103
+ event.type === 'response.output_item.done') {
104
+ if (Number.isInteger(event.output_index) && event.item) {
105
+ output[event.output_index] = event.item;
106
+ }
107
+ }
108
+ else if (event.type === 'response.completed' ||
109
+ event.type === 'response.incomplete') {
110
+ terminalResponse = event.response;
111
+ }
112
+ else if (event.type === 'response.failed') {
113
+ const failed = event.response;
114
+ throw new Error(`OpenAI Responses API error: ${failed?.error?.code ?? 'response_failed'} ` +
115
+ `${failed?.error?.message ?? 'Response failed'}`);
116
+ }
117
+ else if (event.type === 'error') {
118
+ throw new Error(`OpenAI Responses API error: ${event.code ?? 'stream_error'} ` +
119
+ `${event.message ?? 'Streaming request failed'}`);
120
+ }
121
+ };
122
+ while (true) {
123
+ const { done, value } = await reader.read();
124
+ if (done)
125
+ break;
126
+ for (const data of parser.feed(decoder.decode(value, { stream: true }))) {
127
+ processData(data);
128
+ }
129
+ }
130
+ for (const data of parser.feed(decoder.decode()))
131
+ processData(data);
132
+ for (const data of parser.flush())
133
+ processData(data);
134
+ // A well-formed stream always ends with a terminal event
135
+ // (response.completed / response.incomplete; response.failed and error
136
+ // throw above). Reaching EOF without one means the connection was
137
+ // dropped mid-stream (proxy/LB close, early termination). Fabricating a
138
+ // 'completed' response here would persist a silently truncated turn
139
+ // with end_turn/zero usage — signal a retryable stream failure instead.
140
+ if (!terminalResponse) {
141
+ throw networkError('OpenAI Responses API stream ended before a terminal response event ' +
142
+ `(connection dropped after ${events.length} events)`, undefined, responsesRequest);
143
+ }
144
+ this.assertSuccessfulAPIResponse(terminalResponse);
145
+ const parsed = this.parseResponse(terminalResponse, request.model, responsesRequest);
146
+ parsed.content.forEach((block, index) => callbacks.onContentBlock?.(index, block));
147
+ return parsed;
148
+ }
149
+ catch (error) {
150
+ throw this.handleError(error, responsesRequest);
151
+ }
152
+ finally {
153
+ cleanup?.();
154
+ }
155
+ }
156
+ // --------------------------------------------------------------------------
157
+ // Request construction
158
+ // --------------------------------------------------------------------------
159
+ getHeaders() {
160
+ return {
161
+ Authorization: `Bearer ${this.apiKey}`,
162
+ 'Content-Type': 'application/json',
163
+ ...(this.organization ? { 'OpenAI-Organization': this.organization } : {}),
164
+ ...(this.project ? { 'OpenAI-Project': this.project } : {}),
165
+ ...this.extraHeaders,
166
+ };
167
+ }
168
+ buildRequest(request) {
169
+ if (!Array.isArray(request.messages)) {
170
+ throw new Error('OpenAI Responses API input must be a provider-native input-item array');
171
+ }
172
+ const responsesRequest = {
173
+ model: request.model,
174
+ input: request.messages,
175
+ store: false,
176
+ include: ['reasoning.encrypted_content'],
177
+ max_output_tokens: request.maxTokens || this.defaultMaxTokens,
178
+ };
179
+ const instructions = this.flattenInstructions(request.system);
180
+ if (instructions)
181
+ responsesRequest.instructions = instructions;
182
+ if (request.temperature !== undefined)
183
+ responsesRequest.temperature = request.temperature;
184
+ if (request.topP !== undefined)
185
+ responsesRequest.top_p = request.topP;
186
+ if (request.tools?.length)
187
+ responsesRequest.tools = this.convertTools(request.tools);
188
+ if (request.extra) {
189
+ const { normalizedMessages, prompt, messages, input, store, stream, include, ...extra } = request.extra;
190
+ void normalizedMessages;
191
+ void prompt;
192
+ void messages;
193
+ void input;
194
+ void store;
195
+ void stream;
196
+ Object.assign(responsesRequest, extra);
197
+ responsesRequest.include = this.mergeEncryptedReasoningInclude(include);
198
+ }
199
+ // These invariants define the adapter's stateless native-item contract and
200
+ // cannot be overridden through provider params.
201
+ responsesRequest.input = request.messages;
202
+ responsesRequest.store = false;
203
+ responsesRequest.include = this.mergeEncryptedReasoningInclude(responsesRequest.include);
204
+ return responsesRequest;
205
+ }
206
+ mergeEncryptedReasoningInclude(value) {
207
+ const include = Array.isArray(value)
208
+ ? value.filter((item) => typeof item === 'string')
209
+ : [];
210
+ return include.includes('reasoning.encrypted_content')
211
+ ? include
212
+ : [...include, 'reasoning.encrypted_content'];
213
+ }
214
+ flattenInstructions(system) {
215
+ if (typeof system === 'string')
216
+ return system || undefined;
217
+ if (!Array.isArray(system))
218
+ return undefined;
219
+ const text = system
220
+ .map((block) => block?.type === 'text' || block?.type === 'input_text' ? block.text : undefined)
221
+ .filter((value) => typeof value === 'string' && value.length > 0)
222
+ .join('\n');
223
+ return text || undefined;
224
+ }
225
+ convertTools(tools) {
226
+ return tools.map((rawTool) => {
227
+ if (rawTool?.type && rawTool.type !== 'function')
228
+ return rawTool;
229
+ // Responses function definitions are flat. Accept them verbatim, while
230
+ // also adapting Membrane and Chat Completions function schemas.
231
+ if (rawTool?.type === 'function' && rawTool.name)
232
+ return rawTool;
233
+ if (rawTool?.type === 'function' && rawTool.function) {
234
+ return { type: 'function', ...rawTool.function };
235
+ }
236
+ return {
237
+ type: 'function',
238
+ name: rawTool?.name,
239
+ description: rawTool?.description,
240
+ parameters: rawTool?.parameters ??
241
+ rawTool?.inputSchema ??
242
+ rawTool?.input_schema ??
243
+ { type: 'object', properties: {} },
244
+ ...(rawTool?.strict !== undefined ? { strict: rawTool.strict } : {}),
245
+ };
246
+ });
247
+ }
248
+ // --------------------------------------------------------------------------
249
+ // Response conversion
250
+ // --------------------------------------------------------------------------
251
+ parseResponse(response, requestedModel, rawRequest) {
252
+ const outputItems = Array.isArray(response.output) ? response.output : [];
253
+ const content = this.outputToContent(outputItems);
254
+ const cachedTokens = response.usage?.input_tokens_details?.cached_tokens ?? 0;
255
+ return {
256
+ content,
257
+ outputItems,
258
+ stopReason: this.getStopReason(response, outputItems),
259
+ stopSequence: undefined,
260
+ usage: {
261
+ inputTokens: response.usage?.input_tokens ?? 0,
262
+ outputTokens: response.usage?.output_tokens ?? 0,
263
+ cacheReadTokens: cachedTokens > 0 ? cachedTokens : undefined,
264
+ },
265
+ model: response.model ?? requestedModel,
266
+ rawRequest,
267
+ raw: response,
268
+ };
269
+ }
270
+ outputToContent(items) {
271
+ const content = [];
272
+ items.forEach((item, outputIndex) => {
273
+ if (item.type === 'message') {
274
+ const phase = this.asPhase(item.phase);
275
+ const messageContent = Array.isArray(item.content) ? item.content : [];
276
+ messageContent.forEach((part, contentIndex) => {
277
+ if (part?.type === 'output_text' && typeof part.text === 'string') {
278
+ content.push({
279
+ type: 'text',
280
+ text: part.text,
281
+ itemId: item.id,
282
+ outputIndex,
283
+ contentIndex,
284
+ phase,
285
+ rawItem: item,
286
+ });
287
+ }
288
+ else if (part?.type === 'refusal' && typeof part.refusal === 'string') {
289
+ content.push({
290
+ type: 'text',
291
+ text: part.refusal,
292
+ itemId: item.id,
293
+ outputIndex,
294
+ contentIndex,
295
+ phase,
296
+ rawItem: item,
297
+ });
298
+ }
299
+ });
300
+ }
301
+ else if (item.type === 'reasoning') {
302
+ if (typeof item.encrypted_content === 'string') {
303
+ content.push({
304
+ type: 'redacted_thinking',
305
+ data: item.encrypted_content,
306
+ itemId: item.id,
307
+ outputIndex,
308
+ rawItem: item,
309
+ });
310
+ }
311
+ else {
312
+ const thinking = this.extractReasoningText(item);
313
+ content.push({
314
+ type: 'thinking',
315
+ thinking,
316
+ itemId: item.id,
317
+ outputIndex,
318
+ rawItem: item,
319
+ });
320
+ }
321
+ }
322
+ else if (item.type === 'function_call') {
323
+ const callId = typeof item.call_id === 'string' ? item.call_id : item.id ?? '';
324
+ content.push({
325
+ type: 'tool_use',
326
+ id: callId,
327
+ name: typeof item.name === 'string' ? item.name : '',
328
+ input: safeParseJson(typeof item.arguments === 'string' ? item.arguments : '{}'),
329
+ itemId: item.id,
330
+ outputIndex,
331
+ rawItem: item,
332
+ });
333
+ }
334
+ else if (item.type === 'function_call_output') {
335
+ content.push({
336
+ type: 'tool_result',
337
+ toolUseId: typeof item.call_id === 'string' ? item.call_id : '',
338
+ content: typeof item.output === 'string' ? item.output : JSON.stringify(item.output ?? null),
339
+ itemId: item.id,
340
+ outputIndex,
341
+ rawItem: item,
342
+ });
343
+ }
344
+ else if (item.type === 'compaction' && typeof item.encrypted_content === 'string') {
345
+ content.push({
346
+ type: 'compaction',
347
+ id: item.id,
348
+ encryptedContent: item.encrypted_content,
349
+ ...(typeof item.created_by === 'string' ? { createdBy: item.created_by } : {}),
350
+ outputIndex,
351
+ rawItem: item,
352
+ });
353
+ }
354
+ else {
355
+ content.push({
356
+ type: 'openai_response_item',
357
+ itemId: item.id,
358
+ itemType: item.type,
359
+ outputIndex,
360
+ rawItem: item,
361
+ });
362
+ }
363
+ });
364
+ return content;
365
+ }
366
+ extractReasoningText(item) {
367
+ const values = [item.summary, item.content]
368
+ .filter(Array.isArray)
369
+ .flatMap((parts) => parts)
370
+ .map((part) => part?.text)
371
+ .filter((text) => typeof text === 'string');
372
+ return values.join('\n');
373
+ }
374
+ asPhase(value) {
375
+ return value === 'commentary' || value === 'final_answer' || value === null
376
+ ? value
377
+ : undefined;
378
+ }
379
+ getStopReason(response, output) {
380
+ if (output.some((item) => item.type === 'function_call'))
381
+ return 'tool_use';
382
+ if (output.some((item) => item.type === 'message' &&
383
+ Array.isArray(item.content) &&
384
+ item.content.some((part) => part?.type === 'refusal')))
385
+ return 'refusal';
386
+ const reason = response.incomplete_details?.reason;
387
+ if (response.status === 'incomplete' && reason?.includes('max_output_tokens')) {
388
+ return 'max_tokens';
389
+ }
390
+ return 'end_turn';
391
+ }
392
+ applyTextDelta(output, event) {
393
+ if (!Number.isInteger(event.output_index) || typeof event.delta !== 'string')
394
+ return;
395
+ const outputIndex = event.output_index;
396
+ const contentIndex = Number.isInteger(event.content_index) ? event.content_index : 0;
397
+ const existing = output[outputIndex];
398
+ const message = existing?.type === 'message'
399
+ ? existing
400
+ : {
401
+ type: 'message',
402
+ id: event.item_id,
403
+ role: 'assistant',
404
+ status: 'in_progress',
405
+ content: [],
406
+ };
407
+ const part = message.content[contentIndex] ?? { type: 'output_text', text: '', annotations: [] };
408
+ part.text = `${part.text ?? ''}${event.delta}`;
409
+ message.content[contentIndex] = part;
410
+ output[outputIndex] = message;
411
+ }
412
+ applyFunctionArgumentsDelta(output, event) {
413
+ if (!Number.isInteger(event.output_index) || typeof event.delta !== 'string')
414
+ return;
415
+ const outputIndex = event.output_index;
416
+ const item = output[outputIndex];
417
+ if (item?.type === 'function_call') {
418
+ item.arguments = `${item.arguments ?? ''}${event.delta}`;
419
+ }
420
+ }
421
+ // --------------------------------------------------------------------------
422
+ // Errors
423
+ // --------------------------------------------------------------------------
424
+ async assertSuccessfulHTTPResponse(response) {
425
+ if (response.ok)
426
+ return;
427
+ const errorText = await response.text();
428
+ throw new Error(`OpenAI Responses API error: ${response.status} ${errorText}`);
429
+ }
430
+ assertSuccessfulAPIResponse(response) {
431
+ if (!response.error)
432
+ return;
433
+ throw new Error(`OpenAI Responses API error: ${response.error.code ?? 'api_error'} ` +
434
+ `${response.error.message ?? 'Unknown error'}`);
435
+ }
436
+ handleError(error, rawRequest) {
437
+ if (error instanceof MembraneError)
438
+ return error;
439
+ if (error instanceof Error) {
440
+ const message = error.message;
441
+ if (message.includes('429') || message.includes('rate_limit')) {
442
+ const retryMatch = message.match(/retry after (\d+)/i);
443
+ const retryAfter = retryMatch?.[1] ? Number(retryMatch[1]) * 1000 : undefined;
444
+ return rateLimitError(message, retryAfter, error, rawRequest);
445
+ }
446
+ if (message.includes('401') ||
447
+ message.includes('invalid_api_key') ||
448
+ message.includes('Incorrect API key')) {
449
+ return authError(message, error, rawRequest);
450
+ }
451
+ if (message.includes('context_length') ||
452
+ message.includes('maximum context') ||
453
+ message.includes('too long')) {
454
+ return contextLengthError(message, error, rawRequest);
455
+ }
456
+ if (message.includes('500') ||
457
+ message.includes('502') ||
458
+ message.includes('503') ||
459
+ message.includes('server_error')) {
460
+ return serverError(message, undefined, error, rawRequest);
461
+ }
462
+ if (error.name === 'AbortError')
463
+ return abortError(undefined, rawRequest);
464
+ if (message.includes('network') ||
465
+ message.includes('fetch') ||
466
+ message.includes('ECONNREFUSED')) {
467
+ return networkError(message, error, rawRequest);
468
+ }
469
+ }
470
+ return new MembraneError({
471
+ type: 'unknown',
472
+ message: error instanceof Error ? error.message : String(error),
473
+ retryable: false,
474
+ rawError: error,
475
+ rawRequest,
476
+ });
477
+ }
478
+ }
479
+ //# sourceMappingURL=openai-responses-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses-api.js","sourceRoot":"","sources":["../../src/providers/openai-responses-api.ts"],"names":[],"mappings":"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"}