@animalabs/membrane 0.5.83 → 0.5.84

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.
@@ -12,7 +12,8 @@
12
12
  * - If text-only → uses /generations
13
13
  *
14
14
  * Both endpoints:
15
- * - Take a single `prompt` string (not conversation messages)
15
+ * - Take a single `prompt` string (not conversation messages) — see
16
+ * `promptFormat` for how the conversation is flattened into it
16
17
  * - Return base64-encoded images in `data[].b64_json`
17
18
  * - No streaming support (returns complete image)
18
19
  * - Support `size`, `quality`, `n`, `background`, `output_format`
@@ -38,7 +39,37 @@ export interface OpenAIResponsesAdapterConfig {
38
39
  * When false, always uses /v1/images/generations (text-only).
39
40
  */
40
41
  allowImageEditing?: boolean;
42
+ /**
43
+ * How the conversation is flattened into the single Images API `prompt`.
44
+ *
45
+ * - `'legacy'` (default): system prompt followed by `User:` / `Assistant:`
46
+ * text lines. Images are attached in conversation order but never
47
+ * mentioned in the prompt, and an image-only assistant message (the
48
+ * typical shape of a previous generation) leaves no trace in the text.
49
+ * - `'transcript'`: role-delimited turns (`### User` / `### Assistant`).
50
+ * Every attached image — user-provided or generated by the assistant in
51
+ * an earlier turn — is numbered in attachment order and referenced
52
+ * inline as `[Image N]` inside the turn it belongs to, so previous
53
+ * generations read as the assistant's own prior turns. The prompt ends
54
+ * with an open `### Assistant` header for the turn being generated.
55
+ */
56
+ promptFormat?: 'legacy' | 'transcript';
57
+ /**
58
+ * Maximum images attached to /v1/images/edits (API cap: 16). `'legacy'`
59
+ * keeps the first N in conversation order; `'transcript'` keeps the most
60
+ * recent N and marks the rest `[Image omitted]`.
61
+ */
62
+ maxInputImages?: number;
63
+ /**
64
+ * Text placed between the system prompt and the transcript in
65
+ * `'transcript'` mode, explaining the turn delimiters and image numbering
66
+ * to the model. Defaults to {@link DEFAULT_TRANSCRIPT_PREAMBLE}.
67
+ */
68
+ transcriptPreamble?: string;
41
69
  }
70
+ /** API cap on images per /v1/images/edits request. */
71
+ export declare const IMAGES_EDIT_MAX_INPUT_IMAGES = 16;
72
+ export declare const DEFAULT_TRANSCRIPT_PREAMBLE: string;
42
73
  export declare class OpenAIResponsesAdapter implements ProviderAdapter {
43
74
  readonly name = "openai-responses";
44
75
  /** Images API adapter: it reports no token usage at all. */
@@ -47,17 +78,25 @@ export declare class OpenAIResponsesAdapter implements ProviderAdapter {
47
78
  private baseURL;
48
79
  private organization?;
49
80
  private allowImageEditing;
81
+ private promptFormat;
82
+ private maxInputImages;
83
+ private transcriptPreamble;
50
84
  constructor(config?: OpenAIResponsesAdapterConfig);
51
85
  supportsModel(modelId: string): boolean;
52
86
  complete(request: ProviderRequest, options?: ProviderRequestOptions): Promise<ProviderResponse>;
53
87
  stream(request: ProviderRequest, callbacks: StreamCallbacks, options?: ProviderRequestOptions): Promise<ProviderResponse>;
54
88
  private getHeaders;
55
89
  /**
56
- * Extract base64 images from conversation messages as data URLs.
57
- * Used to determine whether to use /edits (with images) or /generations.
58
- * Returns up to 16 images (OpenAI limit for /v1/images/edits).
90
+ * Collect every base64 image in the conversation, in order, remembering
91
+ * which message/block it came from so the transcript can reference it.
92
+ */
93
+ private collectImages;
94
+ /**
95
+ * Apply the input-image cap. Legacy keeps the FIRST N (its historical
96
+ * behaviour); transcript keeps the MOST RECENT N, since the latest turns
97
+ * are what an edit request is about.
59
98
  */
60
- private extractImages;
99
+ private selectImages;
61
100
  /**
62
101
  * Convert a base64 data URL to a Buffer + mimeType for file upload.
63
102
  */
@@ -72,6 +111,21 @@ export declare class OpenAIResponsesAdapter implements ProviderAdapter {
72
111
  * full conversation when deciding what image to generate.
73
112
  */
74
113
  private flattenToPrompt;
114
+ private systemText;
115
+ /**
116
+ * Flatten the conversation into a role-delimited transcript.
117
+ *
118
+ * Each message becomes (part of) a `### User` / `### Assistant` turn;
119
+ * consecutive same-role messages share one header. Text blocks are kept
120
+ * verbatim. Image blocks become `[Image N]` (N = 1-based position in the
121
+ * attached `image[]` list) when the image is attached, or
122
+ * `[Image omitted]` when it fell outside the input-image cap. An
123
+ * assistant message that only carried an image therefore still appears
124
+ * as an assistant turn — that is what lets a previous generation read as
125
+ * the assistant's own prior output. The prompt ends with an open
126
+ * `### Assistant` header for the turn being generated.
127
+ */
128
+ private flattenToTranscript;
75
129
  private parseResponse;
76
130
  private buildContentBlocks;
77
131
  private handleError;
@@ -1 +1 @@
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;AAkE3B,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;IAEnC,4DAA4D;IAC5D,QAAQ,CAAC,oBAAoB,EAAG,gBAAgB,CAAU;IAC1D,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;IA2DtB,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;CA4EpB"}
1
+ {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAyE3B,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;IAE5B;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IAEvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,sDAAsD;AACtD,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C,eAAO,MAAM,2BAA2B,QAMW,CAAC;AAMpD,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,QAAQ,CAAC,IAAI,sBAAsB;IAEnC,4DAA4D;IAC5D,QAAQ,CAAC,oBAAoB,EAAG,gBAAgB,CAAU;IAC1D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,MAAM,GAAE,4BAAiC;IAiBrD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjC,QAAQ,CACZ,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IA6DtB,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;;;OAGG;IACH,OAAO,CAAC,aAAa;IAmBrB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;IA2BpB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IA0CvB,OAAO,CAAC,UAAU;IASlB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,mBAAmB;IAsD3B,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,WAAW;CA4EpB"}
@@ -12,7 +12,8 @@
12
12
  * - If text-only → uses /generations
13
13
  *
14
14
  * Both endpoints:
15
- * - Take a single `prompt` string (not conversation messages)
15
+ * - Take a single `prompt` string (not conversation messages) — see
16
+ * `promptFormat` for how the conversation is flattened into it
16
17
  * - Return base64-encoded images in `data[].b64_json`
17
18
  * - No streaming support (returns complete image)
18
19
  * - Support `size`, `quality`, `n`, `background`, `output_format`
@@ -23,6 +24,14 @@
23
24
  */
24
25
  import { MembraneError, rateLimitError, contextLengthError, authError, serverError, abortError, networkError, } from '../types/index.js';
25
26
  import { createCombinedSignal, isDeadlineAbort, deadlineTimeoutError } from './utils.js';
27
+ /** API cap on images per /v1/images/edits request. */
28
+ export const IMAGES_EDIT_MAX_INPUT_IMAGES = 16;
29
+ export const DEFAULT_TRANSCRIPT_PREAMBLE = 'Below is a multi-turn conversation between users and you, the Assistant. ' +
30
+ 'Turns are delimited by "### User" and "### Assistant" headers. ' +
31
+ 'Attached images are numbered in attachment order; "[Image N]" marks where image N appeared. ' +
32
+ 'Images inside Assistant turns are images you generated earlier in this conversation; ' +
33
+ 'images inside User turns were provided by users. ' +
34
+ 'Generate the image for the next Assistant turn.';
26
35
  // ============================================================================
27
36
  // OpenAI Images Adapter
28
37
  // ============================================================================
@@ -34,11 +43,17 @@ export class OpenAIResponsesAdapter {
34
43
  baseURL;
35
44
  organization;
36
45
  allowImageEditing;
46
+ promptFormat;
47
+ maxInputImages;
48
+ transcriptPreamble;
37
49
  constructor(config = {}) {
38
50
  this.apiKey = config.apiKey ?? process.env.OPENAI_API_KEY ?? '';
39
51
  this.baseURL = (config.baseURL ?? 'https://api.openai.com/v1').replace(/\/$/, '');
40
52
  this.organization = config.organization;
41
53
  this.allowImageEditing = config.allowImageEditing ?? true;
54
+ this.promptFormat = config.promptFormat ?? 'legacy';
55
+ this.maxInputImages = Math.max(1, Math.min(config.maxInputImages ?? IMAGES_EDIT_MAX_INPUT_IMAGES, IMAGES_EDIT_MAX_INPUT_IMAGES));
56
+ this.transcriptPreamble = config.transcriptPreamble ?? DEFAULT_TRANSCRIPT_PREAMBLE;
42
57
  if (!this.apiKey) {
43
58
  throw new Error('OpenAI API key not provided');
44
59
  }
@@ -47,10 +62,12 @@ export class OpenAIResponsesAdapter {
47
62
  return modelId.startsWith('gpt-image');
48
63
  }
49
64
  async complete(request, options) {
50
- const inputImages = this.allowImageEditing ? this.extractImages(request) : [];
65
+ const allImages = this.allowImageEditing ? this.collectImages(request) : [];
66
+ const selected = this.selectImages(allImages);
67
+ const inputImages = selected.map(ref => ref.dataUrl);
51
68
  const isEdit = inputImages.length > 0;
52
69
  const endpoint = isEdit ? 'images/edits' : 'images/generations';
53
- const imagesRequest = this.buildRequest(request, inputImages);
70
+ const imagesRequest = this.buildRequest(request, selected);
54
71
  options?.onRequest?.(imagesRequest);
55
72
  const { signal: combinedSignal, cleanup } = createCombinedSignal(options?.signal, options?.timeoutMs);
56
73
  try {
@@ -129,31 +146,39 @@ export class OpenAIResponsesAdapter {
129
146
  return headers;
130
147
  }
131
148
  /**
132
- * Extract base64 images from conversation messages as data URLs.
133
- * Used to determine whether to use /edits (with images) or /generations.
134
- * Returns up to 16 images (OpenAI limit for /v1/images/edits).
149
+ * Collect every base64 image in the conversation, in order, remembering
150
+ * which message/block it came from so the transcript can reference it.
135
151
  */
136
- extractImages(request) {
137
- const dataUrls = [];
138
- const MAX_IMAGES = 16;
152
+ collectImages(request) {
153
+ const refs = [];
139
154
  if (!request.messages)
140
- return dataUrls;
141
- for (const msg of request.messages) {
155
+ return refs;
156
+ request.messages.forEach((msg, msgIndex) => {
142
157
  if (!Array.isArray(msg.content))
143
- continue;
144
- for (const block of msg.content) {
145
- if (dataUrls.length >= MAX_IMAGES)
146
- break;
147
- if (block.type === 'image') {
148
- const source = block.source;
149
- if (source?.type === 'base64' && source.data) {
150
- const mimeType = source.media_type ?? source.mediaType ?? 'image/png';
151
- dataUrls.push(`data:${mimeType};base64,${source.data}`);
152
- }
158
+ return;
159
+ msg.content.forEach((block, blockIndex) => {
160
+ if (block?.type !== 'image')
161
+ return;
162
+ const source = block.source;
163
+ if (source?.type === 'base64' && source.data) {
164
+ const mimeType = source.media_type ?? source.mediaType ?? 'image/png';
165
+ refs.push({ dataUrl: `data:${mimeType};base64,${source.data}`, msgIndex, blockIndex });
153
166
  }
154
- }
155
- }
156
- return dataUrls;
167
+ });
168
+ });
169
+ return refs;
170
+ }
171
+ /**
172
+ * Apply the input-image cap. Legacy keeps the FIRST N (its historical
173
+ * behaviour); transcript keeps the MOST RECENT N, since the latest turns
174
+ * are what an edit request is about.
175
+ */
176
+ selectImages(refs) {
177
+ if (refs.length <= this.maxInputImages)
178
+ return refs;
179
+ return this.promptFormat === 'transcript'
180
+ ? refs.slice(refs.length - this.maxInputImages)
181
+ : refs.slice(0, this.maxInputImages);
157
182
  }
158
183
  /**
159
184
  * Convert a base64 data URL to a Buffer + mimeType for file upload.
@@ -168,8 +193,11 @@ export class OpenAIResponsesAdapter {
168
193
  buffer: Buffer.from(match[2], 'base64'),
169
194
  };
170
195
  }
171
- buildRequest(request, inputImages) {
172
- const prompt = this.flattenToPrompt(request);
196
+ buildRequest(request, selectedImages) {
197
+ const inputImages = selectedImages.map(ref => ref.dataUrl);
198
+ const prompt = this.promptFormat === 'transcript'
199
+ ? this.flattenToTranscript(request, selectedImages)
200
+ : this.flattenToPrompt(request);
173
201
  const imagesRequest = {
174
202
  model: request.model,
175
203
  prompt,
@@ -230,6 +258,80 @@ export class OpenAIResponsesAdapter {
230
258
  }
231
259
  return parts.join('\n\n');
232
260
  }
261
+ systemText(request) {
262
+ if (!request.system)
263
+ return '';
264
+ if (typeof request.system === 'string')
265
+ return request.system;
266
+ return request.system
267
+ .filter((b) => b.type === 'text')
268
+ .map((b) => b.text)
269
+ .join('\n');
270
+ }
271
+ /**
272
+ * Flatten the conversation into a role-delimited transcript.
273
+ *
274
+ * Each message becomes (part of) a `### User` / `### Assistant` turn;
275
+ * consecutive same-role messages share one header. Text blocks are kept
276
+ * verbatim. Image blocks become `[Image N]` (N = 1-based position in the
277
+ * attached `image[]` list) when the image is attached, or
278
+ * `[Image omitted]` when it fell outside the input-image cap. An
279
+ * assistant message that only carried an image therefore still appears
280
+ * as an assistant turn — that is what lets a previous generation read as
281
+ * the assistant's own prior output. The prompt ends with an open
282
+ * `### Assistant` header for the turn being generated.
283
+ */
284
+ flattenToTranscript(request, selectedImages) {
285
+ const attachedIndex = new Map();
286
+ selectedImages.forEach((ref, i) => attachedIndex.set(`${ref.msgIndex}:${ref.blockIndex}`, i + 1));
287
+ const sections = [];
288
+ const systemText = this.systemText(request);
289
+ if (systemText)
290
+ sections.push(systemText);
291
+ if (this.transcriptPreamble)
292
+ sections.push(this.transcriptPreamble);
293
+ const turns = [];
294
+ let currentRole;
295
+ let currentLines = [];
296
+ const flushTurn = () => {
297
+ if (!currentRole)
298
+ return;
299
+ const body = currentLines.join('\n').trim();
300
+ if (body)
301
+ turns.push(`### ${currentRole}\n${body}`);
302
+ currentLines = [];
303
+ };
304
+ request.messages?.forEach((msg, msgIndex) => {
305
+ const role = msg.role === 'assistant' ? 'Assistant' : 'User';
306
+ const lines = [];
307
+ if (typeof msg.content === 'string') {
308
+ if (msg.content)
309
+ lines.push(msg.content);
310
+ }
311
+ else if (Array.isArray(msg.content)) {
312
+ msg.content.forEach((block, blockIndex) => {
313
+ if (block?.type === 'text' && block.text) {
314
+ lines.push(block.text);
315
+ }
316
+ else if (block?.type === 'image') {
317
+ const n = attachedIndex.get(`${msgIndex}:${blockIndex}`);
318
+ lines.push(n !== undefined ? `[Image ${n}]` : '[Image omitted]');
319
+ }
320
+ });
321
+ }
322
+ if (lines.length === 0)
323
+ return;
324
+ if (role !== currentRole) {
325
+ flushTurn();
326
+ currentRole = role;
327
+ }
328
+ currentLines.push(...lines);
329
+ });
330
+ flushTurn();
331
+ sections.push(turns.join('\n\n'));
332
+ sections.push('### Assistant');
333
+ return sections.filter(Boolean).join('\n\n');
334
+ }
233
335
  // --------------------------------------------------------------------------
234
336
  // Response Parsing
235
337
  // --------------------------------------------------------------------------
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@animalabs/membrane",
3
- "version": "0.5.83",
3
+ "version": "0.5.84",
4
4
  "description": "LLM middleware - a selective boundary that transforms what passes through",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,7 +12,8 @@
12
12
  * - If text-only → uses /generations
13
13
  *
14
14
  * Both endpoints:
15
- * - Take a single `prompt` string (not conversation messages)
15
+ * - Take a single `prompt` string (not conversation messages) — see
16
+ * `promptFormat` for how the conversation is flattened into it
16
17
  * - Return base64-encoded images in `data[].b64_json`
17
18
  * - No streaming support (returns complete image)
18
19
  * - Support `size`, `quality`, `n`, `background`, `output_format`
@@ -68,6 +69,13 @@ interface ImagesEditRequest {
68
69
 
69
70
  type ImagesRequest = ImagesGenerateRequest | ImagesEditRequest;
70
71
 
72
+ /** A base64 image found in the conversation, with its position for transcript references. */
73
+ interface ImageRef {
74
+ dataUrl: string;
75
+ msgIndex: number;
76
+ blockIndex: number;
77
+ }
78
+
71
79
  interface ImagesResponseData {
72
80
  b64_json?: string;
73
81
  url?: string;
@@ -115,8 +123,49 @@ export interface OpenAIResponsesAdapterConfig {
115
123
  * When false, always uses /v1/images/generations (text-only).
116
124
  */
117
125
  allowImageEditing?: boolean;
126
+
127
+ /**
128
+ * How the conversation is flattened into the single Images API `prompt`.
129
+ *
130
+ * - `'legacy'` (default): system prompt followed by `User:` / `Assistant:`
131
+ * text lines. Images are attached in conversation order but never
132
+ * mentioned in the prompt, and an image-only assistant message (the
133
+ * typical shape of a previous generation) leaves no trace in the text.
134
+ * - `'transcript'`: role-delimited turns (`### User` / `### Assistant`).
135
+ * Every attached image — user-provided or generated by the assistant in
136
+ * an earlier turn — is numbered in attachment order and referenced
137
+ * inline as `[Image N]` inside the turn it belongs to, so previous
138
+ * generations read as the assistant's own prior turns. The prompt ends
139
+ * with an open `### Assistant` header for the turn being generated.
140
+ */
141
+ promptFormat?: 'legacy' | 'transcript';
142
+
143
+ /**
144
+ * Maximum images attached to /v1/images/edits (API cap: 16). `'legacy'`
145
+ * keeps the first N in conversation order; `'transcript'` keeps the most
146
+ * recent N and marks the rest `[Image omitted]`.
147
+ */
148
+ maxInputImages?: number;
149
+
150
+ /**
151
+ * Text placed between the system prompt and the transcript in
152
+ * `'transcript'` mode, explaining the turn delimiters and image numbering
153
+ * to the model. Defaults to {@link DEFAULT_TRANSCRIPT_PREAMBLE}.
154
+ */
155
+ transcriptPreamble?: string;
118
156
  }
119
157
 
158
+ /** API cap on images per /v1/images/edits request. */
159
+ export const IMAGES_EDIT_MAX_INPUT_IMAGES = 16;
160
+
161
+ export const DEFAULT_TRANSCRIPT_PREAMBLE =
162
+ 'Below is a multi-turn conversation between users and you, the Assistant. ' +
163
+ 'Turns are delimited by "### User" and "### Assistant" headers. ' +
164
+ 'Attached images are numbered in attachment order; "[Image N]" marks where image N appeared. ' +
165
+ 'Images inside Assistant turns are images you generated earlier in this conversation; ' +
166
+ 'images inside User turns were provided by users. ' +
167
+ 'Generate the image for the next Assistant turn.';
168
+
120
169
  // ============================================================================
121
170
  // OpenAI Images Adapter
122
171
  // ============================================================================
@@ -130,12 +179,21 @@ export class OpenAIResponsesAdapter implements ProviderAdapter {
130
179
  private baseURL: string;
131
180
  private organization?: string;
132
181
  private allowImageEditing: boolean;
182
+ private promptFormat: 'legacy' | 'transcript';
183
+ private maxInputImages: number;
184
+ private transcriptPreamble: string;
133
185
 
134
186
  constructor(config: OpenAIResponsesAdapterConfig = {}) {
135
187
  this.apiKey = config.apiKey ?? process.env.OPENAI_API_KEY ?? '';
136
188
  this.baseURL = (config.baseURL ?? 'https://api.openai.com/v1').replace(/\/$/, '');
137
189
  this.organization = config.organization;
138
190
  this.allowImageEditing = config.allowImageEditing ?? true;
191
+ this.promptFormat = config.promptFormat ?? 'legacy';
192
+ this.maxInputImages = Math.max(
193
+ 1,
194
+ Math.min(config.maxInputImages ?? IMAGES_EDIT_MAX_INPUT_IMAGES, IMAGES_EDIT_MAX_INPUT_IMAGES)
195
+ );
196
+ this.transcriptPreamble = config.transcriptPreamble ?? DEFAULT_TRANSCRIPT_PREAMBLE;
139
197
 
140
198
  if (!this.apiKey) {
141
199
  throw new Error('OpenAI API key not provided');
@@ -150,10 +208,12 @@ export class OpenAIResponsesAdapter implements ProviderAdapter {
150
208
  request: ProviderRequest,
151
209
  options?: ProviderRequestOptions
152
210
  ): Promise<ProviderResponse> {
153
- const inputImages = this.allowImageEditing ? this.extractImages(request) : [];
211
+ const allImages = this.allowImageEditing ? this.collectImages(request) : [];
212
+ const selected = this.selectImages(allImages);
213
+ const inputImages = selected.map(ref => ref.dataUrl);
154
214
  const isEdit = inputImages.length > 0;
155
215
  const endpoint = isEdit ? 'images/edits' : 'images/generations';
156
- const imagesRequest = this.buildRequest(request, inputImages);
216
+ const imagesRequest = this.buildRequest(request, selected);
157
217
  options?.onRequest?.(imagesRequest);
158
218
 
159
219
  const { signal: combinedSignal, cleanup } = createCombinedSignal(options?.signal, options?.timeoutMs);
@@ -245,33 +305,38 @@ export class OpenAIResponsesAdapter implements ProviderAdapter {
245
305
  }
246
306
 
247
307
  /**
248
- * Extract base64 images from conversation messages as data URLs.
249
- * Used to determine whether to use /edits (with images) or /generations.
250
- * Returns up to 16 images (OpenAI limit for /v1/images/edits).
308
+ * Collect every base64 image in the conversation, in order, remembering
309
+ * which message/block it came from so the transcript can reference it.
251
310
  */
252
- private extractImages(request: ProviderRequest): string[] {
253
- const dataUrls: string[] = [];
254
- const MAX_IMAGES = 16;
255
-
256
- if (!request.messages) return dataUrls;
257
-
258
- for (const msg of request.messages as any[]) {
259
- if (!Array.isArray(msg.content)) continue;
260
-
261
- for (const block of msg.content) {
262
- if (dataUrls.length >= MAX_IMAGES) break;
263
-
264
- if (block.type === 'image') {
265
- const source = block.source;
266
- if (source?.type === 'base64' && source.data) {
267
- const mimeType = source.media_type ?? source.mediaType ?? 'image/png';
268
- dataUrls.push(`data:${mimeType};base64,${source.data}`);
269
- }
311
+ private collectImages(request: ProviderRequest): ImageRef[] {
312
+ const refs: ImageRef[] = [];
313
+ if (!request.messages) return refs;
314
+
315
+ (request.messages as any[]).forEach((msg, msgIndex) => {
316
+ if (!Array.isArray(msg.content)) return;
317
+ msg.content.forEach((block: any, blockIndex: number) => {
318
+ if (block?.type !== 'image') return;
319
+ const source = block.source;
320
+ if (source?.type === 'base64' && source.data) {
321
+ const mimeType = source.media_type ?? source.mediaType ?? 'image/png';
322
+ refs.push({ dataUrl: `data:${mimeType};base64,${source.data}`, msgIndex, blockIndex });
270
323
  }
271
- }
272
- }
324
+ });
325
+ });
326
+
327
+ return refs;
328
+ }
273
329
 
274
- return dataUrls;
330
+ /**
331
+ * Apply the input-image cap. Legacy keeps the FIRST N (its historical
332
+ * behaviour); transcript keeps the MOST RECENT N, since the latest turns
333
+ * are what an edit request is about.
334
+ */
335
+ private selectImages(refs: ImageRef[]): ImageRef[] {
336
+ if (refs.length <= this.maxInputImages) return refs;
337
+ return this.promptFormat === 'transcript'
338
+ ? refs.slice(refs.length - this.maxInputImages)
339
+ : refs.slice(0, this.maxInputImages);
275
340
  }
276
341
 
277
342
  /**
@@ -288,8 +353,11 @@ export class OpenAIResponsesAdapter implements ProviderAdapter {
288
353
  };
289
354
  }
290
355
 
291
- private buildRequest(request: ProviderRequest, inputImages: string[]): ImagesRequest {
292
- const prompt = this.flattenToPrompt(request);
356
+ private buildRequest(request: ProviderRequest, selectedImages: ImageRef[]): ImagesRequest {
357
+ const inputImages = selectedImages.map(ref => ref.dataUrl);
358
+ const prompt = this.promptFormat === 'transcript'
359
+ ? this.flattenToTranscript(request, selectedImages)
360
+ : this.flattenToPrompt(request);
293
361
 
294
362
  const imagesRequest: ImagesRequest = {
295
363
  model: request.model,
@@ -362,6 +430,78 @@ export class OpenAIResponsesAdapter implements ProviderAdapter {
362
430
  return parts.join('\n\n');
363
431
  }
364
432
 
433
+ private systemText(request: ProviderRequest): string {
434
+ if (!request.system) return '';
435
+ if (typeof request.system === 'string') return request.system;
436
+ return (request.system as any[])
437
+ .filter((b: any) => b.type === 'text')
438
+ .map((b: any) => b.text)
439
+ .join('\n');
440
+ }
441
+
442
+ /**
443
+ * Flatten the conversation into a role-delimited transcript.
444
+ *
445
+ * Each message becomes (part of) a `### User` / `### Assistant` turn;
446
+ * consecutive same-role messages share one header. Text blocks are kept
447
+ * verbatim. Image blocks become `[Image N]` (N = 1-based position in the
448
+ * attached `image[]` list) when the image is attached, or
449
+ * `[Image omitted]` when it fell outside the input-image cap. An
450
+ * assistant message that only carried an image therefore still appears
451
+ * as an assistant turn — that is what lets a previous generation read as
452
+ * the assistant's own prior output. The prompt ends with an open
453
+ * `### Assistant` header for the turn being generated.
454
+ */
455
+ private flattenToTranscript(request: ProviderRequest, selectedImages: ImageRef[]): string {
456
+ const attachedIndex = new Map<string, number>();
457
+ selectedImages.forEach((ref, i) => attachedIndex.set(`${ref.msgIndex}:${ref.blockIndex}`, i + 1));
458
+
459
+ const sections: string[] = [];
460
+ const systemText = this.systemText(request);
461
+ if (systemText) sections.push(systemText);
462
+ if (this.transcriptPreamble) sections.push(this.transcriptPreamble);
463
+
464
+ const turns: string[] = [];
465
+ let currentRole: 'User' | 'Assistant' | undefined;
466
+ let currentLines: string[] = [];
467
+ const flushTurn = () => {
468
+ if (!currentRole) return;
469
+ const body = currentLines.join('\n').trim();
470
+ if (body) turns.push(`### ${currentRole}\n${body}`);
471
+ currentLines = [];
472
+ };
473
+
474
+ (request.messages as any[] | undefined)?.forEach((msg, msgIndex) => {
475
+ const role: 'User' | 'Assistant' = msg.role === 'assistant' ? 'Assistant' : 'User';
476
+ const lines: string[] = [];
477
+
478
+ if (typeof msg.content === 'string') {
479
+ if (msg.content) lines.push(msg.content);
480
+ } else if (Array.isArray(msg.content)) {
481
+ msg.content.forEach((block: any, blockIndex: number) => {
482
+ if (block?.type === 'text' && block.text) {
483
+ lines.push(block.text);
484
+ } else if (block?.type === 'image') {
485
+ const n = attachedIndex.get(`${msgIndex}:${blockIndex}`);
486
+ lines.push(n !== undefined ? `[Image ${n}]` : '[Image omitted]');
487
+ }
488
+ });
489
+ }
490
+ if (lines.length === 0) return;
491
+
492
+ if (role !== currentRole) {
493
+ flushTurn();
494
+ currentRole = role;
495
+ }
496
+ currentLines.push(...lines);
497
+ });
498
+ flushTurn();
499
+
500
+ sections.push(turns.join('\n\n'));
501
+ sections.push('### Assistant');
502
+ return sections.filter(Boolean).join('\n\n');
503
+ }
504
+
365
505
  // --------------------------------------------------------------------------
366
506
  // Response Parsing
367
507
  // --------------------------------------------------------------------------