@pentoshi/clai 4.0.3 → 4.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/README.md +45 -9
- package/dist/agent/compaction-executor.d.ts +68 -0
- package/dist/agent/compaction-executor.js +343 -0
- package/dist/agent/compaction-executor.js.map +1 -0
- package/dist/agent/confirm-port.js +6 -3
- package/dist/agent/confirm-port.js.map +1 -1
- package/dist/agent/context-breakdown.js +2 -0
- package/dist/agent/context-breakdown.js.map +1 -1
- package/dist/agent/context-manager.d.ts +23 -9
- package/dist/agent/context-manager.js +72 -43
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/events.d.ts +3 -0
- package/dist/agent/loop-guard.d.ts +2 -0
- package/dist/agent/loop-guard.js +48 -3
- package/dist/agent/loop-guard.js.map +1 -1
- package/dist/agent/prompt-composer.js +6 -6
- package/dist/agent/prompt-composer.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +1 -0
- package/dist/agent/reliability-policy.js +6 -3
- package/dist/agent/reliability-policy.js.map +1 -1
- package/dist/agent/request-accounting.d.ts +97 -0
- package/dist/agent/request-accounting.js +207 -0
- package/dist/agent/request-accounting.js.map +1 -0
- package/dist/agent/request-budget.d.ts +2 -2
- package/dist/agent/request-budget.js +2 -4
- package/dist/agent/request-budget.js.map +1 -1
- package/dist/agent/runner.d.ts +8 -2
- package/dist/agent/runner.js +412 -181
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-title.d.ts +0 -26
- package/dist/agent/session-title.js +0 -80
- package/dist/agent/session-title.js.map +1 -1
- package/dist/agent/tool-history.d.ts +2 -2
- package/dist/agent/tool-history.js +19 -6
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/agent/turn-outcome.d.ts +1 -1
- package/dist/agent/turn-outcome.js +2 -12
- package/dist/agent/turn-outcome.js.map +1 -1
- package/dist/app/adapters/agent-event-adapter.js +19 -0
- package/dist/app/adapters/agent-event-adapter.js.map +1 -1
- package/dist/app/adapters/current-agent-adapter.js +4 -0
- package/dist/app/adapters/current-agent-adapter.js.map +1 -1
- package/dist/app/commands/catalog.js +23 -16
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/controllers/cancel-coordinator.d.ts +51 -0
- package/dist/app/controllers/cancel-coordinator.js +48 -0
- package/dist/app/controllers/cancel-coordinator.js.map +1 -0
- package/dist/app/controllers/session-compact-helper.d.ts +19 -2
- package/dist/app/controllers/session-compact-helper.js +100 -127
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-context-usage.d.ts +32 -15
- package/dist/app/controllers/session-context-usage.js +186 -51
- package/dist/app/controllers/session-context-usage.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +22 -11
- package/dist/app/controllers/session-controller.js +137 -92
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-naming.d.ts +31 -0
- package/dist/app/controllers/session-naming.js +173 -0
- package/dist/app/controllers/session-naming.js.map +1 -0
- package/dist/app/controllers/session-persistence.d.ts +2 -2
- package/dist/app/controllers/session-persistence.js +3 -6
- package/dist/app/controllers/session-persistence.js.map +1 -1
- package/dist/app/controllers/session-turn-request.d.ts +2 -1
- package/dist/app/controllers/session-turn-request.js +3 -0
- package/dist/app/controllers/session-turn-request.js.map +1 -1
- package/dist/app/controllers/turn-continuation.d.ts +0 -6
- package/dist/app/controllers/turn-continuation.js +4 -21
- package/dist/app/controllers/turn-continuation.js.map +1 -1
- package/dist/app/controllers/turn-controller.d.ts +2 -1
- package/dist/app/controllers/turn-controller.js +1 -0
- package/dist/app/controllers/turn-controller.js.map +1 -1
- package/dist/app/events/app-event.d.ts +9 -0
- package/dist/app/events/app-event.js.map +1 -1
- package/dist/app/ports/agent-port.d.ts +8 -1
- package/dist/app/ports/transcript-item.d.ts +9 -1
- package/dist/classic/app/ClassicApp.js +3 -3
- package/dist/classic/app/ClassicApp.js.map +1 -1
- package/dist/classic/app/app-wiring.js +1 -2
- package/dist/classic/app/app-wiring.js.map +1 -1
- package/dist/classic/app/wiring-interactions.js +4 -9
- package/dist/classic/app/wiring-interactions.js.map +1 -1
- package/dist/classic/blocks/TurnSummaryBlock.d.ts +3 -0
- package/dist/classic/blocks/TurnSummaryBlock.js +6 -0
- package/dist/classic/blocks/TurnSummaryBlock.js.map +1 -0
- package/dist/classic/blocks/tool-lines.js +2 -1
- package/dist/classic/blocks/tool-lines.js.map +1 -1
- package/dist/classic/blocks/turn-summary-lines.d.ts +3 -0
- package/dist/classic/blocks/turn-summary-lines.js +7 -0
- package/dist/classic/blocks/turn-summary-lines.js.map +1 -0
- package/dist/classic/chrome/status-rows.d.ts +0 -1
- package/dist/classic/chrome/status-rows.js +0 -12
- package/dist/classic/chrome/status-rows.js.map +1 -1
- package/dist/classic/feed/Feed.js +2 -0
- package/dist/classic/feed/Feed.js.map +1 -1
- package/dist/classic/feed/feed-blocks.d.ts +1 -1
- package/dist/classic/feed/feed-blocks.js +3 -0
- package/dist/classic/feed/feed-blocks.js.map +1 -1
- package/dist/classic/input/cancel-ladder.d.ts +2 -19
- package/dist/classic/input/cancel-ladder.js +13 -20
- package/dist/classic/input/cancel-ladder.js.map +1 -1
- package/dist/commands/providers.js +2 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/llm/adapters/anthropic-tools.d.ts +31 -14
- package/dist/llm/adapters/anthropic-tools.js +124 -29
- package/dist/llm/adapters/anthropic-tools.js.map +1 -1
- package/dist/llm/adapters/gemini-tools.d.ts +16 -4
- package/dist/llm/adapters/gemini-tools.js +117 -16
- package/dist/llm/adapters/gemini-tools.js.map +1 -1
- package/dist/llm/adapters/openai-tools.d.ts +13 -2
- package/dist/llm/adapters/openai-tools.js +58 -11
- package/dist/llm/adapters/openai-tools.js.map +1 -1
- package/dist/llm/agentrouter.js +68 -45
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/anthropic.js +69 -36
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/aws-mantle.js +70 -32
- package/dist/llm/aws-mantle.js.map +1 -1
- package/dist/llm/bynara.js +26 -69
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/capabilities.d.ts +2 -1
- package/dist/llm/capabilities.js +56 -1
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/context-snapshot.d.ts +100 -0
- package/dist/llm/context-snapshot.js +277 -0
- package/dist/llm/context-snapshot.js.map +1 -0
- package/dist/llm/context-windows.d.ts +10 -0
- package/dist/llm/context-windows.js +129 -0
- package/dist/llm/context-windows.js.map +1 -0
- package/dist/llm/custom-provider-profile.d.ts +75 -0
- package/dist/llm/custom-provider-profile.js +558 -0
- package/dist/llm/custom-provider-profile.js.map +1 -0
- package/dist/llm/custom-providers.d.ts +13 -1
- package/dist/llm/custom-providers.js +77 -25
- package/dist/llm/custom-providers.js.map +1 -1
- package/dist/llm/effort-fallback.d.ts +44 -0
- package/dist/llm/effort-fallback.js +101 -0
- package/dist/llm/effort-fallback.js.map +1 -0
- package/dist/llm/fireworks.d.ts +3 -0
- package/dist/llm/fireworks.js +103 -0
- package/dist/llm/fireworks.js.map +1 -0
- package/dist/llm/free.js +4 -0
- package/dist/llm/free.js.map +1 -1
- package/dist/llm/gemini.d.ts +1 -1
- package/dist/llm/gemini.js +89 -51
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/groq.js +4 -0
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/hetzner.d.ts +3 -0
- package/dist/llm/hetzner.js +98 -0
- package/dist/llm/hetzner.js.map +1 -0
- package/dist/llm/http.d.ts +60 -10
- package/dist/llm/http.js +465 -156
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/kimchi.js +4 -0
- package/dist/llm/kimchi.js.map +1 -1
- package/dist/llm/lightning.js +4 -0
- package/dist/llm/lightning.js.map +1 -1
- package/dist/llm/meta.d.ts +2 -0
- package/dist/llm/meta.js +839 -624
- package/dist/llm/meta.js.map +1 -1
- package/dist/llm/modal.js +4 -0
- package/dist/llm/modal.js.map +1 -1
- package/dist/llm/model-families.d.ts +9 -0
- package/dist/llm/model-families.js +39 -0
- package/dist/llm/model-families.js.map +1 -0
- package/dist/llm/nvidia.js +4 -0
- package/dist/llm/nvidia.js.map +1 -1
- package/dist/llm/ollama.js +44 -40
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/openai.js +4 -0
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/openrouter.js +4 -0
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/operation-ledger.d.ts +60 -0
- package/dist/llm/operation-ledger.js +136 -0
- package/dist/llm/operation-ledger.js.map +1 -0
- package/dist/llm/operation-usage.d.ts +32 -0
- package/dist/llm/operation-usage.js +172 -0
- package/dist/llm/operation-usage.js.map +1 -0
- package/dist/llm/orcarouter.d.ts +7 -0
- package/dist/llm/orcarouter.js +166 -0
- package/dist/llm/orcarouter.js.map +1 -0
- package/dist/llm/provider-profile-layers.d.ts +7 -0
- package/dist/llm/provider-profile-layers.js +961 -0
- package/dist/llm/provider-profile-layers.js.map +1 -0
- package/dist/llm/provider-profile.d.ts +181 -0
- package/dist/llm/provider-profile.js +329 -0
- package/dist/llm/provider-profile.js.map +1 -0
- package/dist/llm/provider-profiles.d.ts +13 -0
- package/dist/llm/provider-profiles.js +86 -0
- package/dist/llm/provider-profiles.js.map +1 -0
- package/dist/llm/provider.d.ts +2 -0
- package/dist/llm/provider.js +198 -21
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/qwen-cloud.js +4 -0
- package/dist/llm/qwen-cloud.js.map +1 -1
- package/dist/llm/reasoning-artifacts.d.ts +101 -0
- package/dist/llm/reasoning-artifacts.js +440 -0
- package/dist/llm/reasoning-artifacts.js.map +1 -0
- package/dist/llm/request-fingerprint.d.ts +10 -0
- package/dist/llm/request-fingerprint.js +313 -0
- package/dist/llm/request-fingerprint.js.map +1 -0
- package/dist/llm/request-plan.d.ts +119 -0
- package/dist/llm/request-plan.js +279 -0
- package/dist/llm/request-plan.js.map +1 -0
- package/dist/llm/router.d.ts +19 -1
- package/dist/llm/router.js +504 -102
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/stream-events.d.ts +47 -0
- package/dist/llm/stream-events.js +55 -0
- package/dist/llm/stream-events.js.map +1 -0
- package/dist/llm/stream-terminal.d.ts +30 -0
- package/dist/llm/stream-terminal.js +51 -0
- package/dist/llm/stream-terminal.js.map +1 -0
- package/dist/llm/token-estimate-calibration.d.ts +23 -0
- package/dist/llm/token-estimate-calibration.js +140 -0
- package/dist/llm/token-estimate-calibration.js.map +1 -0
- package/dist/llm/token-usage.d.ts +35 -5
- package/dist/llm/token-usage.js +212 -162
- package/dist/llm/token-usage.js.map +1 -1
- package/dist/llm/tokenrouter.js +13 -6
- package/dist/llm/tokenrouter.js.map +1 -1
- package/dist/modes/ask.js +11 -5
- package/dist/modes/ask.js.map +1 -1
- package/dist/noninteractive/start-noninteractive.js +31 -2
- package/dist/noninteractive/start-noninteractive.js.map +1 -1
- package/dist/noninteractive/stream-blocks.js +15 -4
- package/dist/noninteractive/stream-blocks.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/system.agent.md +6 -0
- package/dist/store/config.js +7 -1
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.d.ts +2 -0
- package/dist/store/history.js +19 -10
- package/dist/store/history.js.map +1 -1
- package/dist/store/plan.js +20 -14
- package/dist/store/plan.js.map +1 -1
- package/dist/tools/elevated-shell.d.ts +1 -1
- package/dist/tools/elevated-shell.js +24 -72
- package/dist/tools/elevated-shell.js.map +1 -1
- package/dist/tools/fs.d.ts +5 -3
- package/dist/tools/fs.js +8 -5
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/nmap-runner.js +30 -36
- package/dist/tools/nmap-runner.js.map +1 -1
- package/dist/tools/sudo-session.d.ts +83 -0
- package/dist/tools/sudo-session.js +124 -0
- package/dist/tools/sudo-session.js.map +1 -0
- package/dist/tui-v2/app/App.js +9 -24
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-view.js +5 -3
- package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
- package/dist/tui-v2/components/status/context-limit-chip.js +2 -2
- package/dist/tui-v2/components/status/context-limit-chip.js.map +1 -1
- package/dist/tui-v2/components/status/status-line.js +1 -14
- package/dist/tui-v2/components/status/status-line.js.map +1 -1
- package/dist/tui-v2/components/transcript/intro-card.js +2 -1
- package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/notice-row.d.ts +3 -1
- package/dist/tui-v2/components/transcript/notice-row.js +28 -3
- package/dist/tui-v2/components/transcript/notice-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/thinking-block.d.ts +0 -5
- package/dist/tui-v2/components/transcript/thinking-block.js +3 -8
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.js +16 -7
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-row.d.ts +0 -2
- package/dist/tui-v2/components/transcript/transcript-row.js +7 -3
- package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-view.js +1 -3
- package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.js +2 -1
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/types.d.ts +156 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-core/bootstrap/composition-root.d.ts +2 -0
- package/dist/ui-core/bootstrap/composition-root.js +26 -3
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.js +11 -5
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/ui-core/commands/session-commands.js +41 -5
- package/dist/ui-core/commands/session-commands.js.map +1 -1
- package/dist/ui-core/plan/plan-lifecycle.js +3 -2
- package/dist/ui-core/plan/plan-lifecycle.js.map +1 -1
- package/dist/ui-core/rendering/context-limit.js +4 -1
- package/dist/ui-core/rendering/context-limit.js.map +1 -1
- package/dist/ui-core/rendering/duration.d.ts +5 -0
- package/dist/ui-core/rendering/duration.js +43 -0
- package/dist/ui-core/rendering/duration.js.map +1 -0
- package/dist/ui-core/rendering/intro-header.js +2 -2
- package/dist/ui-core/rendering/intro-header.js.map +1 -1
- package/dist/ui-core/rendering/theme.d.ts +1 -0
- package/dist/ui-core/rendering/theme.js +2 -0
- package/dist/ui-core/rendering/theme.js.map +1 -1
- package/dist/ui-core/rendering/transcript-semantic.js +2 -0
- package/dist/ui-core/rendering/transcript-semantic.js.map +1 -1
- package/dist/ui-core/state/transcript-compaction.js +2 -0
- package/dist/ui-core/state/transcript-compaction.js.map +1 -1
- package/dist/ui-core/state/transcript-hydrate.js +34 -4
- package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
- package/dist/ui-core/state/transcript-reducer.d.ts +5 -0
- package/dist/ui-core/state/transcript-reducer.js +96 -8
- package/dist/ui-core/state/transcript-reducer.js.map +1 -1
- package/dist/ui-core/state/transcript-store.d.ts +10 -1
- package/dist/ui-core/state/transcript-store.js +22 -1
- package/dist/ui-core/state/transcript-store.js.map +1 -1
- package/dist/ui-core/state/transcript-types.d.ts +9 -1
- package/dist/ui-core/state/transcript-types.js +3 -1
- package/dist/ui-core/state/transcript-types.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +6 -1
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { providerIds, } from "../types.js";
|
|
2
|
+
/** Versioned runtime representation for one observed context measurement. */
|
|
3
|
+
export const CONTEXT_SNAPSHOT_VERSION = 1;
|
|
4
|
+
const LIMIT_SOURCES = new Set([
|
|
5
|
+
"session-override",
|
|
6
|
+
"model-catalog",
|
|
7
|
+
"configured-trigger",
|
|
8
|
+
"provider-reported",
|
|
9
|
+
"unknown",
|
|
10
|
+
]);
|
|
11
|
+
const SCOPES = new Set([
|
|
12
|
+
"provider-request",
|
|
13
|
+
"assembled-request",
|
|
14
|
+
"message-history",
|
|
15
|
+
"unknown",
|
|
16
|
+
]);
|
|
17
|
+
const PRECISIONS = new Set([
|
|
18
|
+
"provider-exact",
|
|
19
|
+
"estimate",
|
|
20
|
+
"unknown",
|
|
21
|
+
]);
|
|
22
|
+
const UNKNOWN_HEADROOM = Object.freeze({
|
|
23
|
+
kind: "unknown",
|
|
24
|
+
});
|
|
25
|
+
const UNKNOWN_CACHE = Object.freeze({
|
|
26
|
+
kind: "unknown",
|
|
27
|
+
});
|
|
28
|
+
const UNKNOWN_REASONING = Object.freeze({
|
|
29
|
+
kind: "unknown",
|
|
30
|
+
});
|
|
31
|
+
const UNAVAILABLE_ATTEMPT = Object.freeze({
|
|
32
|
+
kind: "unavailable",
|
|
33
|
+
});
|
|
34
|
+
function nonNegativeInteger(value) {
|
|
35
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
36
|
+
return 0;
|
|
37
|
+
return Math.max(0, Math.floor(value));
|
|
38
|
+
}
|
|
39
|
+
function optionalNonNegativeInteger(value) {
|
|
40
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
41
|
+
return undefined;
|
|
42
|
+
return Math.max(0, Math.floor(value));
|
|
43
|
+
}
|
|
44
|
+
function positiveInteger(value) {
|
|
45
|
+
const normalized = optionalNonNegativeInteger(value);
|
|
46
|
+
return normalized !== undefined && normalized > 0 ? normalized : undefined;
|
|
47
|
+
}
|
|
48
|
+
function normalizeLimit(limit) {
|
|
49
|
+
if (!limit || !LIMIT_SOURCES.has(limit.source)) {
|
|
50
|
+
return Object.freeze({ source: "unknown" });
|
|
51
|
+
}
|
|
52
|
+
const tokens = positiveInteger(limit.tokens);
|
|
53
|
+
return Object.freeze({
|
|
54
|
+
source: limit.source,
|
|
55
|
+
...(tokens !== undefined ? { tokens } : {}),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function normalizeCache(cache) {
|
|
59
|
+
if (!cache || cache.kind !== "reported")
|
|
60
|
+
return UNKNOWN_CACHE;
|
|
61
|
+
const readTokens = optionalNonNegativeInteger(cache.readTokens);
|
|
62
|
+
const creationTokens = optionalNonNegativeInteger(cache.creationTokens);
|
|
63
|
+
const uncachedTokens = optionalNonNegativeInteger(cache.uncachedTokens);
|
|
64
|
+
if (readTokens === undefined &&
|
|
65
|
+
creationTokens === undefined &&
|
|
66
|
+
uncachedTokens === undefined) {
|
|
67
|
+
return UNKNOWN_CACHE;
|
|
68
|
+
}
|
|
69
|
+
return Object.freeze({
|
|
70
|
+
kind: "reported",
|
|
71
|
+
...(readTokens !== undefined ? { readTokens } : {}),
|
|
72
|
+
...(creationTokens !== undefined ? { creationTokens } : {}),
|
|
73
|
+
...(uncachedTokens !== undefined ? { uncachedTokens } : {}),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function normalizeReasoning(reasoning) {
|
|
77
|
+
if (!reasoning || reasoning.kind !== "reported")
|
|
78
|
+
return UNKNOWN_REASONING;
|
|
79
|
+
const outputTokens = optionalNonNegativeInteger(reasoning.outputTokens);
|
|
80
|
+
const inputArtifactTokens = optionalNonNegativeInteger(reasoning.inputArtifactTokens);
|
|
81
|
+
if (outputTokens === undefined && inputArtifactTokens === undefined) {
|
|
82
|
+
return UNKNOWN_REASONING;
|
|
83
|
+
}
|
|
84
|
+
return Object.freeze({
|
|
85
|
+
kind: "reported",
|
|
86
|
+
...(outputTokens !== undefined ? { outputTokens } : {}),
|
|
87
|
+
...(inputArtifactTokens !== undefined ? { inputArtifactTokens } : {}),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function derivedHeadroom(contextTokens, scope, limit) {
|
|
91
|
+
if (scope === "message-history" ||
|
|
92
|
+
scope === "unknown" ||
|
|
93
|
+
limit.source !== "session-override" ||
|
|
94
|
+
limit.tokens === undefined) {
|
|
95
|
+
return UNKNOWN_HEADROOM;
|
|
96
|
+
}
|
|
97
|
+
return Object.freeze({
|
|
98
|
+
kind: "known",
|
|
99
|
+
remainingTokens: Math.max(0, limit.tokens - contextTokens),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function normalizeObservedAt(value) {
|
|
103
|
+
const candidate = value ?? Date.now();
|
|
104
|
+
return nonNegativeInteger(candidate);
|
|
105
|
+
}
|
|
106
|
+
/** Build one immutable, versioned observation without synthesizing telemetry. */
|
|
107
|
+
export function createContextSnapshot(input) {
|
|
108
|
+
const contextTokens = nonNegativeInteger(input.contextTokens);
|
|
109
|
+
const limit = normalizeLimit(input.limit);
|
|
110
|
+
return Object.freeze({
|
|
111
|
+
version: CONTEXT_SNAPSHOT_VERSION,
|
|
112
|
+
contextTokens,
|
|
113
|
+
lastCompletionTokens: nonNegativeInteger(input.lastCompletionTokens),
|
|
114
|
+
sessionPromptTokens: nonNegativeInteger(input.sessionPromptTokens),
|
|
115
|
+
sessionCompletionTokens: nonNegativeInteger(input.sessionCompletionTokens),
|
|
116
|
+
scope: input.scope,
|
|
117
|
+
precision: input.precision,
|
|
118
|
+
limit,
|
|
119
|
+
headroom: input.headroom ?? derivedHeadroom(contextTokens, input.scope, limit),
|
|
120
|
+
cache: normalizeCache(input.cache),
|
|
121
|
+
reasoning: normalizeReasoning(input.reasoning),
|
|
122
|
+
attempt: input.attempt ?? UNAVAILABLE_ATTEMPT,
|
|
123
|
+
observedAt: normalizeObservedAt(input.observedAt),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/** The only legacy projection consumed by existing renderers and old history. */
|
|
127
|
+
export function toLegacyContextUsage(snapshot) {
|
|
128
|
+
return Object.freeze({
|
|
129
|
+
contextTokens: snapshot.contextTokens,
|
|
130
|
+
contextLimit: snapshot.limit.source === "session-override" && snapshot.limit.tokens
|
|
131
|
+
? snapshot.limit.tokens
|
|
132
|
+
: 0,
|
|
133
|
+
lastCompletionTokens: snapshot.lastCompletionTokens,
|
|
134
|
+
sessionPromptTokens: snapshot.sessionPromptTokens,
|
|
135
|
+
sessionCompletionTokens: snapshot.sessionCompletionTokens,
|
|
136
|
+
exact: snapshot.precision === "provider-exact",
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
export function contextLimitFromSessionOverride(tokens) {
|
|
140
|
+
const normalized = positiveInteger(tokens);
|
|
141
|
+
return Object.freeze(normalized === undefined
|
|
142
|
+
? { source: "unknown" }
|
|
143
|
+
: { source: "session-override", tokens: normalized });
|
|
144
|
+
}
|
|
145
|
+
/** Rebind only live limit metadata; measurements retain their original time. */
|
|
146
|
+
export function withContextSnapshotLimit(snapshot, limit) {
|
|
147
|
+
const normalizedLimit = normalizeLimit(limit);
|
|
148
|
+
return Object.freeze({
|
|
149
|
+
...snapshot,
|
|
150
|
+
limit: normalizedLimit,
|
|
151
|
+
headroom: derivedHeadroom(snapshot.contextTokens, snapshot.scope, normalizedLimit),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/** Convert an unversioned six-field persisted/rendering snapshot once. */
|
|
155
|
+
export function contextSnapshotFromLegacy(snapshot, limit, observedAt) {
|
|
156
|
+
return createContextSnapshot({
|
|
157
|
+
contextTokens: snapshot.contextTokens,
|
|
158
|
+
lastCompletionTokens: snapshot.lastCompletionTokens,
|
|
159
|
+
sessionPromptTokens: snapshot.sessionPromptTokens,
|
|
160
|
+
sessionCompletionTokens: snapshot.sessionCompletionTokens,
|
|
161
|
+
scope: "unknown",
|
|
162
|
+
precision: snapshot.exact ? "provider-exact" : "estimate",
|
|
163
|
+
limit,
|
|
164
|
+
observedAt,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
function isRecord(value) {
|
|
168
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
169
|
+
}
|
|
170
|
+
function isNonNegativeIntegerValue(value) {
|
|
171
|
+
return (typeof value === "number" &&
|
|
172
|
+
Number.isSafeInteger(value) &&
|
|
173
|
+
value >= 0);
|
|
174
|
+
}
|
|
175
|
+
function hasOptionalNonNegativeInteger(value) {
|
|
176
|
+
return value === undefined || isNonNegativeIntegerValue(value);
|
|
177
|
+
}
|
|
178
|
+
function isContextLimit(value) {
|
|
179
|
+
return (isRecord(value) &&
|
|
180
|
+
LIMIT_SOURCES.has(value.source) &&
|
|
181
|
+
(value.tokens === undefined ||
|
|
182
|
+
(isNonNegativeIntegerValue(value.tokens) && value.tokens > 0)));
|
|
183
|
+
}
|
|
184
|
+
function isContextHeadroom(value) {
|
|
185
|
+
if (!isRecord(value))
|
|
186
|
+
return false;
|
|
187
|
+
if (value.kind === "unknown")
|
|
188
|
+
return true;
|
|
189
|
+
return (value.kind === "known" &&
|
|
190
|
+
isNonNegativeIntegerValue(value.remainingTokens) &&
|
|
191
|
+
hasOptionalNonNegativeInteger(value.effectiveTriggerTokens) &&
|
|
192
|
+
hasOptionalNonNegativeInteger(value.outputReserveTokens) &&
|
|
193
|
+
hasOptionalNonNegativeInteger(value.safetyMarginTokens));
|
|
194
|
+
}
|
|
195
|
+
function isContextCache(value) {
|
|
196
|
+
if (!isRecord(value))
|
|
197
|
+
return false;
|
|
198
|
+
if (value.kind === "unknown")
|
|
199
|
+
return true;
|
|
200
|
+
return (value.kind === "reported" &&
|
|
201
|
+
hasOptionalNonNegativeInteger(value.readTokens) &&
|
|
202
|
+
hasOptionalNonNegativeInteger(value.creationTokens) &&
|
|
203
|
+
hasOptionalNonNegativeInteger(value.uncachedTokens));
|
|
204
|
+
}
|
|
205
|
+
function isContextReasoning(value) {
|
|
206
|
+
if (!isRecord(value))
|
|
207
|
+
return false;
|
|
208
|
+
if (value.kind === "unknown")
|
|
209
|
+
return true;
|
|
210
|
+
return (value.kind === "reported" &&
|
|
211
|
+
hasOptionalNonNegativeInteger(value.outputTokens) &&
|
|
212
|
+
hasOptionalNonNegativeInteger(value.inputArtifactTokens));
|
|
213
|
+
}
|
|
214
|
+
const ATTEMPT_MODES = new Set(["complete", "stream"]);
|
|
215
|
+
const ATTEMPT_REASONS = new Set([
|
|
216
|
+
"initial",
|
|
217
|
+
"retry",
|
|
218
|
+
"fallback",
|
|
219
|
+
"adaptation",
|
|
220
|
+
"provider-retry",
|
|
221
|
+
]);
|
|
222
|
+
const ATTEMPT_OUTCOMES = new Set([
|
|
223
|
+
"success",
|
|
224
|
+
"failure",
|
|
225
|
+
"cancelled",
|
|
226
|
+
]);
|
|
227
|
+
const ATTEMPT_PROVIDERS = new Set(providerIds);
|
|
228
|
+
function isContextAttempt(value) {
|
|
229
|
+
if (!isRecord(value))
|
|
230
|
+
return false;
|
|
231
|
+
if (value.kind === "unavailable")
|
|
232
|
+
return true;
|
|
233
|
+
return (value.kind === "generation" &&
|
|
234
|
+
isNonNegativeIntegerValue(value.sequence) &&
|
|
235
|
+
value.sequence > 0 &&
|
|
236
|
+
ATTEMPT_PROVIDERS.has(value.provider) &&
|
|
237
|
+
typeof value.model === "string" &&
|
|
238
|
+
value.model.trim().length > 0 &&
|
|
239
|
+
ATTEMPT_MODES.has(value.mode) &&
|
|
240
|
+
ATTEMPT_REASONS.has(value.reason) &&
|
|
241
|
+
ATTEMPT_OUTCOMES.has(value.outcome));
|
|
242
|
+
}
|
|
243
|
+
/** Narrow persisted JSON before treating it as the current schema. */
|
|
244
|
+
export function isContextSnapshotV1(value) {
|
|
245
|
+
if (!isRecord(value) || value.version !== CONTEXT_SNAPSHOT_VERSION)
|
|
246
|
+
return false;
|
|
247
|
+
return (SCOPES.has(value.scope) &&
|
|
248
|
+
PRECISIONS.has(value.precision) &&
|
|
249
|
+
isContextLimit(value.limit) &&
|
|
250
|
+
isContextHeadroom(value.headroom) &&
|
|
251
|
+
isContextCache(value.cache) &&
|
|
252
|
+
isContextReasoning(value.reasoning) &&
|
|
253
|
+
isContextAttempt(value.attempt) &&
|
|
254
|
+
[
|
|
255
|
+
value.contextTokens,
|
|
256
|
+
value.lastCompletionTokens,
|
|
257
|
+
value.sessionPromptTokens,
|
|
258
|
+
value.sessionCompletionTokens,
|
|
259
|
+
value.observedAt,
|
|
260
|
+
].every(isNonNegativeIntegerValue));
|
|
261
|
+
}
|
|
262
|
+
/** Return the final physical T100 attempt only when it really exists. */
|
|
263
|
+
export function contextAttemptFromOperationUsage(operationUsage) {
|
|
264
|
+
const attempt = operationUsage?.attempts.at(-1);
|
|
265
|
+
if (!attempt)
|
|
266
|
+
return UNAVAILABLE_ATTEMPT;
|
|
267
|
+
return Object.freeze({
|
|
268
|
+
kind: "generation",
|
|
269
|
+
sequence: attempt.sequence,
|
|
270
|
+
provider: attempt.provider,
|
|
271
|
+
model: attempt.model,
|
|
272
|
+
mode: attempt.mode,
|
|
273
|
+
reason: attempt.reason,
|
|
274
|
+
outcome: attempt.outcome,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=context-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-snapshot.js","sourceRoot":"","sources":["../../src/llm/context-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAKZ,MAAM,aAAa,CAAC;AAIrB,6EAA6E;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC;AA0GnD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAqB;IAChD,kBAAkB;IAClB,eAAe;IACf,oBAAoB;IACpB,mBAAmB;IACnB,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAuB;IAC3C,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAI,GAAG,CAA2B;IACnD,gBAAgB;IAChB,UAAU;IACV,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAA4B,MAAM,CAAC,MAAM,CAAC;IAC9D,IAAI,EAAE,SAAkB;CACzB,CAAC,CAAC;AACH,MAAM,aAAa,GAAyB,MAAM,CAAC,MAAM,CAAC;IACxD,IAAI,EAAE,SAAkB;CACzB,CAAC,CAAC;AACH,MAAM,iBAAiB,GAA6B,MAAM,CAAC,MAAM,CAAC;IAChE,IAAI,EAAE,SAAkB;CACzB,CAAC,CAAC;AACH,MAAM,mBAAmB,GAA4B,MAAM,CAAC,MAAM,CAAC;IACjE,IAAI,EAAE,aAAsB;CAC7B,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,UAAU,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,SAAS,cAAc,CACrB,KAAuC;IAEvC,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,KAAuC;IAEvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,aAAa,CAAC;IAC9D,MAAM,UAAU,GAAG,0BAA0B,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,0BAA0B,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,0BAA0B,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACxE,IACE,UAAU,KAAK,SAAS;QACxB,cAAc,KAAK,SAAS;QAC5B,cAAc,KAAK,SAAS,EAC5B,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,UAAmB;QACzB,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CACzB,SAA+C;IAE/C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,iBAAiB,CAAC;IAC1E,MAAM,YAAY,GAAG,0BAA0B,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxE,MAAM,mBAAmB,GAAG,0BAA0B,CACpD,SAAS,CAAC,mBAAmB,CAC9B,CAAC;IACF,IAAI,YAAY,KAAK,SAAS,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACpE,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,UAAmB;QACzB,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CACtB,aAAqB,EACrB,KAA2B,EAC3B,KAA2B;IAE3B,IACE,KAAK,KAAK,iBAAiB;QAC3B,KAAK,KAAK,SAAS;QACnB,KAAK,CAAC,MAAM,KAAK,kBAAkB;QACnC,KAAK,CAAC,MAAM,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,OAAgB;QACtB,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC;KAC3D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyB;IACpD,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CACnC,KAAiC;IAEjC,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,wBAAwB;QACjC,aAAa;QACb,oBAAoB,EAAE,kBAAkB,CAAC,KAAK,CAAC,oBAAoB,CAAC;QACpE,mBAAmB,EAAE,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAClE,uBAAuB,EAAE,kBAAkB,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAC1E,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,eAAe,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9E,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9C,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;QAC7C,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC;KAClD,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAClC,QAA2B;IAE3B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,YAAY,EACV,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,kBAAkB,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM;YACnE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;YACvB,CAAC,CAAC,CAAC;QACP,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;QACjD,uBAAuB,EAAE,QAAQ,CAAC,uBAAuB;QACzD,KAAK,EAAE,QAAQ,CAAC,SAAS,KAAK,gBAAgB;KAC/C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAA0B;IAE1B,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,MAAM,CAClB,UAAU,KAAK,SAAS;QACtB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAkB,EAAE;QAChC,CAAC,CAAC,EAAE,MAAM,EAAE,kBAA2B,EAAE,MAAM,EAAE,UAAU,EAAE,CAChE,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,wBAAwB,CACtC,QAA2B,EAC3B,KAA2B;IAE3B,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,QAAQ;QACX,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,eAAe,CACvB,QAAQ,CAAC,aAAa,EACtB,QAAQ,CAAC,KAAK,EACd,eAAe,CAChB;KACF,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,yBAAyB,CACvC,QAA8B,EAC9B,KAA2B,EAC3B,UAA+B;IAE/B,OAAO,qBAAqB,CAAC;QAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;QACjD,uBAAuB,EAAE,QAAQ,CAAC,uBAAuB;QACzD,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU;QACzD,KAAK;QACL,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,CACX,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAc;IACnD,OAAO,KAAK,KAAK,SAAS,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAA4B,CAAC;QACrD,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;YACzB,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,OAAO;QACtB,yBAAyB,CAAC,KAAK,CAAC,eAAe,CAAC;QAChD,6BAA6B,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAC3D,6BAA6B,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACxD,6BAA6B,CAAC,KAAK,CAAC,kBAAkB,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,6BAA6B,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/C,6BAA6B,CAAC,KAAK,CAAC,cAAc,CAAC;QACnD,6BAA6B,CAAC,KAAK,CAAC,cAAc,CAAC,CACpD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,6BAA6B,CAAC,KAAK,CAAC,YAAY,CAAC;QACjD,6BAA6B,CAAC,KAAK,CAAC,mBAAmB,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAwB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7E,MAAM,eAAe,GAAG,IAAI,GAAG,CAA0B;IACvD,SAAS;IACT,OAAO;IACP,UAAU;IACV,YAAY;IACZ,gBAAgB;CACjB,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAA2B;IACzD,SAAS;IACT,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAa,WAAW,CAAC,CAAC;AAE3D,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,YAAY;QAC3B,yBAAyB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzC,KAAK,CAAC,QAAQ,GAAG,CAAC;QAClB,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAsB,CAAC;QACnD,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAC7B,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAA6B,CAAC;QACtD,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,MAAiC,CAAC;QAC5D,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAmC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,wBAAwB;QAAE,OAAO,KAAK,CAAC;IACjF,OAAO,CACL,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAA6B,CAAC;QAC/C,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAqC,CAAC;QAC3D,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3B,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3B,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC/B;YACE,KAAK,CAAC,aAAa;YACnB,KAAK,CAAC,oBAAoB;YAC1B,KAAK,CAAC,mBAAmB;YACzB,KAAK,CAAC,uBAAuB;YAC7B,KAAK,CAAC,UAAU;SACjB,CAAC,KAAK,CAAC,yBAAyB,CAAC,CACnC,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,gCAAgC,CAC9C,cAAkD;IAElD,MAAM,OAAO,GAAG,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,YAAqB;QAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProviderId } from "../types.js";
|
|
2
|
+
export declare function modelContextWindow(model: string | undefined, provider?: ProviderId | undefined): number;
|
|
3
|
+
/**
|
|
4
|
+
* The model's nominal family window, ignoring provider-served overrides.
|
|
5
|
+
* Some overrides (Groq's low-TPM tiers) are budget advisories that steer
|
|
6
|
+
* earlier compaction, not physical maximums a dispatch gate should enforce.
|
|
7
|
+
*/
|
|
8
|
+
export declare function nominalModelContextWindow(model: string | undefined): number;
|
|
9
|
+
/** Exact served window for a provider-published alias, when one exists. */
|
|
10
|
+
export declare function providerContextOverrideTokens(provider: ProviderId, model: string | undefined): number | undefined;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known model context windows (tokens). Patterns are tested in order;
|
|
3
|
+
* first match wins. Keep conservative defaults so % never under-reports fill.
|
|
4
|
+
*/
|
|
5
|
+
const CONTEXT_WINDOW_RULES = [
|
|
6
|
+
// Anthropic
|
|
7
|
+
{ pattern: /claude-(?:fable|mythos)-5/i, tokens: 1_000_000 },
|
|
8
|
+
{ pattern: /claude-(?:opus|sonnet)-5/i, tokens: 1_000_000 },
|
|
9
|
+
{ pattern: /claude-(?:opus|sonnet)-4\.[678]/i, tokens: 1_000_000 },
|
|
10
|
+
{ pattern: /claude-(?:opus|sonnet)-4/i, tokens: 200_000 },
|
|
11
|
+
{ pattern: /claude-haiku-4/i, tokens: 200_000 },
|
|
12
|
+
{ pattern: /claude-3-7/i, tokens: 200_000 },
|
|
13
|
+
{ pattern: /claude-3-5/i, tokens: 200_000 },
|
|
14
|
+
{ pattern: /claude-3/i, tokens: 200_000 },
|
|
15
|
+
// OpenAI
|
|
16
|
+
{ pattern: /gpt-5\.[456](?:[-.]|$)/i, tokens: 1_050_000 },
|
|
17
|
+
{ pattern: /gpt-5/i, tokens: 400_000 },
|
|
18
|
+
{ pattern: /gpt-4\.1/i, tokens: 1_047_576 },
|
|
19
|
+
{ pattern: /gpt-4o/i, tokens: 128_000 },
|
|
20
|
+
{ pattern: /gpt-4-turbo/i, tokens: 128_000 },
|
|
21
|
+
// Plain gpt-4 is 8k (32k for the -32k variant); the generic 128k rule below
|
|
22
|
+
// used to over-size it, so no warning arrived before a hard context error.
|
|
23
|
+
{ pattern: /gpt-4-32k/i, tokens: 32_768 },
|
|
24
|
+
{ pattern: /^gpt-4(?:-\d{4})?$/i, tokens: 8_192 },
|
|
25
|
+
{ pattern: /gpt-4/i, tokens: 128_000 },
|
|
26
|
+
{ pattern: /o3/i, tokens: 200_000 },
|
|
27
|
+
{ pattern: /o4/i, tokens: 200_000 },
|
|
28
|
+
{ pattern: /o1/i, tokens: 200_000 },
|
|
29
|
+
// Google — keep explicit rules ahead of the generic /gemini/i fallback, which
|
|
30
|
+
// used to catch the shipped gemini-3.x default at an order of magnitude low.
|
|
31
|
+
{ pattern: /gemini-3/i, tokens: 1_048_576 },
|
|
32
|
+
{ pattern: /gemini-2\.5/i, tokens: 1_048_576 },
|
|
33
|
+
{ pattern: /gemini-2\.0/i, tokens: 1_048_576 },
|
|
34
|
+
{ pattern: /gemini-1\.5/i, tokens: 1_048_576 },
|
|
35
|
+
{ pattern: /gemini/i, tokens: 128_000 },
|
|
36
|
+
// Meta / Groq
|
|
37
|
+
{ pattern: /llama-4/i, tokens: 128_000 },
|
|
38
|
+
{ pattern: /llama-3\.3/i, tokens: 128_000 },
|
|
39
|
+
{ pattern: /llama-3\.1/i, tokens: 128_000 },
|
|
40
|
+
{ pattern: /llama-3/i, tokens: 128_000 },
|
|
41
|
+
// DeepSeek / Qwen / Kimi / GLM / etc.
|
|
42
|
+
{ pattern: /deepseek-v4/i, tokens: 1_000_000 },
|
|
43
|
+
{ pattern: /deepseek/i, tokens: 128_000 },
|
|
44
|
+
{ pattern: /qwen3\.7/i, tokens: 1_000_000 },
|
|
45
|
+
{ pattern: /qwen3\.(?:8|6|5)/i, tokens: 262_144 },
|
|
46
|
+
{ pattern: /qwen3/i, tokens: 128_000 },
|
|
47
|
+
{ pattern: /qwen2\.5/i, tokens: 128_000 },
|
|
48
|
+
{ pattern: /qwen/i, tokens: 128_000 },
|
|
49
|
+
// Kimi-K3 is a 1M-window model. Keep this before generic Kimi/K2 rules so
|
|
50
|
+
// Modal and gateway model IDs such as `moonshotai/Kimi-K3` are not clamped
|
|
51
|
+
// to the legacy 128k family window.
|
|
52
|
+
{ pattern: /kimi-k3/i, tokens: 1_000_000 },
|
|
53
|
+
{ pattern: /kimi-k2/i, tokens: 256_000 },
|
|
54
|
+
{ pattern: /kimi/i, tokens: 128_000 },
|
|
55
|
+
{ pattern: /glm-?5\.2/i, tokens: 1_000_000 },
|
|
56
|
+
{ pattern: /glm-?5/i, tokens: 200_000 },
|
|
57
|
+
{ pattern: /glm-?4\.[56]/i, tokens: 200_000 },
|
|
58
|
+
{ pattern: /glm-?4/i, tokens: 128_000 },
|
|
59
|
+
{ pattern: /minimax-m3/i, tokens: 1_000_000 },
|
|
60
|
+
{ pattern: /minimax-m2\.7/i, tokens: 204_800 },
|
|
61
|
+
{ pattern: /minimax/i, tokens: 128_000 },
|
|
62
|
+
{ pattern: /mimo/i, tokens: 128_000 },
|
|
63
|
+
{ pattern: /gpt-oss/i, tokens: 128_000 },
|
|
64
|
+
{ pattern: /nemotron/i, tokens: 128_000 },
|
|
65
|
+
{ pattern: /muse-spark/i, tokens: 1_048_576 },
|
|
66
|
+
];
|
|
67
|
+
const DEFAULT_CONTEXT_WINDOW = 250_000;
|
|
68
|
+
/**
|
|
69
|
+
* Provider-specific served windows that are smaller than the model's nominal
|
|
70
|
+
* one. The `provider` argument used to be accepted and discarded, so `%` of
|
|
71
|
+
* context was wrong wherever a gateway serves a truncated window.
|
|
72
|
+
*/
|
|
73
|
+
const PROVIDER_CONTEXT_OVERRIDES = {
|
|
74
|
+
// Groq serves these two on a low TPM tier; the usable prompt is far below the
|
|
75
|
+
// model's nominal window (mirrors `groqInputTokenBudget`).
|
|
76
|
+
groq: [
|
|
77
|
+
{ pattern: /qwen\/qwen3-32b/i, tokens: 5_500 },
|
|
78
|
+
{ pattern: /openai\/gpt-oss-20b/i, tokens: 7_500 },
|
|
79
|
+
],
|
|
80
|
+
// TokenRouter publishes the real upstream window per model id, and several
|
|
81
|
+
// are far larger than the generic family rules below would guess. Model ids
|
|
82
|
+
// are vendor-namespaced (`deepseek/deepseek-v4-pro`) but older sessions and
|
|
83
|
+
// catalogs still carry the bare alias, so both forms must match (MR-033).
|
|
84
|
+
tokenrouter: [
|
|
85
|
+
{ pattern: /^(?:[a-z0-9-]+\/)?deepseek-v4-(?:pro|flash)$/i, tokens: 1_000_000 },
|
|
86
|
+
{ pattern: /^(?:[a-z0-9-]+\/)?minimax-m3$/i, tokens: 524_288 },
|
|
87
|
+
{ pattern: /^(?:[a-z0-9-]+\/)?minimax-m2p7$/i, tokens: 196_608 },
|
|
88
|
+
{ pattern: /^(?:[a-z0-9-]+\/)?kimi-k2(?:p\d|\.\d)/i, tokens: 262_144 },
|
|
89
|
+
{ pattern: /^(?:[a-z0-9-]+\/)?qwen3p\d-plus$/i, tokens: 262_144 },
|
|
90
|
+
{ pattern: /^(?:[a-z0-9-]+\/)?glm-5p1(?:-fast)?$/i, tokens: 202_752 },
|
|
91
|
+
{ pattern: /^(?:[a-z0-9-]+\/)?gpt-oss-120b$/i, tokens: 131_072 },
|
|
92
|
+
],
|
|
93
|
+
};
|
|
94
|
+
export function modelContextWindow(model, provider) {
|
|
95
|
+
if (!model)
|
|
96
|
+
return DEFAULT_CONTEXT_WINDOW;
|
|
97
|
+
const overrides = provider ? PROVIDER_CONTEXT_OVERRIDES[provider] : undefined;
|
|
98
|
+
if (overrides) {
|
|
99
|
+
for (const rule of overrides) {
|
|
100
|
+
if (rule.pattern.test(model))
|
|
101
|
+
return rule.tokens;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return nominalModelContextWindow(model);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The model's nominal family window, ignoring provider-served overrides.
|
|
108
|
+
* Some overrides (Groq's low-TPM tiers) are budget advisories that steer
|
|
109
|
+
* earlier compaction, not physical maximums a dispatch gate should enforce.
|
|
110
|
+
*/
|
|
111
|
+
export function nominalModelContextWindow(model) {
|
|
112
|
+
if (!model)
|
|
113
|
+
return DEFAULT_CONTEXT_WINDOW;
|
|
114
|
+
for (const rule of CONTEXT_WINDOW_RULES) {
|
|
115
|
+
if (rule.pattern.test(model))
|
|
116
|
+
return rule.tokens;
|
|
117
|
+
}
|
|
118
|
+
return DEFAULT_CONTEXT_WINDOW;
|
|
119
|
+
}
|
|
120
|
+
/** Exact served window for a provider-published alias, when one exists. */
|
|
121
|
+
export function providerContextOverrideTokens(provider, model) {
|
|
122
|
+
if (!model)
|
|
123
|
+
return undefined;
|
|
124
|
+
const overrides = PROVIDER_CONTEXT_OVERRIDES[provider];
|
|
125
|
+
if (!overrides)
|
|
126
|
+
return undefined;
|
|
127
|
+
return overrides.find((rule) => rule.pattern.test(model))?.tokens;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=context-windows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-windows.js","sourceRoot":"","sources":["../../src/llm/context-windows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type FinalTurnPreservation, type ProfileReplayScope, type ProfileTriState, type ProviderProfile, type ProviderProfileLayer, type ReasoningDisableForm, type ReasoningGeneration, type ReasoningOutputShape } from "./provider-profile.js";
|
|
2
|
+
import type { ReasoningStyle } from "./http.js";
|
|
3
|
+
import type { CachePolicyKind, LimitSource } from "./provider-profile.js";
|
|
4
|
+
export type CustomAuthType = "bearer" | "custom-headers" | "none-keyless";
|
|
5
|
+
/** Serializable wire subset a custom route may declare. */
|
|
6
|
+
export interface CustomProviderProfileSpec {
|
|
7
|
+
readonly authType?: CustomAuthType | undefined;
|
|
8
|
+
readonly keyEnv?: string | undefined;
|
|
9
|
+
readonly baseUrlEnv?: string | undefined;
|
|
10
|
+
/** Values may be literals or `${ENV_NAME}` references. */
|
|
11
|
+
readonly headers?: Readonly<Record<string, string>> | undefined;
|
|
12
|
+
readonly tools?: ProfileTriState | undefined;
|
|
13
|
+
readonly images?: ProfileTriState | undefined;
|
|
14
|
+
readonly structuredOutput?: ProfileTriState | undefined;
|
|
15
|
+
readonly streamOptions?: ProfileTriState | undefined;
|
|
16
|
+
readonly reasoning?: {
|
|
17
|
+
readonly generation?: ReasoningGeneration | undefined;
|
|
18
|
+
readonly controlDialect?: "openai-effort" | "none" | undefined;
|
|
19
|
+
readonly acceptedEfforts?: readonly string[] | undefined;
|
|
20
|
+
readonly disable?: ProfileTriState | undefined;
|
|
21
|
+
readonly disableForm?: ReasoningDisableForm | undefined;
|
|
22
|
+
readonly outputShapes?: readonly ReasoningOutputShape[] | undefined;
|
|
23
|
+
readonly replayScope?: ProfileReplayScope | undefined;
|
|
24
|
+
readonly finalTurnPreservation?: FinalTurnPreservation | undefined;
|
|
25
|
+
} | undefined;
|
|
26
|
+
readonly limits?: {
|
|
27
|
+
readonly contextTokens?: number | undefined;
|
|
28
|
+
readonly outputTokens?: number | undefined;
|
|
29
|
+
readonly source?: LimitSource | undefined;
|
|
30
|
+
} | undefined;
|
|
31
|
+
readonly cache?: {
|
|
32
|
+
readonly kind?: CachePolicyKind | undefined;
|
|
33
|
+
readonly affinityField?: string | undefined;
|
|
34
|
+
readonly isolationField?: string | undefined;
|
|
35
|
+
readonly cacheAffectingFields?: readonly string[] | undefined;
|
|
36
|
+
} | undefined;
|
|
37
|
+
readonly usage?: {
|
|
38
|
+
readonly cachedInput?: readonly string[] | undefined;
|
|
39
|
+
readonly uncachedInput?: readonly string[] | undefined;
|
|
40
|
+
readonly cacheWrite?: readonly string[] | undefined;
|
|
41
|
+
readonly reasoningOutput?: readonly string[] | undefined;
|
|
42
|
+
} | undefined;
|
|
43
|
+
readonly terminal?: {
|
|
44
|
+
readonly naturalEofAccepted?: boolean | undefined;
|
|
45
|
+
} | undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Local, actionable validation. Nothing here performs a network call; the goal
|
|
49
|
+
* is that an invalid declaration fails before any request is dispatched.
|
|
50
|
+
*/
|
|
51
|
+
export declare function validateCustomProviderProfile(raw: unknown): {
|
|
52
|
+
spec?: CustomProviderProfileSpec;
|
|
53
|
+
errors: string[];
|
|
54
|
+
};
|
|
55
|
+
/** Maps a validated spec onto the user-config evidence layer. */
|
|
56
|
+
export declare function customProfileLayer(spec: CustomProviderProfileSpec | undefined): ProviderProfileLayer | undefined;
|
|
57
|
+
export declare function endpointPrivacyHash(baseUrl: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Conservative unknown unless declared; a custom endpoint that verifiably is
|
|
60
|
+
* the direct DeepSeek API earns the documented V4 builtin layer as route
|
|
61
|
+
* evidence below user declarations.
|
|
62
|
+
*/
|
|
63
|
+
export declare function resolveCustomProviderProfile(input: {
|
|
64
|
+
id: string;
|
|
65
|
+
model: string;
|
|
66
|
+
baseUrl: string;
|
|
67
|
+
profile?: CustomProviderProfileSpec | undefined;
|
|
68
|
+
}): ProviderProfile;
|
|
69
|
+
/**
|
|
70
|
+
* Serializer style for the compatible path. Undeclared routes omit optional
|
|
71
|
+
* reasoning controls entirely (send narrowly, parse broadly).
|
|
72
|
+
*/
|
|
73
|
+
export declare function customReasoningStyle(profile: CustomProviderProfileSpec | undefined): ReasoningStyle;
|
|
74
|
+
/** Resolves `${ENV_NAME}` header references before dispatch; throws locally. */
|
|
75
|
+
export declare function resolveCustomHeaders(headers: Readonly<Record<string, string>> | undefined): Record<string, string> | undefined;
|