@pellux/goodvibes-sdk 0.33.38 → 0.34.1
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/contracts/artifacts/operator-contract.json +1383 -4
- package/dist/events/workflows.d.ts +4 -0
- package/dist/events/workflows.d.ts.map +1 -1
- package/dist/platform/agents/message-bus-core.d.ts +11 -0
- package/dist/platform/agents/message-bus-core.d.ts.map +1 -1
- package/dist/platform/agents/message-bus-core.js +28 -21
- package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
- package/dist/platform/agents/orchestrator-runner.js +6 -4
- package/dist/platform/agents/wrfc-config.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-config.js +16 -10
- package/dist/platform/agents/wrfc-controller.d.ts +26 -0
- package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-controller.js +134 -138
- package/dist/platform/agents/wrfc-runtime-events.d.ts +1 -0
- package/dist/platform/agents/wrfc-runtime-events.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-runtime-events.js +4 -1
- package/dist/platform/automation/delivery-manager.d.ts.map +1 -1
- package/dist/platform/automation/delivery-manager.js +1 -6
- package/dist/platform/batch/manager.d.ts.map +1 -1
- package/dist/platform/batch/manager.js +1 -3
- package/dist/platform/channels/policy-manager.d.ts.map +1 -1
- package/dist/platform/channels/policy-manager.js +1 -3
- package/dist/platform/channels/reply-pipeline.d.ts.map +1 -1
- package/dist/platform/channels/reply-pipeline.js +4 -0
- package/dist/platform/config/schema-domain-core.d.ts +1 -1
- package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-core.js +12 -12
- package/dist/platform/config/schema-domain-runtime.d.ts +1 -1
- package/dist/platform/config/schema-domain-runtime.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-runtime.js +19 -18
- package/dist/platform/config/schema-domain-surfaces.d.ts +1 -1
- package/dist/platform/config/schema-domain-surfaces.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-surfaces.js +4 -3
- package/dist/platform/config/schema-shared.d.ts +6 -0
- package/dist/platform/config/schema-shared.d.ts.map +1 -1
- package/dist/platform/config/schema-shared.js +21 -1
- package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
- package/dist/platform/control-plane/approval-broker.js +1 -3
- package/dist/platform/control-plane/method-catalog-calendar.d.ts +9 -0
- package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -0
- package/dist/platform/control-plane/method-catalog-calendar.js +117 -0
- package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-channels.js +174 -0
- package/dist/platform/control-plane/method-catalog-email.d.ts +9 -0
- package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -0
- package/dist/platform/control-plane/method-catalog-email.js +101 -0
- package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog.js +4 -0
- package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
- package/dist/platform/control-plane/session-broker-state.js +1 -3
- package/dist/platform/core/compaction-sections.d.ts +5 -1
- package/dist/platform/core/compaction-sections.d.ts.map +1 -1
- package/dist/platform/core/compaction-sections.js +73 -66
- package/dist/platform/core/context-compaction.d.ts.map +1 -1
- package/dist/platform/core/context-compaction.js +9 -16
- package/dist/platform/core/orchestrator-context-runtime.d.ts +2 -2
- package/dist/platform/core/orchestrator-context-runtime.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-context-runtime.js +24 -21
- package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-tool-runtime.js +2 -1
- package/dist/platform/core/session-lineage.d.ts +2 -5
- package/dist/platform/core/session-lineage.d.ts.map +1 -1
- package/dist/platform/core/session-lineage.js +4 -16
- package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
- package/dist/platform/core/wrfc-routing.js +1 -3
- package/dist/platform/daemon/http/mcp-routes.d.ts.map +1 -1
- package/dist/platform/daemon/http/mcp-routes.js +1 -3
- package/dist/platform/daemon/http/openai-compatible-routes.d.ts.map +1 -1
- package/dist/platform/daemon/http/openai-compatible-routes.js +1 -3
- package/dist/platform/daemon/http/runtime-routes.d.ts.map +1 -1
- package/dist/platform/daemon/http/runtime-routes.js +1 -3
- package/dist/platform/hooks/runners/http.d.ts.map +1 -1
- package/dist/platform/hooks/runners/http.js +9 -19
- package/dist/platform/integrations/webhooks.js +2 -11
- package/dist/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
- package/dist/platform/knowledge/semantic/self-improvement.js +2 -21
- package/dist/platform/mcp/client.d.ts.map +1 -1
- package/dist/platform/mcp/client.js +1 -3
- package/dist/platform/mcp/config.d.ts.map +1 -1
- package/dist/platform/mcp/config.js +1 -3
- package/dist/platform/media/builtin-generation-providers.d.ts.map +1 -1
- package/dist/platform/media/builtin-generation-providers.js +1 -6
- package/dist/platform/providers/anthropic-compat.d.ts.map +1 -1
- package/dist/platform/providers/anthropic-compat.js +11 -131
- package/dist/platform/providers/anthropic-sdk-provider.d.ts.map +1 -1
- package/dist/platform/providers/anthropic-sdk-provider.js +8 -42
- package/dist/platform/providers/anthropic-sse-assembler.d.ts +80 -0
- package/dist/platform/providers/anthropic-sse-assembler.d.ts.map +1 -0
- package/dist/platform/providers/anthropic-sse-assembler.js +146 -0
- package/dist/platform/providers/anthropic-stream.d.ts +30 -0
- package/dist/platform/providers/anthropic-stream.d.ts.map +1 -0
- package/dist/platform/providers/anthropic-stream.js +44 -0
- package/dist/platform/providers/anthropic-vertex.d.ts.map +1 -1
- package/dist/platform/providers/anthropic-vertex.js +1 -3
- package/dist/platform/providers/anthropic.d.ts.map +1 -1
- package/dist/platform/providers/anthropic.js +15 -151
- package/dist/platform/providers/capabilities.d.ts.map +1 -1
- package/dist/platform/providers/capabilities.js +11 -7
- package/dist/platform/providers/context-discovery.d.ts.map +1 -1
- package/dist/platform/providers/context-discovery.js +9 -16
- package/dist/platform/providers/context-window-fallback.d.ts +24 -0
- package/dist/platform/providers/context-window-fallback.d.ts.map +1 -0
- package/dist/platform/providers/context-window-fallback.js +48 -0
- package/dist/platform/providers/gemini.d.ts.map +1 -1
- package/dist/platform/providers/gemini.js +3 -6
- package/dist/platform/providers/json-ttl-cache.d.ts +35 -0
- package/dist/platform/providers/json-ttl-cache.d.ts.map +1 -0
- package/dist/platform/providers/json-ttl-cache.js +52 -0
- package/dist/platform/providers/llama-cpp.d.ts.map +1 -1
- package/dist/platform/providers/llama-cpp.js +2 -23
- package/dist/platform/providers/lm-studio-helpers.d.ts +1 -1
- package/dist/platform/providers/lm-studio-helpers.d.ts.map +1 -1
- package/dist/platform/providers/lm-studio-helpers.js +5 -25
- package/dist/platform/providers/model-benchmarks.d.ts.map +1 -1
- package/dist/platform/providers/model-benchmarks.js +11 -34
- package/dist/platform/providers/model-catalog-cache.d.ts.map +1 -1
- package/dist/platform/providers/model-catalog-cache.js +15 -38
- package/dist/platform/providers/model-catalog-synthetic.d.ts.map +1 -1
- package/dist/platform/providers/model-catalog-synthetic.js +3 -2
- package/dist/platform/providers/model-catalog.d.ts.map +1 -1
- package/dist/platform/providers/model-catalog.js +3 -2
- package/dist/platform/providers/model-limits.d.ts.map +1 -1
- package/dist/platform/providers/model-limits.js +18 -42
- package/dist/platform/providers/ollama.d.ts.map +1 -1
- package/dist/platform/providers/ollama.js +3 -24
- package/dist/platform/providers/openai-codex.d.ts.map +1 -1
- package/dist/platform/providers/openai-codex.js +8 -9
- package/dist/platform/providers/openai-compat.d.ts.map +1 -1
- package/dist/platform/providers/openai-compat.js +13 -40
- package/dist/platform/providers/openai-stream-helpers.d.ts +62 -0
- package/dist/platform/providers/openai-stream-helpers.d.ts.map +1 -0
- package/dist/platform/providers/openai-stream-helpers.js +73 -0
- package/dist/platform/providers/openai.d.ts.map +1 -1
- package/dist/platform/providers/openai.js +13 -41
- package/dist/platform/providers/provider-error.d.ts +17 -0
- package/dist/platform/providers/provider-error.d.ts.map +1 -0
- package/dist/platform/providers/provider-error.js +33 -0
- package/dist/platform/providers/provider-stop-reason.d.ts +15 -0
- package/dist/platform/providers/provider-stop-reason.d.ts.map +1 -0
- package/dist/platform/providers/provider-stop-reason.js +15 -0
- package/dist/platform/providers/sse-line-buffer.d.ts +13 -0
- package/dist/platform/providers/sse-line-buffer.d.ts.map +1 -0
- package/dist/platform/providers/sse-line-buffer.js +23 -0
- package/dist/platform/providers/tool-formats.d.ts +5 -0
- package/dist/platform/providers/tool-formats.d.ts.map +1 -1
- package/dist/platform/providers/tool-formats.js +14 -0
- package/dist/platform/runtime/bootstrap-runtime-events.d.ts.map +1 -1
- package/dist/platform/runtime/bootstrap-runtime-events.js +6 -0
- package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
- package/dist/platform/runtime/bootstrap-services.js +4 -5
- package/dist/platform/runtime/emitters/workflows.d.ts +4 -0
- package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
- package/dist/platform/runtime/emitters/workflows.js +3 -0
- package/dist/platform/runtime/remote/distributed-runtime-store.d.ts.map +1 -1
- package/dist/platform/runtime/remote/distributed-runtime-store.js +1 -3
- package/dist/platform/runtime/retention/pruner.js +2 -5
- package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
- package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +15 -14
- package/dist/platform/runtime/store/helpers/reducers/shared.d.ts +6 -0
- package/dist/platform/runtime/store/helpers/reducers/shared.d.ts.map +1 -1
- package/dist/platform/runtime/store/helpers/reducers/shared.js +8 -1
- package/dist/platform/runtime/telemetry/exporters/queue.d.ts.map +1 -1
- package/dist/platform/runtime/telemetry/exporters/queue.js +1 -7
- package/dist/platform/runtime/transports/http-helpers.d.ts +0 -1
- package/dist/platform/runtime/transports/http-helpers.d.ts.map +1 -1
- package/dist/platform/runtime/transports/http-helpers.js +1 -3
- package/dist/platform/runtime/ui-read-model-helpers.d.ts +2 -0
- package/dist/platform/runtime/ui-read-model-helpers.d.ts.map +1 -1
- package/dist/platform/runtime/ui-read-model-helpers.js +8 -0
- package/dist/platform/runtime/ui-read-models-core.d.ts.map +1 -1
- package/dist/platform/runtime/ui-read-models-core.js +3 -5
- package/dist/platform/runtime/ui-read-models-observability-remote.d.ts.map +1 -1
- package/dist/platform/runtime/ui-read-models-observability-remote.js +2 -4
- package/dist/platform/runtime/ui-read-models-operations.d.ts.map +1 -1
- package/dist/platform/runtime/ui-read-models-operations.js +8 -26
- package/dist/platform/scheduler/scheduler.d.ts.map +1 -1
- package/dist/platform/scheduler/scheduler.js +1 -3
- package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
- package/dist/platform/tools/exec/runtime.js +1 -7
- package/dist/platform/tools/fetch/runtime.d.ts.map +1 -1
- package/dist/platform/tools/fetch/runtime.js +9 -20
- package/dist/platform/tools/shared/process-manager.d.ts.map +1 -1
- package/dist/platform/tools/shared/process-manager.js +1 -6
- package/dist/platform/utils/concurrency.d.ts +1 -0
- package/dist/platform/utils/concurrency.d.ts.map +1 -1
- package/dist/platform/utils/concurrency.js +1 -0
- package/dist/platform/utils/error-display.d.ts +9 -0
- package/dist/platform/utils/error-display.d.ts.map +1 -1
- package/dist/platform/utils/error-display.js +11 -0
- package/dist/platform/utils/fetch-with-timeout.d.ts +22 -2
- package/dist/platform/utils/fetch-with-timeout.d.ts.map +1 -1
- package/dist/platform/utils/fetch-with-timeout.js +33 -15
- package/dist/platform/utils/record-coerce.d.ts +5 -0
- package/dist/platform/utils/record-coerce.d.ts.map +1 -1
- package/dist/platform/utils/record-coerce.js +7 -0
- package/dist/platform/utils/retry.d.ts.map +1 -1
- package/dist/platform/utils/retry.js +2 -4
- package/dist/platform/version.js +1 -1
- package/package.json +9 -9
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { applyAnthropicThinking } from './anthropic-stream.js';
|
|
2
2
|
import { getCacheCapability } from './cache-capability.js';
|
|
3
3
|
import { mapAnthropicStopReason } from './stop-reason-maps.js';
|
|
4
4
|
import { getDefaultStrategy } from './cache-strategy.js';
|
|
5
5
|
import { ProviderError } from '../types/errors.js';
|
|
6
6
|
import { withRetry } from '../utils/retry.js';
|
|
7
|
-
import { logger } from '../utils/logger.js';
|
|
8
7
|
import { instrumentedLlmCall } from '../runtime/llm-observability.js';
|
|
9
|
-
import { toAnthropicTools, toAnthropicMessages, fromAnthropicContent,
|
|
8
|
+
import { toAnthropicTools, toAnthropicMessages, fromAnthropicContent, normalizeAnthropicModel, } from './tool-formats.js';
|
|
9
|
+
import { createAnthropicSSEState, readAnthropicSSEStream, assembleAnthropicContentBlocks } from './anthropic-sse-assembler.js';
|
|
10
|
+
import { resolveCompletedStopReason, withProviderStopReason } from './provider-stop-reason.js';
|
|
10
11
|
import { summarizeError, toProviderError } from '../utils/error-display.js';
|
|
11
12
|
import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
|
|
12
13
|
import { toRecord } from '../utils/record-coerce.js';
|
|
@@ -24,13 +25,6 @@ const NOOP_CACHE_HIT_TRACKER = {
|
|
|
24
25
|
getHitRate: () => 0,
|
|
25
26
|
recordTurn: () => { },
|
|
26
27
|
};
|
|
27
|
-
function normalizeAnthropicModel(model) {
|
|
28
|
-
if (model.startsWith('anthropic:'))
|
|
29
|
-
return model.slice('anthropic:'.length);
|
|
30
|
-
if (model.startsWith('anthropic/'))
|
|
31
|
-
return model.slice('anthropic/'.length);
|
|
32
|
-
return model;
|
|
33
|
-
}
|
|
34
28
|
/** Clamp max_tokens to the model's known limit. */
|
|
35
29
|
function clampMaxTokens(model, requested) {
|
|
36
30
|
for (const { match, cap } of ANTHROPIC_MAX_OUTPUT) {
|
|
@@ -180,17 +174,7 @@ export class AnthropicProvider {
|
|
|
180
174
|
}
|
|
181
175
|
}
|
|
182
176
|
body['messages'] = anthropicMessages;
|
|
183
|
-
|
|
184
|
-
const budget = REASONING_BUDGET_MAP[reasoningEffort];
|
|
185
|
-
if (budget !== undefined && budget > 0) {
|
|
186
|
-
body['thinking'] = { type: 'enabled', budget_tokens: budget };
|
|
187
|
-
// max_tokens must be strictly greater than thinking.budget_tokens
|
|
188
|
-
const currentMax = body['max_tokens'] ?? 8192;
|
|
189
|
-
if (currentMax <= budget) {
|
|
190
|
-
body['max_tokens'] = budget + 4096;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
177
|
+
applyAnthropicThinking(body, reasoningEffort, clampMaxTokens(resolvedModel, Infinity));
|
|
194
178
|
const headers = {
|
|
195
179
|
'Content-Type': 'application/json',
|
|
196
180
|
'anthropic-version': ANTHROPIC_API_VERSION,
|
|
@@ -235,15 +219,7 @@ export class AnthropicProvider {
|
|
|
235
219
|
});
|
|
236
220
|
}
|
|
237
221
|
// Parse SSE stream
|
|
238
|
-
|
|
239
|
-
let inputTokens = 0;
|
|
240
|
-
let outputTokens = 0;
|
|
241
|
-
let cacheReadTokens = 0;
|
|
242
|
-
let cacheWriteTokens = 0;
|
|
243
|
-
let rawStopReason;
|
|
244
|
-
let stopReason = 'unknown';
|
|
245
|
-
// Accumulate tool use blocks by index
|
|
246
|
-
const toolBlocks = new Map();
|
|
222
|
+
const state = createAnthropicSSEState();
|
|
247
223
|
const reader = res.body?.getReader();
|
|
248
224
|
if (!reader) {
|
|
249
225
|
throw new ProviderError('Anthropic chat returned no response body.', {
|
|
@@ -253,125 +229,21 @@ export class AnthropicProvider {
|
|
|
253
229
|
phase: 'response',
|
|
254
230
|
});
|
|
255
231
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
try {
|
|
259
|
-
while (true) {
|
|
260
|
-
const { done, value } = await reader.read();
|
|
261
|
-
if (done)
|
|
262
|
-
break;
|
|
263
|
-
buffer += decoder.decode(value, { stream: true });
|
|
264
|
-
const lines = buffer.split('\n');
|
|
265
|
-
// Keep the last (potentially incomplete) line in buffer
|
|
266
|
-
buffer = lines.pop() ?? '';
|
|
267
|
-
for (const line of lines) {
|
|
268
|
-
if (!line.startsWith('data: '))
|
|
269
|
-
continue;
|
|
270
|
-
const data = line.slice(6).trim();
|
|
271
|
-
if (!data || data === '[DONE]')
|
|
272
|
-
continue;
|
|
273
|
-
let event;
|
|
274
|
-
try {
|
|
275
|
-
event = JSON.parse(data);
|
|
276
|
-
}
|
|
277
|
-
catch {
|
|
278
|
-
logger.warn('Anthropic SSE: failed to parse JSON chunk', {
|
|
279
|
-
chunkPreview: data.slice(0, 200),
|
|
280
|
-
chunkLength: data.length,
|
|
281
|
-
});
|
|
282
|
-
continue;
|
|
283
|
-
}
|
|
284
|
-
if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {
|
|
285
|
-
const idx = event.index ?? 0;
|
|
286
|
-
toolBlocks.set(idx, {
|
|
287
|
-
id: event.content_block.id ?? '',
|
|
288
|
-
name: event.content_block.name ?? '',
|
|
289
|
-
args: '',
|
|
290
|
-
});
|
|
291
|
-
if (onDelta) {
|
|
292
|
-
onDelta({ toolCalls: [{ index: idx, id: event.content_block.id, name: event.content_block.name }] });
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
else if (event.type === 'content_block_delta') {
|
|
296
|
-
const idx = event.index ?? 0;
|
|
297
|
-
if (event.delta?.type === 'text_delta' && event.delta.text) {
|
|
298
|
-
responseText += event.delta.text;
|
|
299
|
-
if (onDelta)
|
|
300
|
-
onDelta({ content: event.delta.text });
|
|
301
|
-
}
|
|
302
|
-
else if (event.delta?.type === 'thinking_delta' && event.delta.thinking) {
|
|
303
|
-
if (onDelta)
|
|
304
|
-
onDelta({ reasoning: event.delta.thinking });
|
|
305
|
-
}
|
|
306
|
-
else if (event.delta?.type === 'input_json_delta' && event.delta.partial_json) {
|
|
307
|
-
const block = toolBlocks.get(idx);
|
|
308
|
-
if (block)
|
|
309
|
-
block.args += event.delta.partial_json;
|
|
310
|
-
if (onDelta) {
|
|
311
|
-
onDelta({ toolCalls: [{ index: idx, arguments: event.delta.partial_json }] });
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
else if (event.type === 'message_delta') {
|
|
316
|
-
if (event.delta?.stop_reason) {
|
|
317
|
-
rawStopReason = event.delta.stop_reason;
|
|
318
|
-
stopReason = mapAnthropicStopReason(rawStopReason);
|
|
319
|
-
}
|
|
320
|
-
if (event.usage?.output_tokens)
|
|
321
|
-
outputTokens = event.usage.output_tokens;
|
|
322
|
-
if (event.usage?.cache_read_input_tokens != null)
|
|
323
|
-
cacheReadTokens = event.usage.cache_read_input_tokens;
|
|
324
|
-
if (event.usage?.cache_creation_input_tokens != null)
|
|
325
|
-
cacheWriteTokens = event.usage.cache_creation_input_tokens;
|
|
326
|
-
}
|
|
327
|
-
else if (event.type === 'message_start') {
|
|
328
|
-
if (event.message?.usage) {
|
|
329
|
-
inputTokens = event.message.usage.input_tokens;
|
|
330
|
-
outputTokens = event.message.usage.output_tokens;
|
|
331
|
-
cacheReadTokens = event.message.usage.cache_read_input_tokens ?? 0;
|
|
332
|
-
cacheWriteTokens = event.message.usage.cache_creation_input_tokens ?? 0;
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
finally {
|
|
339
|
-
reader.releaseLock();
|
|
340
|
-
}
|
|
341
|
-
// Build the content blocks for fromAnthropicContent
|
|
342
|
-
const contentBlocks = [];
|
|
343
|
-
if (responseText) {
|
|
344
|
-
contentBlocks.push({ type: 'text', text: responseText });
|
|
345
|
-
}
|
|
346
|
-
for (const [, block] of [...toolBlocks.entries()].sort(([a], [b]) => a - b)) {
|
|
347
|
-
const parsedInput = parseToolCallArguments(block.args, {
|
|
348
|
-
provider: this.name,
|
|
349
|
-
toolName: block.name,
|
|
350
|
-
callId: block.id,
|
|
351
|
-
});
|
|
352
|
-
if (parsedInput === undefined)
|
|
353
|
-
continue;
|
|
354
|
-
contentBlocks.push({
|
|
355
|
-
type: 'tool_use',
|
|
356
|
-
id: block.id,
|
|
357
|
-
name: block.name,
|
|
358
|
-
input: parsedInput,
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
const { text, toolCalls } = fromAnthropicContent(contentBlocks);
|
|
232
|
+
await readAnthropicSSEStream(reader, state, onDelta, 'Anthropic');
|
|
233
|
+
const { text, toolCalls } = assembleAnthropicContentBlocks(state.toolBlocks, state.responseText, this.name);
|
|
362
234
|
// Record cache metrics for strategy adaptation.
|
|
363
|
-
this.cacheHitTracker.recordTurn({ inputTokens, cacheReadTokens, cacheWriteTokens });
|
|
235
|
+
this.cacheHitTracker.recordTurn({ inputTokens: state.inputTokens, cacheReadTokens: state.cacheReadTokens, cacheWriteTokens: state.cacheWriteTokens });
|
|
364
236
|
const cap = getCacheCapability('anthropic');
|
|
365
237
|
// Exclude write tokens from the denominator: writes are a one-time cost and inflate the
|
|
366
238
|
// apparent miss rate on the first request. Read rate = reads / (billed input + reads).
|
|
367
|
-
const hitRateDenom = inputTokens + cacheReadTokens;
|
|
368
|
-
const hitRate = hitRateDenom > 0 ? cacheReadTokens / hitRateDenom : undefined;
|
|
239
|
+
const hitRateDenom = state.inputTokens + state.cacheReadTokens;
|
|
240
|
+
const hitRate = hitRateDenom > 0 ? state.cacheReadTokens / hitRateDenom : undefined;
|
|
369
241
|
return {
|
|
370
242
|
content: text,
|
|
371
243
|
toolCalls,
|
|
372
|
-
usage: { inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens },
|
|
373
|
-
stopReason: stopReason
|
|
374
|
-
...(rawStopReason
|
|
244
|
+
usage: { inputTokens: state.inputTokens, outputTokens: state.outputTokens, cacheReadTokens: state.cacheReadTokens, cacheWriteTokens: state.cacheWriteTokens },
|
|
245
|
+
stopReason: resolveCompletedStopReason(state.stopReason, text),
|
|
246
|
+
...withProviderStopReason(state.rawStopReason),
|
|
375
247
|
cacheMetrics: {
|
|
376
248
|
strategy: cap.type === 'explicit' ? `explicit-${cap.maxBreakpoints}bp` : cap.type,
|
|
377
249
|
breakpointsPlaced,
|
|
@@ -531,15 +403,7 @@ export class AnthropicProvider {
|
|
|
531
403
|
if (params.tools && params.tools.length > 0) {
|
|
532
404
|
body['tools'] = toAnthropicTools(params.tools);
|
|
533
405
|
}
|
|
534
|
-
|
|
535
|
-
const budget = REASONING_BUDGET_MAP[params.reasoningEffort];
|
|
536
|
-
if (budget !== undefined && budget > 0) {
|
|
537
|
-
body['thinking'] = { type: 'enabled', budget_tokens: budget };
|
|
538
|
-
const currentMax = body['max_tokens'] ?? 8192;
|
|
539
|
-
if (currentMax <= budget)
|
|
540
|
-
body['max_tokens'] = budget + 4096;
|
|
541
|
-
}
|
|
542
|
-
}
|
|
406
|
+
applyAnthropicThinking(body, params.reasoningEffort, clampMaxTokens(resolvedModel, Infinity));
|
|
543
407
|
return body;
|
|
544
408
|
}
|
|
545
409
|
mapAnthropicBatchStatus(body) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,eAAe,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,SAAS,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,yEAAyE;IACzE,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChD,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAMD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE9F,wDAAwD;AACxD,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,IAAI,EAAE,kBAAkB,CAAC;IACzB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC;AAED,mFAAmF;AACnF,MAAM,MAAM,gBAAgB,GACxB;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,UAAU,EAAE,kBAAkB,CAAC;CAChC,GACD;IACE,QAAQ,EAAE,KAAK,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,6DAA6D;IAC7D,UAAU,EAAE,kBAAkB,CAAC;CAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,eAAe,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,SAAS,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,yEAAyE;IACzE,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChD,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAMD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE9F,wDAAwD;AACxD,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,IAAI,EAAE,kBAAkB,CAAC;IACzB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC;AAED,mFAAmF;AACnF,MAAM,MAAM,gBAAgB,GACxB;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,UAAU,EAAE,kBAAkB,CAAC;CAChC,GACD;IACE,QAAQ,EAAE,KAAK,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,6DAA6D;IAC7D,UAAU,EAAE,kBAAkB,CAAC;CAChC,CAAC;AA4RN;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAE/D;;;;;;;OAOG;IACH,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,GAC3C,kBAAkB;IAUrB;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;;;OAMG;IACH,SAAS,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO;IAI3E;;;;;;;;;OASG;IACH,mBAAmB,CACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,GAC3C,gBAAgB;IA6BnB,OAAO,CAAC,QAAQ;IAwBhB,OAAO,CAAC,kBAAkB;CA6E3B"}
|
|
@@ -240,7 +240,7 @@ const PROVIDER_DEFAULTS = {
|
|
|
240
240
|
parallelTools: true,
|
|
241
241
|
jsonMode: true,
|
|
242
242
|
reasoningControls: false,
|
|
243
|
-
maxContextTokens:
|
|
243
|
+
maxContextTokens: 256_000,
|
|
244
244
|
maxOutputTokens: 8_192,
|
|
245
245
|
timeoutMs: 120_000,
|
|
246
246
|
},
|
|
@@ -274,12 +274,16 @@ const MODEL_OVERRIDES = {
|
|
|
274
274
|
'claude-3-5-sonnet-20241022': { maxOutputTokens: 8_192 },
|
|
275
275
|
'claude-3-7-sonnet-20250219': { reasoningControls: true, maxOutputTokens: 64_000 },
|
|
276
276
|
// OpenAI reasoning models
|
|
277
|
-
'o1': { reasoningControls: true, jsonMode: false, maxOutputTokens: 32_768 },
|
|
278
|
-
'o1-mini': { reasoningControls: true, jsonMode: false, maxOutputTokens: 65_536 },
|
|
279
|
-
'o1-preview': { reasoningControls: true, jsonMode: false, maxOutputTokens: 32_768 },
|
|
280
|
-
'o3': { reasoningControls: true, maxOutputTokens: 100_000 },
|
|
281
|
-
'o3-mini': { reasoningControls: true, maxOutputTokens: 65_536 },
|
|
282
|
-
'o4-mini': { reasoningControls: true, maxOutputTokens: 65_536 },
|
|
277
|
+
'o1': { reasoningControls: true, jsonMode: false, maxContextTokens: 200_000, maxOutputTokens: 32_768 },
|
|
278
|
+
'o1-mini': { reasoningControls: true, jsonMode: false, maxContextTokens: 200_000, maxOutputTokens: 65_536 },
|
|
279
|
+
'o1-preview': { reasoningControls: true, jsonMode: false, maxContextTokens: 200_000, maxOutputTokens: 32_768 },
|
|
280
|
+
'o3': { reasoningControls: true, maxContextTokens: 200_000, maxOutputTokens: 100_000 },
|
|
281
|
+
'o3-mini': { reasoningControls: true, maxContextTokens: 200_000, maxOutputTokens: 65_536 },
|
|
282
|
+
'o4-mini': { reasoningControls: true, maxContextTokens: 200_000, maxOutputTokens: 65_536 },
|
|
283
|
+
// OpenAI large-context models
|
|
284
|
+
'gpt-5': { maxContextTokens: 400_000 },
|
|
285
|
+
'gpt-4.1': { maxContextTokens: 400_000 },
|
|
286
|
+
'gpt-4.1-mini': { maxContextTokens: 400_000 },
|
|
283
287
|
// Mercury models (InceptionLabs)
|
|
284
288
|
'mercury-2': { toolCalling: false, parallelTools: false, reasoningControls: true, maxOutputTokens: 32_000 },
|
|
285
289
|
'mercury-edit': { toolCalling: false, parallelTools: false, reasoningControls: false, maxOutputTokens: 32_000 },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-discovery.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/context-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"context-discovery.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/context-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAuWlD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0C9B"}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { logger } from '../utils/logger.js';
|
|
20
20
|
import { summarizeError } from '../utils/error-display.js';
|
|
21
|
-
import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
|
|
21
|
+
import { instrumentedFetch, fetchWithTimeout } from '../utils/fetch-with-timeout.js';
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
// Constants
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
@@ -48,21 +48,17 @@ function extractOrigin(baseURL) {
|
|
|
48
48
|
* Returns the Response on success, or null on any error (timeout, network, 4xx/5xx).
|
|
49
49
|
*/
|
|
50
50
|
async function probe(url, options = {}) {
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
const headers = { Accept: 'application/json' };
|
|
52
|
+
if (options.apiKey)
|
|
53
|
+
headers['Authorization'] = `Bearer ${options.apiKey}`;
|
|
54
|
+
if (options.body)
|
|
55
|
+
headers['Content-Type'] = 'application/json';
|
|
54
56
|
try {
|
|
55
|
-
const
|
|
56
|
-
if (options.apiKey)
|
|
57
|
-
headers['Authorization'] = `Bearer ${options.apiKey}`;
|
|
58
|
-
if (options.body)
|
|
59
|
-
headers['Content-Type'] = 'application/json';
|
|
60
|
-
const response = await instrumentedFetch(url, {
|
|
57
|
+
const response = await fetchWithTimeout(url, {
|
|
61
58
|
method: options.method ?? 'GET',
|
|
62
59
|
headers,
|
|
63
60
|
...(options.body !== undefined ? { body: options.body } : {}),
|
|
64
|
-
|
|
65
|
-
});
|
|
61
|
+
}, PROBE_TIMEOUT_MS, instrumentedFetch);
|
|
66
62
|
if (!response.ok) {
|
|
67
63
|
logger.debug('[context-discovery] Non-OK probe response', { url, status: response.status });
|
|
68
64
|
return null;
|
|
@@ -71,7 +67,7 @@ async function probe(url, options = {}) {
|
|
|
71
67
|
}
|
|
72
68
|
catch (err) {
|
|
73
69
|
const name = err?.name;
|
|
74
|
-
if (name === 'AbortError') {
|
|
70
|
+
if (name === 'AbortError' || name === 'TimeoutError') {
|
|
75
71
|
logger.debug('[context-discovery] Probe timed out', { url });
|
|
76
72
|
}
|
|
77
73
|
else {
|
|
@@ -79,9 +75,6 @@ async function probe(url, options = {}) {
|
|
|
79
75
|
}
|
|
80
76
|
return null;
|
|
81
77
|
}
|
|
82
|
-
finally {
|
|
83
|
-
clearTimeout(timer);
|
|
84
|
-
}
|
|
85
78
|
}
|
|
86
79
|
/**
|
|
87
80
|
* Safely parse JSON from a Response. Returns null on parse error.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider/model-family-aware context-window fallback.
|
|
3
|
+
*
|
|
4
|
+
* Used only when neither the live catalog (models.dev) nor the provider API
|
|
5
|
+
* reports a context window for a model — e.g. a model newer than the models.dev
|
|
6
|
+
* snapshot (the "brand-new gpt-5.5" case). A single flat default badly mis-sizes
|
|
7
|
+
* the window and drives auto-compaction to fire far too early (small default) or
|
|
8
|
+
* too late (large default, risking a provider "context length exceeded" error).
|
|
9
|
+
* Infer a sane family default from the provider and model id instead.
|
|
10
|
+
*
|
|
11
|
+
* The real window always wins whenever the catalog / OpenRouter / provider_api
|
|
12
|
+
* supplies one; this is the last line of defense, not a primary source.
|
|
13
|
+
*/
|
|
14
|
+
/** Last-resort default when neither provider nor model id is recognised. */
|
|
15
|
+
export declare const FALLBACK_CONTEXT_WINDOW = 128000;
|
|
16
|
+
/**
|
|
17
|
+
* Best-effort context window (in tokens) inferred from provider + model id.
|
|
18
|
+
*
|
|
19
|
+
* Over-estimating is the dangerous direction (it risks context-overflow errors),
|
|
20
|
+
* so only known-large families get a large window; older/unknown families stay at
|
|
21
|
+
* the conservative {@link FALLBACK_CONTEXT_WINDOW}.
|
|
22
|
+
*/
|
|
23
|
+
export declare function inferFallbackContextWindow(provider: string, modelId?: string): number;
|
|
24
|
+
//# sourceMappingURL=context-window-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-window-fallback.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/context-window-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBrF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider/model-family-aware context-window fallback.
|
|
3
|
+
*
|
|
4
|
+
* Used only when neither the live catalog (models.dev) nor the provider API
|
|
5
|
+
* reports a context window for a model — e.g. a model newer than the models.dev
|
|
6
|
+
* snapshot (the "brand-new gpt-5.5" case). A single flat default badly mis-sizes
|
|
7
|
+
* the window and drives auto-compaction to fire far too early (small default) or
|
|
8
|
+
* too late (large default, risking a provider "context length exceeded" error).
|
|
9
|
+
* Infer a sane family default from the provider and model id instead.
|
|
10
|
+
*
|
|
11
|
+
* The real window always wins whenever the catalog / OpenRouter / provider_api
|
|
12
|
+
* supplies one; this is the last line of defense, not a primary source.
|
|
13
|
+
*/
|
|
14
|
+
/** Last-resort default when neither provider nor model id is recognised. */
|
|
15
|
+
export const FALLBACK_CONTEXT_WINDOW = 128_000;
|
|
16
|
+
/**
|
|
17
|
+
* Best-effort context window (in tokens) inferred from provider + model id.
|
|
18
|
+
*
|
|
19
|
+
* Over-estimating is the dangerous direction (it risks context-overflow errors),
|
|
20
|
+
* so only known-large families get a large window; older/unknown families stay at
|
|
21
|
+
* the conservative {@link FALLBACK_CONTEXT_WINDOW}.
|
|
22
|
+
*/
|
|
23
|
+
export function inferFallbackContextWindow(provider, modelId) {
|
|
24
|
+
const p = provider.toLowerCase();
|
|
25
|
+
const id = (modelId ?? '').toLowerCase();
|
|
26
|
+
if (p.includes('google') || p.includes('gemini') || id.startsWith('gemini'))
|
|
27
|
+
return 1_000_000;
|
|
28
|
+
if (p.includes('anthropic') || id.startsWith('claude'))
|
|
29
|
+
return 200_000;
|
|
30
|
+
if (p.includes('xai') || p.includes('grok') || id.startsWith('grok'))
|
|
31
|
+
return 256_000;
|
|
32
|
+
const looksOpenAI = p.includes('openai') ||
|
|
33
|
+
id.startsWith('gpt') ||
|
|
34
|
+
id.startsWith('chatgpt') ||
|
|
35
|
+
id.startsWith('o1') ||
|
|
36
|
+
id.startsWith('o3') ||
|
|
37
|
+
id.startsWith('o4');
|
|
38
|
+
if (looksOpenAI) {
|
|
39
|
+
// gpt-5 / gpt-4.1 families are 400k; the o-series reasoning models are 200k;
|
|
40
|
+
// gpt-4o / gpt-4-turbo / gpt-4o-mini and anything unrecognised stay at 128k.
|
|
41
|
+
if (id.startsWith('gpt-5') || id.startsWith('gpt-4.1') || id.startsWith('gpt-4-1'))
|
|
42
|
+
return 400_000;
|
|
43
|
+
if (id.startsWith('o1') || id.startsWith('o3') || id.startsWith('o4'))
|
|
44
|
+
return 200_000;
|
|
45
|
+
return 128_000;
|
|
46
|
+
}
|
|
47
|
+
return FALLBACK_CONTEXT_WINDOW;
|
|
48
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAexB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AAexB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAwB3D;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,uEAAuE;IACvE,OAAO,CAAC,iBAAiB,CAA6B;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IAEtE,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB,CAAuB;IAChD,yEAAyE;IACzE,OAAO,CAAC,iBAAiB,CAAuB;IAChD,wCAAwC;IACxC,OAAO,CAAC,mBAAmB,CAAa;IACxC,qEAAqE;IACrE,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,MAAM,EAAE,MAAM,EAAE,eAAe,GAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAA0B;IAKzG,OAAO,CAAC,gBAAgB;YAWV,mBAAmB;IA2F3B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAwMhD,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAmD1E,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAmC3F"}
|
|
@@ -7,6 +7,7 @@ import { fetchWithTimeout, instrumentedFetch } from '../utils/fetch-with-timeout
|
|
|
7
7
|
import { instrumentedLlmCall } from '../runtime/llm-observability.js';
|
|
8
8
|
import { toGeminiFunctionDeclarations, toGeminiContents, fromGeminiParts, } from './tool-formats.js';
|
|
9
9
|
import { summarizeError, toProviderError } from '../utils/error-display.js';
|
|
10
|
+
import { SseLineBuffer } from './sse-line-buffer.js';
|
|
10
11
|
const GEMINI_API_BASE = 'https://generativelanguage.googleapis.com/v1beta';
|
|
11
12
|
const GEMINI_CACHE_TTL_SECONDS = 3600;
|
|
12
13
|
const NOOP_CACHE_HIT_TRACKER = {
|
|
@@ -219,17 +220,13 @@ export class GeminiProvider {
|
|
|
219
220
|
phase: 'response',
|
|
220
221
|
});
|
|
221
222
|
}
|
|
222
|
-
const
|
|
223
|
-
let buffer = '';
|
|
223
|
+
const sseBuffer = new SseLineBuffer();
|
|
224
224
|
try {
|
|
225
225
|
while (true) {
|
|
226
226
|
const { done, value } = await reader.read();
|
|
227
227
|
if (done)
|
|
228
228
|
break;
|
|
229
|
-
|
|
230
|
-
const lines = buffer.split('\n');
|
|
231
|
-
buffer = lines.pop() ?? '';
|
|
232
|
-
for (const line of lines) {
|
|
229
|
+
for (const line of sseBuffer.feed(value)) {
|
|
233
230
|
if (!line.startsWith('data: '))
|
|
234
231
|
continue;
|
|
235
232
|
const data = line.slice(6).trim();
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic on-disk TTL cache helpers shared by model-limits, model-catalog-cache,
|
|
3
|
+
* and model-benchmarks.
|
|
4
|
+
*
|
|
5
|
+
* Each cache file has the same envelope shape:
|
|
6
|
+
* { version: 1, fetchedAt: number, ttlMs: number, <payload> }
|
|
7
|
+
*
|
|
8
|
+
* Only the envelope fields and the single payload key/kind differ between caches;
|
|
9
|
+
* those differences are captured by the arguments to validateTtlCacheEnvelope.
|
|
10
|
+
*/
|
|
11
|
+
/** 24-hour TTL in milliseconds. */
|
|
12
|
+
export declare const TTL_24H_MS = 86400000;
|
|
13
|
+
/** Base envelope fields shared by all on-disk TTL caches. */
|
|
14
|
+
export interface TtlCacheEnvelope {
|
|
15
|
+
version: 1;
|
|
16
|
+
fetchedAt: number;
|
|
17
|
+
ttlMs: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns true when the cache has exceeded its declared TTL.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isTtlCacheStale(cache: Pick<TtlCacheEnvelope, 'fetchedAt' | 'ttlMs'>): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Validate the shared TTL cache envelope and one payload field.
|
|
25
|
+
*
|
|
26
|
+
* @param value Raw parsed JSON value.
|
|
27
|
+
* @param payloadKey Name of the payload field (e.g. `'models'`, `'entries'`).
|
|
28
|
+
* @param payloadKind Whether the payload should be an `'object'` or `'array'`.
|
|
29
|
+
* @returns `{ cache: T }` on success, or `{ cache: null, reason }` on failure.
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateTtlCacheEnvelope<T>(value: unknown, payloadKey: string, payloadKind: 'object' | 'array'): {
|
|
32
|
+
cache: T | null;
|
|
33
|
+
reason?: string;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=json-ttl-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-ttl-cache.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/json-ttl-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,mCAAmC;AACnC,eAAO,MAAM,UAAU,WAAa,CAAC;AAErC,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,OAAO,CAE7F;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,QAAQ,GAAG,OAAO,GAC9B;IAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAuBtC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic on-disk TTL cache helpers shared by model-limits, model-catalog-cache,
|
|
3
|
+
* and model-benchmarks.
|
|
4
|
+
*
|
|
5
|
+
* Each cache file has the same envelope shape:
|
|
6
|
+
* { version: 1, fetchedAt: number, ttlMs: number, <payload> }
|
|
7
|
+
*
|
|
8
|
+
* Only the envelope fields and the single payload key/kind differ between caches;
|
|
9
|
+
* those differences are captured by the arguments to validateTtlCacheEnvelope.
|
|
10
|
+
*/
|
|
11
|
+
/** 24-hour TTL in milliseconds. */
|
|
12
|
+
export const TTL_24H_MS = 86_400_000;
|
|
13
|
+
/**
|
|
14
|
+
* Returns true when the cache has exceeded its declared TTL.
|
|
15
|
+
*/
|
|
16
|
+
export function isTtlCacheStale(cache) {
|
|
17
|
+
return Date.now() - cache.fetchedAt > cache.ttlMs;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validate the shared TTL cache envelope and one payload field.
|
|
21
|
+
*
|
|
22
|
+
* @param value Raw parsed JSON value.
|
|
23
|
+
* @param payloadKey Name of the payload field (e.g. `'models'`, `'entries'`).
|
|
24
|
+
* @param payloadKind Whether the payload should be an `'object'` or `'array'`.
|
|
25
|
+
* @returns `{ cache: T }` on success, or `{ cache: null, reason }` on failure.
|
|
26
|
+
*/
|
|
27
|
+
export function validateTtlCacheEnvelope(value, payloadKey, payloadKind) {
|
|
28
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
29
|
+
return { cache: null, reason: 'root value is not an object' };
|
|
30
|
+
}
|
|
31
|
+
const parsed = value;
|
|
32
|
+
if (parsed['version'] !== 1)
|
|
33
|
+
return { cache: null, reason: 'unsupported cache version' };
|
|
34
|
+
if (typeof parsed['fetchedAt'] !== 'number' || !Number.isFinite(parsed['fetchedAt'])) {
|
|
35
|
+
return { cache: null, reason: 'fetchedAt must be a finite number' };
|
|
36
|
+
}
|
|
37
|
+
if (typeof parsed['ttlMs'] !== 'number' || !Number.isFinite(parsed['ttlMs'])) {
|
|
38
|
+
return { cache: null, reason: 'ttlMs must be a finite number' };
|
|
39
|
+
}
|
|
40
|
+
const payload = parsed[payloadKey];
|
|
41
|
+
if (payloadKind === 'object') {
|
|
42
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
43
|
+
return { cache: null, reason: `${payloadKey} must be an object` };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
if (!Array.isArray(payload)) {
|
|
48
|
+
return { cache: null, reason: `${payloadKey} must be an array` };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { cache: parsed };
|
|
52
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llama-cpp.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/llama-cpp.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,wBAAwB,EACxB,uBAAuB,EAEvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"llama-cpp.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/llama-cpp.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,wBAAwB,EACxB,uBAAuB,EAEvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAapF,KAAK,WAAW,GAAG,CACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAqBvB,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAEhE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAqC;gBAEzD,IAAI,EAAE,uBAAuB;IAazC,YAAY,IAAI,OAAO;IAIjB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAUhD,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAY1E,eAAe,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;YAsC5E,yBAAyB;CAoGxC"}
|
|
@@ -3,7 +3,8 @@ import { instrumentedLlmCall } from '../runtime/llm-observability.js';
|
|
|
3
3
|
import { ProviderError } from '../types/errors.js';
|
|
4
4
|
import { OpenAICompatProvider } from './openai-compat.js';
|
|
5
5
|
import { mapLlamaCppStopReason } from './stop-reason-maps.js';
|
|
6
|
-
import { summarizeError
|
|
6
|
+
import { summarizeError } from '../utils/error-display.js';
|
|
7
|
+
import { getErrorStatus, normalizeProviderError } from './provider-error.js';
|
|
7
8
|
import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
|
|
8
9
|
import { extractTextToolCalls, fromOpenAIToolCalls, toOpenAIMessages, toOpenAITools, } from './tool-formats.js';
|
|
9
10
|
export class LlamaCppProvider {
|
|
@@ -294,28 +295,6 @@ async function buildHttpError(prefix, response, provider, operation, phase) {
|
|
|
294
295
|
phase,
|
|
295
296
|
});
|
|
296
297
|
}
|
|
297
|
-
function normalizeProviderError(err, provider, operation, phase = 'request') {
|
|
298
|
-
const status = getErrorStatus(err);
|
|
299
|
-
return toProviderError(err, {
|
|
300
|
-
...(status !== undefined ? { statusCode: status } : {}),
|
|
301
|
-
provider,
|
|
302
|
-
operation,
|
|
303
|
-
phase,
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
function getErrorStatus(err) {
|
|
307
|
-
if (err && typeof err === 'object') {
|
|
308
|
-
const record = err;
|
|
309
|
-
if (typeof record.status === 'number')
|
|
310
|
-
return record.status;
|
|
311
|
-
if (typeof record.statusCode === 'number')
|
|
312
|
-
return record.statusCode;
|
|
313
|
-
}
|
|
314
|
-
return undefined;
|
|
315
|
-
}
|
|
316
|
-
function getErrorMessage(err) {
|
|
317
|
-
return summarizeError(err);
|
|
318
|
-
}
|
|
319
298
|
function toRecord(value) {
|
|
320
299
|
return value && typeof value === 'object' ? value : {};
|
|
321
300
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProviderError } from '../types/errors.js';
|
|
2
2
|
import type { ToolDefinition } from '../types/tools.js';
|
|
3
|
+
export { normalizeProviderError } from './provider-error.js';
|
|
3
4
|
import type { ChatRequest, ContentPart, ProviderMessage } from './interface.js';
|
|
4
5
|
export type ResponsesInputItem = {
|
|
5
6
|
role: 'user';
|
|
@@ -82,5 +83,4 @@ export declare function makeTranscriptKey(model: string, systemPrompt: string |
|
|
|
82
83
|
export declare function toRecord(value: unknown): Record<string, unknown>;
|
|
83
84
|
export declare function shouldFallbackFromNative(err: unknown): boolean;
|
|
84
85
|
export declare function shouldFallbackFromResponses(err: unknown): boolean;
|
|
85
|
-
export declare function normalizeProviderError(err: unknown, provider: string, operation: string, phase?: string): ProviderError;
|
|
86
86
|
//# sourceMappingURL=lm-studio-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lm-studio-helpers.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/lm-studio-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAY,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"lm-studio-helpers.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/lm-studio-helpers.ts"],"names":[],"mappings":"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"}
|