ds4-context-core 0.1.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/LICENSE +21 -0
- package/README.md +80 -0
- package/dist/artifacts/artifact-manager.d.ts +58 -0
- package/dist/artifacts/artifact-manager.d.ts.map +1 -0
- package/dist/artifacts/artifact-manager.js +445 -0
- package/dist/artifacts/artifact-manager.js.map +1 -0
- package/dist/artifacts/artifact-store.d.ts +33 -0
- package/dist/artifacts/artifact-store.d.ts.map +1 -0
- package/dist/artifacts/artifact-store.js +116 -0
- package/dist/artifacts/artifact-store.js.map +1 -0
- package/dist/compaction/compaction-record.d.ts +74 -0
- package/dist/compaction/compaction-record.d.ts.map +1 -0
- package/dist/compaction/compaction-record.js +113 -0
- package/dist/compaction/compaction-record.js.map +1 -0
- package/dist/compaction/summary-contract.d.ts +68 -0
- package/dist/compaction/summary-contract.d.ts.map +1 -0
- package/dist/compaction/summary-contract.js +315 -0
- package/dist/compaction/summary-contract.js.map +1 -0
- package/dist/compaction/summary-graph.d.ts +48 -0
- package/dist/compaction/summary-graph.d.ts.map +1 -0
- package/dist/compaction/summary-graph.js +123 -0
- package/dist/compaction/summary-graph.js.map +1 -0
- package/dist/config/config-loader.d.ts +18 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +305 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config.d.ts +113 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +89 -0
- package/dist/config/config.js.map +1 -0
- package/dist/continuation/native-continuation.d.ts +107 -0
- package/dist/continuation/native-continuation.d.ts.map +1 -0
- package/dist/continuation/native-continuation.js +374 -0
- package/dist/continuation/native-continuation.js.map +1 -0
- package/dist/core/budget-manager.d.ts +26 -0
- package/dist/core/budget-manager.d.ts.map +1 -0
- package/dist/core/budget-manager.js +42 -0
- package/dist/core/budget-manager.js.map +1 -0
- package/dist/core/canonical-message.d.ts +69 -0
- package/dist/core/canonical-message.d.ts.map +1 -0
- package/dist/core/canonical-message.js +2 -0
- package/dist/core/canonical-message.js.map +1 -0
- package/dist/core/model-awareness.d.ts +59 -0
- package/dist/core/model-awareness.d.ts.map +1 -0
- package/dist/core/model-awareness.js +177 -0
- package/dist/core/model-awareness.js.map +1 -0
- package/dist/core/model-profile.d.ts +27 -0
- package/dist/core/model-profile.d.ts.map +1 -0
- package/dist/core/model-profile.js +29 -0
- package/dist/core/model-profile.js.map +1 -0
- package/dist/core/token-estimator.d.ts +4 -0
- package/dist/core/token-estimator.d.ts.map +1 -0
- package/dist/core/token-estimator.js +64 -0
- package/dist/core/token-estimator.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/context-manifest.d.ts +163 -0
- package/dist/manifest/context-manifest.d.ts.map +1 -0
- package/dist/manifest/context-manifest.js +2 -0
- package/dist/manifest/context-manifest.js.map +1 -0
- package/dist/manifest/observer.d.ts +63 -0
- package/dist/manifest/observer.d.ts.map +1 -0
- package/dist/manifest/observer.js +150 -0
- package/dist/manifest/observer.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +112 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +499 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/memory/memory-types.d.ts +126 -0
- package/dist/memory/memory-types.d.ts.map +1 -0
- package/dist/memory/memory-types.js +73 -0
- package/dist/memory/memory-types.js.map +1 -0
- package/dist/persistence/migrations.d.ts +17 -0
- package/dist/persistence/migrations.d.ts.map +1 -0
- package/dist/persistence/migrations.js +588 -0
- package/dist/persistence/migrations.js.map +1 -0
- package/dist/persistence/repositories/artifact-repository.d.ts +50 -0
- package/dist/persistence/repositories/artifact-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/artifact-repository.js +186 -0
- package/dist/persistence/repositories/artifact-repository.js.map +1 -0
- package/dist/persistence/repositories/context-manifest-repository.d.ts +19 -0
- package/dist/persistence/repositories/context-manifest-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/context-manifest-repository.js +144 -0
- package/dist/persistence/repositories/context-manifest-repository.js.map +1 -0
- package/dist/persistence/repositories/memory-repository.d.ts +33 -0
- package/dist/persistence/repositories/memory-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/memory-repository.js +429 -0
- package/dist/persistence/repositories/memory-repository.js.map +1 -0
- package/dist/persistence/repositories/project-knowledge-repository.d.ts +65 -0
- package/dist/persistence/repositories/project-knowledge-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/project-knowledge-repository.js +248 -0
- package/dist/persistence/repositories/project-knowledge-repository.js.map +1 -0
- package/dist/persistence/repositories/session-index-repository.d.ts +81 -0
- package/dist/persistence/repositories/session-index-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/session-index-repository.js +220 -0
- package/dist/persistence/repositories/session-index-repository.js.map +1 -0
- package/dist/persistence/repositories/summary-repository.d.ts +16 -0
- package/dist/persistence/repositories/summary-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/summary-repository.js +242 -0
- package/dist/persistence/repositories/summary-repository.js.map +1 -0
- package/dist/persistence/sqlite.d.ts +45 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +137 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/planner/atomic-groups.d.ts +15 -0
- package/dist/planner/atomic-groups.d.ts.map +1 -0
- package/dist/planner/atomic-groups.js +177 -0
- package/dist/planner/atomic-groups.js.map +1 -0
- package/dist/planner/context-planner.d.ts +49 -0
- package/dist/planner/context-planner.d.ts.map +1 -0
- package/dist/planner/context-planner.js +367 -0
- package/dist/planner/context-planner.js.map +1 -0
- package/dist/privacy/privacy-policy.d.ts +58 -0
- package/dist/privacy/privacy-policy.d.ts.map +1 -0
- package/dist/privacy/privacy-policy.js +412 -0
- package/dist/privacy/privacy-policy.js.map +1 -0
- package/dist/project/file-indexer.d.ts +32 -0
- package/dist/project/file-indexer.d.ts.map +1 -0
- package/dist/project/file-indexer.js +374 -0
- package/dist/project/file-indexer.js.map +1 -0
- package/dist/project/git-state.d.ts +12 -0
- package/dist/project/git-state.d.ts.map +1 -0
- package/dist/project/git-state.js +109 -0
- package/dist/project/git-state.js.map +1 -0
- package/dist/project/project-knowledge.d.ts +63 -0
- package/dist/project/project-knowledge.d.ts.map +1 -0
- package/dist/project/project-knowledge.js +332 -0
- package/dist/project/project-knowledge.js.map +1 -0
- package/dist/retrieval/retrieval-engine.d.ts +55 -0
- package/dist/retrieval/retrieval-engine.d.ts.map +1 -0
- package/dist/retrieval/retrieval-engine.js +290 -0
- package/dist/retrieval/retrieval-engine.js.map +1 -0
- package/dist/retrieval/task-descriptor.d.ts +17 -0
- package/dist/retrieval/task-descriptor.d.ts.map +1 -0
- package/dist/retrieval/task-descriptor.js +107 -0
- package/dist/retrieval/task-descriptor.js.map +1 -0
- package/dist/shared/hash.d.ts +2 -0
- package/dist/shared/hash.d.ts.map +1 -0
- package/dist/shared/hash.js +5 -0
- package/dist/shared/hash.js.map +1 -0
- package/dist/shared/logging.d.ts +27 -0
- package/dist/shared/logging.d.ts.map +1 -0
- package/dist/shared/logging.js +83 -0
- package/dist/shared/logging.js.map +1 -0
- package/dist/shared/stable-json.d.ts +2 -0
- package/dist/shared/stable-json.d.ts.map +1 -0
- package/dist/shared/stable-json.js +38 -0
- package/dist/shared/stable-json.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-continuation.d.ts","sourceRoot":"","sources":["../../src/continuation/native-continuation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { sha256 } from "../shared/hash.js";
|
|
2
|
+
import { stableStringify } from "../shared/stable-json.js";
|
|
3
|
+
export const NATIVE_CONTINUATION_STRATEGY = "openai-previous-response-v1";
|
|
4
|
+
function isRecord(value) {
|
|
5
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
function profileKey(provider, model) {
|
|
8
|
+
return `${provider}/${model}`;
|
|
9
|
+
}
|
|
10
|
+
function stateKey(sessionId, provider, model) {
|
|
11
|
+
return `${sessionId}\0${provider}\0${model}`;
|
|
12
|
+
}
|
|
13
|
+
function hashValue(value) {
|
|
14
|
+
return sha256(stableStringify(value));
|
|
15
|
+
}
|
|
16
|
+
function requestBodyHash(payload) {
|
|
17
|
+
const { input: _input, previous_response_id: _previousResponseId, ...body } = payload;
|
|
18
|
+
return hashValue({ ...body, store: true });
|
|
19
|
+
}
|
|
20
|
+
function prefixMatches(current, expected) {
|
|
21
|
+
if (current.length < expected.length)
|
|
22
|
+
return false;
|
|
23
|
+
for (let index = 0; index < expected.length; index++) {
|
|
24
|
+
if (current[index] !== expected[index])
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
function cloneManifest(value) {
|
|
30
|
+
return { ...value };
|
|
31
|
+
}
|
|
32
|
+
export function nativeContinuationProfileMatches(profiles, provider, model) {
|
|
33
|
+
const exact = profileKey(provider, model);
|
|
34
|
+
return profiles.includes(exact) || profiles.includes(`${provider}/*`);
|
|
35
|
+
}
|
|
36
|
+
export function nativeContinuationProviderIds(profiles) {
|
|
37
|
+
return [...new Set(profiles.flatMap((profile) => {
|
|
38
|
+
const separator = profile.indexOf("/");
|
|
39
|
+
return separator > 0 ? [profile.slice(0, separator)] : [];
|
|
40
|
+
}))].sort();
|
|
41
|
+
}
|
|
42
|
+
export function continuationItemHashes(items) {
|
|
43
|
+
return items.map(hashValue);
|
|
44
|
+
}
|
|
45
|
+
export function disabledNativeContinuationDiagnostics(config) {
|
|
46
|
+
return {
|
|
47
|
+
enabled: config?.enabled ?? false,
|
|
48
|
+
allowProviderStorage: config?.allowProviderStorage ?? false,
|
|
49
|
+
strategy: NATIVE_CONTINUATION_STRATEGY,
|
|
50
|
+
profiles: [...(config?.profiles ?? [])],
|
|
51
|
+
registeredProviders: [],
|
|
52
|
+
status: "disabled",
|
|
53
|
+
stateAvailable: false,
|
|
54
|
+
requests: 0,
|
|
55
|
+
fullReplayRequests: 0,
|
|
56
|
+
continuationRequests: 0,
|
|
57
|
+
continuationSuccesses: 0,
|
|
58
|
+
invalidations: 0,
|
|
59
|
+
retryAttempts: 0,
|
|
60
|
+
retrySuccesses: 0,
|
|
61
|
+
retryFailures: 0,
|
|
62
|
+
warnings: [],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export class NativeContinuationManager {
|
|
66
|
+
config;
|
|
67
|
+
now;
|
|
68
|
+
state;
|
|
69
|
+
sequence = 0;
|
|
70
|
+
pendingSequence;
|
|
71
|
+
registeredProviders = new Set();
|
|
72
|
+
registrationWarnings = new Set();
|
|
73
|
+
diagnosticsValue;
|
|
74
|
+
constructor(config, now = Date.now) {
|
|
75
|
+
this.config = config;
|
|
76
|
+
this.now = now;
|
|
77
|
+
this.diagnosticsValue = disabledNativeContinuationDiagnostics(config);
|
|
78
|
+
this.diagnosticsValue.status = config.enabled ? "idle" : "disabled";
|
|
79
|
+
}
|
|
80
|
+
providerIds() {
|
|
81
|
+
if (!this.config.enabled || !this.config.allowProviderStorage)
|
|
82
|
+
return [];
|
|
83
|
+
return nativeContinuationProviderIds(this.config.profiles);
|
|
84
|
+
}
|
|
85
|
+
registerProvider(provider) {
|
|
86
|
+
this.registeredProviders.add(provider);
|
|
87
|
+
this.registrationWarnings.delete(provider);
|
|
88
|
+
this.refreshRegistrationDiagnostics();
|
|
89
|
+
}
|
|
90
|
+
providerRegistrationFailed(provider) {
|
|
91
|
+
this.registrationWarnings.add(provider);
|
|
92
|
+
this.refreshRegistrationDiagnostics();
|
|
93
|
+
}
|
|
94
|
+
refreshRegistrationDiagnostics() {
|
|
95
|
+
this.diagnosticsValue = {
|
|
96
|
+
...this.diagnosticsValue,
|
|
97
|
+
registeredProviders: [...this.registeredProviders].sort(),
|
|
98
|
+
warnings: [...this.registrationWarnings]
|
|
99
|
+
.sort()
|
|
100
|
+
.map((provider) => `Native continuation provider wrapper unavailable for ${provider}`),
|
|
101
|
+
status: this.registrationWarnings.size > 0
|
|
102
|
+
? "error"
|
|
103
|
+
: !this.config.enabled
|
|
104
|
+
? "disabled"
|
|
105
|
+
: this.state
|
|
106
|
+
? "ready"
|
|
107
|
+
: "idle",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
initialManifest(provider, model, managed, api = "openai-responses") {
|
|
111
|
+
const profileEligible = nativeContinuationProfileMatches(this.config.profiles, provider, model);
|
|
112
|
+
const registered = this.registeredProviders.has(provider);
|
|
113
|
+
const apiEligible = api === "openai-responses";
|
|
114
|
+
const enabled = this.config.enabled && this.config.allowProviderStorage;
|
|
115
|
+
const eligible = enabled && managed && profileEligible && registered && apiEligible;
|
|
116
|
+
return {
|
|
117
|
+
enabled,
|
|
118
|
+
eligible,
|
|
119
|
+
strategy: NATIVE_CONTINUATION_STRATEGY,
|
|
120
|
+
providerStorage: enabled ? "opt-in" : "disabled",
|
|
121
|
+
mode: eligible ? "pending" : enabled ? "managed-replay" : "disabled",
|
|
122
|
+
attempted: false,
|
|
123
|
+
stateReused: false,
|
|
124
|
+
fullInputItems: 0,
|
|
125
|
+
sentInputItems: 0,
|
|
126
|
+
omittedInputItems: 0,
|
|
127
|
+
retry: "none",
|
|
128
|
+
...(!eligible ? {
|
|
129
|
+
fallbackReason: !enabled
|
|
130
|
+
? "disabled"
|
|
131
|
+
: !managed
|
|
132
|
+
? "managed-context-required"
|
|
133
|
+
: !profileEligible
|
|
134
|
+
? "profile-not-enabled"
|
|
135
|
+
: !apiEligible
|
|
136
|
+
? "openai-responses-api-required"
|
|
137
|
+
: "provider-wrapper-unavailable",
|
|
138
|
+
} : {}),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
prepare(request) {
|
|
142
|
+
if (request.requestSessionId !== request.canonicalSessionId) {
|
|
143
|
+
return { payload: request.payload, tracked: false };
|
|
144
|
+
}
|
|
145
|
+
const initial = this.initialManifest(request.provider, request.model, request.managed, request.api);
|
|
146
|
+
if (!initial.eligible) {
|
|
147
|
+
this.recordDecision(initial, request.provider, request.model);
|
|
148
|
+
return { payload: request.payload, tracked: true, decision: initial };
|
|
149
|
+
}
|
|
150
|
+
this.diagnosticsValue.requests++;
|
|
151
|
+
if (!isRecord(request.payload)
|
|
152
|
+
|| !Array.isArray(request.payload.input)
|
|
153
|
+
|| request.payload.model !== request.model
|
|
154
|
+
|| request.payload.stream !== true) {
|
|
155
|
+
const decision = {
|
|
156
|
+
...initial,
|
|
157
|
+
mode: "managed-replay",
|
|
158
|
+
fallbackReason: "unsupported-provider-payload",
|
|
159
|
+
};
|
|
160
|
+
this.recordDecision(decision, request.provider, request.model, "fallback");
|
|
161
|
+
return { payload: request.payload, tracked: true, decision };
|
|
162
|
+
}
|
|
163
|
+
const existingContinuation = request.payload.previous_response_id;
|
|
164
|
+
if (typeof existingContinuation === "string" && existingContinuation.length > 0) {
|
|
165
|
+
this.invalidateState("external-continuation-detected");
|
|
166
|
+
const decision = {
|
|
167
|
+
...initial,
|
|
168
|
+
mode: "external-continuation",
|
|
169
|
+
fallbackReason: "provider-payload-already-continued",
|
|
170
|
+
};
|
|
171
|
+
this.recordDecision(decision, request.provider, request.model, "fallback");
|
|
172
|
+
return { payload: request.payload, tracked: true, decision };
|
|
173
|
+
}
|
|
174
|
+
const { previous_response_id: _previousResponseId, ...payloadWithoutContinuation } = request.payload;
|
|
175
|
+
const fullPayload = {
|
|
176
|
+
...payloadWithoutContinuation,
|
|
177
|
+
input: request.payload.input,
|
|
178
|
+
store: true,
|
|
179
|
+
};
|
|
180
|
+
const itemHashes = continuationItemHashes(request.payload.input);
|
|
181
|
+
const bodyHash = requestBodyHash(fullPayload);
|
|
182
|
+
const key = stateKey(request.canonicalSessionId, request.provider, request.model);
|
|
183
|
+
let invalidationReason;
|
|
184
|
+
let stateAgeMs;
|
|
185
|
+
let deltaStart;
|
|
186
|
+
if (request.forceManagedReplay) {
|
|
187
|
+
invalidationReason = this.invalidateState(request.fallbackReason ?? "forced-managed-replay");
|
|
188
|
+
}
|
|
189
|
+
else if (this.state) {
|
|
190
|
+
if (this.state.key !== key) {
|
|
191
|
+
invalidationReason = this.invalidateState("continuation-identity-changed");
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
stateAgeMs = Math.max(0, this.now() - this.state.completedAt);
|
|
195
|
+
if (stateAgeMs > this.config.maxStateAgeMs) {
|
|
196
|
+
invalidationReason = this.invalidateState("continuation-state-expired");
|
|
197
|
+
}
|
|
198
|
+
else if (this.state.requestBodyHash !== bodyHash) {
|
|
199
|
+
invalidationReason = this.invalidateState("provider-request-options-changed");
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const baseline = [
|
|
203
|
+
...this.state.requestItemHashes,
|
|
204
|
+
...this.state.responseItemHashes,
|
|
205
|
+
];
|
|
206
|
+
if (!prefixMatches(itemHashes, baseline)) {
|
|
207
|
+
invalidationReason = this.invalidateState("managed-context-prefix-changed");
|
|
208
|
+
}
|
|
209
|
+
else if (itemHashes.length === baseline.length) {
|
|
210
|
+
invalidationReason = this.invalidateState("continuation-delta-empty");
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
deltaStart = baseline.length;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const usedContinuation = deltaStart !== undefined && this.state !== undefined;
|
|
219
|
+
const sentInput = usedContinuation
|
|
220
|
+
? request.payload.input.slice(deltaStart)
|
|
221
|
+
: request.payload.input;
|
|
222
|
+
const sentPayload = usedContinuation
|
|
223
|
+
? {
|
|
224
|
+
...fullPayload,
|
|
225
|
+
input: sentInput,
|
|
226
|
+
previous_response_id: this.state.responseId,
|
|
227
|
+
}
|
|
228
|
+
: fullPayload;
|
|
229
|
+
const retry = request.retryOfContinuation ? "pending" : "none";
|
|
230
|
+
const fallbackReason = usedContinuation
|
|
231
|
+
? undefined
|
|
232
|
+
: request.fallbackReason
|
|
233
|
+
?? invalidationReason
|
|
234
|
+
?? "continuation-cold-start";
|
|
235
|
+
const decision = {
|
|
236
|
+
...initial,
|
|
237
|
+
mode: usedContinuation ? "native-continuation" : "managed-replay",
|
|
238
|
+
attempted: usedContinuation || Boolean(request.retryOfContinuation),
|
|
239
|
+
stateReused: usedContinuation,
|
|
240
|
+
fullInputItems: request.payload.input.length,
|
|
241
|
+
sentInputItems: sentInput.length,
|
|
242
|
+
omittedInputItems: request.payload.input.length - sentInput.length,
|
|
243
|
+
retry,
|
|
244
|
+
...(stateAgeMs !== undefined ? { stateAgeMs } : {}),
|
|
245
|
+
...(fallbackReason ? { fallbackReason } : {}),
|
|
246
|
+
...(invalidationReason ? { invalidationReason } : {}),
|
|
247
|
+
};
|
|
248
|
+
const attempt = {
|
|
249
|
+
sequence: ++this.sequence,
|
|
250
|
+
key,
|
|
251
|
+
...(request.manifestId ? { manifestId: request.manifestId } : {}),
|
|
252
|
+
...(request.branchLeafId ? { branchLeafId: request.branchLeafId } : {}),
|
|
253
|
+
provider: request.provider,
|
|
254
|
+
model: request.model,
|
|
255
|
+
requestItemHashes: itemHashes,
|
|
256
|
+
requestBodyHash: bodyHash,
|
|
257
|
+
fullInputItems: request.payload.input.length,
|
|
258
|
+
sentInputItems: sentInput.length,
|
|
259
|
+
usedContinuation,
|
|
260
|
+
retryOfContinuation: Boolean(request.retryOfContinuation),
|
|
261
|
+
decision,
|
|
262
|
+
};
|
|
263
|
+
this.pendingSequence = attempt.sequence;
|
|
264
|
+
if (!usedContinuation)
|
|
265
|
+
this.state = undefined;
|
|
266
|
+
if (usedContinuation)
|
|
267
|
+
this.diagnosticsValue.continuationRequests++;
|
|
268
|
+
else
|
|
269
|
+
this.diagnosticsValue.fullReplayRequests++;
|
|
270
|
+
this.recordDecision(decision, request.provider, request.model, usedContinuation ? "continuing" : "fallback");
|
|
271
|
+
return { payload: sentPayload, tracked: true, attempt, decision };
|
|
272
|
+
}
|
|
273
|
+
beginManagedReplayRetry(attempt) {
|
|
274
|
+
if (!attempt.usedContinuation)
|
|
275
|
+
return;
|
|
276
|
+
this.diagnosticsValue.retryAttempts++;
|
|
277
|
+
this.invalidateState("provider-rejected-continuation");
|
|
278
|
+
}
|
|
279
|
+
complete(attempt, responseId, responseItemHashes) {
|
|
280
|
+
if (this.pendingSequence !== attempt.sequence)
|
|
281
|
+
return cloneManifest(attempt.decision);
|
|
282
|
+
this.pendingSequence = undefined;
|
|
283
|
+
const normalizedResponseId = responseId?.trim();
|
|
284
|
+
if (!normalizedResponseId || responseItemHashes.length === 0) {
|
|
285
|
+
const reason = !normalizedResponseId ? "provider-response-id-missing" : "provider-response-items-missing";
|
|
286
|
+
this.invalidateState(reason);
|
|
287
|
+
if (attempt.retryOfContinuation)
|
|
288
|
+
this.diagnosticsValue.retryFailures++;
|
|
289
|
+
const decision = {
|
|
290
|
+
...attempt.decision,
|
|
291
|
+
mode: "managed-replay",
|
|
292
|
+
stateReused: false,
|
|
293
|
+
retry: attempt.retryOfContinuation ? "failed" : attempt.decision.retry,
|
|
294
|
+
fallbackReason: reason,
|
|
295
|
+
invalidationReason: reason,
|
|
296
|
+
};
|
|
297
|
+
this.recordDecision(decision, attempt.provider, attempt.model, "fallback");
|
|
298
|
+
return decision;
|
|
299
|
+
}
|
|
300
|
+
this.state = {
|
|
301
|
+
key: attempt.key,
|
|
302
|
+
responseId: normalizedResponseId,
|
|
303
|
+
requestItemHashes: [...attempt.requestItemHashes],
|
|
304
|
+
responseItemHashes: [...responseItemHashes],
|
|
305
|
+
requestBodyHash: attempt.requestBodyHash,
|
|
306
|
+
completedAt: this.now(),
|
|
307
|
+
};
|
|
308
|
+
if (attempt.usedContinuation)
|
|
309
|
+
this.diagnosticsValue.continuationSuccesses++;
|
|
310
|
+
if (attempt.retryOfContinuation)
|
|
311
|
+
this.diagnosticsValue.retrySuccesses++;
|
|
312
|
+
const decision = {
|
|
313
|
+
...attempt.decision,
|
|
314
|
+
retry: attempt.retryOfContinuation ? "succeeded" : attempt.decision.retry,
|
|
315
|
+
};
|
|
316
|
+
this.recordDecision(decision, attempt.provider, attempt.model, "ready");
|
|
317
|
+
return decision;
|
|
318
|
+
}
|
|
319
|
+
fail(attempt, reason) {
|
|
320
|
+
if (this.pendingSequence === attempt.sequence)
|
|
321
|
+
this.pendingSequence = undefined;
|
|
322
|
+
this.invalidateState(reason);
|
|
323
|
+
if (attempt.retryOfContinuation)
|
|
324
|
+
this.diagnosticsValue.retryFailures++;
|
|
325
|
+
const decision = {
|
|
326
|
+
...attempt.decision,
|
|
327
|
+
mode: attempt.usedContinuation ? "native-continuation" : "managed-replay",
|
|
328
|
+
retry: attempt.retryOfContinuation ? "failed" : attempt.decision.retry,
|
|
329
|
+
fallbackReason: reason,
|
|
330
|
+
invalidationReason: reason,
|
|
331
|
+
};
|
|
332
|
+
this.recordDecision(decision, attempt.provider, attempt.model, "fallback");
|
|
333
|
+
return decision;
|
|
334
|
+
}
|
|
335
|
+
invalidate(reason) {
|
|
336
|
+
this.pendingSequence = undefined;
|
|
337
|
+
this.invalidateState(reason);
|
|
338
|
+
}
|
|
339
|
+
shouldRetryManagedReplay() {
|
|
340
|
+
return this.config.retryManagedReplay;
|
|
341
|
+
}
|
|
342
|
+
diagnostics() {
|
|
343
|
+
return {
|
|
344
|
+
...this.diagnosticsValue,
|
|
345
|
+
profiles: [...this.diagnosticsValue.profiles],
|
|
346
|
+
registeredProviders: [...this.diagnosticsValue.registeredProviders],
|
|
347
|
+
...(this.diagnosticsValue.last ? { last: cloneManifest(this.diagnosticsValue.last) } : {}),
|
|
348
|
+
warnings: [...this.diagnosticsValue.warnings],
|
|
349
|
+
stateAvailable: Boolean(this.state),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
invalidateState(reason) {
|
|
353
|
+
const hadState = Boolean(this.state);
|
|
354
|
+
this.state = undefined;
|
|
355
|
+
if (hadState)
|
|
356
|
+
this.diagnosticsValue.invalidations++;
|
|
357
|
+
this.diagnosticsValue.lastInvalidationReason = reason;
|
|
358
|
+
this.diagnosticsValue.stateAvailable = false;
|
|
359
|
+
return hadState ? reason : undefined;
|
|
360
|
+
}
|
|
361
|
+
recordDecision(decision, provider, model, status) {
|
|
362
|
+
this.diagnosticsValue = {
|
|
363
|
+
...this.diagnosticsValue,
|
|
364
|
+
enabled: this.config.enabled,
|
|
365
|
+
allowProviderStorage: this.config.allowProviderStorage,
|
|
366
|
+
status: status ?? this.diagnosticsValue.status,
|
|
367
|
+
stateAvailable: Boolean(this.state),
|
|
368
|
+
last: cloneManifest(decision),
|
|
369
|
+
lastProvider: provider,
|
|
370
|
+
lastModel: model,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=native-continuation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-continuation.js","sourceRoot":"","sources":["../../src/continuation/native-continuation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ContextConfig } from "../config/config.ts";
|
|
2
|
+
import type { ModelProfile } from "./model-profile.ts";
|
|
3
|
+
export interface ContextBudget {
|
|
4
|
+
contextWindow: number;
|
|
5
|
+
outputReserve: number;
|
|
6
|
+
safetyMargin: number;
|
|
7
|
+
/** Provider-token capacity before estimator calibration. */
|
|
8
|
+
modelInputHardLimit: number;
|
|
9
|
+
nominalHardInputLimit?: number;
|
|
10
|
+
nominalSoftInputLimit?: number;
|
|
11
|
+
nominalPreferredInputTarget?: number;
|
|
12
|
+
/** Limits below are expressed in local estimator units. */
|
|
13
|
+
hardInputLimit: number;
|
|
14
|
+
softInputLimit: number;
|
|
15
|
+
preferredInputTarget: number;
|
|
16
|
+
activeInputBudget: number;
|
|
17
|
+
calibrationRatio?: number;
|
|
18
|
+
calibrationSamples?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface BudgetCalibration {
|
|
21
|
+
appliedRatio: number;
|
|
22
|
+
acceptedSamples: number;
|
|
23
|
+
calibrated: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function calculateContextBudget(profile: ModelProfile, config: ContextConfig, calibration?: BudgetCalibration): ContextBudget;
|
|
26
|
+
//# sourceMappingURL=budget-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget-manager.d.ts","sourceRoot":"","sources":["../../src/core/budget-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAOD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,aAAa,CA2Cf"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
function estimatorLimit(providerTokens, ratio) {
|
|
2
|
+
if (providerTokens <= 0)
|
|
3
|
+
return 0;
|
|
4
|
+
return Math.max(0, Math.floor(providerTokens / ratio));
|
|
5
|
+
}
|
|
6
|
+
export function calculateContextBudget(profile, config, calibration) {
|
|
7
|
+
const outputCeiling = profile.maxOutputTokens ?? config.preferredOutputReserve;
|
|
8
|
+
const preferredReserve = Math.min(config.preferredOutputReserve, outputCeiling);
|
|
9
|
+
const minimumReserve = Math.min(config.minimumOutputReserve, outputCeiling);
|
|
10
|
+
const outputReserve = Math.max(minimumReserve, preferredReserve);
|
|
11
|
+
const safetyMargin = Math.min(profile.safetyMarginTokens, Math.max(0, profile.contextWindow - outputReserve));
|
|
12
|
+
const modelInputHardLimit = Math.max(0, profile.contextWindow - outputReserve - safetyMargin);
|
|
13
|
+
const policyHardLimit = Math.floor(profile.contextWindow * config.hardLimitRatio);
|
|
14
|
+
const nominalHardInputLimit = Math.min(modelInputHardLimit, policyHardLimit);
|
|
15
|
+
const nominalSoftInputLimit = Math.min(nominalHardInputLimit, Math.floor(profile.contextWindow * config.softLimitRatio));
|
|
16
|
+
const nominalPreferredInputTarget = Math.floor(profile.contextWindow * config.targetFillRatio);
|
|
17
|
+
const calibrationRatio = calibration?.calibrated
|
|
18
|
+
&& Number.isFinite(calibration.appliedRatio)
|
|
19
|
+
&& calibration.appliedRatio > 0
|
|
20
|
+
? calibration.appliedRatio
|
|
21
|
+
: 1;
|
|
22
|
+
const hardInputLimit = estimatorLimit(nominalHardInputLimit, calibrationRatio);
|
|
23
|
+
const softInputLimit = Math.min(hardInputLimit, estimatorLimit(nominalSoftInputLimit, calibrationRatio));
|
|
24
|
+
const preferredInputTarget = estimatorLimit(nominalPreferredInputTarget, calibrationRatio);
|
|
25
|
+
const activeInputBudget = Math.min(hardInputLimit, preferredInputTarget);
|
|
26
|
+
return {
|
|
27
|
+
contextWindow: profile.contextWindow,
|
|
28
|
+
outputReserve,
|
|
29
|
+
safetyMargin,
|
|
30
|
+
modelInputHardLimit,
|
|
31
|
+
nominalHardInputLimit,
|
|
32
|
+
nominalSoftInputLimit,
|
|
33
|
+
nominalPreferredInputTarget,
|
|
34
|
+
hardInputLimit,
|
|
35
|
+
softInputLimit,
|
|
36
|
+
preferredInputTarget,
|
|
37
|
+
activeInputBudget,
|
|
38
|
+
calibrationRatio,
|
|
39
|
+
calibrationSamples: calibration?.acceptedSamples ?? 0,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=budget-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget-manager.js","sourceRoot":"","sources":["../../src/core/budget-manager.ts"],"names":[],"mappings":"AA2BA,SAAS,cAAc,CAAC,cAAsB,EAAE,KAAa;IAC3D,IAAI,cAAc,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAqB,EACrB,MAAqB,EACrB,WAA+B;IAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC;IAE9G,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAClF,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAC7E,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CACpC,qBAAqB,EACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAC1D,CAAC;IACF,MAAM,2BAA2B,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/F,MAAM,gBAAgB,GAAG,WAAW,EAAE,UAAU;WAC3C,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;WACzC,WAAW,CAAC,YAAY,GAAG,CAAC;QAC/B,CAAC,CAAC,WAAW,CAAC,YAAY;QAC1B,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,cAAc,GAAG,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,cAAc,EACd,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CACxD,CAAC;IACF,MAAM,oBAAoB,GAAG,cAAc,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;IAC3F,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;IAEzE,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa;QACb,YAAY;QACZ,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;QACrB,2BAA2B;QAC3B,cAAc;QACd,cAAc;QACd,oBAAoB;QACpB,iBAAiB;QACjB,gBAAgB;QAChB,kBAAkB,EAAE,WAAW,EAAE,eAAe,IAAI,CAAC;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export type CanonicalRole = "system" | "user" | "assistant" | "tool" | "custom";
|
|
2
|
+
export interface Provenance {
|
|
3
|
+
source: "pi-session";
|
|
4
|
+
sessionId: string;
|
|
5
|
+
entryId: string;
|
|
6
|
+
originalRole?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TextBlock {
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ThinkingBlock {
|
|
13
|
+
type: "thinking";
|
|
14
|
+
thinking: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ToolCallBlock {
|
|
17
|
+
type: "toolCall";
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
arguments: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface ToolResultBlock {
|
|
23
|
+
type: "toolResult";
|
|
24
|
+
toolCallId: string;
|
|
25
|
+
toolName: string;
|
|
26
|
+
content: string;
|
|
27
|
+
isError: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ImageBlock {
|
|
30
|
+
type: "image";
|
|
31
|
+
mimeType?: string;
|
|
32
|
+
data?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface FileReferenceBlock {
|
|
35
|
+
type: "fileReference";
|
|
36
|
+
path: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ArtifactReferenceBlock {
|
|
39
|
+
type: "artifactReference";
|
|
40
|
+
artifactId: string;
|
|
41
|
+
}
|
|
42
|
+
export interface SummaryReferenceBlock {
|
|
43
|
+
type: "summaryReference";
|
|
44
|
+
summaryId: string;
|
|
45
|
+
}
|
|
46
|
+
export interface OpaqueProviderBlock {
|
|
47
|
+
type: "opaqueProvider";
|
|
48
|
+
originalType?: string;
|
|
49
|
+
value: unknown;
|
|
50
|
+
}
|
|
51
|
+
export type CanonicalBlock = TextBlock | ThinkingBlock | ToolCallBlock | ToolResultBlock | ImageBlock | FileReferenceBlock | ArtifactReferenceBlock | SummaryReferenceBlock | OpaqueProviderBlock;
|
|
52
|
+
export interface CanonicalMessage {
|
|
53
|
+
id: string;
|
|
54
|
+
sourceEntryId: string;
|
|
55
|
+
role: CanonicalRole;
|
|
56
|
+
blocks: CanonicalBlock[];
|
|
57
|
+
createdAt?: number;
|
|
58
|
+
provider?: string;
|
|
59
|
+
model?: string;
|
|
60
|
+
provenance: Provenance;
|
|
61
|
+
tokenEstimate?: number;
|
|
62
|
+
flags: {
|
|
63
|
+
pinned?: boolean;
|
|
64
|
+
atomic?: boolean;
|
|
65
|
+
localOnly?: boolean;
|
|
66
|
+
synthetic?: boolean;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=canonical-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-message.d.ts","sourceRoot":"","sources":["../../src/core/canonical-message.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,aAAa,GACb,aAAa,GACb,eAAe,GACf,UAAU,GACV,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,GACrB,mBAAmB,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QACL,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-message.js","sourceRoot":"","sources":["../../src/core/canonical-message.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ContextConfig, ModelAwarenessConfig } from "../config/config.ts";
|
|
2
|
+
import { type ModelDescriptor, type ModelProfile } from "./model-profile.ts";
|
|
3
|
+
export interface TokenCalibrationSample {
|
|
4
|
+
estimatedTokens: number;
|
|
5
|
+
actualInputTokens: number;
|
|
6
|
+
inputTokens: number;
|
|
7
|
+
cacheReadTokens: number;
|
|
8
|
+
cacheWriteTokens: number;
|
|
9
|
+
createdAt: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ProviderCacheMetrics {
|
|
12
|
+
sampleCount: number;
|
|
13
|
+
inputTokens: number;
|
|
14
|
+
cacheReadTokens: number;
|
|
15
|
+
cacheWriteTokens: number;
|
|
16
|
+
totalInputTokens: number;
|
|
17
|
+
cacheReadShare: number;
|
|
18
|
+
cacheWriteShare: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ModelCalibrationAnalysis {
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
estimator: "chars-v1";
|
|
23
|
+
windowSize: number;
|
|
24
|
+
observedSamples: number;
|
|
25
|
+
boundedSamples: number;
|
|
26
|
+
acceptedSamples: number;
|
|
27
|
+
rejectedSamples: number;
|
|
28
|
+
outlierSamples: number;
|
|
29
|
+
minimumSamples: number;
|
|
30
|
+
lowerRatioBound: number;
|
|
31
|
+
upperRatioBound: number;
|
|
32
|
+
medianRatio?: number;
|
|
33
|
+
appliedRatio: number;
|
|
34
|
+
calibrated: boolean;
|
|
35
|
+
cache: ProviderCacheMetrics;
|
|
36
|
+
}
|
|
37
|
+
export interface AdaptiveModelLimits {
|
|
38
|
+
nominalRecentTailTokens: number;
|
|
39
|
+
nominalRetrievedHistoryTokens: number;
|
|
40
|
+
nominalProjectTokens: number;
|
|
41
|
+
recentTailTokens: number;
|
|
42
|
+
maxRetrievedHistoryTokens: number;
|
|
43
|
+
maxProjectTokens: number;
|
|
44
|
+
}
|
|
45
|
+
export interface ResolvedModelAwareness {
|
|
46
|
+
profileKey: string;
|
|
47
|
+
profile: ModelProfile;
|
|
48
|
+
overrideKeys: string[];
|
|
49
|
+
calibration: ModelCalibrationAnalysis;
|
|
50
|
+
limits: AdaptiveModelLimits;
|
|
51
|
+
contextConfig: ContextConfig;
|
|
52
|
+
}
|
|
53
|
+
export declare function analyzeModelCalibration(samples: readonly TokenCalibrationSample[], config: ModelAwarenessConfig): ModelCalibrationAnalysis;
|
|
54
|
+
export declare function modelProfileKey(provider: string, modelId: string): string;
|
|
55
|
+
export declare function automaticRecentTailCeiling(contextWindow: number): number;
|
|
56
|
+
export declare function automaticHistoryRetrievalCeiling(contextWindow: number): number;
|
|
57
|
+
export declare function automaticProjectRetrievalCeiling(contextWindow: number): number;
|
|
58
|
+
export declare function resolveModelAwareness(model: ModelDescriptor, context: ContextConfig, config: ModelAwarenessConfig, samples?: readonly TokenCalibrationSample[]): ResolvedModelAwareness;
|
|
59
|
+
//# sourceMappingURL=model-awareness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-awareness.d.ts","sourceRoot":"","sources":["../../src/core/model-awareness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,EAAE,MAAM,CAAC;IAChC,6BAA6B,EAAE,MAAM,CAAC;IACtC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,wBAAwB,CAAC;IACtC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAiDD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,MAAM,EAAE,oBAAoB,GAC3B,wBAAwB,CAmD1B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAgBD,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQxE;AAED,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAED,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAOD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,SAAS,sBAAsB,EAAO,GAC9C,sBAAsB,CAqDxB"}
|