@animalabs/membrane 0.5.55 → 0.5.64

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 (43) hide show
  1. package/dist/formatters/native.d.ts.map +1 -1
  2. package/dist/formatters/native.js +11 -0
  3. package/dist/formatters/native.js.map +1 -1
  4. package/dist/membrane.d.ts +28 -0
  5. package/dist/membrane.d.ts.map +1 -1
  6. package/dist/membrane.js +169 -17
  7. package/dist/membrane.js.map +1 -1
  8. package/dist/providers/anthropic.d.ts.map +1 -1
  9. package/dist/providers/anthropic.js +94 -3
  10. package/dist/providers/anthropic.js.map +1 -1
  11. package/dist/providers/bedrock.d.ts.map +1 -1
  12. package/dist/providers/bedrock.js +14 -4
  13. package/dist/providers/bedrock.js.map +1 -1
  14. package/dist/providers/openai-compatible.d.ts.map +1 -1
  15. package/dist/providers/openai-compatible.js +3 -0
  16. package/dist/providers/openai-compatible.js.map +1 -1
  17. package/dist/providers/openai-completions.d.ts.map +1 -1
  18. package/dist/providers/openai-completions.js +57 -3
  19. package/dist/providers/openai-completions.js.map +1 -1
  20. package/dist/providers/openai.d.ts.map +1 -1
  21. package/dist/providers/openai.js +3 -0
  22. package/dist/providers/openai.js.map +1 -1
  23. package/dist/types/content.d.ts +6 -0
  24. package/dist/types/content.d.ts.map +1 -1
  25. package/dist/types/content.js.map +1 -1
  26. package/dist/types/provider.d.ts +9 -0
  27. package/dist/types/provider.d.ts.map +1 -1
  28. package/dist/types/request.d.ts +10 -0
  29. package/dist/types/request.d.ts.map +1 -1
  30. package/dist/types/tools.d.ts +9 -0
  31. package/dist/types/tools.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/src/formatters/native.ts +10 -0
  34. package/src/membrane.ts +191 -19
  35. package/src/providers/anthropic.ts +100 -5
  36. package/src/providers/bedrock.ts +13 -4
  37. package/src/providers/openai-compatible.ts +4 -0
  38. package/src/providers/openai-completions.ts +58 -2
  39. package/src/providers/openai.ts +4 -0
  40. package/src/types/content.ts +6 -0
  41. package/src/types/provider.ts +10 -0
  42. package/src/types/request.ts +12 -1
  43. package/src/types/tools.ts +14 -4
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EACR,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EAMhB,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyGD,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,GAAE,qBAA0B;IAY9C,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;IAkIhF,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAchD,kBAAkB,IAAI,YAAY;IAIlC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE;IAM3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAYnD,OAAO,CAAC,cAAc;IAuEtB,OAAO,CAAC,oBAAoB;CAO7B"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EACR,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EAMhB,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyGD,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,GAAE,qBAA0B;IAY9C,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;IAkIhF,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAchD,kBAAkB,IAAI,YAAY;IAIlC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE;IAM3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAYnD,OAAO,CAAC,cAAc;IAiFtB,OAAO,CAAC,oBAAoB;CAO7B"}
@@ -292,11 +292,22 @@ export class NativeFormatter {
292
292
  });
293
293
  }
294
294
  else if (block.type === 'thinking') {
295
+ // Round-trip thinking blocks verbatim, including the signature — the
296
+ // API validates it and (on display:'omitted' models) decrypts it to
297
+ // reconstruct the original reasoning. Signature-only blocks (empty
298
+ // thinking field) are valid and must be passed back unchanged.
295
299
  result.push({
296
300
  type: 'thinking',
297
301
  thinking: block.thinking,
302
+ ...(block.signature
303
+ ? { signature: block.signature }
304
+ : {}),
298
305
  });
299
306
  }
307
+ else if (block.type === 'redacted_thinking') {
308
+ // Pass through verbatim (carries encrypted data field)
309
+ result.push({ ...block });
310
+ }
300
311
  else if (block.type === 'document' || block.type === 'audio') {
301
312
  hasUnsupportedMedia = true;
302
313
  }
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,24 @@ export declare class Membrane {
59
59
  * Parse provider response content into normalized blocks
60
60
  */
61
61
  private parseProviderContent;
62
+ /**
63
+ * Capture native thinking / redacted_thinking blocks from a provider
64
+ * response so they can be merged into parser-derived content (XML paths,
65
+ * where the parser only sees text). Includes signature-only thinking
66
+ * blocks (display:'omitted' returns an empty thinking field).
67
+ */
68
+ private captureProviderThinkingBlocks;
69
+ /**
70
+ * Merge provider thinking signatures into parser-derived thinking blocks
71
+ * (matched in stream order), and prepend any leftover provider blocks —
72
+ * signature-only thinking (display:'omitted') never appears in the text
73
+ * stream, so the parser produces no block for it. redacted_thinking
74
+ * blocks are always prepended verbatim.
75
+ *
76
+ * Mutates `content` in place. Shared by the XML stream paths
77
+ * (streamWithXmlTools and runXmlToolsYielding).
78
+ */
79
+ private mergeProviderThinkingBlocks;
62
80
  /**
63
81
  * Apply the configured `beforeRequest` hook to a provider-format request.
64
82
  * Returns the (possibly modified) request, or the original if no hook is
@@ -73,6 +91,16 @@ export declare class Membrane {
73
91
  * Used by transformRequest, buildContinuationRequest, and buildContinuationRequestWithImages.
74
92
  */
75
93
  private getBaseProviderParams;
94
+ /**
95
+ * Build the provider thinking parameter from config.
96
+ *
97
+ * For type 'enabled', the API requires max_tokens > budget_tokens and a
98
+ * minimum budget of 1024 — a misconfigured budget (e.g., default 10000 with
99
+ * max_tokens 4096) is clamped to fit. If no valid budget fits (max_tokens
100
+ * too small), thinking is omitted entirely rather than sending a request
101
+ * the API will reject.
102
+ */
103
+ private buildThinkingParam;
76
104
  /**
77
105
  * Transform a normalized request into provider format using the formatter
78
106
  */
@@ -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;AAYpC,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;IAudhC;;OAEG;YACW,qBAAqB;IAwOnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgJ9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2C5B;;;;;;;OAOG;YACW,sBAAsB;IASpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YA+CV,UAAU;IA6BxB,OAAO,CAAC,wBAAwB;IA2ChC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,kCAAkC;IAiD1C,OAAO,CAAC,iBAAiB;IAkIzB,OAAO,CAAC,kBAAkB;IAkF1B,OAAO,CAAC,aAAa;IAerB,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;IAucjC;;OAEG;YACW,sBAAsB;CA+RrC"}
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;AAYpC,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;IAwJ9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAkBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;;;;;;OAOG;YACW,sBAAsB;IASpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAwDV,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
@@ -186,6 +186,11 @@ export class Membrane {
186
186
  // Track non-text content blocks from provider (e.g., generated_image from Gemini)
187
187
  // These can't be handled by the text-based XML parser, so we capture and append them
188
188
  const extraContentBlocks = [];
189
+ // Native thinking blocks from the provider (with signatures). The parser
190
+ // derives signature-less thinking blocks from <thinking> text (via
191
+ // wrapThinkingTags); signatures from these are merged into those after
192
+ // parsing, and signature-only blocks are prepended.
193
+ const providerThinkingBlocks = [];
189
194
  // Transform initial request using the formatter
190
195
  let { providerRequest, prefillResult } = this.transformRequest(request, formatter);
191
196
  // Initialize parser with prefill content so it knows about any open tags
@@ -266,6 +271,10 @@ export class Membrane {
266
271
  }, {
267
272
  signal,
268
273
  normalizedRequest: request,
274
+ // The tag-based parser tracks thinking via <thinking> tags — ask the
275
+ // provider to wrap native thinking deltas so they don't stream as
276
+ // visible text (see ProviderRequestOptions.wrapThinkingTags)
277
+ wrapThinkingTags: true,
269
278
  onRequest: (req) => {
270
279
  rawRequest = req;
271
280
  onRequest?.(req);
@@ -290,6 +299,10 @@ export class Membrane {
290
299
  });
291
300
  }
292
301
  }
302
+ // Native thinking blocks carry the signature (encrypted full
303
+ // reasoning) — captured so consumers can persist and round-trip
304
+ // them for reasoning continuity.
305
+ this.captureProviderThinkingBlocks(streamResult.content, providerThinkingBlocks);
293
306
  }
294
307
  rawResponse = streamResult.raw;
295
308
  // Call onResponse callback with raw response from API
@@ -513,6 +526,8 @@ export class Membrane {
513
526
  if (extraContentBlocks.length > 0) {
514
527
  response.content.push(...extraContentBlocks);
515
528
  }
529
+ // Merge provider thinking signatures into parser-derived thinking blocks
530
+ this.mergeProviderThinkingBlocks(response.content, providerThinkingBlocks);
516
531
  return response;
517
532
  }
518
533
  catch (error) {
@@ -755,6 +770,21 @@ export class Membrane {
755
770
  is_error: block.isError,
756
771
  });
757
772
  }
773
+ else if (block.type === 'thinking') {
774
+ // Round-trip thinking blocks verbatim including the signature — the
775
+ // API validates it and (on display:'omitted' models) decrypts it to
776
+ // reconstruct prior reasoning. Empty thinking + signature is valid.
777
+ content.push({
778
+ type: 'thinking',
779
+ thinking: block.thinking ?? '',
780
+ ...(block.signature
781
+ ? { signature: block.signature }
782
+ : {}),
783
+ });
784
+ }
785
+ else if (block.type === 'redacted_thinking') {
786
+ content.push({ ...block });
787
+ }
758
788
  else if (block.type === 'image') {
759
789
  if (block.source.type === 'base64') {
760
790
  const imageBlock = {
@@ -824,13 +854,8 @@ export class Membrane {
824
854
  const blocks = system;
825
855
  system = blocks.map((block, idx) => idx === blocks.length - 1 ? { ...block, cache_control: cacheControl } : block);
826
856
  }
827
- // Build thinking config for native extended thinking
828
- const thinking = request.config.thinking?.enabled
829
- ? {
830
- type: 'enabled',
831
- budget_tokens: request.config.thinking.budgetTokens ?? 5000,
832
- }
833
- : undefined;
857
+ // Build thinking config for native extended thinking (budget clamped to max_tokens)
858
+ const thinking = this.buildThinkingParam(request.config);
834
859
  // Anthropic requires temperature=1 when extended thinking is enabled
835
860
  const temperature = thinking ? 1 : request.config.temperature;
836
861
  return {
@@ -867,10 +892,14 @@ export class Membrane {
867
892
  else if (item.type === 'thinking') {
868
893
  blocks.push({
869
894
  type: 'thinking',
870
- thinking: item.thinking,
871
- signature: item.signature,
895
+ thinking: item.thinking ?? '',
896
+ ...(item.signature ? { signature: item.signature } : {}),
872
897
  });
873
898
  }
899
+ else if (item.type === 'redacted_thinking') {
900
+ // Pass through verbatim — carries the encrypted `data` payload
901
+ blocks.push({ ...item });
902
+ }
874
903
  else if (item.type === 'generated_image') {
875
904
  blocks.push({
876
905
  type: 'generated_image',
@@ -886,6 +915,56 @@ export class Membrane {
886
915
  }
887
916
  return [];
888
917
  }
918
+ /**
919
+ * Capture native thinking / redacted_thinking blocks from a provider
920
+ * response so they can be merged into parser-derived content (XML paths,
921
+ * where the parser only sees text). Includes signature-only thinking
922
+ * blocks (display:'omitted' returns an empty thinking field).
923
+ */
924
+ captureProviderThinkingBlocks(providerContent, sink) {
925
+ if (!Array.isArray(providerContent))
926
+ return;
927
+ for (const block of providerContent) {
928
+ if (block?.type === 'thinking') {
929
+ sink.push({
930
+ type: 'thinking',
931
+ thinking: block.thinking ?? '',
932
+ ...(block.signature ? { signature: block.signature } : {}),
933
+ });
934
+ }
935
+ else if (block?.type === 'redacted_thinking') {
936
+ sink.push({ ...block });
937
+ }
938
+ }
939
+ }
940
+ /**
941
+ * Merge provider thinking signatures into parser-derived thinking blocks
942
+ * (matched in stream order), and prepend any leftover provider blocks —
943
+ * signature-only thinking (display:'omitted') never appears in the text
944
+ * stream, so the parser produces no block for it. redacted_thinking
945
+ * blocks are always prepended verbatim.
946
+ *
947
+ * Mutates `content` in place. Shared by the XML stream paths
948
+ * (streamWithXmlTools and runXmlToolsYielding).
949
+ */
950
+ mergeProviderThinkingBlocks(content, providerThinkingBlocks) {
951
+ if (providerThinkingBlocks.length === 0)
952
+ return;
953
+ const parsedThinking = content.filter((b) => b.type === 'thinking');
954
+ const providerThinking = providerThinkingBlocks.filter((b) => b.type === 'thinking');
955
+ const redacted = providerThinkingBlocks.filter((b) => b.type === 'redacted_thinking');
956
+ const matched = Math.min(providerThinking.length, parsedThinking.length);
957
+ for (let i = 0; i < matched; i++) {
958
+ const sig = providerThinking[i].signature;
959
+ if (sig) {
960
+ parsedThinking[i].signature = sig;
961
+ }
962
+ }
963
+ const leftover = providerThinking.slice(matched);
964
+ if (leftover.length > 0 || redacted.length > 0) {
965
+ content.unshift(...leftover, ...redacted);
966
+ }
967
+ }
889
968
  // ==========================================================================
890
969
  // Internal Methods
891
970
  // ==========================================================================
@@ -908,8 +987,10 @@ export class Membrane {
908
987
  * Used by transformRequest, buildContinuationRequest, and buildContinuationRequestWithImages.
909
988
  */
910
989
  getBaseProviderParams(config) {
990
+ // Build thinking config for native extended thinking
991
+ const thinking = this.buildThinkingParam(config);
911
992
  // Anthropic requires temperature=1 when extended thinking is enabled
912
- const temperature = config.thinking?.enabled ? 1 : config.temperature;
993
+ const temperature = thinking ? 1 : config.temperature;
913
994
  return {
914
995
  model: config.model,
915
996
  maxTokens: config.maxTokens,
@@ -918,8 +999,35 @@ export class Membrane {
918
999
  topK: config.topK,
919
1000
  presencePenalty: config.presencePenalty,
920
1001
  frequencyPenalty: config.frequencyPenalty,
1002
+ repetitionPenalty: config.repetitionPenalty,
1003
+ thinking,
921
1004
  };
922
1005
  }
1006
+ /**
1007
+ * Build the provider thinking parameter from config.
1008
+ *
1009
+ * For type 'enabled', the API requires max_tokens > budget_tokens and a
1010
+ * minimum budget of 1024 — a misconfigured budget (e.g., default 10000 with
1011
+ * max_tokens 4096) is clamped to fit. If no valid budget fits (max_tokens
1012
+ * too small), thinking is omitted entirely rather than sending a request
1013
+ * the API will reject.
1014
+ */
1015
+ buildThinkingParam(config) {
1016
+ if (!config.thinking?.enabled)
1017
+ return undefined;
1018
+ const display = config.thinking.display;
1019
+ if ((config.thinking.type ?? 'enabled') === 'adaptive') {
1020
+ return { type: 'adaptive', ...(display ? { display } : {}) };
1021
+ }
1022
+ const requested = config.thinking.budgetTokens ?? 5000;
1023
+ const maxTokens = typeof config.maxTokens === 'number' ? config.maxTokens : undefined;
1024
+ const budget = maxTokens !== undefined ? Math.min(requested, maxTokens - 1024) : requested;
1025
+ if (budget < 1024) {
1026
+ // Can't fit a valid thinking budget under max_tokens — skip thinking
1027
+ return undefined;
1028
+ }
1029
+ return { type: 'enabled', budget_tokens: budget, ...(display ? { display } : {}) };
1030
+ }
923
1031
  /**
924
1032
  * Transform a normalized request into provider format using the formatter
925
1033
  */
@@ -959,6 +1067,14 @@ export class Membrane {
959
1067
  normalizedMessages: request.messages,
960
1068
  },
961
1069
  };
1070
+ // The API rejects extended thinking combined with an assistant prefill.
1071
+ // Prefill-style builds (XML formatter) use the thinking config for the
1072
+ // literal `<thinking>` text prefix instead of the API feature — drop the
1073
+ // API param when the built request actually ends in an assistant prefill.
1074
+ // Chat-style builds (no prefill) keep it.
1075
+ if (buildResult.assistantPrefill && providerRequest.thinking) {
1076
+ delete providerRequest.thinking;
1077
+ }
962
1078
  return { providerRequest, prefillResult: buildResult };
963
1079
  }
964
1080
  async streamOnce(request, callbacks, options) {
@@ -991,6 +1107,9 @@ export class Membrane {
991
1107
  }
992
1108
  return {
993
1109
  ...this.getBaseProviderParams(originalRequest.config),
1110
+ // Continuations always end in an assistant prefill — the API rejects
1111
+ // extended thinking combined with prefill, so never send the param here
1112
+ thinking: undefined,
994
1113
  messages,
995
1114
  system: prefillResult.systemContent
996
1115
  ? (Array.isArray(prefillResult.systemContent) && prefillResult.systemContent.length > 0
@@ -1050,6 +1169,9 @@ export class Membrane {
1050
1169
  }
1051
1170
  return {
1052
1171
  ...this.getBaseProviderParams(originalRequest.config),
1172
+ // Continuations always end in an assistant prefill — the API rejects
1173
+ // extended thinking combined with prefill, so never send the param here
1174
+ thinking: undefined,
1053
1175
  messages,
1054
1176
  system: prefillResult.systemContent
1055
1177
  ? (Array.isArray(prefillResult.systemContent) && prefillResult.systemContent.length > 0
@@ -1088,10 +1210,14 @@ export class Membrane {
1088
1210
  else if (block.type === 'thinking') {
1089
1211
  content.push({
1090
1212
  type: 'thinking',
1091
- thinking: block.thinking,
1092
- signature: block.signature,
1213
+ thinking: block.thinking ?? '',
1214
+ ...(block.signature ? { signature: block.signature } : {}),
1093
1215
  });
1094
1216
  }
1217
+ else if (block.type === 'redacted_thinking') {
1218
+ // Pass through verbatim — carries the encrypted `data` payload
1219
+ content.push({ ...block });
1220
+ }
1095
1221
  else if (block.type === 'generated_image') {
1096
1222
  content.push({
1097
1223
  type: 'generated_image',
@@ -1250,6 +1376,11 @@ export class Membrane {
1250
1376
  return 'stop_sequence';
1251
1377
  case 'tool_use':
1252
1378
  return 'tool_use';
1379
+ case 'refusal':
1380
+ // Safety refusal (e.g., Fable 5 reasoning_extraction). Must survive
1381
+ // mapping — downstream consumers react to refusals (chapterx adds a
1382
+ // Discord reaction). Defaulting this to end_turn silently hid them.
1383
+ return 'refusal';
1253
1384
  default:
1254
1385
  return 'end_turn';
1255
1386
  }
@@ -1391,6 +1522,10 @@ export class Membrane {
1391
1522
  let lastStopSequence;
1392
1523
  let rawRequest;
1393
1524
  let rawResponse;
1525
+ // Native thinking blocks from the provider (with signatures) — merged
1526
+ // into the parser-derived content before the final response is emitted.
1527
+ // See streamWithXmlTools for the matching non-yielding logic.
1528
+ const providerThinkingBlocks = [];
1394
1529
  // Track executed tool calls and results
1395
1530
  const executedToolCalls = [];
1396
1531
  const executedToolResults = [];
@@ -1485,6 +1620,10 @@ export class Membrane {
1485
1620
  timeoutMs: options.timeoutMs,
1486
1621
  idleTimeoutMs: options.idleTimeoutMs,
1487
1622
  normalizedRequest: request,
1623
+ // The tag-based parser tracks thinking via <thinking> tags — ask
1624
+ // the provider to wrap native thinking deltas so they don't
1625
+ // stream as visible text (same as streamWithXmlTools).
1626
+ wrapThinkingTags: true,
1488
1627
  onRequest: (req) => { rawRequest = req; },
1489
1628
  });
1490
1629
  // If we detected stop sequence manually, fix up the parser and result
@@ -1494,6 +1633,10 @@ export class Membrane {
1494
1633
  streamResult.stopReason = 'stop_sequence';
1495
1634
  streamResult.stopSequence = detectedStopSequence;
1496
1635
  }
1636
+ // Capture native thinking blocks (with signatures) from the provider
1637
+ // response — the text parser can't see signatures, so they're merged
1638
+ // into the final response content after parsing.
1639
+ this.captureProviderThinkingBlocks(streamResult.content, providerThinkingBlocks);
1497
1640
  rawResponse = streamResult.raw;
1498
1641
  lastStopReason = this.mapStopReason(streamResult.stopReason);
1499
1642
  lastStopSequence = streamResult.stopSequence ?? undefined;
@@ -1715,6 +1858,8 @@ export class Membrane {
1715
1858
  const fullAccumulated = parser.getAccumulated();
1716
1859
  const newContent = fullAccumulated.slice(initialPrefillLength);
1717
1860
  const response = this.buildFinalResponse(newContent, contentBlocks, lastStopReason, totalUsage, request, prefillResult, startTime, 1, rawRequest, rawResponse, executedToolCalls, executedToolResults, initialBlockType, lastStopSequence);
1861
+ // Merge provider thinking signatures into parser-derived thinking blocks
1862
+ this.mergeProviderThinkingBlocks(response.content, providerThinkingBlocks);
1718
1863
  stream.emit({ type: 'complete', response });
1719
1864
  }
1720
1865
  catch (error) {
@@ -1892,6 +2037,10 @@ export class Membrane {
1892
2037
  depth: toolDepth,
1893
2038
  previousResults: executedToolResults,
1894
2039
  accumulated: allTextAccumulated,
2040
+ // Full normalized blocks for this round, in provider order —
2041
+ // lets consumers persist the assistant turn verbatim (signed
2042
+ // thinking must precede tool_use in the same turn).
2043
+ roundContent: responseBlocks,
1895
2044
  };
1896
2045
  // Yield control for tool execution
1897
2046
  const toolCallsEvent = {
@@ -1988,13 +2137,16 @@ export class Membrane {
1988
2137
  }
1989
2138
  }
1990
2139
  // Native tool names must match ^[a-zA-Z0-9_-]{1,128}$.
1991
- // The framework uses module:tool namespacing, so we round-trip colons
1992
- // through an escape encoding for the API wire format.
1993
- // Lossless: escape underscores first (_u), then encode colons (_c).
2140
+ // Tool names use `--` namespacing, which is already API-valid; the only
2141
+ // character that ever needs escaping is a literal colon, encoded losslessly as
2142
+ // `__` and back. We deliberately do NOT escape underscores they are valid,
2143
+ // and escaping them (the previous `_u`/`_c` scheme) garbled every
2144
+ // underscore-containing tool name in the request the model actually sees
2145
+ // (`send_message` → `send_umessage`), polluting its reasoning for no benefit.
1994
2146
  function sanitizeToolName(name) {
1995
- return name.replace(/_/g, '_u').replace(/:/g, '_c');
2147
+ return name.replace(/:/g, '__');
1996
2148
  }
1997
2149
  function unsanitizeToolName(name) {
1998
- return name.replace(/_c/g, ':').replace(/_u/g, '_');
2150
+ return name.replace(/__/g, ':');
1999
2151
  }
2000
2152
  //# sourceMappingURL=membrane.js.map