@namzu/sdk 52.0.0 → 52.2.0
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/CHANGELOG.md +29 -0
- package/README.md +1 -1
- package/dist/compaction/verifier.d.ts.map +1 -1
- package/dist/compaction/verifier.js +57 -17
- package/dist/compaction/verifier.js.map +1 -1
- package/dist/connector/tools/adapter.d.ts +2 -2
- package/dist/contracts/a2a.d.ts +94 -94
- package/dist/manager/resident/learning.d.ts +6 -6
- package/dist/manager/resident/store.d.ts +4 -4
- package/dist/pals/activity/subscription-schema.d.ts +48 -48
- package/dist/pals/communication/ingress-schema.d.ts +192 -192
- package/dist/pals/communication/schema.d.ts +18 -18
- package/dist/peers/protocol.d.ts +36 -36
- package/dist/provider/capabilities.d.ts +9 -0
- package/dist/provider/capabilities.d.ts.map +1 -1
- package/dist/provider/capabilities.js +15 -0
- package/dist/provider/capabilities.js.map +1 -1
- package/dist/provider/errors.d.ts.map +1 -1
- package/dist/provider/errors.js +13 -0
- package/dist/provider/errors.js.map +1 -1
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +10 -0
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/idle-timeout.d.ts.map +1 -1
- package/dist/provider/idle-timeout.js +5 -0
- package/dist/provider/idle-timeout.js.map +1 -1
- package/dist/provider/image-input-refusal.d.ts +9 -0
- package/dist/provider/image-input-refusal.d.ts.map +1 -0
- package/dist/provider/image-input-refusal.js +54 -0
- package/dist/provider/image-input-refusal.js.map +1 -0
- package/dist/provider/index.d.ts +2 -1
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +2 -1
- package/dist/provider/index.js.map +1 -1
- package/dist/provider/retry.d.ts +7 -2
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +38 -4
- package/dist/provider/retry.js.map +1 -1
- package/dist/public-runtime.d.ts +2 -1
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +1 -1
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +1 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +1 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/runtime/query/deferred-sandbox.d.ts +54 -0
- package/dist/runtime/query/deferred-sandbox.d.ts.map +1 -0
- package/dist/runtime/query/deferred-sandbox.js +75 -0
- package/dist/runtime/query/deferred-sandbox.js.map +1 -0
- package/dist/runtime/query/executor.d.ts +11 -0
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +25 -3
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +2 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +94 -25
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +26 -0
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +164 -21
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction-breaker.d.ts +10 -7
- package/dist/runtime/query/iteration/phases/compaction-breaker.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction-breaker.js +10 -7
- package/dist/runtime/query/iteration/phases/compaction-breaker.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts +42 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +119 -21
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/provider-rejected-image.d.ts +21 -1
- package/dist/runtime/query/iteration/provider-rejected-image.d.ts.map +1 -1
- package/dist/runtime/query/iteration/provider-rejected-image.js +53 -7
- package/dist/runtime/query/iteration/provider-rejected-image.js.map +1 -1
- package/dist/runtime/query/iteration/request-repair.d.ts +108 -0
- package/dist/runtime/query/iteration/request-repair.d.ts.map +1 -0
- package/dist/runtime/query/iteration/request-repair.js +593 -0
- package/dist/runtime/query/iteration/request-repair.js.map +1 -0
- package/dist/runtime/query/iteration/stream-turn.d.ts +6 -0
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +2 -2
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/request-rich-content.d.ts +5 -1
- package/dist/runtime/query/request-rich-content.d.ts.map +1 -1
- package/dist/runtime/query/request-rich-content.js +67 -25
- package/dist/runtime/query/request-rich-content.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +1 -0
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +1 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/tools/builtins/browser.d.ts +4 -4
- package/dist/tools/builtins/code-analysis.d.ts +49 -0
- package/dist/tools/builtins/code-analysis.d.ts.map +1 -0
- package/dist/tools/builtins/code-analysis.js +409 -0
- package/dist/tools/builtins/code-analysis.js.map +1 -0
- package/dist/tools/builtins/computer-use.d.ts +25 -25
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +12 -5
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/index.d.ts +1 -0
- package/dist/tools/builtins/index.d.ts.map +1 -1
- package/dist/tools/builtins/index.js +1 -0
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/lsp.d.ts +1 -1
- package/dist/tools/builtins/skill.d.ts +2 -2
- package/dist/types/code-analysis/index.d.ts +299 -0
- package/dist/types/code-analysis/index.d.ts.map +1 -0
- package/dist/types/code-analysis/index.js +30 -0
- package/dist/types/code-analysis/index.js.map +1 -0
- package/dist/types/plugin/index.d.ts +6 -6
- package/dist/types/provider/errors.d.ts.map +1 -1
- package/dist/types/provider/errors.js +30 -5
- package/dist/types/provider/errors.js.map +1 -1
- package/dist/types/provider/interface.d.ts +12 -0
- package/dist/types/provider/interface.d.ts.map +1 -1
- package/dist/types/provider/stream.d.ts +1 -1
- package/dist/types/session/config.d.ts +14 -0
- package/dist/types/session/config.d.ts.map +1 -1
- package/dist/types/session/events.d.ts +20 -5
- package/dist/types/session/events.d.ts.map +1 -1
- package/dist/types/session/events.js.map +1 -1
- package/dist/types/session/records.d.ts +127 -127
- package/dist/types/tool/index.d.ts +9 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/package.json +2 -2
- package/src/compaction/verifier.ts +57 -20
- package/src/provider/capabilities.ts +17 -0
- package/src/provider/errors.ts +13 -0
- package/src/provider/fallback.ts +10 -0
- package/src/provider/idle-timeout.ts +5 -0
- package/src/provider/image-input-refusal.ts +54 -0
- package/src/provider/index.ts +2 -0
- package/src/provider/retry.ts +42 -4
- package/src/public-runtime.ts +28 -0
- package/src/public-tools.ts +5 -0
- package/src/runtime/query/deferred-sandbox.ts +110 -0
- package/src/runtime/query/executor.ts +27 -3
- package/src/runtime/query/index.ts +127 -49
- package/src/runtime/query/iteration/index.ts +188 -23
- package/src/runtime/query/iteration/phases/compaction-breaker.ts +10 -8
- package/src/runtime/query/iteration/phases/compaction.ts +151 -35
- package/src/runtime/query/iteration/provider-rejected-image.ts +71 -5
- package/src/runtime/query/iteration/request-repair.ts +743 -0
- package/src/runtime/query/iteration/stream-turn.ts +11 -1
- package/src/runtime/query/request-rich-content.ts +77 -27
- package/src/runtime/query/tooling.ts +2 -0
- package/src/tools/builtins/code-analysis.ts +486 -0
- package/src/tools/builtins/computer-use.ts +13 -4
- package/src/tools/builtins/index.ts +5 -0
- package/src/types/code-analysis/index.ts +325 -0
- package/src/types/provider/errors.ts +33 -5
- package/src/types/provider/interface.ts +13 -0
- package/src/types/provider/stream.ts +1 -1
- package/src/types/session/config.ts +14 -0
- package/src/types/session/events.ts +25 -5
- package/src/types/tool/index.ts +9 -0
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { repairToolMessageHistory, toolHistoryRepairChanged } from '../../../compaction/dangling.js';
|
|
3
|
+
import { isProviderRequestError } from '../../../provider/errors.js';
|
|
4
|
+
import { isImageInputRefusal } from '../../../provider/image-input-refusal.js';
|
|
5
|
+
import { findSingleRequestImage } from '../request-rich-content.js';
|
|
6
|
+
import { isProviderRejectedImageError } from './provider-rejected-image.js';
|
|
7
|
+
/** Most repair resends for one original request, across every send it makes. */
|
|
8
|
+
export const MAX_REPAIRS_PER_REQUEST = 5;
|
|
9
|
+
const MAX_STRIPS_PER_INDEX = 3;
|
|
10
|
+
/** The reference drops media in these steps for an unprocessable request. */
|
|
11
|
+
const GENERIC_MEDIA_LIMITS = [510, 255, 127];
|
|
12
|
+
const PARAMETER_CODES = new Set([
|
|
13
|
+
'unsupported_parameter',
|
|
14
|
+
'unsupported_value',
|
|
15
|
+
'unknown_parameter',
|
|
16
|
+
]);
|
|
17
|
+
const REASONING_CODES = new Set([
|
|
18
|
+
'invalid_encrypted_content',
|
|
19
|
+
'invalid_reasoning',
|
|
20
|
+
'invalid_signature',
|
|
21
|
+
]);
|
|
22
|
+
const TOOL_PAIRING = /\btool_use\b.{0,120}\btool_result\b|\btool_result\b.{0,120}\btool_use\b|unexpected\s+`?tool_use_id`?|tool_use\s+ids?\s+must\s+be\s+unique|\btool_call_id\b|role\s+'tool'\s+must\s+be\s+a\s+response|'tool_calls'\s+must\s+be\s+followed|Expected\s+toolResult\s+blocks|function\s+call\s+turn\s+comes\s+immediately|number\s+of\s+function\s+response\s+parts/i;
|
|
23
|
+
const REASONING = /\bthought[_ ]?signature\b|`?signature`?\s+in\s+`?(?:thinking|redacted_thinking)|\b(?:thinking|redacted_thinking)\s+blocks?\b.{0,160}\b(?:cannot|can['’]t|must|invalid|modified|expected)|\bexpected\s+`?(?:thinking|redacted_thinking)`?|\bencrypted[_ ]content\b|\breasoning\s+item\b|\bitem\s+'rs_[^']*'|\bof\s+type\s+'reasoning'/i;
|
|
24
|
+
/** A path into the tool list: wording about a tool schema is never about a request parameter or media. */
|
|
25
|
+
const TOOL_SCHEMA_PATH = /\b(?:tools?|functions?)[.[]\s*\d+|input_schema|\.properties\b|json\s+schema/i;
|
|
26
|
+
const REFUSAL = "(?:unsupported|not\\s+supported|does\\s?n[o']t\\s+support|do\\s+not\\s+support|unrecognized|unknown\\s+(?:request\\s+)?(?:parameter|argument|field)|not\\s+allowed|deprecated|only\\s+the\\s+default)";
|
|
27
|
+
const PARAMETER_NAMES = {
|
|
28
|
+
effort: '(?:reasoning[_. -]?effort|effort)',
|
|
29
|
+
thinking: 'thinking',
|
|
30
|
+
temperature: 'temperature',
|
|
31
|
+
topP: 'top[_ ]?p',
|
|
32
|
+
responseFormat: '(?:response_format|output_config(?:\\.format)?|json_schema|json_object|structured\\s+output)',
|
|
33
|
+
};
|
|
34
|
+
const PARAMETER_PATTERNS = Object.fromEntries(Object.entries(PARAMETER_NAMES).map(([name, token]) => [
|
|
35
|
+
name,
|
|
36
|
+
{
|
|
37
|
+
named: new RegExp(`\\b${token}\\b`, 'i'),
|
|
38
|
+
refused: new RegExp(`${REFUSAL}.{0,80}\\b${token}\\b|\\b${token}\\b.{0,80}${REFUSAL}`, 'i'),
|
|
39
|
+
},
|
|
40
|
+
]));
|
|
41
|
+
const BOTH_SAMPLING = /temperature.{0,60}top[_ ]?p.{0,80}(?:cannot|can['’]t|may\s+not|should\s+not).{0,20}(?:both|together)/i;
|
|
42
|
+
const IMAGE_FAULT = /\b(?:images?|pictures?|photos?)\b.{0,100}\b(?:too\s+(?:large|big)|exceeds?|larger\s+than|maximum\s+(?:size|dimensions?)|dimensions?|(?:could|can)\s?not\s+be\s+(?:processed|decoded|loaded|read|fetched|downloaded)|failed\s+to\s+(?:process|decode|load|read|download)|unsupported|not\s+supported|corrupt\w*|malformed|truncated|invalid)\b|\b(?:(?:could|can)\s?not|failed\s+to|unable\s+to)\s+(?:process|decode|load|read|download|fetch)\b.{0,60}\b(?:images?|pictures?)\b|\bunsupported\s+(?:image|media)\b|\binvalid\s+image\b/i;
|
|
43
|
+
const DOCUMENT_FAULT = /\bdocument_block\b|\b(?:documents?|pdfs?)\b.{0,80}\b(?:too\s+(?:large|big)|exceeds?\s+(?:the\s+)?(?:maximum|size|page)|page\s+limit|password|corrupt\w*|(?:could|can)\s?not\s+be\s+(?:processed|read|decoded)|failed\s+to\s+(?:process|read|decode))\b|\bpassword[- ]protected\s+pdf\b|\bpdf\b.{0,40}\bpages?\b.{0,20}\b(?:limit|maximum|exceeds?)\b/i;
|
|
44
|
+
const GENERIC_MEDIA = /\bunprocessable\b.{0,100}\b(?:images?|media|documents?)\b|\b(?:images?|media|documents?)\b.{0,100}\bunprocessable\b|\btoo\s+many\s+(?:images?|documents?|media|attachments?)\b|\bmedia_budget\b|\bimage_block\b/i;
|
|
45
|
+
const NAMES_MEDIA = /\b(?:images?|pictures?|photos?|documents?|pdfs?|media|attachments?)\b/i;
|
|
46
|
+
function wireIndexes(text) {
|
|
47
|
+
const both = /\bmessages?[.[]\s*(\d+)\s*\]?[.[]\s*content[.[]\s*(\d+)/i.exec(text);
|
|
48
|
+
if (both?.[1] !== undefined && both[2] !== undefined) {
|
|
49
|
+
return { messageIndex: Number(both[1]), contentIndex: Number(both[2]) };
|
|
50
|
+
}
|
|
51
|
+
const only = /\bmessages?[.[]\s*(\d+)\b/i.exec(text);
|
|
52
|
+
return only?.[1] !== undefined ? { messageIndex: Number(only[1]) } : {};
|
|
53
|
+
}
|
|
54
|
+
function rejectedParameters(text, code, params) {
|
|
55
|
+
if (TOOL_SCHEMA_PATH.test(text))
|
|
56
|
+
return [];
|
|
57
|
+
const structured = code !== undefined && PARAMETER_CODES.has(code);
|
|
58
|
+
const set = {
|
|
59
|
+
effort: params.effort !== undefined,
|
|
60
|
+
thinking: params.thinking !== undefined,
|
|
61
|
+
temperature: params.temperature !== undefined,
|
|
62
|
+
topP: params.topP !== undefined,
|
|
63
|
+
responseFormat: params.responseFormat !== undefined,
|
|
64
|
+
};
|
|
65
|
+
const found = [];
|
|
66
|
+
for (const name of Object.keys(set)) {
|
|
67
|
+
if (!set[name])
|
|
68
|
+
continue;
|
|
69
|
+
const pattern = PARAMETER_PATTERNS[name];
|
|
70
|
+
if (structured ? pattern.named.test(text) : pattern.refused.test(text))
|
|
71
|
+
found.push(name);
|
|
72
|
+
}
|
|
73
|
+
if (found.length === 0 && set.topP && BOTH_SAMPLING.test(text))
|
|
74
|
+
found.push('topP');
|
|
75
|
+
return found;
|
|
76
|
+
}
|
|
77
|
+
function requestHasMedia(params) {
|
|
78
|
+
return listMedia(params.messages).length > 0;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* What kind of invalid request this is, from the provider's structured code
|
|
82
|
+
* where it sent one and from its wording only as a fallback.
|
|
83
|
+
*/
|
|
84
|
+
export function classifyRequestRejection(error, params) {
|
|
85
|
+
if (!isProviderRequestError(error) || error.kind !== 'bad_request')
|
|
86
|
+
return null;
|
|
87
|
+
if (error.status !== undefined &&
|
|
88
|
+
error.status !== 400 &&
|
|
89
|
+
error.status !== 413 &&
|
|
90
|
+
error.status !== 422) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const text = error.detail ?? error.message;
|
|
94
|
+
const code = error.providerCode;
|
|
95
|
+
if (code !== undefined && REASONING_CODES.has(code))
|
|
96
|
+
return { kind: 'reasoning' };
|
|
97
|
+
if (REASONING.test(text))
|
|
98
|
+
return { kind: 'reasoning' };
|
|
99
|
+
if (TOOL_PAIRING.test(text))
|
|
100
|
+
return { kind: 'tool-pairing' };
|
|
101
|
+
const parameters = rejectedParameters(text, code, params);
|
|
102
|
+
if (parameters.length > 0)
|
|
103
|
+
return { kind: 'parameter', parameters };
|
|
104
|
+
if (TOOL_SCHEMA_PATH.test(text))
|
|
105
|
+
return null;
|
|
106
|
+
if (code === 'invalid_image')
|
|
107
|
+
return { kind: 'media', generic: false, ...wireIndexes(text) };
|
|
108
|
+
if (GENERIC_MEDIA.test(text))
|
|
109
|
+
return { kind: 'media', generic: true };
|
|
110
|
+
// A bare 413 or 422 says nothing about media: it counts only when the
|
|
111
|
+
// request carries some and the provider's words name it.
|
|
112
|
+
if ((error.status === 413 || error.status === 422) && NAMES_MEDIA.test(text)) {
|
|
113
|
+
return requestHasMedia(params) ? { kind: 'media', generic: true } : null;
|
|
114
|
+
}
|
|
115
|
+
if (IMAGE_FAULT.test(text) || DOCUMENT_FAULT.test(text)) {
|
|
116
|
+
return { kind: 'media', generic: false, ...wireIndexes(text) };
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
function isAccepted(chunk) {
|
|
121
|
+
if (chunk.retry !== undefined || chunk.fallback !== undefined || chunk.error !== undefined) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return Boolean(chunk.delta.content ||
|
|
125
|
+
chunk.delta.toolCalls?.length ||
|
|
126
|
+
chunk.delta.toolCallEnd ||
|
|
127
|
+
chunk.delta.reasoning ||
|
|
128
|
+
chunk.delta.citation ||
|
|
129
|
+
chunk.finishReason !== undefined ||
|
|
130
|
+
chunk.usage !== undefined ||
|
|
131
|
+
chunk.replayState !== undefined ||
|
|
132
|
+
chunk.textParts !== undefined);
|
|
133
|
+
}
|
|
134
|
+
const mediaFingerprint = (data, mediaType) => createHash('sha256').update(mediaType).update('\0').update(data).digest('hex');
|
|
135
|
+
const FAULT_NOTE = 'the provider could not process it. The file may be unsupported or corrupt; do not retry reading it. If you need to inspect it, use a shell command instead.';
|
|
136
|
+
const LIMIT_NOTE = 'this conversation holds more files than the provider accepts at once, so the oldest are left out of the request. They are still in the conversation.';
|
|
137
|
+
const removedNote = (kind, limit) => `[${kind} removed: ${limit ? LIMIT_NOTE : FAULT_NOTE}]`;
|
|
138
|
+
function listMedia(messages) {
|
|
139
|
+
const slots = [];
|
|
140
|
+
for (const [messageIndex, message] of messages.entries()) {
|
|
141
|
+
if (message.role === 'user') {
|
|
142
|
+
for (const [itemIndex, attachment] of (message.attachments ?? []).entries()) {
|
|
143
|
+
if (attachment.type === 'stored')
|
|
144
|
+
continue;
|
|
145
|
+
slots.push({
|
|
146
|
+
messageIndex,
|
|
147
|
+
itemIndex,
|
|
148
|
+
source: 'user',
|
|
149
|
+
kind: attachment.type === 'document' ? 'document' : 'image',
|
|
150
|
+
fingerprint: mediaFingerprint(attachment.data, attachment.mediaType),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else if (message.role === 'tool' && Array.isArray(message.content)) {
|
|
155
|
+
for (const [itemIndex, block] of message.content.entries()) {
|
|
156
|
+
if (block.type !== 'image' && block.type !== 'document')
|
|
157
|
+
continue;
|
|
158
|
+
slots.push({
|
|
159
|
+
messageIndex,
|
|
160
|
+
itemIndex,
|
|
161
|
+
source: 'tool',
|
|
162
|
+
kind: block.type,
|
|
163
|
+
fingerprint: mediaFingerprint(block.data, block.mediaType),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return slots;
|
|
169
|
+
}
|
|
170
|
+
/** Replace the given media with a short text note, in a copy. */
|
|
171
|
+
function removeMedia(messages, slots, limit) {
|
|
172
|
+
if (slots.length === 0)
|
|
173
|
+
return messages;
|
|
174
|
+
const byMessage = new Map();
|
|
175
|
+
for (const slot of slots) {
|
|
176
|
+
const items = byMessage.get(slot.messageIndex) ?? new Map();
|
|
177
|
+
items.set(slot.itemIndex, slot);
|
|
178
|
+
byMessage.set(slot.messageIndex, items);
|
|
179
|
+
}
|
|
180
|
+
return messages.map((message, messageIndex) => {
|
|
181
|
+
const items = byMessage.get(messageIndex);
|
|
182
|
+
if (!items)
|
|
183
|
+
return message;
|
|
184
|
+
if (message.role === 'user') {
|
|
185
|
+
const attachments = message.attachments ?? [];
|
|
186
|
+
const kept = attachments.filter((_a, i) => !items.has(i));
|
|
187
|
+
const notes = [...items.values()]
|
|
188
|
+
.sort((a, b) => a.itemIndex - b.itemIndex)
|
|
189
|
+
.map((slot) => removedNote(slot.kind, limit))
|
|
190
|
+
.join('\n\n');
|
|
191
|
+
const { attachments: _drop, ...rest } = message;
|
|
192
|
+
return {
|
|
193
|
+
...rest,
|
|
194
|
+
content: message.content.length > 0 ? `${message.content}\n\n${notes}` : notes,
|
|
195
|
+
...(kept.length > 0 ? { attachments: kept } : {}),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
if (message.role === 'tool' && Array.isArray(message.content)) {
|
|
199
|
+
const content = message.content.map((block, i) => {
|
|
200
|
+
const slot = items.get(i);
|
|
201
|
+
return slot ? { type: 'text', text: removedNote(slot.kind, limit) } : block;
|
|
202
|
+
});
|
|
203
|
+
return { ...message, content };
|
|
204
|
+
}
|
|
205
|
+
return message;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
function stripReasoning(messages) {
|
|
209
|
+
let changed = false;
|
|
210
|
+
const out = messages.map((message) => {
|
|
211
|
+
if (message.role !== 'assistant')
|
|
212
|
+
return message;
|
|
213
|
+
const assistant = message;
|
|
214
|
+
const hasState = assistant.source !== undefined &&
|
|
215
|
+
assistant.source.replayState !== undefined;
|
|
216
|
+
if (assistant.reasoning === undefined && !hasState)
|
|
217
|
+
return message;
|
|
218
|
+
changed = true;
|
|
219
|
+
const { reasoning: _reasoning, source, ...rest } = assistant;
|
|
220
|
+
if (source === undefined)
|
|
221
|
+
return rest;
|
|
222
|
+
const { replayState: _state, ...route } = source;
|
|
223
|
+
return { ...rest, source: route };
|
|
224
|
+
});
|
|
225
|
+
return changed ? out : messages;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The media a provider's `messages.N.content.M` points at, mapped back through
|
|
229
|
+
* that driver's own serialisation. Exact for the two wires whose layout is
|
|
230
|
+
* known; anything else returns undefined and the caller does not guess.
|
|
231
|
+
*
|
|
232
|
+
* - the content-block wire: system turns are left out; a run of consecutive tool results
|
|
233
|
+
* is ONE user entry whose blocks are those results; every other message,
|
|
234
|
+
* including a user turn that follows tool results, is its own entry; a user
|
|
235
|
+
* entry's blocks are its text (when not empty) and then each attachment.
|
|
236
|
+
* - the chat-completions wire: one entry per message, system included; only user attachments
|
|
237
|
+
* travel as media (tool results are sent as text); blocks are the text (when
|
|
238
|
+
* not empty) and then each attachment.
|
|
239
|
+
*/
|
|
240
|
+
function mediaAtWireIndex(messages, slots, family, wireIndex, contentIndex) {
|
|
241
|
+
if (family !== 'anthropic' && family !== 'openai')
|
|
242
|
+
return undefined;
|
|
243
|
+
const entries = [];
|
|
244
|
+
let inToolRun = false;
|
|
245
|
+
for (const [index, message] of messages.entries()) {
|
|
246
|
+
if (family === 'anthropic') {
|
|
247
|
+
if (message.role === 'system')
|
|
248
|
+
continue;
|
|
249
|
+
if (message.role === 'tool') {
|
|
250
|
+
if (!inToolRun)
|
|
251
|
+
entries.push([]);
|
|
252
|
+
inToolRun = true;
|
|
253
|
+
entries[entries.length - 1]?.push(index);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
inToolRun = false;
|
|
257
|
+
}
|
|
258
|
+
entries.push([index]);
|
|
259
|
+
}
|
|
260
|
+
const entry = entries[wireIndex];
|
|
261
|
+
if (entry === undefined)
|
|
262
|
+
return undefined;
|
|
263
|
+
const mine = slots.filter((slot) => entry.includes(slot.messageIndex));
|
|
264
|
+
if (mine.length === 0)
|
|
265
|
+
return undefined;
|
|
266
|
+
if (contentIndex === undefined)
|
|
267
|
+
return mine;
|
|
268
|
+
const first = entry[0];
|
|
269
|
+
const message = first === undefined ? undefined : messages[first];
|
|
270
|
+
if (message?.role === 'user' && !(family === 'openai' && mine.some((s) => s.source === 'tool'))) {
|
|
271
|
+
const itemIndex = contentIndex - (message.content.length > 0 ? 1 : 0);
|
|
272
|
+
const hit = mine.filter((slot) => slot.itemIndex === itemIndex);
|
|
273
|
+
return hit.length > 0 ? hit : mine;
|
|
274
|
+
}
|
|
275
|
+
if (family === 'anthropic' && message?.role === 'tool') {
|
|
276
|
+
const owner = entry[contentIndex];
|
|
277
|
+
const hit = owner === undefined ? [] : mine.filter((slot) => slot.messageIndex === owner);
|
|
278
|
+
return hit.length > 0 ? hit : mine;
|
|
279
|
+
}
|
|
280
|
+
return mine;
|
|
281
|
+
}
|
|
282
|
+
const emptyLearned = () => ({
|
|
283
|
+
latched: new Map(),
|
|
284
|
+
reasoningOff: new Set(),
|
|
285
|
+
rejectedMedia: new Set(),
|
|
286
|
+
mediaLimit: undefined,
|
|
287
|
+
});
|
|
288
|
+
export class RequestRepair {
|
|
289
|
+
hooks;
|
|
290
|
+
learned = emptyLearned();
|
|
291
|
+
constructor(hooks = {}) {
|
|
292
|
+
this.hooks = hooks;
|
|
293
|
+
}
|
|
294
|
+
/** A fresh budget for one original request. */
|
|
295
|
+
session() {
|
|
296
|
+
return {
|
|
297
|
+
spent: new Set(),
|
|
298
|
+
stripsByIndex: new Map(),
|
|
299
|
+
pending: emptyLearned(),
|
|
300
|
+
repairs: 0,
|
|
301
|
+
removal: undefined,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
served(provider, params) {
|
|
305
|
+
const member = this.hooks.servedBy?.();
|
|
306
|
+
return {
|
|
307
|
+
providerId: member?.providerId ?? params.providerRoute?.providerId ?? provider.id,
|
|
308
|
+
model: member?.model ?? params.providerRoute?.model ?? params.model,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
routeKey(provider, params) {
|
|
312
|
+
const { providerId, model } = this.served(provider, params);
|
|
313
|
+
return `${providerId}|${model}`;
|
|
314
|
+
}
|
|
315
|
+
/** Everything already confirmed, then the tool pairing the provider requires. */
|
|
316
|
+
prepare(provider, params) {
|
|
317
|
+
const key = this.routeKey(provider, params);
|
|
318
|
+
let next = params;
|
|
319
|
+
const latched = this.learned.latched.get(key);
|
|
320
|
+
if (latched)
|
|
321
|
+
next = withoutParameters(next, latched);
|
|
322
|
+
let messages = next.messages;
|
|
323
|
+
if (this.learned.reasoningOff.has(key))
|
|
324
|
+
messages = stripReasoning(messages);
|
|
325
|
+
messages = this.applyMediaMemory(messages);
|
|
326
|
+
messages = this.pair(messages);
|
|
327
|
+
return messages === next.messages ? next : { ...next, messages };
|
|
328
|
+
}
|
|
329
|
+
applyMediaMemory(messages) {
|
|
330
|
+
const { rejectedMedia, mediaLimit } = this.learned;
|
|
331
|
+
if (rejectedMedia.size === 0 && mediaLimit === undefined)
|
|
332
|
+
return messages;
|
|
333
|
+
const slots = listMedia(messages);
|
|
334
|
+
const faulty = slots.filter((slot) => rejectedMedia.has(slot.fingerprint));
|
|
335
|
+
let out = removeMedia(messages, faulty, false);
|
|
336
|
+
if (mediaLimit !== undefined) {
|
|
337
|
+
const rest = listMedia(out);
|
|
338
|
+
if (rest.length > mediaLimit) {
|
|
339
|
+
out = removeMedia(out, rest.slice(0, rest.length - mediaLimit), true);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return out;
|
|
343
|
+
}
|
|
344
|
+
/** The shared tool-history repair, on the outgoing copy. Duplicate call ids fail closed there, so the request goes out as it is. */
|
|
345
|
+
pair(messages) {
|
|
346
|
+
try {
|
|
347
|
+
const repaired = repairToolMessageHistory(messages);
|
|
348
|
+
if (!toolHistoryRepairChanged(repaired.report))
|
|
349
|
+
return messages;
|
|
350
|
+
this.hooks.debug?.(`Repaired tool pairing before sending: ${JSON.stringify(repaired.report)}`);
|
|
351
|
+
return repaired.messages;
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
this.hooks.debug?.(`Tool pairing could not be repaired before sending: ${error instanceof Error ? error.message : String(error)}`);
|
|
355
|
+
return messages;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/** What a resend that was accepted has proved. */
|
|
359
|
+
commit(session) {
|
|
360
|
+
const { pending } = session;
|
|
361
|
+
for (const [key, names] of pending.latched) {
|
|
362
|
+
const set = this.learned.latched.get(key) ?? new Set();
|
|
363
|
+
for (const name of names)
|
|
364
|
+
set.add(name);
|
|
365
|
+
this.learned.latched.set(key, set);
|
|
366
|
+
}
|
|
367
|
+
for (const key of pending.reasoningOff)
|
|
368
|
+
this.learned.reasoningOff.add(key);
|
|
369
|
+
for (const fingerprint of pending.rejectedMedia)
|
|
370
|
+
this.learned.rejectedMedia.add(fingerprint);
|
|
371
|
+
if (pending.mediaLimit !== undefined) {
|
|
372
|
+
this.learned.mediaLimit = Math.min(this.learned.mediaLimit ?? pending.mediaLimit, pending.mediaLimit);
|
|
373
|
+
}
|
|
374
|
+
session.pending = emptyLearned();
|
|
375
|
+
}
|
|
376
|
+
/** The request to send after `rejection`, or null when nothing more can be tried. */
|
|
377
|
+
next(provider, params, rejection, session) {
|
|
378
|
+
const { spent, pending } = session;
|
|
379
|
+
const key = this.routeKey(provider, params);
|
|
380
|
+
switch (rejection.kind) {
|
|
381
|
+
case 'tool-pairing': {
|
|
382
|
+
if (spent.has('tool-pairing'))
|
|
383
|
+
return null;
|
|
384
|
+
spent.add('tool-pairing');
|
|
385
|
+
const repaired = repairOnce(params.messages);
|
|
386
|
+
if (repaired === null)
|
|
387
|
+
return null;
|
|
388
|
+
this.hooks.debug?.(`Retrying after a tool-history rejection (${key})`);
|
|
389
|
+
return { ...params, messages: repaired };
|
|
390
|
+
}
|
|
391
|
+
case 'reasoning': {
|
|
392
|
+
if (spent.has('reasoning'))
|
|
393
|
+
return null;
|
|
394
|
+
spent.add('reasoning');
|
|
395
|
+
const messages = stripReasoning(params.messages);
|
|
396
|
+
if (messages === params.messages)
|
|
397
|
+
return null;
|
|
398
|
+
pending.reasoningOff.add(key);
|
|
399
|
+
let next = { ...params, messages };
|
|
400
|
+
// With thinking on, a tool turn that carries no thinking block is
|
|
401
|
+
// itself refused ("Expected `thinking` … but found `tool_use`"), so
|
|
402
|
+
// the two go together: neither is asked for in this resend.
|
|
403
|
+
if (params.thinking !== undefined && params.thinking.type !== 'disabled') {
|
|
404
|
+
next = withoutParameters(next, new Set(['thinking']));
|
|
405
|
+
const names = pending.latched.get(key) ?? new Set();
|
|
406
|
+
names.add('thinking');
|
|
407
|
+
pending.latched.set(key, names);
|
|
408
|
+
}
|
|
409
|
+
this.hooks.debug?.(`Retrying without reasoning blocks (${key})`);
|
|
410
|
+
return next;
|
|
411
|
+
}
|
|
412
|
+
case 'parameter': {
|
|
413
|
+
const fresh = rejection.parameters.filter((name) => !spent.has(`param:${name}`));
|
|
414
|
+
if (fresh.length === 0)
|
|
415
|
+
return null;
|
|
416
|
+
for (const name of fresh)
|
|
417
|
+
spent.add(`param:${name}`);
|
|
418
|
+
const names = pending.latched.get(key) ?? new Set();
|
|
419
|
+
for (const name of fresh)
|
|
420
|
+
names.add(name);
|
|
421
|
+
pending.latched.set(key, names);
|
|
422
|
+
this.hooks.debug?.(`Retrying without parameters the model refused (${key}): ${fresh.join(', ')}`);
|
|
423
|
+
return withoutParameters(params, new Set(fresh));
|
|
424
|
+
}
|
|
425
|
+
case 'media':
|
|
426
|
+
return this.nextWithoutMedia(provider, params, rejection, session);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
nextWithoutMedia(provider, params, rejection, session) {
|
|
430
|
+
const { spent, stripsByIndex, pending } = session;
|
|
431
|
+
const slots = listMedia(params.messages);
|
|
432
|
+
if (slots.length === 0)
|
|
433
|
+
return null;
|
|
434
|
+
let victims = [];
|
|
435
|
+
let limited = false;
|
|
436
|
+
if (!rejection.generic) {
|
|
437
|
+
if (rejection.messageIndex !== undefined) {
|
|
438
|
+
const used = stripsByIndex.get(rejection.messageIndex) ?? 0;
|
|
439
|
+
if (used < MAX_STRIPS_PER_INDEX) {
|
|
440
|
+
stripsByIndex.set(rejection.messageIndex, used + 1);
|
|
441
|
+
victims =
|
|
442
|
+
mediaAtWireIndex(params.messages, slots, this.served(provider, params).providerId, rejection.messageIndex, rejection.contentIndex) ?? [];
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
if (victims.length === 0) {
|
|
446
|
+
// No exact index: the newest message that carries media.
|
|
447
|
+
const newest = slots[slots.length - 1];
|
|
448
|
+
if (newest === undefined)
|
|
449
|
+
return null;
|
|
450
|
+
const count = (stripsByIndex.get(-1) ?? 0) + 1;
|
|
451
|
+
if (count > MAX_STRIPS_PER_INDEX)
|
|
452
|
+
return null;
|
|
453
|
+
stripsByIndex.set(-1, count);
|
|
454
|
+
victims = slots.filter((slot) => slot.messageIndex === newest.messageIndex);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
// The reference's steps, then halving for smaller requests, down to
|
|
459
|
+
// none: each step keeps fewer than the request held, newest first.
|
|
460
|
+
const limit = GENERIC_MEDIA_LIMITS.find((candidate) => candidate < slots.length) ??
|
|
461
|
+
Math.floor(slots.length / 2);
|
|
462
|
+
spent.add(`limit:${limit}`);
|
|
463
|
+
pending.mediaLimit = Math.min(pending.mediaLimit ?? limit, limit);
|
|
464
|
+
victims = slots.slice(0, slots.length - limit);
|
|
465
|
+
limited = true;
|
|
466
|
+
}
|
|
467
|
+
// A count limit teaches a limit, not that these files are faulty.
|
|
468
|
+
if (!limited)
|
|
469
|
+
for (const slot of victims)
|
|
470
|
+
pending.rejectedMedia.add(slot.fingerprint);
|
|
471
|
+
this.hooks.debug?.(`Retrying without ${victims.length} media the provider rejected`);
|
|
472
|
+
let lastUser = -1;
|
|
473
|
+
for (const [index, message] of params.messages.entries()) {
|
|
474
|
+
if (message.role === 'user')
|
|
475
|
+
lastUser = index;
|
|
476
|
+
}
|
|
477
|
+
const kinds = new Set(victims.map((slot) => slot.kind));
|
|
478
|
+
const removal = {
|
|
479
|
+
count: victims.length,
|
|
480
|
+
kind: kinds.size === 1 ? [...kinds][0] : 'media',
|
|
481
|
+
current: victims.some((slot) => slot.source === 'user' && slot.messageIndex === lastUser),
|
|
482
|
+
limit: limited,
|
|
483
|
+
};
|
|
484
|
+
const before = session.removal;
|
|
485
|
+
session.removal = before
|
|
486
|
+
? {
|
|
487
|
+
count: before.count + removal.count,
|
|
488
|
+
kind: before.kind === removal.kind ? before.kind : 'media',
|
|
489
|
+
current: before.current || removal.current,
|
|
490
|
+
limit: before.limit && removal.limit,
|
|
491
|
+
}
|
|
492
|
+
: removal;
|
|
493
|
+
return { ...params, messages: removeMedia(params.messages, victims, limited) };
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Send `params`, repairing and resending a request the provider rejects as
|
|
497
|
+
* invalid until it is accepted or nothing more can be changed. The original
|
|
498
|
+
* rejection is thrown when nothing applies, and what the guesses taught is
|
|
499
|
+
* forgotten unless a resend was accepted.
|
|
500
|
+
*/
|
|
501
|
+
async *stream(provider, params, session = this.session()) {
|
|
502
|
+
let current = this.prepare(provider, params);
|
|
503
|
+
let firstError;
|
|
504
|
+
for (;;) {
|
|
505
|
+
let produced = false;
|
|
506
|
+
let reported = false;
|
|
507
|
+
try {
|
|
508
|
+
for await (const chunk of provider.chatStream(current)) {
|
|
509
|
+
if (isAccepted(chunk)) {
|
|
510
|
+
produced = true;
|
|
511
|
+
this.commit(session);
|
|
512
|
+
if (session.removal !== undefined && !reported) {
|
|
513
|
+
reported = true;
|
|
514
|
+
const removal = session.removal;
|
|
515
|
+
session.removal = undefined;
|
|
516
|
+
await this.hooks.onMediaRemoved?.(removal);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
yield chunk;
|
|
520
|
+
}
|
|
521
|
+
this.commit(session);
|
|
522
|
+
if (session.removal !== undefined && !reported) {
|
|
523
|
+
const removal = session.removal;
|
|
524
|
+
session.removal = undefined;
|
|
525
|
+
await this.hooks.onMediaRemoved?.(removal);
|
|
526
|
+
}
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
catch (error) {
|
|
530
|
+
if (current.signal?.aborted)
|
|
531
|
+
throw current.signal.reason;
|
|
532
|
+
if (produced)
|
|
533
|
+
throw error;
|
|
534
|
+
firstError ??= error;
|
|
535
|
+
const forget = () => {
|
|
536
|
+
session.pending = emptyLearned();
|
|
537
|
+
session.removal = undefined;
|
|
538
|
+
throw firstError;
|
|
539
|
+
};
|
|
540
|
+
if (session.repairs >= MAX_REPAIRS_PER_REQUEST)
|
|
541
|
+
return forget();
|
|
542
|
+
if (isHandledElsewhere(error, current))
|
|
543
|
+
return forget();
|
|
544
|
+
const rejection = classifyRequestRejection(error, current);
|
|
545
|
+
if (rejection === null)
|
|
546
|
+
return forget();
|
|
547
|
+
const step = this.next(provider, current, rejection, session);
|
|
548
|
+
if (step === null)
|
|
549
|
+
return forget();
|
|
550
|
+
session.repairs++;
|
|
551
|
+
current = step;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
/** Re-run the shared repair on the outgoing copy; null when it changes nothing or cannot. */
|
|
557
|
+
function repairOnce(messages) {
|
|
558
|
+
try {
|
|
559
|
+
const repaired = repairToolMessageHistory(messages);
|
|
560
|
+
return toolHistoryRepairChanged(repaired.report) ? repaired.messages : null;
|
|
561
|
+
}
|
|
562
|
+
catch {
|
|
563
|
+
return null;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
function withoutParameters(params, names) {
|
|
567
|
+
if (names.size === 0)
|
|
568
|
+
return params;
|
|
569
|
+
const next = { ...params };
|
|
570
|
+
if (names.has('effort'))
|
|
571
|
+
next.effort = undefined;
|
|
572
|
+
if (names.has('thinking'))
|
|
573
|
+
next.thinking = undefined;
|
|
574
|
+
if (names.has('temperature'))
|
|
575
|
+
next.temperature = undefined;
|
|
576
|
+
if (names.has('topP'))
|
|
577
|
+
next.topP = undefined;
|
|
578
|
+
if (names.has('responseFormat'))
|
|
579
|
+
next.responseFormat = undefined;
|
|
580
|
+
return next;
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Rejections another recovery already owns: a model that reads text only, and
|
|
584
|
+
* a single distinct image the provider calls invalid. Those keep their own
|
|
585
|
+
* commit points in `provider-rejected-image.ts`, which wraps this one.
|
|
586
|
+
*/
|
|
587
|
+
function isHandledElsewhere(error, params) {
|
|
588
|
+
if (isProviderRejectedImageError(error) && findSingleRequestImage(params.messages) !== null) {
|
|
589
|
+
return true;
|
|
590
|
+
}
|
|
591
|
+
return isImageInputRefusal(error);
|
|
592
|
+
}
|
|
593
|
+
//# sourceMappingURL=request-repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-repair.js","sourceRoot":"","sources":["../../../../src/runtime/query/iteration/request-repair.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ import type { SessionEvent } from '../../../types/session/index.js';
|
|
|
5
5
|
import type { Logger } from '../../../utils/logger.js';
|
|
6
6
|
import type { EmitEvent } from '../events.js';
|
|
7
7
|
import type { RequestImageIdentity } from '../request-rich-content.js';
|
|
8
|
+
import { type TextOnlyModelRecovery } from './provider-rejected-image.js';
|
|
9
|
+
import type { RequestRepair } from './request-repair.js';
|
|
8
10
|
export interface StreamingTurnResult {
|
|
9
11
|
response: ChatCompletionResponse;
|
|
10
12
|
messageId: import('../../../types/ids/index.js').MessageId;
|
|
@@ -26,6 +28,10 @@ export declare function streamProviderTurn(provider: LLMProvider, params: import
|
|
|
26
28
|
*/
|
|
27
29
|
announceAs?: import('../../../types/ids/index.js').MessageId, imageRecovery?: {
|
|
28
30
|
readonly onAccepted: (identity: RequestImageIdentity) => Promise<void>;
|
|
31
|
+
/** A model refused the request for holding an image it cannot read; the retry sent none. */
|
|
32
|
+
readonly textOnly?: TextOnlyModelRecovery;
|
|
33
|
+
/** Repairs and resends a request the provider rejects as invalid. */
|
|
34
|
+
readonly repair?: RequestRepair;
|
|
29
35
|
}, captureRequest?: boolean,
|
|
30
36
|
/** The session the turn belongs to, named on the chat span as `gen_ai.conversation.id`. */
|
|
31
37
|
sessionId?: import('../../../types/ids/index.js').SessionId): AsyncGenerator<SessionEvent, StreamingTurnResult>;
|