@animalabs/membrane 0.5.40 → 0.5.42

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 (49) hide show
  1. package/dist/formatters/pseudo-prefill.d.ts +71 -0
  2. package/dist/formatters/pseudo-prefill.d.ts.map +1 -0
  3. package/dist/formatters/pseudo-prefill.js +410 -0
  4. package/dist/formatters/pseudo-prefill.js.map +1 -0
  5. package/dist/membrane.d.ts +5 -0
  6. package/dist/membrane.d.ts.map +1 -1
  7. package/dist/membrane.js +91 -44
  8. package/dist/membrane.js.map +1 -1
  9. package/dist/providers/bedrock.d.ts.map +1 -1
  10. package/dist/providers/bedrock.js +27 -8
  11. package/dist/providers/bedrock.js.map +1 -1
  12. package/dist/providers/gemini.d.ts.map +1 -1
  13. package/dist/providers/gemini.js +11 -2
  14. package/dist/providers/gemini.js.map +1 -1
  15. package/dist/providers/openai-compatible.d.ts.map +1 -1
  16. package/dist/providers/openai-compatible.js +27 -16
  17. package/dist/providers/openai-compatible.js.map +1 -1
  18. package/dist/providers/openai-completions.d.ts.map +1 -1
  19. package/dist/providers/openai-completions.js +48 -24
  20. package/dist/providers/openai-completions.js.map +1 -1
  21. package/dist/providers/openai-responses.d.ts.map +1 -1
  22. package/dist/providers/openai-responses.js +6 -1
  23. package/dist/providers/openai-responses.js.map +1 -1
  24. package/dist/providers/openai.d.ts.map +1 -1
  25. package/dist/providers/openai.js +27 -16
  26. package/dist/providers/openai.js.map +1 -1
  27. package/dist/providers/openrouter.d.ts.map +1 -1
  28. package/dist/providers/openrouter.js +37 -17
  29. package/dist/providers/openrouter.js.map +1 -1
  30. package/dist/providers/utils.d.ts +44 -0
  31. package/dist/providers/utils.d.ts.map +1 -0
  32. package/dist/providers/utils.js +100 -0
  33. package/dist/providers/utils.js.map +1 -0
  34. package/dist/transforms/prefill.d.ts.map +1 -1
  35. package/dist/transforms/prefill.js +44 -45
  36. package/dist/transforms/prefill.js.map +1 -1
  37. package/dist/types/request.d.ts +8 -0
  38. package/dist/types/request.d.ts.map +1 -1
  39. package/package.json +2 -1
  40. package/src/membrane.ts +96 -46
  41. package/src/providers/bedrock.ts +25 -9
  42. package/src/providers/gemini.ts +9 -2
  43. package/src/providers/openai-compatible.ts +27 -18
  44. package/src/providers/openai-completions.ts +47 -25
  45. package/src/providers/openai-responses.ts +5 -1
  46. package/src/providers/openai.ts +27 -18
  47. package/src/providers/openrouter.ts +36 -19
  48. package/src/providers/utils.ts +109 -0
  49. package/src/types/request.ts +9 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Safely parse a JSON string, returning an empty object on failure.
3
+ * Used for tool call arguments which may be malformed from streaming.
4
+ */
5
+ export function safeParseJson(str) {
6
+ try {
7
+ return JSON.parse(str || '{}');
8
+ }
9
+ catch (e) {
10
+ console.warn('[membrane] Failed to parse tool arguments JSON:', e);
11
+ return {};
12
+ }
13
+ }
14
+ /**
15
+ * Create a combined AbortSignal that fires on either the caller's signal
16
+ * or a timeout (whichever comes first).
17
+ *
18
+ * The returned `cleanup` function MUST be called in a `finally` block to
19
+ * clear the timeout and remove the event listener, preventing leaks.
20
+ *
21
+ * Timeout aborts with `DOMException('Request timed out', 'AbortError')`
22
+ * so it classifies identically to user-initiated aborts.
23
+ */
24
+ export function createCombinedSignal(signal, timeoutMs) {
25
+ if (!signal && !timeoutMs)
26
+ return {};
27
+ if (signal && !timeoutMs)
28
+ return { signal };
29
+ const controller = new AbortController();
30
+ let timeoutId;
31
+ if (timeoutMs) {
32
+ timeoutId = setTimeout(() => controller.abort(new DOMException('Request timed out', 'AbortError')), timeoutMs);
33
+ }
34
+ const onAbort = () => controller.abort(signal.reason);
35
+ if (signal) {
36
+ if (signal.aborted) {
37
+ controller.abort(signal.reason);
38
+ }
39
+ else {
40
+ signal.addEventListener('abort', onAbort, { once: true });
41
+ }
42
+ }
43
+ return {
44
+ signal: controller.signal,
45
+ cleanup: () => {
46
+ if (timeoutId)
47
+ clearTimeout(timeoutId);
48
+ if (signal)
49
+ signal.removeEventListener('abort', onAbort);
50
+ },
51
+ };
52
+ }
53
+ /**
54
+ * SSE (Server-Sent Events) line parser that correctly handles events
55
+ * split across multiple TCP chunks.
56
+ *
57
+ * The naive approach of `chunk.split('\n').filter(l => l.startsWith('data: '))`
58
+ * silently drops events when an SSE line spans two chunks:
59
+ * Chunk 1: `data: {"choices":[{"delta":{"content":"don'` (no newline — incomplete)
60
+ * Chunk 2: `t do that"}}]}\n` (doesn't start with `data: `)
61
+ * Result: the entire event is lost, causing "skipped words" in output.
62
+ *
63
+ * This parser buffers partial lines and only yields complete `data: ...` lines.
64
+ */
65
+ export class SSELineParser {
66
+ buffer = '';
67
+ /**
68
+ * Feed a raw chunk from the stream reader and get back complete SSE data lines.
69
+ * Each returned string is the content after `data: ` (e.g. the JSON payload or `[DONE]`).
70
+ */
71
+ feed(chunk) {
72
+ this.buffer += chunk;
73
+ const results = [];
74
+ // Split on newlines, keeping the last (potentially incomplete) segment in the buffer
75
+ const lines = this.buffer.split('\n');
76
+ this.buffer = lines.pop() || '';
77
+ for (const line of lines) {
78
+ const trimmed = line.trim();
79
+ if (trimmed.startsWith('data: ')) {
80
+ results.push(trimmed.slice(6));
81
+ }
82
+ // Skip empty lines, comments (`:...`), and other SSE fields (event:, id:, retry:)
83
+ }
84
+ return results;
85
+ }
86
+ /**
87
+ * Flush any remaining buffered content (call when stream ends).
88
+ */
89
+ flush() {
90
+ if (!this.buffer.trim())
91
+ return [];
92
+ const trimmed = this.buffer.trim();
93
+ this.buffer = '';
94
+ if (trimmed.startsWith('data: ')) {
95
+ return [trimmed.slice(6)];
96
+ }
97
+ return [];
98
+ }
99
+ }
100
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/providers/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prefill.d.ts","sourceRoot":"","sources":["../../src/transforms/prefill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,iBAAiB,EAGjB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAQ3B;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAM1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAAC;CAC1C;AAMD,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,aAAa,EAAE,oBAAoB,EAAE,CAAC;IAEtC,kDAAkD;IAClD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAE5B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IAEf,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAEpB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IAEzB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,sCAAsC;IACtC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAMD,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wDAAwD;IACxD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,mCAAmC;IACnC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;IAEvD,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,mDAAmD;IACnD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CA6NxB;AA4LD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,sBAAsB,EACtC,WAAW,EAAE,MAAM,GAClB,sBAAsB,CAuBxB"}
1
+ {"version":3,"file":"prefill.d.ts","sourceRoot":"","sources":["../../src/transforms/prefill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,iBAAiB,EAGjB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAQ3B;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAM1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAAC;CAC1C;AAMD,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,aAAa,EAAE,oBAAoB,EAAE,CAAC;IAEtC,kDAAkD;IAClD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAE5B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IAEf,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAEpB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IAEzB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,sCAAsC;IACtC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAMD,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wDAAwD;IACxD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,mCAAmC;IACnC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;IAEvD,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,mDAAmD;IACnD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CA4NxB;AA4LD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,sBAAsB,EACtC,WAAW,EAAE,MAAM,GAClB,sBAAsB,CAuBxB"}
@@ -35,6 +35,15 @@ export function transformToPrefill(request, options = {}) {
35
35
  // Track conversation lines for current section
36
36
  let currentConversation = [];
37
37
  let lastNonEmptyParticipant = null;
38
+ // Calculate tool injection point based on total message count (not current segment)
39
+ // Tools should be injected N messages from the end of the entire conversation
40
+ const totalMessages = messages.length;
41
+ const toolInjectionIndex = Math.max(0, totalMessages - toolInjectionPosition);
42
+ let toolsInjected = false;
43
+ const hasToolsForConversation = toolInjectionMode === 'conversation' &&
44
+ request.tools &&
45
+ request.tools.length > 0;
46
+ const toolsText = hasToolsForConversation ? formatToolsForInjection(request.tools) : '';
38
47
  // Build system prompt
39
48
  let systemText = request.system ?? '';
40
49
  // Inject tool definitions into system prompt if mode is 'system'
@@ -126,6 +135,13 @@ export function transformToPrefill(request, options = {}) {
126
135
  }
127
136
  passedCacheMarker = true;
128
137
  }
138
+ // Inject tools BEFORE this message if we've reached the injection point
139
+ // For short conversations (toolInjectionIndex <= 0), inject at the very beginning (i === 0)
140
+ const shouldInjectHere = toolInjectionIndex > 0 ? i >= toolInjectionIndex : i === 0;
141
+ if (hasToolsForConversation && !toolsInjected && shouldInjectHere) {
142
+ currentConversation.push(toolsText);
143
+ toolsInjected = true;
144
+ }
129
145
  // Check bot continuation logic
130
146
  const isBotMessage = message.participant === assistantName;
131
147
  const isContinuation = isBotMessage && lastNonEmptyParticipant === assistantName && !hasToolResult;
@@ -134,13 +150,8 @@ export function transformToPrefill(request, options = {}) {
134
150
  continue;
135
151
  }
136
152
  else if (isLastMessage && isEmpty) {
137
- // Completion target - optionally start with thinking tag
138
- if (prefillThinking) {
139
- currentConversation.push(`${message.participant}: <thinking>`);
140
- }
141
- else {
142
- currentConversation.push(`${message.participant}:`);
143
- }
153
+ // Completion target - turn prefix will be added AFTER tool injection
154
+ // (handled below, not here)
144
155
  }
145
156
  else if (text) {
146
157
  // Regular message - append delimiter if configured
@@ -150,45 +161,33 @@ export function transformToPrefill(request, options = {}) {
150
161
  }
151
162
  }
152
163
  }
153
- // Flush any remaining conversation, inject tools if mode is 'conversation'
164
+ // Determine the turn prefix to use (added AFTER tool injection)
165
+ let turnPrefix;
166
+ if (prefillThinking) {
167
+ turnPrefix = `${assistantName}: <thinking>`;
168
+ }
169
+ else {
170
+ turnPrefix = `${assistantName}:`;
171
+ }
172
+ // Flush any remaining conversation
173
+ // If tools haven't been injected yet (short conversation), add them now
174
+ if (hasToolsForConversation && !toolsInjected) {
175
+ currentConversation.push(toolsText);
176
+ toolsInjected = true;
177
+ }
178
+ // Add turn prefix at the very end (after tools and all messages)
154
179
  if (currentConversation.length > 0) {
155
- const hasToolsForConversation = toolInjectionMode === 'conversation' &&
156
- request.tools &&
157
- request.tools.length > 0;
158
- if (hasToolsForConversation) {
159
- // Inject tools into assistant content
160
- const toolsText = formatToolsForInjection(request.tools);
161
- if (currentConversation.length > toolInjectionPosition) {
162
- // Long conversation: insert tools ~N messages from the end
163
- const splitPoint = currentConversation.length - toolInjectionPosition;
164
- const beforeTools = currentConversation.slice(0, splitPoint);
165
- const afterTools = currentConversation.slice(splitPoint);
166
- const combined = [
167
- ...beforeTools,
168
- toolsText,
169
- ...afterTools,
170
- ].join(joiner);
171
- providerMessages.push({
172
- role: 'assistant',
173
- content: combined,
174
- });
175
- }
176
- else {
177
- // Short conversation: inject tools at the end (right before completion point)
178
- const combined = [...currentConversation, toolsText].join(joiner);
179
- providerMessages.push({
180
- role: 'assistant',
181
- content: combined,
182
- });
183
- }
184
- }
185
- else {
186
- // No tool injection needed
187
- providerMessages.push({
188
- role: 'assistant',
189
- content: currentConversation.join(joiner),
190
- });
191
- }
180
+ providerMessages.push({
181
+ role: 'assistant',
182
+ content: [...currentConversation, turnPrefix].join(joiner),
183
+ });
184
+ }
185
+ else {
186
+ // Empty conversation, just turn prefix
187
+ providerMessages.push({
188
+ role: 'assistant',
189
+ content: turnPrefix,
190
+ });
192
191
  }
193
192
  // Build stop sequences from participants
194
193
  const stopSequences = buildStopSequences(messages, assistantName, maxParticipantsForStop, additionalStopSequences);
@@ -1 +1 @@
1
- {"version":3,"file":"prefill.js","sourceRoot":"","sources":["../../src/transforms/prefill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefill.js","sourceRoot":"","sources":["../../src/transforms/prefill.ts"],"names":[],"mappings":"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"}
@@ -102,6 +102,14 @@ export interface NormalizedRequest {
102
102
  * Default: 'Claude'
103
103
  */
104
104
  assistantParticipant?: string;
105
+ /**
106
+ * Control streaming behavior when calling membrane.stream().
107
+ * - true or undefined: use streaming (default)
108
+ * - false: force non-streaming — membrane.stream() will internally use
109
+ * complete() and synthesize streaming callbacks from the full response.
110
+ * Useful for working around provider streaming bugs.
111
+ */
112
+ streaming?: boolean;
105
113
  /** Provider-specific parameters (pass-through) */
106
114
  providerParams?: Record<string, unknown>;
107
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/types/request.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IAEd,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,qCAAqC;IACrC,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF,uCAAuC;IACvC,eAAe,CAAC,EAAE;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;QACjC,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;QACtD,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;KAC1C,CAAC;CACH;AAMD,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,YAAY,GACZ,oBAAoB,CAAC;AAEzB,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAEhC,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAMD,MAAM,MAAM,QAAQ,GAChB,KAAK,GACL,QAAQ,GACR,MAAM,CAAC;AAMX,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IAEzB,uBAAuB;IACvB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IAEzB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,kCAAkC;IAClC,aAAa,CAAC,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAAC;IAE9C;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/types/request.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@animalabs/membrane",
3
- "version": "0.5.40",
3
+ "version": "0.5.42",
4
4
  "description": "LLM middleware - a selective boundary that transforms what passes through",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
+ "bun": "./src/index.ts",
10
11
  "types": "./dist/index.d.ts",
11
12
  "import": "./dist/index.js"
12
13
  }
package/src/membrane.ts CHANGED
@@ -152,9 +152,9 @@ export class Membrane {
152
152
  }
153
153
  }
154
154
 
155
- // Wait before retry
155
+ // Wait before retry (abort-aware)
156
156
  const delay = this.calculateRetryDelay(attempts);
157
- await this.sleep(delay);
157
+ await this.sleep(delay, options.signal);
158
158
  continue;
159
159
  }
160
160
 
@@ -185,6 +185,26 @@ export class Membrane {
185
185
  request: NormalizedRequest,
186
186
  options: StreamOptions = {}
187
187
  ): Promise<NormalizedResponse | AbortedResponse> {
188
+ // If streaming is explicitly disabled on the request, fall back to complete()
189
+ // and synthesize the streaming callbacks from the full response
190
+ if (request.streaming === false) {
191
+ const response = await this.complete(request, options);
192
+ // Synthesize onChunk callbacks so callers that depend on them still work
193
+ if (options.onChunk && 'content' in response) {
194
+ for (let i = 0; i < response.content.length; i++) {
195
+ const block = response.content[i]!;
196
+ if (block.type === 'text' && block.text) {
197
+ options.onChunk(block.text, {
198
+ type: 'text',
199
+ visible: true,
200
+ blockIndex: i,
201
+ });
202
+ }
203
+ }
204
+ }
205
+ return response;
206
+ }
207
+
188
208
  // Determine tool mode
189
209
  const toolMode = this.resolveToolMode(request);
190
210
 
@@ -255,6 +275,7 @@ export class Membrane {
255
275
  let totalUsage: DetailedUsage = { inputTokens: 0, outputTokens: 0 };
256
276
  const contentBlocks: ContentBlock[] = [];
257
277
  let lastStopReason: StopReason = 'end_turn';
278
+ let lastStopSequence: string | undefined;
258
279
  let rawRequest: unknown;
259
280
  let rawResponse: unknown;
260
281
 
@@ -393,6 +414,7 @@ export class Membrane {
393
414
  onResponse?.(rawResponse);
394
415
 
395
416
  lastStopReason = this.mapStopReason(streamResult.stopReason);
417
+ lastStopSequence = streamResult.stopSequence ?? undefined;
396
418
 
397
419
  // Accumulate usage (including cache metrics)
398
420
  totalUsage.inputTokens += streamResult.usage.inputTokens;
@@ -662,7 +684,8 @@ export class Membrane {
662
684
  rawResponse,
663
685
  executedToolCalls,
664
686
  executedToolResults,
665
- initialBlockType
687
+ initialBlockType,
688
+ lastStopSequence
666
689
  );
667
690
 
668
691
  // Append non-text content blocks (e.g., generated_image) that the XML parser can't handle
@@ -715,6 +738,7 @@ export class Membrane {
715
738
  let toolDepth = 0;
716
739
  let totalUsage: DetailedUsage = { inputTokens: 0, outputTokens: 0 };
717
740
  let lastStopReason: StopReason = 'end_turn';
741
+ let lastStopSequence: string | undefined;
718
742
  let rawRequest: unknown;
719
743
  let rawResponse: unknown;
720
744
 
@@ -772,6 +796,7 @@ export class Membrane {
772
796
  onResponse?.(rawResponse);
773
797
 
774
798
  lastStopReason = this.mapStopReason(streamResult.stopReason);
799
+ lastStopSequence = streamResult.stopSequence ?? undefined;
775
800
 
776
801
  // Accumulate usage (including cache metrics)
777
802
  totalUsage.inputTokens += streamResult.usage.inputTokens;
@@ -881,6 +906,7 @@ export class Membrane {
881
906
  details: {
882
907
  stop: {
883
908
  reason: lastStopReason,
909
+ triggeredSequence: lastStopSequence,
884
910
  wasTruncated: lastStopReason === 'max_tokens',
885
911
  },
886
912
  usage: { ...totalUsage },
@@ -1061,6 +1087,24 @@ export class Membrane {
1061
1087
  // Internal Methods
1062
1088
  // ==========================================================================
1063
1089
 
1090
+ /**
1091
+ * Extract base provider params from config, with thinking temperature enforcement.
1092
+ * Used by transformRequest, buildContinuationRequest, and buildContinuationRequestWithImages.
1093
+ */
1094
+ private getBaseProviderParams(config: NormalizedRequest['config']) {
1095
+ // Anthropic requires temperature=1 when extended thinking is enabled
1096
+ const temperature = config.thinking?.enabled ? 1 : config.temperature;
1097
+ return {
1098
+ model: config.model,
1099
+ maxTokens: config.maxTokens,
1100
+ temperature,
1101
+ topP: config.topP,
1102
+ topK: config.topK,
1103
+ presencePenalty: config.presencePenalty,
1104
+ frequencyPenalty: config.frequencyPenalty,
1105
+ };
1106
+ }
1107
+
1064
1108
  /**
1065
1109
  * Transform a normalized request into provider format using the formatter
1066
1110
  */
@@ -1097,13 +1141,7 @@ export class Membrane {
1097
1141
  });
1098
1142
 
1099
1143
  const providerRequest = {
1100
- model: request.config.model,
1101
- maxTokens: request.config.maxTokens,
1102
- temperature: request.config.temperature,
1103
- topP: request.config.topP,
1104
- topK: request.config.topK,
1105
- presencePenalty: request.config.presencePenalty,
1106
- frequencyPenalty: request.config.frequencyPenalty,
1144
+ ...this.getBaseProviderParams(request.config),
1107
1145
  messages: buildResult.messages,
1108
1146
  system: buildResult.systemContent,
1109
1147
  stopSequences: buildResult.stopSequences,
@@ -1152,9 +1190,7 @@ export class Membrane {
1152
1190
  }
1153
1191
 
1154
1192
  return {
1155
- model: originalRequest.config.model,
1156
- maxTokens: originalRequest.config.maxTokens,
1157
- temperature: originalRequest.config.temperature,
1193
+ ...this.getBaseProviderParams(originalRequest.config),
1158
1194
  messages,
1159
1195
  system: prefillResult.systemContent
1160
1196
  ? (Array.isArray(prefillResult.systemContent) && prefillResult.systemContent.length > 0
@@ -1162,7 +1198,11 @@ export class Membrane {
1162
1198
  : prefillResult.systemContent)
1163
1199
  : undefined,
1164
1200
  stopSequences: prefillResult.stopSequences,
1165
- extra: originalRequest.providerParams,
1201
+ extra: {
1202
+ ...originalRequest.providerParams,
1203
+ // Pre-serialized prompt for completions adapters — skip re-serialization
1204
+ prompt: trimmedAccumulated,
1205
+ },
1166
1206
  };
1167
1207
  }
1168
1208
 
@@ -1193,42 +1233,34 @@ export class Membrane {
1193
1233
  // Anthropic quirk: assistant content cannot end with trailing whitespace
1194
1234
  const trimmedAccumulated = accumulated.trimEnd();
1195
1235
 
1196
- // Build messages: copy existing, then modify/add for split-turn
1197
- const messages: any[] = [];
1236
+ // Build messages: copy all, then replace only the last assistant with split-turn
1237
+ const messages: any[] = prefillResult.messages.map(msg => ({ ...msg }));
1198
1238
 
1199
- // Copy all messages except the last assistant message
1200
- for (const msg of prefillResult.messages) {
1201
- if (msg.role === 'assistant') {
1202
- // Skip - we'll add our own assistant messages
1203
- continue;
1239
+ // Find last assistant replace in-place via splice to preserve history
1240
+ let insertIdx = messages.length;
1241
+ for (let idx = messages.length - 1; idx >= 0; idx--) {
1242
+ if (messages[idx].role === 'assistant') {
1243
+ insertIdx = idx;
1244
+ break;
1204
1245
  }
1205
- messages.push({ ...msg });
1206
1246
  }
1207
1247
 
1208
- // Add assistant message with accumulated content (ends mid-XML)
1209
- messages.push({
1210
- role: 'assistant',
1211
- content: trimmedAccumulated,
1212
- });
1213
-
1214
- // Add user message with just the images
1215
- messages.push({
1216
- role: 'user',
1217
- content: images,
1218
- });
1219
-
1220
- // Add assistant prefill with closing XML tags
1221
1248
  // Anthropic quirk: assistant content cannot end with trailing whitespace
1222
1249
  const trimmedAfterXml = afterImageXml.trimEnd();
1223
- messages.push({
1224
- role: 'assistant',
1225
- content: trimmedAfterXml,
1226
- });
1250
+ const splitTurnMessages = [
1251
+ { role: 'assistant', content: trimmedAccumulated },
1252
+ { role: 'user', content: images },
1253
+ { role: 'assistant', content: trimmedAfterXml },
1254
+ ];
1255
+
1256
+ if (insertIdx < messages.length) {
1257
+ messages.splice(insertIdx, 1, ...splitTurnMessages);
1258
+ } else {
1259
+ messages.push(...splitTurnMessages);
1260
+ }
1227
1261
 
1228
1262
  return {
1229
- model: originalRequest.config.model,
1230
- maxTokens: originalRequest.config.maxTokens,
1231
- temperature: originalRequest.config.temperature,
1263
+ ...this.getBaseProviderParams(originalRequest.config),
1232
1264
  messages,
1233
1265
  system: prefillResult.systemContent
1234
1266
  ? (Array.isArray(prefillResult.systemContent) && prefillResult.systemContent.length > 0
@@ -1384,7 +1416,8 @@ export class Membrane {
1384
1416
  rawResponse: unknown,
1385
1417
  executedToolCalls: ToolCall[] = [],
1386
1418
  executedToolResults: ToolResult[] = [],
1387
- startInsideBlock: 'thinking' | 'tool_call' | 'tool_result' | null = null
1419
+ startInsideBlock: 'thinking' | 'tool_call' | 'tool_result' | null = null,
1420
+ triggeredSequence?: string
1388
1421
  ): NormalizedResponse {
1389
1422
  // Parse accumulated text into structured content blocks
1390
1423
  // This extracts thinking, tool_use, tool_result, and text blocks
@@ -1420,6 +1453,7 @@ export class Membrane {
1420
1453
  details: {
1421
1454
  stop: {
1422
1455
  reason: stopReason,
1456
+ triggeredSequence,
1423
1457
  wasTruncated: stopReason === 'max_tokens',
1424
1458
  },
1425
1459
  usage: {
@@ -1482,8 +1516,18 @@ export class Membrane {
1482
1516
  return new MembraneError(errorInfo);
1483
1517
  }
1484
1518
 
1485
- private sleep(ms: number): Promise<void> {
1486
- return new Promise((resolve) => setTimeout(resolve, ms));
1519
+ private sleep(ms: number, signal?: AbortSignal): Promise<void> {
1520
+ return new Promise((resolve, reject) => {
1521
+ if (signal?.aborted) {
1522
+ reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));
1523
+ return;
1524
+ }
1525
+ const timer = setTimeout(resolve, ms);
1526
+ signal?.addEventListener('abort', () => {
1527
+ clearTimeout(timer);
1528
+ reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));
1529
+ }, { once: true });
1530
+ });
1487
1531
  }
1488
1532
 
1489
1533
  /**
@@ -1598,6 +1642,7 @@ export class Membrane {
1598
1642
  let totalUsage: BasicUsage = { inputTokens: 0, outputTokens: 0 };
1599
1643
  const contentBlocks: ContentBlock[] = [];
1600
1644
  let lastStopReason: StopReason = 'end_turn';
1645
+ let lastStopSequence: string | undefined;
1601
1646
  let rawRequest: unknown;
1602
1647
  let rawResponse: unknown;
1603
1648
 
@@ -1721,6 +1766,7 @@ export class Membrane {
1721
1766
 
1722
1767
  rawResponse = streamResult.raw;
1723
1768
  lastStopReason = this.mapStopReason(streamResult.stopReason);
1769
+ lastStopSequence = streamResult.stopSequence ?? undefined;
1724
1770
 
1725
1771
  // Accumulate usage
1726
1772
  totalUsage.inputTokens += streamResult.usage.inputTokens;
@@ -1990,7 +2036,8 @@ export class Membrane {
1990
2036
  rawResponse,
1991
2037
  executedToolCalls,
1992
2038
  executedToolResults,
1993
- initialBlockType
2039
+ initialBlockType,
2040
+ lastStopSequence
1994
2041
  );
1995
2042
 
1996
2043
  stream.emit({ type: 'complete', response });
@@ -2030,6 +2077,7 @@ export class Membrane {
2030
2077
  let toolDepth = 0;
2031
2078
  let totalUsage: BasicUsage = { inputTokens: 0, outputTokens: 0 };
2032
2079
  let lastStopReason: StopReason = 'end_turn';
2080
+ let lastStopSequence: string | undefined;
2033
2081
  let rawRequest: unknown;
2034
2082
  let rawResponse: unknown;
2035
2083
 
@@ -2091,6 +2139,7 @@ export class Membrane {
2091
2139
 
2092
2140
  rawResponse = streamResult.raw;
2093
2141
  lastStopReason = this.mapStopReason(streamResult.stopReason);
2142
+ lastStopSequence = streamResult.stopSequence ?? undefined;
2094
2143
 
2095
2144
  // Accumulate usage
2096
2145
  totalUsage.inputTokens += streamResult.usage.inputTokens;
@@ -2188,6 +2237,7 @@ export class Membrane {
2188
2237
  details: {
2189
2238
  stop: {
2190
2239
  reason: lastStopReason,
2240
+ triggeredSequence: lastStopSequence,
2191
2241
  wasTruncated: lastStopReason === 'max_tokens',
2192
2242
  },
2193
2243
  usage: { ...totalUsage },