@pfoundation/ocadvisor 26.9.1 → 26.9.3
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 +444 -46
- package/dist/artificialAnalysis.d.ts +4 -0
- package/dist/artificialAnalysis.d.ts.map +1 -0
- package/dist/artificialAnalysis.js +77 -0
- package/dist/artificialAnalysis.js.map +1 -0
- package/dist/benchmarkConfig.d.ts +21 -0
- package/dist/benchmarkConfig.d.ts.map +1 -0
- package/dist/benchmarkConfig.js +59 -0
- package/dist/benchmarkConfig.js.map +1 -0
- package/dist/benchmarkEvidence.d.ts +37 -0
- package/dist/benchmarkEvidence.d.ts.map +1 -0
- package/dist/benchmarkEvidence.js +81 -0
- package/dist/benchmarkEvidence.js.map +1 -0
- package/dist/benchmarkMatch.d.ts +58 -0
- package/dist/benchmarkMatch.d.ts.map +1 -0
- package/dist/benchmarkMatch.js +259 -0
- package/dist/benchmarkMatch.js.map +1 -0
- package/dist/benchmarkStore.d.ts +45 -0
- package/dist/benchmarkStore.d.ts.map +1 -0
- package/dist/benchmarkStore.js +309 -0
- package/dist/benchmarkStore.js.map +1 -0
- package/dist/benchmarkTypes.d.ts +48 -0
- package/dist/benchmarkTypes.d.ts.map +1 -0
- package/dist/benchmarkTypes.js +298 -0
- package/dist/benchmarkTypes.js.map +1 -0
- package/dist/benchmarkUpdate.d.ts +33 -0
- package/dist/benchmarkUpdate.d.ts.map +1 -0
- package/dist/benchmarkUpdate.js +327 -0
- package/dist/benchmarkUpdate.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +397 -0
- package/dist/cli.js.map +1 -0
- package/dist/data/artificialAnalysis.mappings.json +229 -0
- package/dist/data/artificialAnalysis.snapshot.json +17684 -0
- package/dist/modelProfiles.d.ts +45 -0
- package/dist/modelProfiles.d.ts.map +1 -0
- package/dist/modelProfiles.js +141 -0
- package/dist/modelProfiles.js.map +1 -0
- package/dist/ocAdvisor.d.ts +105 -5
- package/dist/ocAdvisor.d.ts.map +1 -1
- package/dist/ocAdvisor.js +534 -45
- package/dist/ocAdvisor.js.map +1 -1
- package/dist/typesafeGate.d.ts +96 -0
- package/dist/typesafeGate.d.ts.map +1 -0
- package/dist/typesafeGate.js +475 -0
- package/dist/typesafeGate.js.map +1 -0
- package/dist/typesafeState.d.ts +94 -0
- package/dist/typesafeState.d.ts.map +1 -0
- package/dist/typesafeState.js +301 -0
- package/dist/typesafeState.js.map +1 -0
- package/package.json +8 -2
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
// Optional TypeSafe preflight for advisor invocations.
|
|
2
|
+
//
|
|
3
|
+
// One System One request decides whether this specific consultation is
|
|
4
|
+
// worth the expensive advisor generation, and — when effort selection is
|
|
5
|
+
// available — which effort fits. The gate never blocks on its own failures:
|
|
6
|
+
// timeouts, transport errors, malformed answers, and missing credentials all
|
|
7
|
+
// fall back to the ordinary advisor behavior.
|
|
8
|
+
import { TypeSafeClient, choice, noul } from "@typesafe-ai/sdk";
|
|
9
|
+
export const GATE_NEEDED_QUESTION = "needed";
|
|
10
|
+
export const GATE_EFFORT_QUESTION = "effort";
|
|
11
|
+
// Leaves headroom for state plus the longest question inside the documented
|
|
12
|
+
// 32k state+question and 64k overall context limits.
|
|
13
|
+
export const TYPESAFE_STATE_TOKEN_BUDGET = 16000;
|
|
14
|
+
const BYTES_PER_TOKEN = 4;
|
|
15
|
+
const MIN_STATE_BYTES = 1024;
|
|
16
|
+
const MAX_QUESTION_CHARS = 2000;
|
|
17
|
+
// Built-in effort criteria. Custom variant names fall back to a generic
|
|
18
|
+
// description; the effort decision never changes whether consultation
|
|
19
|
+
// happens, so a coarser description only affects level choice.
|
|
20
|
+
const EFFORT_CRITERIA = {
|
|
21
|
+
high: "Focused question, clear evidence, limited scope, and few interacting constraints",
|
|
22
|
+
xhigh: "Meaningful design tradeoffs, cross-component behavior, or several interacting correctness concerns",
|
|
23
|
+
max: "Difficult unresolved failures, conflicting evidence, or deeply interconnected high-consequence decisions",
|
|
24
|
+
};
|
|
25
|
+
const DEFAULT_EFFORT_CRITERION = "This level fits a consultation more demanding than the lower levels and less demanding than the higher ones";
|
|
26
|
+
// Calibrated with these exact instructions and criteria at skipBelow=0.20.
|
|
27
|
+
// See docs/reports/2026-09-20-gate-policy.md before changing the threshold:
|
|
28
|
+
// the same numeric cutoff is not interchangeable across question wordings.
|
|
29
|
+
export const NEEDED_INSTRUCTIONS = {
|
|
30
|
+
question: "Would this specific advisor consultation add material value beyond the requesting agent's next direct action with the evidence and tools already available?",
|
|
31
|
+
judge: [
|
|
32
|
+
"Assess the actual unresolved question, not just whether it is phrased as a request for an opinion.",
|
|
33
|
+
"Material value includes resolving substantive uncertainty, comparing meaningful approaches, finding a plausible correctness issue, or independent review of consequential work. Being stuck is not required.",
|
|
34
|
+
"A useful action that is already determined by direct reading, a deterministic tool, or an explicit mechanical instruction usually needs no consultation.",
|
|
35
|
+
"Explicit user requests for the advisor should proceed. Missing or truncated task context is uncertainty, not proof that consultation is unnecessary.",
|
|
36
|
+
"Prior consultations are not a quota. Revisit changed evidence or concerns; an identical settled question without new evidence adds little.",
|
|
37
|
+
"Model identities alone do not establish value. Relevant comparable benchmarks may inform substantive cases; an advisor advantage cannot turn a direct lookup into a substantive case. A strong requester still benefits from independent review. Missing, stale, or incomparable benchmarks neither prove nor disprove value.",
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
export const NEEDED_CRITERIA = {
|
|
41
|
+
true: "A substantive unresolved decision, diagnosis, or correctness concern could benefit from independent reasoning; or the user explicitly requests the advisor. Uncertain task evidence does not justify suppressing consultation.",
|
|
42
|
+
false: "Visible evidence establishes that a direct lookup, deterministic operation, mechanical edit, or unchanged previously answered question resolves this request without meaningful independent reasoning.",
|
|
43
|
+
};
|
|
44
|
+
export const EFFORT_INSTRUCTIONS = `Assuming this consultation proceeds, which effort level is appropriate for this specific decision or review?
|
|
45
|
+
Choose from the supplied levels based on reasoning difficulty, uncertainty, interacting components, and consequences, not transcript length.
|
|
46
|
+
This question is independent of whether consultation should happen.
|
|
47
|
+
\`models.advisor\` lists the allowed efforts with each effort's benchmark coverage; weigh coverage alongside difficulty, and treat missing coverage as uncertainty rather than disqualification.`;
|
|
48
|
+
export class TypeSafeGateError extends Error {
|
|
49
|
+
kind;
|
|
50
|
+
type;
|
|
51
|
+
constructor(kind, type) {
|
|
52
|
+
super(kind);
|
|
53
|
+
this.name = "TypeSafeGateError";
|
|
54
|
+
this.kind = kind;
|
|
55
|
+
this.type = type;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function createSdkClient(options = {}) {
|
|
59
|
+
const client = new TypeSafeClient({
|
|
60
|
+
...(options.apiKey !== undefined ? { apiKey: options.apiKey } : {}),
|
|
61
|
+
...(options.baseURL !== undefined ? { baseURL: options.baseURL } : {}),
|
|
62
|
+
...(options.defaultModel !== undefined
|
|
63
|
+
? { defaultModel: options.defaultModel }
|
|
64
|
+
: {}),
|
|
65
|
+
...(options.fetch !== undefined ? { fetch: options.fetch } : {}),
|
|
66
|
+
// The gate owns its deadline; SDK retries could exceed it.
|
|
67
|
+
retry: { maxRetries: 0 },
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
async systemOne(call) {
|
|
71
|
+
try {
|
|
72
|
+
const result = (await client.systemOne({
|
|
73
|
+
state: call.state,
|
|
74
|
+
questions: call.questions,
|
|
75
|
+
...(call.model ? { model: call.model } : {}),
|
|
76
|
+
}, { signal: call.signal, timeout: call.timeoutMs }));
|
|
77
|
+
return { kind: "response", result };
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return { kind: "error", type: classifyFailure(error) };
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// Fixed reason codes instead of raw SDK errors: exception messages can carry
|
|
86
|
+
// transport details and are not stable across SDK releases.
|
|
87
|
+
export function classifyFailure(error) {
|
|
88
|
+
const name = error && typeof error === "object" && "name" in error
|
|
89
|
+
? String(error.name)
|
|
90
|
+
: "";
|
|
91
|
+
switch (name) {
|
|
92
|
+
case "AuthenticationError":
|
|
93
|
+
return "auth";
|
|
94
|
+
case "RateLimitError":
|
|
95
|
+
return "rate_limit";
|
|
96
|
+
case "APITimeoutError":
|
|
97
|
+
return "timeout";
|
|
98
|
+
case "APIConnectionError":
|
|
99
|
+
return "connection";
|
|
100
|
+
case "BadRequestError":
|
|
101
|
+
case "UnprocessableEntityError":
|
|
102
|
+
return "invalid_request";
|
|
103
|
+
case "InternalServerError":
|
|
104
|
+
return "server_error";
|
|
105
|
+
case "APIUserAbortError":
|
|
106
|
+
return "aborted";
|
|
107
|
+
case "NotFoundError":
|
|
108
|
+
return "not_found";
|
|
109
|
+
case "PermissionDeniedError":
|
|
110
|
+
return "permission_denied";
|
|
111
|
+
default:
|
|
112
|
+
return "unknown";
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function proceedReason(input, availableEffortLevels, source) {
|
|
116
|
+
if (input.explicitEffort)
|
|
117
|
+
return "caller_effort";
|
|
118
|
+
// A valid need judgment with no candidate levels keeps the configured
|
|
119
|
+
// effort; that is still an allowed consultation.
|
|
120
|
+
if (source === "typesafe" || availableEffortLevels.length > 0) {
|
|
121
|
+
return "allowed";
|
|
122
|
+
}
|
|
123
|
+
return "effort_unknown";
|
|
124
|
+
}
|
|
125
|
+
function byteLength(value) {
|
|
126
|
+
return Buffer.byteLength(JSON.stringify(value), "utf8");
|
|
127
|
+
}
|
|
128
|
+
function questionText(question) {
|
|
129
|
+
if (!question)
|
|
130
|
+
return null;
|
|
131
|
+
return question.length > MAX_QUESTION_CHARS
|
|
132
|
+
? question.slice(-MAX_QUESTION_CHARS)
|
|
133
|
+
: question;
|
|
134
|
+
}
|
|
135
|
+
function projectMatch(match) {
|
|
136
|
+
return {
|
|
137
|
+
status: match.status,
|
|
138
|
+
source: match.source,
|
|
139
|
+
aa_model: match.aaModelID,
|
|
140
|
+
evaluated_effort: match.evaluatedEffort,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function projectEffortPolicy(policy) {
|
|
144
|
+
switch (policy.kind) {
|
|
145
|
+
case "pinned":
|
|
146
|
+
return { kind: "pinned", effort: policy.effort };
|
|
147
|
+
case "candidates":
|
|
148
|
+
return {
|
|
149
|
+
kind: "candidates",
|
|
150
|
+
candidates: [...policy.candidates],
|
|
151
|
+
fallback: policy.fallback,
|
|
152
|
+
};
|
|
153
|
+
case "fixed":
|
|
154
|
+
return { kind: "fixed", effort: policy.effort };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function buildStatePayload(state) {
|
|
158
|
+
return {
|
|
159
|
+
request: {
|
|
160
|
+
question: questionText(state.request.question),
|
|
161
|
+
mode: state.request.mode,
|
|
162
|
+
trigger: state.request.trigger,
|
|
163
|
+
explicitEffort: state.request.explicitEffort,
|
|
164
|
+
caller: state.request.caller,
|
|
165
|
+
},
|
|
166
|
+
models: state.models
|
|
167
|
+
? {
|
|
168
|
+
requester: {
|
|
169
|
+
provider: state.models.requester.providerID,
|
|
170
|
+
model: state.models.requester.modelID,
|
|
171
|
+
effort: state.models.requester.variant,
|
|
172
|
+
provenance: state.models.requester.provenance,
|
|
173
|
+
},
|
|
174
|
+
advisor: {
|
|
175
|
+
provider: state.models.advisor.providerID,
|
|
176
|
+
model: state.models.advisor.modelID,
|
|
177
|
+
effort_policy: projectEffortPolicy(state.models.advisor.policy),
|
|
178
|
+
},
|
|
179
|
+
}
|
|
180
|
+
: null,
|
|
181
|
+
benchmarks: state.benchmarks
|
|
182
|
+
? {
|
|
183
|
+
source: state.benchmarks.source,
|
|
184
|
+
fetched_at: state.benchmarks.fetchedAt,
|
|
185
|
+
age_days: state.benchmarks.ageDays,
|
|
186
|
+
content_hash: state.benchmarks.contentHash,
|
|
187
|
+
hash_verified: state.benchmarks.hashVerified,
|
|
188
|
+
requester_match: projectMatch(state.benchmarks.requesterMatch),
|
|
189
|
+
advisor_default_match: projectMatch(state.benchmarks.advisorDefaultMatch),
|
|
190
|
+
advisor_candidates: state.benchmarks.advisorCandidates.map((entry) => ({
|
|
191
|
+
effort: entry.effort,
|
|
192
|
+
...projectMatch(entry),
|
|
193
|
+
})),
|
|
194
|
+
comparisons: state.benchmarks.comparisons.map((entry) => ({
|
|
195
|
+
metric: entry.key,
|
|
196
|
+
label: entry.label,
|
|
197
|
+
unit: entry.unit,
|
|
198
|
+
requester: entry.requester,
|
|
199
|
+
advisor: entry.advisor,
|
|
200
|
+
advisor_minus_requester: entry.advisorMinusRequester,
|
|
201
|
+
comparable: entry.comparable,
|
|
202
|
+
reason: entry.reason,
|
|
203
|
+
})),
|
|
204
|
+
omitted: state.benchmarks.omitted,
|
|
205
|
+
}
|
|
206
|
+
: null,
|
|
207
|
+
latest_user_request: state.user.latestRequest,
|
|
208
|
+
recent_messages: state.context.messages,
|
|
209
|
+
prior_consultations: {
|
|
210
|
+
count: state.history.priorConsultations,
|
|
211
|
+
modes: state.history.priorModes,
|
|
212
|
+
repeated_question: state.history.repeatedQuestion,
|
|
213
|
+
},
|
|
214
|
+
coverage: {
|
|
215
|
+
messages_dropped: state.coverage.droppedMessages,
|
|
216
|
+
messages_included: state.coverage.includedMessages,
|
|
217
|
+
total_messages: state.coverage.totalMessages,
|
|
218
|
+
latest_user_included: state.context.latestUserIncluded,
|
|
219
|
+
benchmarks_omitted: state.coverage.benchmarksOmitted,
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
// Fits the payload into the byte budget by dropping the oldest messages
|
|
224
|
+
// first and reporting the coverage loss so the gate can treat omission as
|
|
225
|
+
// uncertainty. The latest user request is state.user and is never dropped.
|
|
226
|
+
function fitStatePayload(state, maxBytes) {
|
|
227
|
+
const payload = buildStatePayload(state);
|
|
228
|
+
if (byteLength(payload) <= maxBytes)
|
|
229
|
+
return { payload, truncated: false };
|
|
230
|
+
const messages = [...state.context.messages];
|
|
231
|
+
let dropped = 0;
|
|
232
|
+
while (messages.length > 0) {
|
|
233
|
+
messages.shift();
|
|
234
|
+
dropped++;
|
|
235
|
+
const candidate = {
|
|
236
|
+
...payload,
|
|
237
|
+
recent_messages: messages,
|
|
238
|
+
coverage: {
|
|
239
|
+
...payload.coverage,
|
|
240
|
+
messages_dropped_extra: dropped,
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
if (byteLength(candidate) <= maxBytes) {
|
|
244
|
+
return { payload: candidate, truncated: true };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const minimal = {
|
|
248
|
+
...payload,
|
|
249
|
+
recent_messages: [],
|
|
250
|
+
coverage: {
|
|
251
|
+
...payload.coverage,
|
|
252
|
+
messages_dropped_extra: dropped,
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
if (byteLength(minimal) > maxBytes)
|
|
256
|
+
return null;
|
|
257
|
+
return { payload: minimal, truncated: true };
|
|
258
|
+
}
|
|
259
|
+
function effortCriteria(efforts) {
|
|
260
|
+
const criteria = {};
|
|
261
|
+
for (const effort of efforts) {
|
|
262
|
+
criteria[effort] = EFFORT_CRITERIA[effort] ?? DEFAULT_EFFORT_CRITERION;
|
|
263
|
+
}
|
|
264
|
+
return criteria;
|
|
265
|
+
}
|
|
266
|
+
function isNeededAnswer(value) {
|
|
267
|
+
return (!!value &&
|
|
268
|
+
typeof value === "object" &&
|
|
269
|
+
typeof value.noul === "number" &&
|
|
270
|
+
Number.isFinite(value.noul));
|
|
271
|
+
}
|
|
272
|
+
function isEffortAnswer(value, efforts) {
|
|
273
|
+
if (!value || typeof value !== "object")
|
|
274
|
+
return false;
|
|
275
|
+
const answer = value;
|
|
276
|
+
return (typeof answer.choice === "string" &&
|
|
277
|
+
efforts.includes(answer.choice) &&
|
|
278
|
+
typeof answer.confidence === "number" &&
|
|
279
|
+
Number.isFinite(answer.confidence));
|
|
280
|
+
}
|
|
281
|
+
function metricsFrom(result, started, truncated, stateBytes) {
|
|
282
|
+
const usage = result.usage;
|
|
283
|
+
return {
|
|
284
|
+
model: typeof result.model === "string" ? result.model : null,
|
|
285
|
+
neededProbability: null,
|
|
286
|
+
suggestedEffort: null,
|
|
287
|
+
effortConfidence: null,
|
|
288
|
+
latencyMs: Date.now() - started,
|
|
289
|
+
stateBytes,
|
|
290
|
+
truncated,
|
|
291
|
+
inputTokens: typeof usage?.input_tokens === "number" ? usage.input_tokens : null,
|
|
292
|
+
outputTokens: typeof usage?.output_tokens === "number" ? usage.output_tokens : null,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
function selectDecision(input, settings, neededProbability, effortAnswer) {
|
|
296
|
+
if (neededProbability < settings.skipBelow) {
|
|
297
|
+
return {
|
|
298
|
+
skip: true,
|
|
299
|
+
effectiveEffort: null,
|
|
300
|
+
suggestedEffort: effortAnswer?.choice ?? null,
|
|
301
|
+
effortConfidence: effortAnswer?.confidence ?? null,
|
|
302
|
+
source: "config",
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
if (input.explicitEffort) {
|
|
306
|
+
return {
|
|
307
|
+
skip: false,
|
|
308
|
+
effectiveEffort: input.explicitEffort,
|
|
309
|
+
suggestedEffort: effortAnswer?.choice ?? null,
|
|
310
|
+
effortConfidence: effortAnswer?.confidence ?? null,
|
|
311
|
+
source: "caller",
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
if (effortAnswer && effortAnswer.confidence >= settings.minEffortConfidence) {
|
|
315
|
+
return {
|
|
316
|
+
skip: false,
|
|
317
|
+
effectiveEffort: effortAnswer.choice,
|
|
318
|
+
suggestedEffort: effortAnswer.choice,
|
|
319
|
+
effortConfidence: effortAnswer.confidence,
|
|
320
|
+
source: "typesafe",
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
skip: false,
|
|
325
|
+
effectiveEffort: input.defaultEffort,
|
|
326
|
+
suggestedEffort: effortAnswer?.choice ?? null,
|
|
327
|
+
effortConfidence: effortAnswer?.confidence ?? null,
|
|
328
|
+
source: "config",
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
export async function runTypeSafeGate(options) {
|
|
332
|
+
const { state, input, settings, signal } = options;
|
|
333
|
+
if (!options.keyPresent)
|
|
334
|
+
return { status: "disabled" };
|
|
335
|
+
const started = Date.now();
|
|
336
|
+
const availableEffortLevels = input.explicitEffort === null ? input.supportedEfforts : [];
|
|
337
|
+
const maxStateBytes = Math.max(MIN_STATE_BYTES, Math.min(settings.maxStateBytes, TYPESAFE_STATE_TOKEN_BUDGET * BYTES_PER_TOKEN));
|
|
338
|
+
const fitted = fitStatePayload(state, maxStateBytes);
|
|
339
|
+
if (!fitted) {
|
|
340
|
+
return {
|
|
341
|
+
status: "fallback",
|
|
342
|
+
reason: "state_unavailable",
|
|
343
|
+
metrics: {
|
|
344
|
+
model: null,
|
|
345
|
+
neededProbability: null,
|
|
346
|
+
suggestedEffort: null,
|
|
347
|
+
effortConfidence: null,
|
|
348
|
+
latencyMs: Date.now() - started,
|
|
349
|
+
stateBytes: 0,
|
|
350
|
+
truncated: true,
|
|
351
|
+
inputTokens: null,
|
|
352
|
+
outputTokens: null,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
const questions = {
|
|
357
|
+
[GATE_NEEDED_QUESTION]: noul(NEEDED_INSTRUCTIONS, NEEDED_CRITERIA),
|
|
358
|
+
};
|
|
359
|
+
if (availableEffortLevels.length > 0) {
|
|
360
|
+
questions[GATE_EFFORT_QUESTION] = choice(EFFORT_INSTRUCTIONS, effortCriteria(availableEffortLevels));
|
|
361
|
+
}
|
|
362
|
+
const controller = new AbortController();
|
|
363
|
+
let callerAborted = false;
|
|
364
|
+
const onCallerAbort = () => {
|
|
365
|
+
callerAborted = true;
|
|
366
|
+
controller.abort();
|
|
367
|
+
};
|
|
368
|
+
if (signal?.aborted) {
|
|
369
|
+
callerAborted = true;
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
signal?.addEventListener("abort", onCallerAbort, { once: true });
|
|
373
|
+
}
|
|
374
|
+
const timer = setTimeout(() => controller.abort(), settings.timeoutMs);
|
|
375
|
+
const stateBytes = byteLength(fitted.payload);
|
|
376
|
+
const emptyMetrics = () => ({
|
|
377
|
+
model: null,
|
|
378
|
+
neededProbability: null,
|
|
379
|
+
suggestedEffort: null,
|
|
380
|
+
effortConfidence: null,
|
|
381
|
+
latencyMs: Date.now() - started,
|
|
382
|
+
stateBytes,
|
|
383
|
+
truncated: fitted.truncated,
|
|
384
|
+
inputTokens: null,
|
|
385
|
+
outputTokens: null,
|
|
386
|
+
});
|
|
387
|
+
try {
|
|
388
|
+
if (callerAborted) {
|
|
389
|
+
return { status: "fallback", reason: "aborted", metrics: emptyMetrics() };
|
|
390
|
+
}
|
|
391
|
+
let client;
|
|
392
|
+
try {
|
|
393
|
+
client =
|
|
394
|
+
options.client ??
|
|
395
|
+
(options.createClient
|
|
396
|
+
? options.createClient()
|
|
397
|
+
: createSdkClient({
|
|
398
|
+
...(options.env?.TYPESAFE_API_KEY
|
|
399
|
+
? { apiKey: options.env.TYPESAFE_API_KEY }
|
|
400
|
+
: {}),
|
|
401
|
+
...(options.env?.TYPESAFE_BASE_URL
|
|
402
|
+
? { baseURL: options.env.TYPESAFE_BASE_URL }
|
|
403
|
+
: {}),
|
|
404
|
+
...(options.fetchImpl ? { fetch: options.fetchImpl } : {}),
|
|
405
|
+
}));
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
return { status: "fallback", reason: "error", metrics: emptyMetrics() };
|
|
409
|
+
}
|
|
410
|
+
const outcome = await client.systemOne({
|
|
411
|
+
state: fitted.payload,
|
|
412
|
+
questions,
|
|
413
|
+
...(settings.model ? { model: settings.model } : {}),
|
|
414
|
+
signal: controller.signal,
|
|
415
|
+
timeoutMs: settings.timeoutMs,
|
|
416
|
+
});
|
|
417
|
+
if (callerAborted) {
|
|
418
|
+
return { status: "fallback", reason: "aborted", metrics: emptyMetrics() };
|
|
419
|
+
}
|
|
420
|
+
if (outcome.kind !== "response") {
|
|
421
|
+
return {
|
|
422
|
+
status: "fallback",
|
|
423
|
+
reason: outcome.kind === "timeout" ? "timeout" : "error",
|
|
424
|
+
...(outcome.kind === "error" ? { errorType: outcome.type } : {}),
|
|
425
|
+
metrics: emptyMetrics(),
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
const result = outcome.result;
|
|
429
|
+
const answers = result.answers;
|
|
430
|
+
const needed = answers?.[GATE_NEEDED_QUESTION];
|
|
431
|
+
if (!isNeededAnswer(needed)) {
|
|
432
|
+
return {
|
|
433
|
+
status: "fallback",
|
|
434
|
+
reason: "malformed_answer",
|
|
435
|
+
metrics: {
|
|
436
|
+
...metricsFrom(result, started, fitted.truncated, stateBytes),
|
|
437
|
+
},
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
const neededProbability = Math.min(1, Math.max(0, needed.noul));
|
|
441
|
+
const rawEffort = answers?.[GATE_EFFORT_QUESTION];
|
|
442
|
+
const effortAnswer = isEffortAnswer(rawEffort, availableEffortLevels)
|
|
443
|
+
? rawEffort
|
|
444
|
+
: null;
|
|
445
|
+
const decision = selectDecision(input, settings, neededProbability, effortAnswer);
|
|
446
|
+
const metrics = {
|
|
447
|
+
...metricsFrom(result, started, fitted.truncated, stateBytes),
|
|
448
|
+
neededProbability,
|
|
449
|
+
suggestedEffort: decision.suggestedEffort,
|
|
450
|
+
effortConfidence: decision.effortConfidence,
|
|
451
|
+
};
|
|
452
|
+
if (decision.skip) {
|
|
453
|
+
return {
|
|
454
|
+
status: "skip",
|
|
455
|
+
reason: "consultation_not_useful",
|
|
456
|
+
metrics,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
return {
|
|
460
|
+
status: "proceed",
|
|
461
|
+
reason: proceedReason(input, availableEffortLevels, decision.source),
|
|
462
|
+
neededProbability,
|
|
463
|
+
suggestedEffort: decision.suggestedEffort,
|
|
464
|
+
effortConfidence: decision.effortConfidence,
|
|
465
|
+
effectiveEffort: decision.effectiveEffort,
|
|
466
|
+
effortSource: decision.source,
|
|
467
|
+
metrics,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
finally {
|
|
471
|
+
clearTimeout(timer);
|
|
472
|
+
signal?.removeEventListener("abort", onCallerAbort);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
//# sourceMappingURL=typesafeGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typesafeGate.js","sourceRoot":"","sources":["../src/typesafeGate.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,4EAA4E;AAC5E,6EAA6E;AAC7E,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAShE,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAE7C,4EAA4E;AAC5E,qDAAqD;AACrD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AACjD,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,wEAAwE;AACxE,sEAAsE;AACtE,+DAA+D;AAC/D,MAAM,eAAe,GAA2B;IAC9C,IAAI,EAAE,kFAAkF;IACxF,KAAK,EACH,oGAAoG;IACtG,GAAG,EAAE,0GAA0G;CAChH,CAAC;AACF,MAAM,wBAAwB,GAC5B,6GAA6G,CAAC;AAEhH,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EACN,6JAA6J;IAC/J,KAAK,EAAE;QACL,oGAAoG;QACpG,8MAA8M;QAC9M,0JAA0J;QAC1J,sJAAsJ;QACtJ,4IAA4I;QAC5I,+TAA+T;KAChU;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,gOAAgO;IACtO,KAAK,EACH,wMAAwM;CAC3M,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;iMAG8J,CAAC;AAElM,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,CAAgC;IACpC,IAAI,CAAS;IAEtB,YAAY,IAAmC,EAAE,IAAY;QAC3D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AA4BD,MAAM,UAAU,eAAe,CAAC,UAA+B,EAAE;IAC/D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,2DAA2D;QAC3D,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;KACzB,CAAC,CAAC;IACH,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,IAAI;YAClB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CACpC;oBACE,KAAK,EAAE,IAAI,CAAC,KAAc;oBAC1B,SAAS,EAAE,IAAI,CAAC,SAAkB;oBAClC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7C,EACD,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CACjD,CAAuC,CAAC;gBACzC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QACnD,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC;IACT,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,qBAAqB;YACxB,OAAO,MAAM,CAAC;QAChB,KAAK,gBAAgB;YACnB,OAAO,YAAY,CAAC;QACtB,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,oBAAoB;YACvB,OAAO,YAAY,CAAC;QACtB,KAAK,iBAAiB,CAAC;QACvB,KAAK,0BAA0B;YAC7B,OAAO,iBAAiB,CAAC;QAC3B,KAAK,qBAAqB;YACxB,OAAO,cAAc,CAAC;QACxB,KAAK,mBAAmB;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe;YAClB,OAAO,WAAW,CAAC;QACrB,KAAK,uBAAuB;YAC1B,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAkED,SAAS,aAAa,CACpB,KAAgB,EAChB,qBAA+B,EAC/B,MAAwC;IAExC,IAAI,KAAK,CAAC,cAAc;QAAE,OAAO,eAAe,CAAC;IACjD,sEAAsE;IACtE,iDAAiD;IACjD,IAAI,MAAM,KAAK,UAAU,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,YAAY,CAAC,QAAuB;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,QAAQ,CAAC,MAAM,GAAG,kBAAkB;QACzC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC;QACrC,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAmB;IACvC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,SAAS;QACzB,gBAAgB,EAAE,KAAK,CAAC,eAAe;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAA2B;IAE3B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QACnD,KAAK,YAAY;YACf,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;gBAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,OAAO;QACL,OAAO,EAAE;YACP,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC9C,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YAC9B,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;YAC5C,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;SAC7B;QACD,MAAM,EAAE,KAAK,CAAC,MAAM;YAClB,CAAC,CAAC;gBACE,SAAS,EAAE;oBACT,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU;oBAC3C,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO;oBACrC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO;oBACtC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU;iBAC9C;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU;oBACzC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;oBACnC,aAAa,EAAE,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;iBAChE;aACF;YACH,CAAC,CAAC,IAAI;QACR,UAAU,EAAE,KAAK,CAAC,UAAU;YAC1B,CAAC,CAAC;gBACE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;gBAC/B,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS;gBACtC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;gBAClC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW;gBAC1C,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,YAAY;gBAC5C,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;gBAC9D,qBAAqB,EAAE,YAAY,CACjC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CACrC;gBACD,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CACxD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACV,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,YAAY,CAAC,KAAK,CAAC;iBACvB,CAAC,CACH;gBACD,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACxD,MAAM,EAAE,KAAK,CAAC,GAAG;oBACjB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,uBAAuB,EAAE,KAAK,CAAC,qBAAqB;oBACpD,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC,CAAC;gBACH,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;aAClC;YACH,CAAC,CAAC,IAAI;QACR,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa;QAC7C,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;QACvC,mBAAmB,EAAE;YACnB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB;YACvC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;YAC/B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB;SAClD;QACD,QAAQ,EAAE;YACR,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,eAAe;YAChD,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB;YAClD,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa;YAC5C,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB;YACtD,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,iBAAiB;SACrD;KACF,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,SAAS,eAAe,CACtB,KAAoB,EACpB,QAAgB;IAEhB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAE1E,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;QACV,MAAM,SAAS,GAAG;YAChB,GAAG,OAAO;YACV,eAAe,EAAE,QAAQ;YACzB,QAAQ,EAAE;gBACR,GAAI,OAAO,CAAC,QAAoC;gBAChD,sBAAsB,EAAE,OAAO;aAChC;SACF,CAAC;QACF,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,QAAQ,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG;QACd,GAAG,OAAO;QACV,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE;YACR,GAAI,OAAO,CAAC,QAAoC;YAChD,sBAAsB,EAAE,OAAO;SAChC;KACF,CAAC;IACF,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,OAAiB;IACvC,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,QAAQ,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,wBAAwB,CAAC;IACzE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,CAAC,CAAC,KAAK;QACP,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ;QACtD,MAAM,CAAC,QAAQ,CAAE,KAA0B,CAAC,IAAI,CAAC,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,OAAiB;IAEjB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAmD,CAAC;IACnE,OAAO,CACL,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/B,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CACnC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,MAA+B,EAC/B,OAAe,EACf,SAAkB,EAClB,UAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,CAAC,KAC4C,CAAC;IAClE,OAAO;QACL,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC7D,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;QAC/B,UAAU;QACV,SAAS;QACT,WAAW,EACT,OAAO,KAAK,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QACrE,YAAY,EACV,OAAO,KAAK,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;KACxE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAAgB,EAChB,QAA0B,EAC1B,iBAAyB,EACzB,YAA2D;IAQ3D,IAAI,iBAAiB,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC3C,OAAO;YACL,IAAI,EAAE,IAAI;YACV,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,YAAY,EAAE,MAAM,IAAI,IAAI;YAC7C,gBAAgB,EAAE,YAAY,EAAE,UAAU,IAAI,IAAI;YAClD,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,KAAK;YACX,eAAe,EAAE,KAAK,CAAC,cAAc;YACrC,eAAe,EAAE,YAAY,EAAE,MAAM,IAAI,IAAI;YAC7C,gBAAgB,EAAE,YAAY,EAAE,UAAU,IAAI,IAAI;YAClD,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,IAAI,YAAY,CAAC,UAAU,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC5E,OAAO;YACL,IAAI,EAAE,KAAK;YACX,eAAe,EAAE,YAAY,CAAC,MAAM;YACpC,eAAe,EAAE,YAAY,CAAC,MAAM;YACpC,gBAAgB,EAAE,YAAY,CAAC,UAAU;YACzC,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,eAAe,EAAE,KAAK,CAAC,aAAa;QACpC,eAAe,EAAE,YAAY,EAAE,MAAM,IAAI,IAAI;QAC7C,gBAAgB,EAAE,YAAY,EAAE,UAAU,IAAI,IAAI;QAClD,MAAM,EAAE,QAAQ;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB;IAEvB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACnD,IAAI,CAAC,OAAO,CAAC,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAEvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,qBAAqB,GACzB,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,eAAe,EACf,IAAI,CAAC,GAAG,CACN,QAAQ,CAAC,aAAa,EACtB,2BAA2B,GAAG,eAAe,CAC9C,CACF,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,mBAAmB;YAC3B,OAAO,EAAE;gBACP,KAAK,EAAE,IAAI;gBACX,iBAAiB,EAAE,IAAI;gBACvB,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,IAAI;gBACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;gBAC/B,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,YAAY,EAAE,IAAI;aACnB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAA4B;QACzC,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC;KACnE,CAAC;IACF,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,SAAS,CAAC,oBAAoB,CAAC,GAAG,MAAM,CACtC,mBAAmB,EACnB,cAAc,CAAC,qBAAqB,CAAC,CACtC,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,aAAa,GAAG,IAAI,CAAC;QACrB,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC;IACF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,YAAY,GAAG,GAAgB,EAAE,CAAC,CAAC;QACvC,KAAK,EAAE,IAAI;QACX,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;QAC/B,UAAU;QACV,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;QAC5E,CAAC;QACD,IAAI,MAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM;gBACJ,OAAO,CAAC,MAAM;oBACd,CAAC,OAAO,CAAC,YAAY;wBACnB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE;wBACxB,CAAC,CAAC,eAAe,CAAC;4BACd,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB;gCAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;gCAC1C,CAAC,CAAC,EAAE,CAAC;4BACP,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB;gCAChC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;gCAC5C,CAAC,CAAC,EAAE,CAAC;4BACP,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC3D,CAAC,CAAC,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;QAC1E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;YACrC,KAAK,EAAE,MAAM,CAAC,OAAO;YACrB,SAAS;YACT,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;QAC5E,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gBACxD,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,OAAO,EAAE,YAAY,EAAE;aACxB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAA8C,CAAC;QACtE,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,kBAAkB;gBAC1B,OAAO,EAAE;oBACP,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;iBAC9D;aACF,CAAC;QACJ,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,EAAE,qBAAqB,CAAC;YACnE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,QAAQ,GAAG,cAAc,CAC7B,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,YAAY,CACb,CAAC;QACF,MAAM,OAAO,GAAgB;YAC3B,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;YAC7D,iBAAiB;YACjB,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;SAC5C,CAAC;QAEF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,yBAAyB;gBACjC,OAAO;aACR,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC;YACpE,iBAAiB;YACjB,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,YAAY,EAAE,QAAQ,CAAC,MAAM;YAC7B,OAAO;SACR,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Database } from "bun:sqlite";
|
|
2
|
+
import type { EvidenceBenchmarks, EvidenceModels } from "./benchmarkEvidence.js";
|
|
3
|
+
export interface TypeSafeSettings {
|
|
4
|
+
model?: string;
|
|
5
|
+
timeoutMs: number;
|
|
6
|
+
skipBelow: number;
|
|
7
|
+
minEffortConfidence: number;
|
|
8
|
+
maxStateBytes: number;
|
|
9
|
+
efforts: string[];
|
|
10
|
+
}
|
|
11
|
+
export type TypeSafeOptions = boolean | {
|
|
12
|
+
model?: string;
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
skipBelow?: number;
|
|
15
|
+
minEffortConfidence?: number;
|
|
16
|
+
maxStateBytes?: number;
|
|
17
|
+
efforts?: string[];
|
|
18
|
+
} | null;
|
|
19
|
+
export interface TypeSafeConfig {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
settings: TypeSafeSettings | null;
|
|
22
|
+
keyPresent: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare const TYPESAFE_DEFAULTS: TypeSafeSettings;
|
|
25
|
+
export type NormalizedTypeSafeOptions = {
|
|
26
|
+
disabled: true;
|
|
27
|
+
} | {
|
|
28
|
+
disabled: false;
|
|
29
|
+
overrides: Partial<TypeSafeSettings>;
|
|
30
|
+
};
|
|
31
|
+
export type TypeSafeValidationError = {
|
|
32
|
+
error: string;
|
|
33
|
+
};
|
|
34
|
+
export declare function normalizeTypeSafeOptions(value: unknown): NormalizedTypeSafeOptions | TypeSafeValidationError;
|
|
35
|
+
export declare function resolveTypeSafeSettings(source: NormalizedTypeSafeOptions): TypeSafeSettings;
|
|
36
|
+
export declare function resolveTypeSafeConfig(source: NormalizedTypeSafeOptions | undefined, env?: Record<string, string | undefined>): TypeSafeConfig;
|
|
37
|
+
export declare const TYPE_SAFE_ENV_KEY = "TYPESAFE_API_KEY";
|
|
38
|
+
export interface DecisionState {
|
|
39
|
+
request: {
|
|
40
|
+
question: string | null;
|
|
41
|
+
mode: string;
|
|
42
|
+
trigger: string;
|
|
43
|
+
explicitEffort: string | null;
|
|
44
|
+
caller: string | null;
|
|
45
|
+
directory: string | null;
|
|
46
|
+
};
|
|
47
|
+
user: {
|
|
48
|
+
latestRequest: string | null;
|
|
49
|
+
};
|
|
50
|
+
context: {
|
|
51
|
+
messages: string[];
|
|
52
|
+
latestUserIncluded: boolean;
|
|
53
|
+
};
|
|
54
|
+
history: {
|
|
55
|
+
priorConsultations: number;
|
|
56
|
+
priorModes: string[];
|
|
57
|
+
repeatedQuestion: boolean;
|
|
58
|
+
};
|
|
59
|
+
availability: {
|
|
60
|
+
supportedEfforts: string[];
|
|
61
|
+
defaultEffort: string | null;
|
|
62
|
+
};
|
|
63
|
+
models: EvidenceModels | null;
|
|
64
|
+
benchmarks: EvidenceBenchmarks | null;
|
|
65
|
+
coverage: {
|
|
66
|
+
truncated: boolean;
|
|
67
|
+
droppedMessages: number;
|
|
68
|
+
includedMessages: number;
|
|
69
|
+
totalMessages: number;
|
|
70
|
+
stateBytes: number;
|
|
71
|
+
maxStateBytes: number;
|
|
72
|
+
benchmarksOmitted: boolean;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface BuildDecisionStateOptions {
|
|
76
|
+
question?: string | null;
|
|
77
|
+
mode: string;
|
|
78
|
+
trigger: string;
|
|
79
|
+
explicitEffort?: string | null;
|
|
80
|
+
caller?: string | null;
|
|
81
|
+
directory?: string | null;
|
|
82
|
+
priorConsultations: number;
|
|
83
|
+
priorModes: string[];
|
|
84
|
+
priorQuestions?: string[];
|
|
85
|
+
supportedEfforts: string[];
|
|
86
|
+
defaultEffort?: string | null;
|
|
87
|
+
maxStateBytes?: number;
|
|
88
|
+
models?: EvidenceModels | null;
|
|
89
|
+
benchmarks?: EvidenceBenchmarks | null;
|
|
90
|
+
formatMessage?: (type: string, data: Record<string, any>) => string | null;
|
|
91
|
+
}
|
|
92
|
+
export declare function makeDecisionState(options: BuildDecisionStateOptions): DecisionState;
|
|
93
|
+
export declare function buildDecisionState(db: InstanceType<typeof Database>, sessionId: string, options: BuildDecisionStateOptions): DecisionState;
|
|
94
|
+
//# sourceMappingURL=typesafeState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typesafeState.d.ts","sourceRoot":"","sources":["../src/typesafeState.ts"],"names":[],"mappings":"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"}
|