@animalabs/membrane 0.5.69 → 0.5.70
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/dist/formatters/index.d.ts +1 -0
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +1 -0
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/openai-responses.d.ts +23 -0
- package/dist/formatters/openai-responses.d.ts.map +1 -0
- package/dist/formatters/openai-responses.js +176 -0
- package/dist/formatters/openai-responses.js.map +1 -0
- package/dist/membrane.d.ts.map +1 -1
- package/dist/membrane.js +21 -2
- package/dist/membrane.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +28 -3
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai-responses-api.d.ts +129 -0
- package/dist/providers/openai-responses-api.d.ts.map +1 -0
- package/dist/providers/openai-responses-api.js +475 -0
- package/dist/providers/openai-responses-api.js.map +1 -0
- package/package.json +1 -1
- package/src/formatters/index.ts +4 -0
- package/src/formatters/openai-responses.ts +206 -0
- package/src/membrane.ts +23 -4
- package/src/providers/anthropic.ts +29 -4
- package/src/providers/index.ts +11 -0
- package/src/providers/openai-responses-api.ts +644 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export type { PrefillFormatter, StreamParser, FormatterConfig, BuildOptions, BuildResult, ParseResult, BlockType, ProviderMessage, } from './types.js';
|
|
5
5
|
export { AnthropicXmlFormatter, type AnthropicXmlFormatterConfig } from './anthropic-xml.js';
|
|
6
6
|
export { NativeFormatter, type NativeFormatterConfig } from './native.js';
|
|
7
|
+
export { OpenAIResponsesFormatter, OPENAI_RESPONSES_ITEMS_METADATA_KEY, } from './openai-responses.js';
|
|
7
8
|
export { CompletionsFormatter, type CompletionsFormatterConfig } from './completions.js';
|
|
8
9
|
export { normalizeToolPairs, MembraneNormalizerError, type NormalizeOptions, type NormalizeResult, type ProviderBlock, } from './normalize-tool-pairs.js';
|
|
9
10
|
export type { NormalizeEvent } from './types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/formatters/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { AnthropicXmlFormatter } from './anthropic-xml.js';
|
|
5
5
|
export { NativeFormatter } from './native.js';
|
|
6
|
+
export { OpenAIResponsesFormatter, OPENAI_RESPONSES_ITEMS_METADATA_KEY, } from './openai-responses.js';
|
|
6
7
|
export { CompletionsFormatter } from './completions.js';
|
|
7
8
|
export { normalizeToolPairs, MembraneNormalizerError, } from './normalize-tool-pairs.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAA8B,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAmC,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAIxB,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAA8B,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAmC,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAIxB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatter for stateless, provider-native OpenAI Responses histories.
|
|
3
|
+
*
|
|
4
|
+
* Imported/native items are carried either in message metadata under
|
|
5
|
+
* `openaiResponsesItems` or on content blocks as `rawItem`. Those items are
|
|
6
|
+
* emitted verbatim and in order. Normalized messages created after import are
|
|
7
|
+
* converted to Responses input items without rewriting the native prefix.
|
|
8
|
+
*/
|
|
9
|
+
import type { ContentBlock, NormalizedMessage, ToolCall, ToolResult } from '../types/index.js';
|
|
10
|
+
import type { BuildOptions, BuildResult, PrefillFormatter, StreamParser } from './types.js';
|
|
11
|
+
export declare const OPENAI_RESPONSES_ITEMS_METADATA_KEY = "openaiResponsesItems";
|
|
12
|
+
export declare class OpenAIResponsesFormatter implements PrefillFormatter {
|
|
13
|
+
readonly name = "openai-responses";
|
|
14
|
+
readonly usesPrefill = false;
|
|
15
|
+
buildMessages(messages: NormalizedMessage[], options: BuildOptions): BuildResult;
|
|
16
|
+
private convertBlocks;
|
|
17
|
+
formatToolResults(results: ToolResult[]): string;
|
|
18
|
+
createStreamParser(): StreamParser;
|
|
19
|
+
parseToolCalls(_content: string): ToolCall[];
|
|
20
|
+
hasToolUse(_content: string): boolean;
|
|
21
|
+
parseContentBlocks(content: string): ContentBlock[];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=openai-responses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/formatters/openai-responses.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAGX,gBAAgB,EAEhB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mCAAmC,yBAAyB,CAAC;AAgD1E,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,SAAS;IAE7B,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;IA0DhF,OAAO,CAAC,aAAa;IAwDrB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAQhD,kBAAkB,IAAI,YAAY;IAClC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAC5C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IACrC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;CAGpD"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatter for stateless, provider-native OpenAI Responses histories.
|
|
3
|
+
*
|
|
4
|
+
* Imported/native items are carried either in message metadata under
|
|
5
|
+
* `openaiResponsesItems` or on content blocks as `rawItem`. Those items are
|
|
6
|
+
* emitted verbatim and in order. Normalized messages created after import are
|
|
7
|
+
* converted to Responses input items without rewriting the native prefix.
|
|
8
|
+
*/
|
|
9
|
+
export const OPENAI_RESPONSES_ITEMS_METADATA_KEY = 'openaiResponsesItems';
|
|
10
|
+
class ResponsesPassthroughParser {
|
|
11
|
+
accumulated = '';
|
|
12
|
+
blockIndex = 0;
|
|
13
|
+
blockStarted = false;
|
|
14
|
+
push(chunk) { this.accumulated += chunk; }
|
|
15
|
+
processChunk(chunk) {
|
|
16
|
+
this.accumulated += chunk;
|
|
17
|
+
const meta = { type: 'text', visible: true, blockIndex: this.blockIndex };
|
|
18
|
+
const emissions = [];
|
|
19
|
+
const blockEvents = [];
|
|
20
|
+
if (!this.blockStarted) {
|
|
21
|
+
const event = { event: 'block_start', index: this.blockIndex, block: { type: 'text' } };
|
|
22
|
+
emissions.push({ kind: 'blockEvent', event });
|
|
23
|
+
blockEvents.push(event);
|
|
24
|
+
this.blockStarted = true;
|
|
25
|
+
}
|
|
26
|
+
emissions.push({ kind: 'content', text: chunk, meta });
|
|
27
|
+
return { emissions, content: [{ text: chunk, meta }], blockEvents };
|
|
28
|
+
}
|
|
29
|
+
flush() {
|
|
30
|
+
const emissions = [];
|
|
31
|
+
const blockEvents = [];
|
|
32
|
+
if (this.blockStarted) {
|
|
33
|
+
const event = {
|
|
34
|
+
event: 'block_complete', index: this.blockIndex,
|
|
35
|
+
block: { type: 'text', content: this.accumulated },
|
|
36
|
+
};
|
|
37
|
+
emissions.push({ kind: 'blockEvent', event });
|
|
38
|
+
blockEvents.push(event);
|
|
39
|
+
this.blockStarted = false;
|
|
40
|
+
}
|
|
41
|
+
return { emissions, content: [], blockEvents };
|
|
42
|
+
}
|
|
43
|
+
getAccumulated() { return this.accumulated; }
|
|
44
|
+
reset() { this.accumulated = ''; this.blockIndex = 0; this.blockStarted = false; }
|
|
45
|
+
isInsideBlock() { return false; }
|
|
46
|
+
getCurrentBlockType() { return 'text'; }
|
|
47
|
+
getBlockIndex() { return this.blockIndex; }
|
|
48
|
+
incrementBlockIndex() { this.blockIndex++; }
|
|
49
|
+
getDepths() { return { functionCalls: 0, functionResults: 0, thinking: 0 }; }
|
|
50
|
+
resetForNewIteration() { }
|
|
51
|
+
}
|
|
52
|
+
export class OpenAIResponsesFormatter {
|
|
53
|
+
name = 'openai-responses';
|
|
54
|
+
usesPrefill = false;
|
|
55
|
+
buildMessages(messages, options) {
|
|
56
|
+
const items = [];
|
|
57
|
+
let hasNativeHistory = false;
|
|
58
|
+
for (const message of messages) {
|
|
59
|
+
const nativeItems = message.metadata?.[OPENAI_RESPONSES_ITEMS_METADATA_KEY];
|
|
60
|
+
if (Array.isArray(nativeItems)) {
|
|
61
|
+
items.push(...nativeItems);
|
|
62
|
+
hasNativeHistory = true;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const seenRawItems = new Set();
|
|
66
|
+
let pendingParts = [];
|
|
67
|
+
const flushPending = () => {
|
|
68
|
+
if (pendingParts.length === 0)
|
|
69
|
+
return;
|
|
70
|
+
items.push(...this.convertBlocks(message, pendingParts, options.assistantParticipant));
|
|
71
|
+
pendingParts = [];
|
|
72
|
+
};
|
|
73
|
+
for (const block of message.content) {
|
|
74
|
+
const rawItem = block.rawItem;
|
|
75
|
+
if (!rawItem || typeof rawItem !== 'object') {
|
|
76
|
+
pendingParts.push(block);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
flushPending();
|
|
80
|
+
hasNativeHistory = true;
|
|
81
|
+
const key = typeof rawItem.id === 'string'
|
|
82
|
+
? `${rawItem.type ?? ''}:${rawItem.id}`
|
|
83
|
+
: JSON.stringify(rawItem);
|
|
84
|
+
if (!seenRawItems.has(key)) {
|
|
85
|
+
items.push(rawItem);
|
|
86
|
+
seenRawItems.add(key);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
flushPending();
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
// BuildResult's historical type says chat envelopes, but Membrane's
|
|
93
|
+
// provider boundary deliberately accepts unknown provider-native items.
|
|
94
|
+
messages: items,
|
|
95
|
+
// An imported rollout already contains its developer/system items.
|
|
96
|
+
// Re-injecting the recipe prompt would alter the stable prefix.
|
|
97
|
+
systemContent: hasNativeHistory ? undefined : options.systemPrompt,
|
|
98
|
+
stopSequences: options.additionalStopSequences ?? [],
|
|
99
|
+
nativeTools: options.tools?.map(tool => ({
|
|
100
|
+
type: 'function',
|
|
101
|
+
name: tool.name,
|
|
102
|
+
description: tool.description,
|
|
103
|
+
parameters: tool.inputSchema,
|
|
104
|
+
})),
|
|
105
|
+
ready: true,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
convertBlocks(message, blocks, assistantParticipant) {
|
|
109
|
+
const isAssistant = message.participant === assistantParticipant;
|
|
110
|
+
const out = [];
|
|
111
|
+
let messageParts = [];
|
|
112
|
+
const flushMessage = () => {
|
|
113
|
+
if (messageParts.length === 0)
|
|
114
|
+
return;
|
|
115
|
+
out.push({
|
|
116
|
+
type: 'message',
|
|
117
|
+
role: isAssistant ? 'assistant' : 'user',
|
|
118
|
+
content: messageParts,
|
|
119
|
+
});
|
|
120
|
+
messageParts = [];
|
|
121
|
+
};
|
|
122
|
+
for (const block of blocks) {
|
|
123
|
+
if (block.type === 'text') {
|
|
124
|
+
messageParts.push({
|
|
125
|
+
type: isAssistant ? 'output_text' : 'input_text',
|
|
126
|
+
text: block.text,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
else if (block.type === 'image' && !isAssistant) {
|
|
130
|
+
const source = block.source;
|
|
131
|
+
messageParts.push(source.type === 'url'
|
|
132
|
+
? { type: 'input_image', image_url: source.url }
|
|
133
|
+
: { type: 'input_image', image_url: `data:${source.mediaType};base64,${source.data}` });
|
|
134
|
+
}
|
|
135
|
+
else if (block.type === 'tool_use') {
|
|
136
|
+
flushMessage();
|
|
137
|
+
out.push({
|
|
138
|
+
type: 'function_call',
|
|
139
|
+
call_id: block.id,
|
|
140
|
+
name: block.name,
|
|
141
|
+
arguments: JSON.stringify(block.input ?? {}),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else if (block.type === 'tool_result') {
|
|
145
|
+
flushMessage();
|
|
146
|
+
out.push({
|
|
147
|
+
type: 'function_call_output',
|
|
148
|
+
call_id: block.toolUseId,
|
|
149
|
+
output: typeof block.content === 'string'
|
|
150
|
+
? block.content
|
|
151
|
+
: JSON.stringify(block.content),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else if (block.type === 'redacted_thinking') {
|
|
155
|
+
flushMessage();
|
|
156
|
+
out.push({ type: 'reasoning', encrypted_content: block.data });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
flushMessage();
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
formatToolResults(results) {
|
|
163
|
+
return JSON.stringify(results.map(result => ({
|
|
164
|
+
type: 'function_call_output',
|
|
165
|
+
call_id: result.toolUseId,
|
|
166
|
+
output: result.content,
|
|
167
|
+
})));
|
|
168
|
+
}
|
|
169
|
+
createStreamParser() { return new ResponsesPassthroughParser(); }
|
|
170
|
+
parseToolCalls(_content) { return []; }
|
|
171
|
+
hasToolUse(_content) { return false; }
|
|
172
|
+
parseContentBlocks(content) {
|
|
173
|
+
return content ? [{ type: 'text', text: content }] : [];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=openai-responses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/formatters/openai-responses.ts"],"names":[],"mappings":"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"}
|
package/dist/membrane.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"membrane.d.ts","sourceRoot":"","sources":["../src/membrane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,eAAe,EAEf,cAAc,EACd,aAAa,EACb,eAAe,EAYhB,MAAM,kBAAkB,CAAC;AAmB1B,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EAGtB,MAAM,4BAA4B,CAAC;AAiBpC,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAmB;gBAGlC,OAAO,EAAE,eAAe,EACxB,MAAM,GAAE,cAAmB;IAc7B;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IA6E9B;;;;;;;;;;;;;;;;;OAiBG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,GAAG,eAAe,CAAC;IA+BhD;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;;;OAMG;YACW,kBAAkB;IAwehC;;OAEG;YACW,qBAAqB;IAwOnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;
|
|
1
|
+
{"version":3,"file":"membrane.d.ts","sourceRoot":"","sources":["../src/membrane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,eAAe,EAEf,cAAc,EACd,aAAa,EACb,eAAe,EAYhB,MAAM,kBAAkB,CAAC;AAmB1B,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EAGtB,MAAM,4BAA4B,CAAC;AAiBpC,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAmB;gBAGlC,OAAO,EAAE,eAAe,EACxB,MAAM,GAAE,cAAmB;IAc7B;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IA6E9B;;;;;;;;;;;;;;;;;OAiBG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,GAAG,eAAe,CAAC;IA+BhD;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;;;OAMG;YACW,kBAAkB;IAwehC;;OAEG;YACW,qBAAqB;IAwOnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8L9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqD5B;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAkBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;;;;;;OAOG;YACW,sBAAsB;IASpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAIpC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAmEV,UAAU;IA+BxB,OAAO,CAAC,wBAAwB;IA8ChC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,kCAAkC;IAoD1C,OAAO,CAAC,iBAAiB;IAqIzB,OAAO,CAAC,kBAAkB;IAkF1B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,cAAc;IAItB,qFAAqF;IACrF,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,KAAK;IAcb;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,cAAc,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,qBAA0B,GAClC,cAAc;IAWjB;;OAEG;YACW,mBAAmB;IAwdjC;;OAEG;YACW,sBAAsB;CAmSrC"}
|
package/dist/membrane.js
CHANGED
|
@@ -149,7 +149,7 @@ export class Membrane {
|
|
|
149
149
|
// Auto mode: choose based on formatter
|
|
150
150
|
// NativeFormatter → native tools via API
|
|
151
151
|
// AnthropicXmlFormatter (default) → XML tools in prefill
|
|
152
|
-
if (this.formatter.name === 'native') {
|
|
152
|
+
if (this.formatter.name === 'native' || this.formatter.name === 'openai-responses') {
|
|
153
153
|
return 'native';
|
|
154
154
|
}
|
|
155
155
|
// Also handle known native-tool providers regardless of formatter
|
|
@@ -731,6 +731,13 @@ export class Membrane {
|
|
|
731
731
|
* Build a provider request with native tool support
|
|
732
732
|
*/
|
|
733
733
|
buildNativeToolRequest(request, messages) {
|
|
734
|
+
// Provider-native formatters own their complete input-item shape. The
|
|
735
|
+
// legacy implementation below is intentionally Anthropic-specific; using
|
|
736
|
+
// it for Responses would normalize away item IDs, encrypted reasoning,
|
|
737
|
+
// assistant phases, and compaction items.
|
|
738
|
+
if (this.formatter.name === 'openai-responses') {
|
|
739
|
+
return this.transformRequest({ ...request, messages }, this.formatter).providerRequest;
|
|
740
|
+
}
|
|
734
741
|
// Convert messages to provider format
|
|
735
742
|
const providerMessages = [];
|
|
736
743
|
const assistantName = request.assistantParticipant
|
|
@@ -910,7 +917,10 @@ export class Membrane {
|
|
|
910
917
|
const blocks = [];
|
|
911
918
|
for (const item of content) {
|
|
912
919
|
if (item.type === 'text') {
|
|
913
|
-
blocks.push({
|
|
920
|
+
blocks.push({
|
|
921
|
+
type: 'text', text: item.text,
|
|
922
|
+
...(item.rawItem ? { rawItem: item.rawItem } : {}),
|
|
923
|
+
});
|
|
914
924
|
}
|
|
915
925
|
else if (item.type === 'tool_use') {
|
|
916
926
|
blocks.push({
|
|
@@ -918,6 +928,7 @@ export class Membrane {
|
|
|
918
928
|
id: item.id,
|
|
919
929
|
name: unsanitizeToolName(item.name),
|
|
920
930
|
input: item.input,
|
|
931
|
+
...(item.rawItem ? { rawItem: item.rawItem } : {}),
|
|
921
932
|
});
|
|
922
933
|
}
|
|
923
934
|
else if (item.type === 'thinking') {
|
|
@@ -925,6 +936,7 @@ export class Membrane {
|
|
|
925
936
|
type: 'thinking',
|
|
926
937
|
thinking: item.thinking ?? '',
|
|
927
938
|
...(item.signature ? { signature: item.signature } : {}),
|
|
939
|
+
...(item.rawItem ? { rawItem: item.rawItem } : {}),
|
|
928
940
|
});
|
|
929
941
|
}
|
|
930
942
|
else if (item.type === 'redacted_thinking') {
|
|
@@ -938,6 +950,13 @@ export class Membrane {
|
|
|
938
950
|
mimeType: item.mimeType,
|
|
939
951
|
});
|
|
940
952
|
}
|
|
953
|
+
else if (item.rawItem) {
|
|
954
|
+
// Opaque Responses items such as encrypted compaction or custom
|
|
955
|
+
// tool records have no normalized ContentBlock equivalent. Retain a
|
|
956
|
+
// zero-width carrier so Chronicle and the Responses formatter can
|
|
957
|
+
// replay the raw item without surfacing synthetic prompt text.
|
|
958
|
+
blocks.push({ type: 'text', text: '', rawItem: item.rawItem });
|
|
959
|
+
}
|
|
941
960
|
}
|
|
942
961
|
return blocks;
|
|
943
962
|
}
|