@animalabs/membrane 0.5.29 → 0.5.30

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.
@@ -1,17 +1,25 @@
1
1
  /**
2
- * OpenAI Responses API provider adapter
2
+ * OpenAI Images API provider adapter
3
3
  *
4
- * Adapter for OpenAI's `/v1/responses` endpoint, required for image generation
5
- * models like `gpt-image-1`. The Responses API differs from Chat Completions:
4
+ * Adapter for OpenAI's Images API endpoints, used for image generation
5
+ * models like `gpt-image-1`:
6
6
  *
7
- * - Uses `input` array instead of `messages`
8
- * - Content types: `input_text` / `input_image` (not `text` / `image_url`)
9
- * - Image generation is a tool: `{"type": "image_generation"}`
10
- * - Generated images come back as `image_generation_call` output items
11
- * - Streaming uses different event types
7
+ * - `/v1/images/generations` text-to-image (no image input)
8
+ * - `/v1/images/edits` image editing (accepts input images + prompt)
12
9
  *
13
- * This adapter converts membrane's ProviderRequest into the Responses API format,
14
- * sends the request, and converts the response back into membrane ContentBlocks.
10
+ * The adapter automatically selects the right endpoint:
11
+ * - If conversation contains images uses /edits with images as data URLs
12
+ * - If text-only → uses /generations
13
+ *
14
+ * Both endpoints:
15
+ * - Take a single `prompt` string (not conversation messages)
16
+ * - Return base64-encoded images in `data[].b64_json`
17
+ * - No streaming support (returns complete image)
18
+ * - Support `size`, `quality`, `n`, `background`, `output_format`
19
+ *
20
+ * Note: File retains the name openai-responses.ts and class name
21
+ * OpenAIResponsesAdapter for compatibility with existing factory
22
+ * routing and vendor configs (`openairesponses-*` prefix).
15
23
  */
16
24
  import type { ProviderAdapter, ProviderRequest, ProviderRequestOptions, ProviderResponse, StreamCallbacks } from '../types/index.js';
17
25
  export interface OpenAIResponsesAdapterConfig {
@@ -21,23 +29,47 @@ export interface OpenAIResponsesAdapterConfig {
21
29
  baseURL?: string;
22
30
  /** Organization ID (optional) */
23
31
  organization?: string;
24
- /** Default max output tokens */
32
+ /** Default max output tokens (unused by Images API, kept for interface compat) */
25
33
  defaultMaxTokens?: number;
34
+ /**
35
+ * Whether to allow image editing via /v1/images/edits when images
36
+ * are present in the conversation context. When true (default),
37
+ * the adapter auto-detects images and routes to the edits endpoint.
38
+ * When false, always uses /v1/images/generations (text-only).
39
+ */
40
+ allowImageEditing?: boolean;
26
41
  }
27
42
  export declare class OpenAIResponsesAdapter implements ProviderAdapter {
28
43
  readonly name = "openai-responses";
29
44
  private apiKey;
30
45
  private baseURL;
31
46
  private organization?;
32
- private defaultMaxTokens;
47
+ private allowImageEditing;
33
48
  constructor(config?: OpenAIResponsesAdapterConfig);
34
49
  supportsModel(modelId: string): boolean;
35
50
  complete(request: ProviderRequest, options?: ProviderRequestOptions): Promise<ProviderResponse>;
36
51
  stream(request: ProviderRequest, callbacks: StreamCallbacks, options?: ProviderRequestOptions): Promise<ProviderResponse>;
37
52
  private getHeaders;
53
+ /**
54
+ * Extract base64 images from conversation messages as data URLs.
55
+ * Used to determine whether to use /edits (with images) or /generations.
56
+ * Returns up to 16 images (OpenAI limit for /v1/images/edits).
57
+ */
58
+ private extractImages;
59
+ /**
60
+ * Convert a base64 data URL to a Buffer + mimeType for file upload.
61
+ */
62
+ private dataUrlToBuffer;
38
63
  private buildRequest;
39
- private convertMessages;
40
- private mapRole;
64
+ /**
65
+ * Flatten conversation messages into a single prompt string.
66
+ *
67
+ * The Images API takes a single text prompt, not a conversation.
68
+ * We include the system prompt as context and concatenate all
69
+ * message text with role labels so the model understands the
70
+ * full conversation when deciding what image to generate.
71
+ */
72
+ private flattenToPrompt;
41
73
  private parseResponse;
42
74
  private buildContentBlocks;
43
75
  private handleError;
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAyF3B,MAAM,WAAW,4BAA4B;IAC3C,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,QAAQ,CAAC,IAAI,sBAAsB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,GAAE,4BAAiC;IAWrD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjC,QAAQ,CACZ,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IA6BtB,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IAwI5B,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,YAAY;IA+CpB,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,WAAW;CA0DpB"}
1
+ {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAiE3B,MAAM,WAAW,4BAA4B;IAC3C,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAMD,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,QAAQ,CAAC,IAAI,sBAAsB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAU;gBAEvB,MAAM,GAAE,4BAAiC;IAWrD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjC,QAAQ,CACZ,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IAwDtB,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IAmB5B,OAAO,CAAC,UAAU;IAalB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAyBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;IAwBpB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IA8CvB,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,WAAW;CAwEpB"}
@@ -1,33 +1,41 @@
1
1
  /**
2
- * OpenAI Responses API provider adapter
2
+ * OpenAI Images API provider adapter
3
3
  *
4
- * Adapter for OpenAI's `/v1/responses` endpoint, required for image generation
5
- * models like `gpt-image-1`. The Responses API differs from Chat Completions:
4
+ * Adapter for OpenAI's Images API endpoints, used for image generation
5
+ * models like `gpt-image-1`:
6
6
  *
7
- * - Uses `input` array instead of `messages`
8
- * - Content types: `input_text` / `input_image` (not `text` / `image_url`)
9
- * - Image generation is a tool: `{"type": "image_generation"}`
10
- * - Generated images come back as `image_generation_call` output items
11
- * - Streaming uses different event types
7
+ * - `/v1/images/generations` text-to-image (no image input)
8
+ * - `/v1/images/edits` image editing (accepts input images + prompt)
12
9
  *
13
- * This adapter converts membrane's ProviderRequest into the Responses API format,
14
- * sends the request, and converts the response back into membrane ContentBlocks.
10
+ * The adapter automatically selects the right endpoint:
11
+ * - If conversation contains images uses /edits with images as data URLs
12
+ * - If text-only → uses /generations
13
+ *
14
+ * Both endpoints:
15
+ * - Take a single `prompt` string (not conversation messages)
16
+ * - Return base64-encoded images in `data[].b64_json`
17
+ * - No streaming support (returns complete image)
18
+ * - Support `size`, `quality`, `n`, `background`, `output_format`
19
+ *
20
+ * Note: File retains the name openai-responses.ts and class name
21
+ * OpenAIResponsesAdapter for compatibility with existing factory
22
+ * routing and vendor configs (`openairesponses-*` prefix).
15
23
  */
16
24
  import { MembraneError, rateLimitError, contextLengthError, authError, serverError, abortError, networkError, } from '../types/index.js';
17
25
  // ============================================================================
18
- // OpenAI Responses Adapter
26
+ // OpenAI Images Adapter
19
27
  // ============================================================================
20
28
  export class OpenAIResponsesAdapter {
21
29
  name = 'openai-responses';
22
30
  apiKey;
23
31
  baseURL;
24
32
  organization;
25
- defaultMaxTokens;
33
+ allowImageEditing;
26
34
  constructor(config = {}) {
27
35
  this.apiKey = config.apiKey ?? process.env.OPENAI_API_KEY ?? '';
28
36
  this.baseURL = (config.baseURL ?? 'https://api.openai.com/v1').replace(/\/$/, '');
29
37
  this.organization = config.organization;
30
- this.defaultMaxTokens = config.defaultMaxTokens ?? 4096;
38
+ this.allowImageEditing = config.allowImageEditing ?? true;
31
39
  if (!this.apiKey) {
32
40
  throw new Error('OpenAI API key not provided');
33
41
  }
@@ -36,151 +44,69 @@ export class OpenAIResponsesAdapter {
36
44
  return modelId.startsWith('gpt-image');
37
45
  }
38
46
  async complete(request, options) {
39
- const responsesRequest = this.buildRequest(request);
40
- options?.onRequest?.(responsesRequest);
47
+ const inputImages = this.allowImageEditing ? this.extractImages(request) : [];
48
+ const isEdit = inputImages.length > 0;
49
+ const endpoint = isEdit ? 'images/edits' : 'images/generations';
50
+ const imagesRequest = this.buildRequest(request, inputImages);
51
+ options?.onRequest?.(imagesRequest);
41
52
  try {
42
- const response = await fetch(`${this.baseURL}/responses`, {
53
+ const fetchOptions = {
43
54
  method: 'POST',
44
- headers: this.getHeaders(),
45
- body: JSON.stringify(responsesRequest),
46
55
  signal: options?.signal,
47
- });
56
+ };
57
+ if (isEdit) {
58
+ // /v1/images/edits requires multipart/form-data with file uploads
59
+ const formData = new FormData();
60
+ formData.append('model', imagesRequest.model);
61
+ formData.append('prompt', imagesRequest.prompt);
62
+ if (imagesRequest.n != null)
63
+ formData.append('n', String(imagesRequest.n));
64
+ if (imagesRequest.quality)
65
+ formData.append('quality', String(imagesRequest.quality));
66
+ if (imagesRequest.size)
67
+ formData.append('size', String(imagesRequest.size));
68
+ // Convert base64 data URLs to Blobs and append as file uploads
69
+ for (const dataUrl of inputImages) {
70
+ const { buffer, mimeType } = this.dataUrlToBuffer(dataUrl);
71
+ const ext = mimeType.split('/')[1] || 'png';
72
+ const blob = new Blob([buffer], { type: mimeType });
73
+ formData.append('image[]', blob, `image.${ext}`);
74
+ }
75
+ // Auth header only — don't set Content-Type, let fetch set multipart boundary
76
+ fetchOptions.headers = {
77
+ Authorization: `Bearer ${this.apiKey}`,
78
+ ...(this.organization ? { 'OpenAI-Organization': this.organization } : {}),
79
+ };
80
+ fetchOptions.body = formData;
81
+ }
82
+ else {
83
+ // /v1/images/generations accepts JSON
84
+ fetchOptions.headers = this.getHeaders();
85
+ fetchOptions.body = JSON.stringify(imagesRequest);
86
+ }
87
+ const response = await fetch(`${this.baseURL}/${endpoint}`, fetchOptions);
48
88
  if (!response.ok) {
49
89
  const errorText = await response.text();
50
- throw new Error(`OpenAI Responses API error: ${response.status} ${errorText}`);
90
+ throw new Error(`OpenAI Images API error: ${response.status} ${errorText}`);
51
91
  }
52
92
  const data = (await response.json());
53
- if (data.error) {
54
- throw new Error(`OpenAI Responses API error: ${data.error.code} ${data.error.message}`);
55
- }
56
- return this.parseResponse(data, request.model, responsesRequest);
93
+ return this.parseResponse(data, request.model, imagesRequest);
57
94
  }
58
95
  catch (error) {
59
- throw this.handleError(error, responsesRequest);
96
+ throw this.handleError(error, imagesRequest);
60
97
  }
61
98
  }
62
99
  async stream(request, callbacks, options) {
63
- const responsesRequest = this.buildRequest(request);
64
- responsesRequest.stream = true;
65
- options?.onRequest?.(responsesRequest);
66
- try {
67
- const response = await fetch(`${this.baseURL}/responses`, {
68
- method: 'POST',
69
- headers: this.getHeaders(),
70
- body: JSON.stringify(responsesRequest),
71
- signal: options?.signal,
72
- });
73
- if (!response.ok) {
74
- const errorText = await response.text();
75
- throw new Error(`OpenAI Responses API error: ${response.status} ${errorText}`);
76
- }
77
- const reader = response.body?.getReader();
78
- if (!reader) {
79
- throw new Error('No response body');
80
- }
81
- const decoder = new TextDecoder();
82
- let accumulated = '';
83
- let images = [];
84
- let lastUsage;
85
- let buffer = '';
86
- while (true) {
87
- const { done, value } = await reader.read();
88
- if (done)
89
- break;
90
- buffer += decoder.decode(value, { stream: true });
91
- const lines = buffer.split('\n');
92
- buffer = lines.pop() ?? '';
93
- for (const line of lines) {
94
- if (!line.startsWith('data: '))
95
- continue;
96
- const data = line.slice(6).trim();
97
- if (!data || data === '[DONE]')
98
- continue;
99
- try {
100
- const parsed = JSON.parse(data);
101
- // Handle text deltas
102
- if (parsed.type === 'response.output_text.delta') {
103
- const delta = parsed.delta ?? '';
104
- accumulated += delta;
105
- callbacks.onChunk(delta);
106
- }
107
- // Handle completed text
108
- if (parsed.type === 'response.output_text.done') {
109
- // Text already accumulated via deltas
110
- }
111
- // Handle image generation results
112
- if (parsed.type === 'response.image_generation_call.done') {
113
- if (parsed.result) {
114
- images.push({
115
- data: parsed.result,
116
- mimeType: 'image/png',
117
- });
118
- }
119
- }
120
- // Handle completed response (has usage)
121
- if (parsed.type === 'response.completed' || parsed.type === 'response.done') {
122
- const resp = parsed.response ?? parsed;
123
- if (resp.usage) {
124
- lastUsage = resp.usage;
125
- }
126
- // Extract any images from the completed response output
127
- if (resp.output) {
128
- for (const item of resp.output) {
129
- if (item.type === 'image_generation_call' && item.result) {
130
- // Only add if not already captured via streaming events
131
- const alreadyCaptured = images.some(img => img.data === item.result);
132
- if (!alreadyCaptured) {
133
- images.push({
134
- data: item.result,
135
- mimeType: 'image/png',
136
- });
137
- }
138
- }
139
- }
140
- }
141
- }
142
- }
143
- catch {
144
- // Ignore parse errors in stream chunks
145
- }
146
- }
147
- }
148
- // Process remaining buffer
149
- if (buffer.trim()) {
150
- const remaining = buffer.trim();
151
- const dataLine = remaining.startsWith('data: ') ? remaining.slice(6).trim() : remaining;
152
- if (dataLine && dataLine !== '[DONE]') {
153
- try {
154
- const parsed = JSON.parse(dataLine);
155
- if (parsed.type === 'response.completed' || parsed.type === 'response.done') {
156
- const resp = parsed.response ?? parsed;
157
- if (resp.usage)
158
- lastUsage = resp.usage;
159
- }
160
- }
161
- catch {
162
- // Final buffer wasn't valid JSON
163
- }
164
- }
100
+ // Images API doesn't support streaming — do a full request
101
+ // and emit any text content as a single chunk
102
+ const response = await this.complete(request, options);
103
+ const blocks = response.content;
104
+ for (const block of blocks) {
105
+ if (block.type === 'text' && block.text) {
106
+ callbacks.onChunk(block.text);
165
107
  }
166
- const cachedTokens = lastUsage?.input_tokens_details?.cached_tokens ?? 0;
167
- return {
168
- content: this.buildContentBlocks(accumulated, images),
169
- stopReason: 'end_turn',
170
- stopSequence: undefined,
171
- usage: {
172
- inputTokens: lastUsage?.input_tokens ?? 0,
173
- outputTokens: lastUsage?.output_tokens ?? 0,
174
- cacheReadTokens: cachedTokens > 0 ? cachedTokens : undefined,
175
- },
176
- model: request.model,
177
- rawRequest: responsesRequest,
178
- raw: { usage: lastUsage },
179
- };
180
- }
181
- catch (error) {
182
- throw this.handleError(error, responsesRequest);
183
108
  }
109
+ return response;
184
110
  }
185
111
  // --------------------------------------------------------------------------
186
112
  // Request Building
@@ -195,15 +121,76 @@ export class OpenAIResponsesAdapter {
195
121
  }
196
122
  return headers;
197
123
  }
198
- buildRequest(request) {
199
- const input = this.convertMessages(request.messages);
200
- const maxTokens = request.maxTokens || this.defaultMaxTokens;
201
- const responsesRequest = {
124
+ /**
125
+ * Extract base64 images from conversation messages as data URLs.
126
+ * Used to determine whether to use /edits (with images) or /generations.
127
+ * Returns up to 16 images (OpenAI limit for /v1/images/edits).
128
+ */
129
+ extractImages(request) {
130
+ const dataUrls = [];
131
+ const MAX_IMAGES = 16;
132
+ if (!request.messages)
133
+ return dataUrls;
134
+ for (const msg of request.messages) {
135
+ if (!Array.isArray(msg.content))
136
+ continue;
137
+ for (const block of msg.content) {
138
+ if (dataUrls.length >= MAX_IMAGES)
139
+ break;
140
+ if (block.type === 'image') {
141
+ const source = block.source;
142
+ if (source?.type === 'base64' && source.data) {
143
+ const mimeType = source.media_type ?? source.mediaType ?? 'image/png';
144
+ dataUrls.push(`data:${mimeType};base64,${source.data}`);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ return dataUrls;
150
+ }
151
+ /**
152
+ * Convert a base64 data URL to a Buffer + mimeType for file upload.
153
+ */
154
+ dataUrlToBuffer(dataUrl) {
155
+ const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/s);
156
+ if (!match || !match[1] || !match[2]) {
157
+ throw new Error('Invalid data URL format');
158
+ }
159
+ return {
160
+ mimeType: match[1],
161
+ buffer: Buffer.from(match[2], 'base64'),
162
+ };
163
+ }
164
+ buildRequest(request, inputImages) {
165
+ const prompt = this.flattenToPrompt(request);
166
+ const imagesRequest = {
202
167
  model: request.model,
203
- input,
204
- max_output_tokens: maxTokens,
168
+ prompt,
169
+ n: 1,
170
+ quality: 'auto',
205
171
  };
206
- // System prompt instructions
172
+ // Include input images for the /edits endpoint
173
+ if (inputImages.length > 0) {
174
+ imagesRequest.image = inputImages;
175
+ }
176
+ // Apply extra params (allow overriding size, quality, n, etc.)
177
+ if (request.extra) {
178
+ const { normalizedMessages, prompt: _p, ...rest } = request.extra;
179
+ Object.assign(imagesRequest, rest);
180
+ }
181
+ return imagesRequest;
182
+ }
183
+ /**
184
+ * Flatten conversation messages into a single prompt string.
185
+ *
186
+ * The Images API takes a single text prompt, not a conversation.
187
+ * We include the system prompt as context and concatenate all
188
+ * message text with role labels so the model understands the
189
+ * full conversation when deciding what image to generate.
190
+ */
191
+ flattenToPrompt(request) {
192
+ const parts = [];
193
+ // Include system prompt as context
207
194
  if (request.system) {
208
195
  const systemText = typeof request.system === 'string'
209
196
  ? request.system
@@ -212,120 +199,56 @@ export class OpenAIResponsesAdapter {
212
199
  .map((b) => b.text)
213
200
  .join('\n');
214
201
  if (systemText) {
215
- responsesRequest.instructions = systemText;
202
+ parts.push(systemText);
216
203
  }
217
204
  }
218
- if (request.temperature !== undefined) {
219
- responsesRequest.temperature = request.temperature;
220
- }
221
- if (request.topP !== undefined) {
222
- responsesRequest.top_p = request.topP;
223
- }
224
- // Auto-include image_generation tool for image models
225
- if (request.model?.includes('image')) {
226
- responsesRequest.tools = [{ type: 'image_generation' }];
227
- }
228
- // Apply extra params (filter out internal membrane fields)
229
- if (request.extra) {
230
- const { normalizedMessages, prompt, ...rest } = request.extra;
231
- Object.assign(responsesRequest, rest);
232
- }
233
- return responsesRequest;
234
- }
235
- convertMessages(messages) {
236
- const result = [];
237
- for (const msg of messages) {
238
- const role = this.mapRole(msg.role);
239
- // Simple string content
240
- if (typeof msg.content === 'string') {
241
- result.push({ role, content: msg.content });
242
- continue;
243
- }
244
- // Array content blocks (Anthropic-style)
245
- if (Array.isArray(msg.content)) {
246
- const parts = [];
247
- for (const block of msg.content) {
248
- if (block.type === 'text') {
249
- if (block.text) {
250
- parts.push({ type: 'input_text', text: block.text });
251
- }
252
- }
253
- else if (block.type === 'image') {
254
- const source = block.source;
255
- if (source?.type === 'base64' && source.data) {
256
- const mimeType = source.media_type ?? source.mediaType ?? 'image/jpeg';
257
- parts.push({
258
- type: 'input_image',
259
- image_url: `data:${mimeType};base64,${source.data}`,
260
- });
261
- }
262
- }
263
- // tool_use and tool_result are not supported in the Responses API input
264
- // for image models — skip them silently
205
+ // Extract text from messages with role labels
206
+ if (request.messages) {
207
+ for (const msg of request.messages) {
208
+ const role = msg.role === 'assistant' ? 'Assistant' : 'User';
209
+ let text = '';
210
+ if (typeof msg.content === 'string') {
211
+ text = msg.content;
265
212
  }
266
- if (parts.length > 0) {
267
- result.push({ role, content: parts });
213
+ else if (Array.isArray(msg.content)) {
214
+ text = msg.content
215
+ .filter((b) => b.type === 'text' && b.text)
216
+ .map((b) => b.text)
217
+ .join('\n');
218
+ }
219
+ if (text) {
220
+ parts.push(`${role}: ${text}`);
268
221
  }
269
- continue;
270
222
  }
271
- // Null/empty content — skip
272
- if (msg.content === null || msg.content === undefined)
273
- continue;
274
- // Fallback
275
- result.push({ role, content: String(msg.content) });
276
- }
277
- return result;
278
- }
279
- mapRole(role) {
280
- switch (role) {
281
- case 'user':
282
- return 'user';
283
- case 'assistant':
284
- return 'assistant';
285
- case 'system':
286
- return 'developer';
287
- default:
288
- return 'user';
289
223
  }
224
+ return parts.join('\n\n');
290
225
  }
291
226
  // --------------------------------------------------------------------------
292
227
  // Response Parsing
293
228
  // --------------------------------------------------------------------------
294
229
  parseResponse(response, requestedModel, rawRequest) {
295
- let text = '';
296
230
  const images = [];
297
- for (const item of response.output) {
298
- if (item.type === 'message') {
299
- for (const content of item.content) {
300
- if (content.type === 'output_text') {
301
- text += content.text;
302
- }
303
- else if (content.type === 'image_generation_call') {
304
- images.push({
305
- data: content.result,
306
- mimeType: 'image/png',
307
- });
308
- }
309
- }
310
- }
311
- else if (item.type === 'image_generation_call') {
231
+ let revisedPrompt;
232
+ for (const item of response.data) {
233
+ if (item.b64_json) {
312
234
  images.push({
313
- data: item.result,
235
+ data: item.b64_json,
314
236
  mimeType: 'image/png',
315
237
  });
316
238
  }
239
+ if (item.revised_prompt) {
240
+ revisedPrompt = item.revised_prompt;
241
+ }
317
242
  }
318
- const cachedTokens = response.usage?.input_tokens_details?.cached_tokens ?? 0;
319
243
  return {
320
- content: this.buildContentBlocks(text, images),
244
+ content: this.buildContentBlocks(revisedPrompt, images),
321
245
  stopReason: 'end_turn',
322
246
  stopSequence: undefined,
323
247
  usage: {
324
248
  inputTokens: response.usage?.input_tokens ?? 0,
325
249
  outputTokens: response.usage?.output_tokens ?? 0,
326
- cacheReadTokens: cachedTokens > 0 ? cachedTokens : undefined,
327
250
  },
328
- model: response.model ?? requestedModel,
251
+ model: requestedModel,
329
252
  rawRequest,
330
253
  raw: response,
331
254
  };
@@ -367,6 +290,17 @@ export class OpenAIResponsesAdapter {
367
290
  message.includes('too long')) {
368
291
  return contextLengthError(message, error, rawRequest);
369
292
  }
293
+ if (message.includes('content_policy') ||
294
+ message.includes('safety_system') ||
295
+ message.includes('moderation')) {
296
+ return new MembraneError({
297
+ type: 'unknown',
298
+ message: `Content policy violation: ${message}`,
299
+ retryable: false,
300
+ rawError: error,
301
+ rawRequest,
302
+ });
303
+ }
370
304
  if (message.includes('500') ||
371
305
  message.includes('502') ||
372
306
  message.includes('503') ||
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"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"}