@animalabs/membrane 0.5.78 → 0.5.80
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/cache-keepalive.d.ts +115 -0
- package/dist/cache-keepalive.d.ts.map +1 -0
- package/dist/cache-keepalive.js +0 -0
- package/dist/cache-keepalive.js.map +1 -0
- package/dist/cache-keepalive.test.d.ts +2 -0
- package/dist/cache-keepalive.test.d.ts.map +1 -0
- package/dist/cache-keepalive.test.js +206 -0
- package/dist/cache-keepalive.test.js.map +1 -0
- package/dist/floating-cache-marker.test.d.ts +2 -0
- package/dist/floating-cache-marker.test.d.ts.map +1 -0
- package/dist/floating-cache-marker.test.js +242 -0
- package/dist/floating-cache-marker.test.js.map +1 -0
- package/dist/formatters/anthropic-xml.d.ts.map +1 -1
- package/dist/formatters/anthropic-xml.js +30 -2
- package/dist/formatters/anthropic-xml.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/membrane.d.ts +7 -1
- package/dist/membrane.d.ts.map +1 -1
- package/dist/membrane.js +148 -5
- package/dist/membrane.js.map +1 -1
- package/dist/providers/anthropic.d.ts +20 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +23 -3
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/bedrock.d.ts.map +1 -1
- package/dist/providers/bedrock.js +31 -2
- package/dist/providers/bedrock.js.map +1 -1
- package/dist/types/config.d.ts +5 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/content.d.ts +5 -0
- package/dist/types/content.d.ts.map +1 -1
- package/dist/types/content.js.map +1 -1
- package/dist/types/request.d.ts +13 -0
- package/dist/types/request.d.ts.map +1 -1
- package/dist/types/tools.d.ts +19 -0
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/tool-parser.d.ts +16 -2
- package/dist/utils/tool-parser.d.ts.map +1 -1
- package/dist/utils/tool-parser.js +143 -35
- package/dist/utils/tool-parser.js.map +1 -1
- package/package.json +3 -2
- package/src/cache-keepalive.test.ts +244 -0
- package/src/cache-keepalive.ts +385 -0
- package/src/floating-cache-marker.test.ts +261 -0
- package/src/formatters/anthropic-xml.ts +30 -2
- package/src/index.ts +13 -0
- package/src/membrane.ts +143 -5
- package/src/providers/anthropic.ts +46 -3
- package/src/providers/bedrock.ts +32 -1
- package/src/types/config.ts +6 -0
- package/src/types/content.ts +5 -0
- package/src/types/request.ts +14 -0
- package/src/types/tools.ts +20 -0
- package/src/utils/tool-parser.ts +147 -36
|
@@ -156,37 +156,89 @@ export function endsWithPartialToolBlock(text) {
|
|
|
156
156
|
// Tool Result Formatting
|
|
157
157
|
// ============================================================================
|
|
158
158
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
159
|
+
* Structural tags of the XML tool convention. Result content containing any
|
|
160
|
+
* of these must be escaped or it would desync the document/stream parser;
|
|
161
|
+
* everything else rides raw (legacy convention — full escapeXml put `"`
|
|
162
|
+
* entities in front of the model, which Claude-3-era models then reproduce
|
|
163
|
+
* in their own output).
|
|
164
|
+
*/
|
|
165
|
+
const STRUCTURAL_TAG_RE = /<\/?(?:antml:)?(?:function_calls|function_results|invoke|result|stdout|error|tool_name)\b/;
|
|
166
|
+
function renderResultContentString(result) {
|
|
167
|
+
if (typeof result.content === 'string') {
|
|
168
|
+
return result.content;
|
|
169
|
+
}
|
|
170
|
+
const parts = [];
|
|
171
|
+
for (const block of result.content) {
|
|
172
|
+
if (block.type === 'text') {
|
|
173
|
+
parts.push(block.text);
|
|
174
|
+
}
|
|
175
|
+
else if (block.type === 'image') {
|
|
176
|
+
// For XML mode, we can't embed images directly
|
|
177
|
+
// Add a note about the image for the model
|
|
178
|
+
const sizeKb = Math.round((block.source.data.length * 0.75) / 1024);
|
|
179
|
+
parts.push(`[Image: ${block.source.mediaType}, ~${sizeKb}KB]`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return parts.join('\n');
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Format tool results as XML for injection — the LEGACY Anthropic tool
|
|
186
|
+
* convention Claude-3-era models were trained on:
|
|
187
|
+
*
|
|
188
|
+
* <function_results>
|
|
189
|
+
* <result>
|
|
190
|
+
* <tool_name>NAME</tool_name>
|
|
191
|
+
* <stdout>
|
|
192
|
+
* content
|
|
193
|
+
* </stdout>
|
|
194
|
+
* </result>
|
|
195
|
+
* </function_results>
|
|
196
|
+
*
|
|
197
|
+
* Errors render as <error>…</error> inside <function_results>. No
|
|
198
|
+
* tool_use_id attributes on the wire (a Messages-API concept — the
|
|
199
|
+
* store keeps the linkage on the blocks); content rides raw unless it
|
|
200
|
+
* contains structural tags (then escaped, see STRUCTURAL_TAG_RE).
|
|
161
201
|
*/
|
|
162
202
|
export function formatToolResults(results) {
|
|
163
203
|
const parts = ['<function_results>'];
|
|
164
204
|
for (const result of results) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
parts.push(escapeXml(result.content));
|
|
205
|
+
if (result.isError) {
|
|
206
|
+
parts.push('<error>');
|
|
207
|
+
parts.push(guardResultContent(renderResultContentString(result)));
|
|
208
|
+
parts.push('</error>');
|
|
170
209
|
}
|
|
171
|
-
else
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
parts.push(escapeXml(block.text));
|
|
176
|
-
}
|
|
177
|
-
else if (block.type === 'image') {
|
|
178
|
-
// For XML mode, we can't embed images directly
|
|
179
|
-
// Add a note about the image for the model
|
|
180
|
-
const sizeKb = Math.round((block.source.data.length * 0.75) / 1024);
|
|
181
|
-
parts.push(`[Image: ${block.source.mediaType}, ~${sizeKb}KB]`);
|
|
182
|
-
}
|
|
210
|
+
else {
|
|
211
|
+
parts.push('<result>');
|
|
212
|
+
if (result.toolName) {
|
|
213
|
+
parts.push(`<tool_name>${result.toolName}</tool_name>`);
|
|
183
214
|
}
|
|
215
|
+
parts.push('<stdout>');
|
|
216
|
+
parts.push(guardResultContent(renderResultContentString(result)));
|
|
217
|
+
parts.push('</stdout>');
|
|
218
|
+
parts.push('</result>');
|
|
184
219
|
}
|
|
185
|
-
parts.push(`</${tagName}>`);
|
|
186
220
|
}
|
|
187
221
|
parts.push('</function_results>');
|
|
188
222
|
return parts.join('\n');
|
|
189
223
|
}
|
|
224
|
+
/** Escape result content only when it would desync the structural parse. */
|
|
225
|
+
function guardResultContent(s) {
|
|
226
|
+
return STRUCTURAL_TAG_RE.test(s) ? escapeXml(s) : s;
|
|
227
|
+
}
|
|
228
|
+
/** Opening XML of one result, up to where its content begins. */
|
|
229
|
+
function resultOpenXml(result) {
|
|
230
|
+
if (result.isError)
|
|
231
|
+
return '<error>\n';
|
|
232
|
+
let xml = '<result>\n';
|
|
233
|
+
if (result.toolName)
|
|
234
|
+
xml += `<tool_name>${result.toolName}</tool_name>\n`;
|
|
235
|
+
xml += '<stdout>\n';
|
|
236
|
+
return xml;
|
|
237
|
+
}
|
|
238
|
+
/** Closing XML of one result, after its content. */
|
|
239
|
+
function resultCloseXml(result) {
|
|
240
|
+
return result.isError ? '\n</error>\n' : '\n</stdout>\n</result>\n';
|
|
241
|
+
}
|
|
190
242
|
/**
|
|
191
243
|
* Format a single tool result
|
|
192
244
|
*/
|
|
@@ -232,6 +284,11 @@ const FUNCTION_RESULTS_BLOCK_REGEX = /<(antml:)?function_results>([\s\S]*?)<\/(a
|
|
|
232
284
|
// Regex for individual result/error within function_results
|
|
233
285
|
const RESULT_REGEX = /<result\s+tool_use_id="([^"]+)">([\s\S]*?)<\/result>/g;
|
|
234
286
|
const ERROR_REGEX = /<error\s+tool_use_id="([^"]+)">([\s\S]*?)<\/error>/g;
|
|
287
|
+
// Legacy Anthropic convention — no ids on the wire; results pair
|
|
288
|
+
// positionally with the preceding unmatched tool calls in document order
|
|
289
|
+
// (optionally disambiguated by <tool_name>).
|
|
290
|
+
const LEGACY_RESULT_REGEX = /<result>\s*(?:<tool_name>([\s\S]*?)<\/tool_name>\s*)?<stdout>\n?([\s\S]*?)\n?<\/stdout>\s*<\/result>/g;
|
|
291
|
+
const LEGACY_ERROR_REGEX = /<error>\n?([\s\S]*?)\n?<\/error>/g;
|
|
235
292
|
/**
|
|
236
293
|
* Parse accumulated assistant text into structured ContentBlock[].
|
|
237
294
|
* Extracts thinking blocks, tool calls, tool results, and plain text.
|
|
@@ -258,6 +315,23 @@ export function parseAccumulatedIntoBlocks(text, options) {
|
|
|
258
315
|
const toolCalls = [];
|
|
259
316
|
const toolResults = [];
|
|
260
317
|
const positions = [];
|
|
318
|
+
// Call sites in document order, for pairing legacy-shaped results
|
|
319
|
+
// (no tool_use_id on the wire) with the calls they answer.
|
|
320
|
+
const callSites = [];
|
|
321
|
+
const pairedCallIds = new Set();
|
|
322
|
+
const claimCall = (beforePos, name) => {
|
|
323
|
+
for (const site of callSites) {
|
|
324
|
+
if (site.pos >= beforePos)
|
|
325
|
+
break;
|
|
326
|
+
if (pairedCallIds.has(site.id))
|
|
327
|
+
continue;
|
|
328
|
+
if (name && site.name !== name)
|
|
329
|
+
continue;
|
|
330
|
+
pairedCallIds.add(site.id);
|
|
331
|
+
return site.id;
|
|
332
|
+
}
|
|
333
|
+
return generateToolId();
|
|
334
|
+
};
|
|
261
335
|
// Find all thinking blocks
|
|
262
336
|
THINKING_BLOCK_REGEX.lastIndex = 0;
|
|
263
337
|
let thinkingMatch;
|
|
@@ -300,6 +374,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
|
|
|
300
374
|
const id = generateToolId();
|
|
301
375
|
const toolCall = { id, name: toolName, input };
|
|
302
376
|
toolCalls.push(toolCall);
|
|
377
|
+
callSites.push({ id, name: toolName, pos: funcMatch.index });
|
|
303
378
|
blockToolCalls.push({
|
|
304
379
|
type: 'tool_use',
|
|
305
380
|
id,
|
|
@@ -316,6 +391,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
|
|
|
316
391
|
const id = generateToolId();
|
|
317
392
|
const toolCall = { id, name: toolName, input: {} };
|
|
318
393
|
toolCalls.push(toolCall);
|
|
394
|
+
callSites.push({ id, name: toolName, pos: funcMatch.index });
|
|
319
395
|
blockToolCalls.push({
|
|
320
396
|
type: 'tool_use',
|
|
321
397
|
id,
|
|
@@ -347,6 +423,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
|
|
|
347
423
|
while ((resultMatch = RESULT_REGEX.exec(innerContent)) !== null) {
|
|
348
424
|
const toolUseId = resultMatch[1] ?? '';
|
|
349
425
|
const content = unescapeXml(resultMatch[2] ?? '');
|
|
426
|
+
pairedCallIds.add(toolUseId);
|
|
350
427
|
const result = { toolUseId, content, isError: false };
|
|
351
428
|
toolResults.push(result);
|
|
352
429
|
blockResults.push({
|
|
@@ -363,6 +440,7 @@ export function parseAccumulatedIntoBlocks(text, options) {
|
|
|
363
440
|
while ((errorMatch = ERROR_REGEX.exec(innerContent)) !== null) {
|
|
364
441
|
const toolUseId = errorMatch[1] ?? '';
|
|
365
442
|
const content = unescapeXml(errorMatch[2] ?? '');
|
|
443
|
+
pairedCallIds.add(toolUseId);
|
|
366
444
|
const result = { toolUseId, content, isError: true };
|
|
367
445
|
toolResults.push(result);
|
|
368
446
|
blockResults.push({
|
|
@@ -373,6 +451,38 @@ export function parseAccumulatedIntoBlocks(text, options) {
|
|
|
373
451
|
rawXml,
|
|
374
452
|
});
|
|
375
453
|
}
|
|
454
|
+
// Legacy-shaped results/errors (no ids on the wire): pair positionally
|
|
455
|
+
// with the preceding unclaimed calls, disambiguated by <tool_name>.
|
|
456
|
+
LEGACY_RESULT_REGEX.lastIndex = 0;
|
|
457
|
+
let legacyResultMatch;
|
|
458
|
+
while ((legacyResultMatch = LEGACY_RESULT_REGEX.exec(innerContent)) !== null) {
|
|
459
|
+
const toolName = legacyResultMatch[1]?.trim() || undefined;
|
|
460
|
+
const content = unescapeXml(legacyResultMatch[2] ?? '');
|
|
461
|
+
const toolUseId = claimCall(resultsMatch.index, toolName);
|
|
462
|
+
toolResults.push({ toolUseId, toolName, content, isError: false });
|
|
463
|
+
blockResults.push({
|
|
464
|
+
type: 'tool_result',
|
|
465
|
+
toolUseId,
|
|
466
|
+
toolName,
|
|
467
|
+
content,
|
|
468
|
+
isError: false,
|
|
469
|
+
rawXml,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
LEGACY_ERROR_REGEX.lastIndex = 0;
|
|
473
|
+
let legacyErrorMatch;
|
|
474
|
+
while ((legacyErrorMatch = LEGACY_ERROR_REGEX.exec(innerContent)) !== null) {
|
|
475
|
+
const content = unescapeXml(legacyErrorMatch[1] ?? '');
|
|
476
|
+
const toolUseId = claimCall(resultsMatch.index);
|
|
477
|
+
toolResults.push({ toolUseId, content, isError: true });
|
|
478
|
+
blockResults.push({
|
|
479
|
+
type: 'tool_result',
|
|
480
|
+
toolUseId,
|
|
481
|
+
content,
|
|
482
|
+
isError: true,
|
|
483
|
+
rawXml,
|
|
484
|
+
});
|
|
485
|
+
}
|
|
376
486
|
if (blockResults.length > 0) {
|
|
377
487
|
positions.push({
|
|
378
488
|
start: resultsMatch.index,
|
|
@@ -490,22 +600,21 @@ export function formatToolResultsForSplitTurn(results) {
|
|
|
490
600
|
let imageInsertionPoint = -1; // Index of result where we found images
|
|
491
601
|
for (let i = 0; i < results.length; i++) {
|
|
492
602
|
const result = results[i];
|
|
493
|
-
const tagName = result.isError ? 'error' : 'result';
|
|
494
603
|
// Check if this result has images
|
|
495
604
|
let resultHasImages = false;
|
|
496
605
|
let textParts = [];
|
|
497
606
|
let resultImages = [];
|
|
498
607
|
if (typeof result.content === 'string') {
|
|
499
|
-
textParts.push(
|
|
608
|
+
textParts.push(guardResultContent(result.content));
|
|
500
609
|
}
|
|
501
610
|
else if (Array.isArray(result.content)) {
|
|
502
611
|
for (const block of result.content) {
|
|
503
612
|
if (block.type === 'text') {
|
|
504
|
-
textParts.push(
|
|
613
|
+
textParts.push(guardResultContent(block.text));
|
|
505
614
|
}
|
|
506
615
|
else if (block.type === 'image') {
|
|
507
616
|
if (!isAcceptedImageMediaType(block.source.mediaType)) {
|
|
508
|
-
textParts.push(
|
|
617
|
+
textParts.push(strippedImagePlaceholder(block.source.mediaType).text);
|
|
509
618
|
}
|
|
510
619
|
else {
|
|
511
620
|
resultHasImages = true;
|
|
@@ -525,14 +634,14 @@ export function formatToolResultsForSplitTurn(results) {
|
|
|
525
634
|
// First result with images - split here
|
|
526
635
|
imageInsertionPoint = i;
|
|
527
636
|
images.push(...resultImages);
|
|
528
|
-
// Add opening
|
|
529
|
-
beforeImageXml +=
|
|
637
|
+
// Add opening tags and text content (no closing tags yet)
|
|
638
|
+
beforeImageXml += resultOpenXml(result);
|
|
530
639
|
if (textParts.length > 0) {
|
|
531
640
|
beforeImageXml += textParts.join('\n');
|
|
532
641
|
}
|
|
533
|
-
// Note: Intentionally NOT adding closing
|
|
642
|
+
// Note: Intentionally NOT adding closing tags - split happens here
|
|
534
643
|
// After image, we need to close this result and add remaining results
|
|
535
|
-
afterImageXml =
|
|
644
|
+
afterImageXml = resultCloseXml(result);
|
|
536
645
|
// Process remaining results into afterImageXml
|
|
537
646
|
for (let j = i + 1; j < results.length; j++) {
|
|
538
647
|
const remainingResult = results[j];
|
|
@@ -544,9 +653,9 @@ export function formatToolResultsForSplitTurn(results) {
|
|
|
544
653
|
}
|
|
545
654
|
else if (imageInsertionPoint === -1) {
|
|
546
655
|
// No images yet - add full result to beforeImageXml
|
|
547
|
-
beforeImageXml +=
|
|
656
|
+
beforeImageXml += resultOpenXml(result);
|
|
548
657
|
beforeImageXml += textParts.join('\n');
|
|
549
|
-
beforeImageXml +=
|
|
658
|
+
beforeImageXml += resultCloseXml(result);
|
|
550
659
|
}
|
|
551
660
|
}
|
|
552
661
|
// If no images were found, complete the XML normally
|
|
@@ -570,15 +679,14 @@ export function formatToolResultsForSplitTurn(results) {
|
|
|
570
679
|
* Format a single tool result as complete XML
|
|
571
680
|
*/
|
|
572
681
|
function formatSingleResultXml(result) {
|
|
573
|
-
|
|
574
|
-
let xml = `<${tagName} tool_use_id="${result.toolUseId}">\n`;
|
|
682
|
+
let xml = resultOpenXml(result);
|
|
575
683
|
if (typeof result.content === 'string') {
|
|
576
|
-
xml +=
|
|
684
|
+
xml += guardResultContent(result.content);
|
|
577
685
|
}
|
|
578
686
|
else if (Array.isArray(result.content)) {
|
|
579
687
|
for (const block of result.content) {
|
|
580
688
|
if (block.type === 'text') {
|
|
581
|
-
xml +=
|
|
689
|
+
xml += guardResultContent(block.text);
|
|
582
690
|
}
|
|
583
691
|
else if (block.type === 'image') {
|
|
584
692
|
// For remaining results after split, images become text placeholders
|
|
@@ -587,7 +695,7 @@ function formatSingleResultXml(result) {
|
|
|
587
695
|
}
|
|
588
696
|
}
|
|
589
697
|
}
|
|
590
|
-
xml +=
|
|
698
|
+
xml += resultCloseXml(result);
|
|
591
699
|
return xml;
|
|
592
700
|
}
|
|
593
701
|
// ============================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-parser.js","sourceRoot":"","sources":["../../src/utils/tool-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool-parser.js","sourceRoot":"","sources":["../../src/utils/tool-parser.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.
|
|
3
|
+
"version": "0.5.80",
|
|
4
4
|
"description": "LLM middleware - a selective boundary that transforms what passes through",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"typecheck": "tsc --noEmit",
|
|
25
25
|
"test": "vitest run",
|
|
26
26
|
"test:watch": "vitest",
|
|
27
|
-
"test:coverage": "vitest run --coverage"
|
|
27
|
+
"test:coverage": "vitest run --coverage",
|
|
28
|
+
"version": "node scripts/release-changelog.mjs && git add CHANGELOG.md changelog.d"
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"@anthropic-ai/sdk": "^0.52.0"
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
CacheKeepalive,
|
|
4
|
+
ineligibleReason,
|
|
5
|
+
lineageKey,
|
|
6
|
+
type KeepaliveEvent,
|
|
7
|
+
} from './cache-keepalive.js';
|
|
8
|
+
|
|
9
|
+
/** A wire request shaped like what buildRequest() produces for a real turn. */
|
|
10
|
+
function wire(overrides: Record<string, unknown> = {}): Record<string, unknown> {
|
|
11
|
+
return {
|
|
12
|
+
model: 'claude-fable-5',
|
|
13
|
+
max_tokens: 32000,
|
|
14
|
+
stream: true,
|
|
15
|
+
thinking: { type: 'adaptive' },
|
|
16
|
+
system: [
|
|
17
|
+
{ type: 'text', text: 'You are a resident.', cache_control: { type: 'ephemeral', ttl: '1h' } },
|
|
18
|
+
],
|
|
19
|
+
messages: [
|
|
20
|
+
{
|
|
21
|
+
role: 'user',
|
|
22
|
+
content: [
|
|
23
|
+
{ type: 'text', text: 'hello', cache_control: { type: 'ephemeral', ttl: '1h' } },
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
...overrides,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const hit = { usage: { cache_read_input_tokens: 494_000, cache_creation_input_tokens: 0 } };
|
|
32
|
+
|
|
33
|
+
describe('ineligibleReason', () => {
|
|
34
|
+
it('accepts a normal 1h-cached adaptive-thinking request', () => {
|
|
35
|
+
expect(ineligibleReason(wire())).toBeNull();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('rejects legacy budget_tokens thinking (max_tokens:0 is refused, and we must not disable thinking to fix it)', () => {
|
|
39
|
+
expect(ineligibleReason(wire({ thinking: { type: 'enabled', budget_tokens: 8000 } })))
|
|
40
|
+
.toBe('legacy-thinking-budget');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('rejects forced tool_choice, which cannot be substituted without invalidating the messages cache', () => {
|
|
44
|
+
expect(ineligibleReason(wire({ tool_choice: { type: 'any' } }))).toBe('forced-tool-choice');
|
|
45
|
+
expect(ineligibleReason(wire({ tool_choice: { type: 'tool', name: 'x' } }))).toBe('forced-tool-choice');
|
|
46
|
+
expect(ineligibleReason(wire({ tool_choice: { type: 'auto' } }))).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('rejects structured output, which the API refuses with max_tokens:0', () => {
|
|
50
|
+
expect(ineligibleReason(wire({ output_config: { format: { type: 'json_schema' } } })))
|
|
51
|
+
.toBe('structured-output');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('rejects a request with no cache_control at all (the compression lane today)', () => {
|
|
55
|
+
const aux = wire({ system: undefined, messages: [{ role: 'user', content: 'compress this' }] });
|
|
56
|
+
expect(ineligibleReason(aux)).toBe('no-cache-breakpoint');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('rejects a 5m-only request: poking a 5m entry every few minutes costs more than it saves', () => {
|
|
60
|
+
const short = wire({
|
|
61
|
+
system: [{ type: 'text', text: 's', cache_control: { type: 'ephemeral' } }],
|
|
62
|
+
messages: [{ role: 'user', content: [{ type: 'text', text: 'h', cache_control: { type: 'ephemeral', ttl: '5m' } }] }],
|
|
63
|
+
});
|
|
64
|
+
expect(ineligibleReason(short)).toBe('no-1h-breakpoint');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe('lineageKey', () => {
|
|
69
|
+
it('is stable across turns that only append messages', () => {
|
|
70
|
+
const a = wire();
|
|
71
|
+
const b = wire({ messages: [...(wire().messages as unknown[]), { role: 'assistant', content: 'hi' }] });
|
|
72
|
+
expect(lineageKey(a)).toBe(lineageKey(b));
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('separates different agents, models, and tool sets', () => {
|
|
76
|
+
expect(lineageKey(wire())).not.toBe(lineageKey(wire({ model: 'claude-opus-5' })));
|
|
77
|
+
expect(lineageKey(wire())).not.toBe(
|
|
78
|
+
lineageKey(wire({ system: [{ type: 'text', text: 'different agent' }] })),
|
|
79
|
+
);
|
|
80
|
+
expect(lineageKey(wire())).not.toBe(lineageKey(wire({ tools: [{ name: 't' }] })));
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe('CacheKeepalive', () => {
|
|
85
|
+
beforeEach(() => vi.useFakeTimers());
|
|
86
|
+
afterEach(() => vi.useRealTimers());
|
|
87
|
+
|
|
88
|
+
const setup = (send: ReturnType<typeof vi.fn>, cfg = {}) => {
|
|
89
|
+
const events: KeepaliveEvent[] = [];
|
|
90
|
+
const ka = new CacheKeepalive(send as never, {
|
|
91
|
+
refreshAfterMs: 45 * 60_000,
|
|
92
|
+
checkIntervalMs: 5 * 60_000,
|
|
93
|
+
maxIdleMs: 24 * 60 * 60_000,
|
|
94
|
+
onEvent: (e) => events.push(e),
|
|
95
|
+
...cfg,
|
|
96
|
+
});
|
|
97
|
+
return { ka, events };
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
it('does nothing while real traffic keeps the entry warm (the busy-agent case)', async () => {
|
|
101
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
102
|
+
const { ka } = setup(send);
|
|
103
|
+
// A turn every 10 minutes for 2 hours: real requests refresh the TTL for
|
|
104
|
+
// free, so the keepalive must never fire.
|
|
105
|
+
for (let i = 0; i < 12; i++) {
|
|
106
|
+
ka.record(wire(), undefined, 'stream');
|
|
107
|
+
await vi.advanceTimersByTimeAsync(10 * 60_000);
|
|
108
|
+
}
|
|
109
|
+
expect(send).not.toHaveBeenCalled();
|
|
110
|
+
ka.stop();
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('refreshes once the entry goes untouched past refreshAfterMs', async () => {
|
|
114
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
115
|
+
const { ka, events } = setup(send);
|
|
116
|
+
ka.record(wire(), undefined, 'stream');
|
|
117
|
+
|
|
118
|
+
await vi.advanceTimersByTimeAsync(40 * 60_000);
|
|
119
|
+
expect(send).not.toHaveBeenCalled();
|
|
120
|
+
|
|
121
|
+
await vi.advanceTimersByTimeAsync(10 * 60_000);
|
|
122
|
+
expect(send).toHaveBeenCalledTimes(1);
|
|
123
|
+
expect(events.some((e) => e.type === 'refreshed')).toBe(true);
|
|
124
|
+
ka.stop();
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('replays max_tokens:0 without stream, and changes nothing else', async () => {
|
|
128
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
129
|
+
const { ka } = setup(send);
|
|
130
|
+
const original = wire();
|
|
131
|
+
ka.record(original, { 'anthropic-beta': 'x' }, 'stream');
|
|
132
|
+
await vi.advanceTimersByTimeAsync(50 * 60_000);
|
|
133
|
+
|
|
134
|
+
const call = send.mock.calls[0]!;
|
|
135
|
+
const payload = call[0] as Record<string, unknown>;
|
|
136
|
+
const headers = call[1] as Record<string, string> | undefined;
|
|
137
|
+
expect(payload.max_tokens).toBe(0);
|
|
138
|
+
expect('stream' in payload).toBe(false);
|
|
139
|
+
expect(headers).toEqual({ 'anthropic-beta': 'x' });
|
|
140
|
+
// The cache-key-bearing fields must be untouched — this is the whole point.
|
|
141
|
+
expect(payload.thinking).toEqual({ type: 'adaptive' });
|
|
142
|
+
expect(payload.system).toBe(original.system);
|
|
143
|
+
expect(payload.messages).toBe(original.messages);
|
|
144
|
+
expect(payload.model).toBe('claude-fable-5');
|
|
145
|
+
ka.stop();
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('stops refreshing after maxIdleMs measured from the last REAL request', async () => {
|
|
149
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
150
|
+
const { ka, events } = setup(send, { maxIdleMs: 3 * 60 * 60_000 });
|
|
151
|
+
ka.record(wire(), undefined, 'stream');
|
|
152
|
+
|
|
153
|
+
await vi.advanceTimersByTimeAsync(3 * 60 * 60_000 + 60_000);
|
|
154
|
+
// Pokes must not extend their own mandate: ~3 refreshes, then expiry.
|
|
155
|
+
expect(events.some((e) => e.type === 'expired')).toBe(true);
|
|
156
|
+
const before = send.mock.calls.length;
|
|
157
|
+
await vi.advanceTimersByTimeAsync(6 * 60 * 60_000);
|
|
158
|
+
expect(send.mock.calls.length).toBe(before);
|
|
159
|
+
ka.stop();
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('detects a poke that WROTE instead of read, and gives up on that lineage', async () => {
|
|
163
|
+
// The silent-20x failure: a successful call that created a fresh 2x entry.
|
|
164
|
+
const send = vi.fn().mockResolvedValue({
|
|
165
|
+
usage: { cache_read_input_tokens: 0, cache_creation_input_tokens: 494_000 },
|
|
166
|
+
});
|
|
167
|
+
const { ka, events } = setup(send, { maxIneffective: 2 });
|
|
168
|
+
ka.record(wire(), undefined, 'stream');
|
|
169
|
+
|
|
170
|
+
await vi.advanceTimersByTimeAsync(50 * 60_000);
|
|
171
|
+
await vi.advanceTimersByTimeAsync(50 * 60_000);
|
|
172
|
+
|
|
173
|
+
const bad = events.filter((e) => e.type === 'ineffective');
|
|
174
|
+
expect(bad.length).toBe(2);
|
|
175
|
+
expect((bad[0] as { reason: string }).reason).toBe('wrote-instead-of-read');
|
|
176
|
+
|
|
177
|
+
const after = send.mock.calls.length;
|
|
178
|
+
await vi.advanceTimersByTimeAsync(4 * 60 * 60_000);
|
|
179
|
+
expect(send.mock.calls.length).toBe(after);
|
|
180
|
+
ka.stop();
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it('treats an absent usage field as "not a read" rather than assuming success', async () => {
|
|
184
|
+
const send = vi.fn().mockResolvedValue({});
|
|
185
|
+
const { ka, events } = setup(send);
|
|
186
|
+
ka.record(wire(), undefined, 'stream');
|
|
187
|
+
await vi.advanceTimersByTimeAsync(50 * 60_000);
|
|
188
|
+
expect(events.some((e) => e.type === 'ineffective')).toBe(true);
|
|
189
|
+
ka.stop();
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('hard-disables after consecutive errors instead of becoming a retry storm', async () => {
|
|
193
|
+
// fable-cm, 2026-08-21: 1033 `400 invalid_request_error` in 3h from a
|
|
194
|
+
// background lane. A keepalive must never be able to do that.
|
|
195
|
+
const send = vi.fn().mockRejectedValue(new Error('400 invalid_request_error'));
|
|
196
|
+
const { ka, events } = setup(send, { maxConsecutiveErrors: 3 });
|
|
197
|
+
ka.record(wire(), undefined, 'stream');
|
|
198
|
+
|
|
199
|
+
await vi.advanceTimersByTimeAsync(24 * 60 * 60_000);
|
|
200
|
+
|
|
201
|
+
expect(send.mock.calls.length).toBe(3);
|
|
202
|
+
expect(events.some((e) => e.type === 'disabled')).toBe(true);
|
|
203
|
+
ka.stop();
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it('ignores the aux lane by default', async () => {
|
|
207
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
208
|
+
const { ka } = setup(send);
|
|
209
|
+
ka.record(wire(), undefined, 'complete');
|
|
210
|
+
await vi.advanceTimersByTimeAsync(2 * 60 * 60_000);
|
|
211
|
+
expect(send).not.toHaveBeenCalled();
|
|
212
|
+
ka.stop();
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it('evicts the oldest lineage past maxLineages to bound memory', () => {
|
|
216
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
217
|
+
const { ka } = setup(send, { maxLineages: 2 });
|
|
218
|
+
ka.record(wire({ model: 'a' }), undefined, 'stream');
|
|
219
|
+
ka.record(wire({ model: 'b' }), undefined, 'stream');
|
|
220
|
+
ka.record(wire({ model: 'c' }), undefined, 'stream');
|
|
221
|
+
expect(ka.getStatus().length).toBe(2);
|
|
222
|
+
ka.stop();
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('drops a snapshot when the request shape stops being warmable', () => {
|
|
226
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
227
|
+
const { ka, events } = setup(send);
|
|
228
|
+
ka.record(wire(), undefined, 'stream');
|
|
229
|
+
expect(ka.getStatus().length).toBe(1);
|
|
230
|
+
// Same lineage (model/system/tools identical), now with forced tool choice.
|
|
231
|
+
ka.record(wire({ tool_choice: { type: 'any' } }), undefined, 'stream');
|
|
232
|
+
expect(ka.getStatus().length).toBe(0);
|
|
233
|
+
expect(events.some((e) => e.type === 'skipped')).toBe(true);
|
|
234
|
+
ka.stop();
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('is inert when disabled', async () => {
|
|
238
|
+
const send = vi.fn().mockResolvedValue(hit);
|
|
239
|
+
const ka = new CacheKeepalive(send as never, { enabled: false });
|
|
240
|
+
ka.record(wire(), undefined, 'stream');
|
|
241
|
+
await vi.advanceTimersByTimeAsync(6 * 60 * 60_000);
|
|
242
|
+
expect(send).not.toHaveBeenCalled();
|
|
243
|
+
});
|
|
244
|
+
});
|