agent-nuvira 3.3.9 → 3.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +6 -0
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +27 -17
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/config.d.ts +28 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +155 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/eval.d.ts +8 -0
- package/dist/cli/eval.d.ts.map +1 -1
- package/dist/cli/eval.js +64 -0
- package/dist/cli/eval.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +13 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +22 -18
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/config/capability-mode.d.ts +122 -0
- package/dist/config/capability-mode.d.ts.map +1 -0
- package/dist/config/capability-mode.js +132 -0
- package/dist/config/capability-mode.js.map +1 -0
- package/dist/config/limits.d.ts +47 -0
- package/dist/config/limits.d.ts.map +1 -0
- package/dist/config/limits.js +64 -0
- package/dist/config/limits.js.map +1 -0
- package/dist/config/process-env.d.ts.map +1 -1
- package/dist/config/process-env.js +44 -0
- package/dist/config/process-env.js.map +1 -1
- package/dist/config/types.d.ts +77 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/work-digest.d.ts +46 -0
- package/dist/config/work-digest.d.ts.map +1 -0
- package/dist/config/work-digest.js +80 -0
- package/dist/config/work-digest.js.map +1 -0
- package/dist/gateway/inbound-media.d.ts +18 -0
- package/dist/gateway/inbound-media.d.ts.map +1 -1
- package/dist/gateway/inbound-media.js +96 -2
- package/dist/gateway/inbound-media.js.map +1 -1
- package/dist/inference/anthropic-adapter.d.ts +6 -0
- package/dist/inference/anthropic-adapter.d.ts.map +1 -1
- package/dist/inference/anthropic-adapter.js +79 -8
- package/dist/inference/anthropic-adapter.js.map +1 -1
- package/dist/inference/gemini-adapter.d.ts +6 -0
- package/dist/inference/gemini-adapter.d.ts.map +1 -1
- package/dist/inference/gemini-adapter.js +73 -8
- package/dist/inference/gemini-adapter.js.map +1 -1
- package/dist/inference/groq-adapter.d.ts +3 -0
- package/dist/inference/groq-adapter.d.ts.map +1 -1
- package/dist/inference/groq-adapter.js +83 -40
- package/dist/inference/groq-adapter.js.map +1 -1
- package/dist/inference/interface.d.ts +7 -0
- package/dist/inference/interface.d.ts.map +1 -1
- package/dist/inference/model-probe.d.ts +17 -0
- package/dist/inference/model-probe.d.ts.map +1 -1
- package/dist/inference/model-probe.js +58 -1
- package/dist/inference/model-probe.js.map +1 -1
- package/dist/inference/model-validator.d.ts +16 -1
- package/dist/inference/model-validator.d.ts.map +1 -1
- package/dist/inference/model-validator.js +83 -2
- package/dist/inference/model-validator.js.map +1 -1
- package/dist/inference/nim-adapter.js +4 -4
- package/dist/inference/nim-adapter.js.map +1 -1
- package/dist/inference/openai-compat-adapter.d.ts +9 -0
- package/dist/inference/openai-compat-adapter.d.ts.map +1 -1
- package/dist/inference/openai-compat-adapter.js +101 -51
- package/dist/inference/openai-compat-adapter.js.map +1 -1
- package/dist/inference/openrouter-adapter.d.ts +3 -0
- package/dist/inference/openrouter-adapter.d.ts.map +1 -1
- package/dist/inference/openrouter-adapter.js +134 -57
- package/dist/inference/openrouter-adapter.js.map +1 -1
- package/dist/inference/reasoning-effort.d.ts +130 -0
- package/dist/inference/reasoning-effort.d.ts.map +1 -0
- package/dist/inference/reasoning-effort.js +237 -0
- package/dist/inference/reasoning-effort.js.map +1 -0
- package/dist/inference/route-resolver.d.ts +7 -0
- package/dist/inference/route-resolver.d.ts.map +1 -1
- package/dist/inference/route-resolver.js +2 -1
- package/dist/inference/route-resolver.js.map +1 -1
- package/dist/inference/sse.d.ts +6 -0
- package/dist/inference/sse.d.ts.map +1 -1
- package/dist/inference/sse.js +1 -0
- package/dist/inference/sse.js.map +1 -1
- package/dist/inference/tools.d.ts +13 -0
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +20 -2
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/autonomy-policy.d.ts +8 -0
- package/dist/learning/autonomy-policy.d.ts.map +1 -1
- package/dist/learning/autonomy-policy.js +34 -0
- package/dist/learning/autonomy-policy.js.map +1 -1
- package/dist/learning/capability-parity.d.ts +108 -0
- package/dist/learning/capability-parity.d.ts.map +1 -0
- package/dist/learning/capability-parity.js +154 -0
- package/dist/learning/capability-parity.js.map +1 -0
- package/dist/learning/cost-tracker.d.ts +28 -4
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +58 -8
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/eval-framework.d.ts +17 -0
- package/dist/learning/eval-framework.d.ts.map +1 -1
- package/dist/learning/eval-framework.js +63 -2
- package/dist/learning/eval-framework.js.map +1 -1
- package/dist/learning/model-capability.d.ts +94 -0
- package/dist/learning/model-capability.d.ts.map +1 -0
- package/dist/learning/model-capability.js +172 -0
- package/dist/learning/model-capability.js.map +1 -0
- package/dist/learning/model-registry.d.ts +33 -0
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +79 -0
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +1 -1
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resolve-options.d.ts.map +1 -1
- package/dist/learning/resolve-options.js +16 -3
- package/dist/learning/resolve-options.js.map +1 -1
- package/dist/learning/run-trace.d.ts +68 -0
- package/dist/learning/run-trace.d.ts.map +1 -1
- package/dist/learning/run-trace.js +101 -0
- package/dist/learning/run-trace.js.map +1 -1
- package/dist/tools/loop-skill-hint.d.ts +27 -0
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +189 -5
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/read-extract.d.ts +9 -3
- package/dist/tools/read-extract.d.ts.map +1 -1
- package/dist/tools/read-extract.js +70 -25
- package/dist/tools/read-extract.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +120 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +447 -5
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/web-dashboard/attachment-extract.d.ts +8 -1
- package/dist/web-dashboard/attachment-extract.d.ts.map +1 -1
- package/dist/web-dashboard/attachment-extract.js +14 -3
- package/dist/web-dashboard/attachment-extract.js.map +1 -1
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +160 -21
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +26 -0
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.js +44 -4
- package/dist/web-dashboard/workspace-guard.js.map +1 -1
- package/package.json +1 -1
- package/src/web-dashboard/public/assets/index-BdKf5Xw2.js +207 -0
- package/src/web-dashboard/public/assets/index-BdKf5Xw2.js.map +1 -0
- package/src/web-dashboard/public/assets/index-C9eBskc9.css +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-Beportyl.js +0 -207
- package/src/web-dashboard/public/assets/index-Beportyl.js.map +0 -1
- package/src/web-dashboard/public/assets/index-gtQyg9nm.css +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability parity (`src/learning/capability-parity.ts`) — the MEASUREMENT half
|
|
3
|
+
* of the "narrow the gap" work.
|
|
4
|
+
*
|
|
5
|
+
* The whole point of the capability switch is a claim: `max` should reason and
|
|
6
|
+
* self-correct more like a frontier agent than `balanced`. A claim without a
|
|
7
|
+
* measurement is a vibe. This module runs the SAME hard, multi-step eval tasks
|
|
8
|
+
* twice — once under `balanced`, once under `max` — and reports the deltas that
|
|
9
|
+
* actually matter for the gap:
|
|
10
|
+
*
|
|
11
|
+
* - completion + hidden-test pass rate → does it DELIVER?
|
|
12
|
+
* - bounded rate → does it run out of room?
|
|
13
|
+
* - interruptions (permission asks) → does it stop to nag?
|
|
14
|
+
* - tokens + cost → what the extra capability costs.
|
|
15
|
+
*
|
|
16
|
+
* It deliberately reuses the existing eval tasks (`eval-framework.ts`) rather
|
|
17
|
+
* than inventing fragile fixtures: the parity question is "does the same task
|
|
18
|
+
* score better at higher capability", so the tasks must be the established ones.
|
|
19
|
+
*
|
|
20
|
+
* Running it needs a real provider (real tokens, real cost), so it is NOT a CI
|
|
21
|
+
* unit test — the pure summary/compare layer is unit-tested, and the run itself
|
|
22
|
+
* is invoked on demand. The mode is applied through `NUVIRA_CAPABILITY_MODE`,
|
|
23
|
+
* the same switch the CLI and dashboard write, so the measurement exercises the
|
|
24
|
+
* REAL resolution path rather than a test-only knob.
|
|
25
|
+
*/
|
|
26
|
+
import type { InferenceProvider } from '../inference/interface.js';
|
|
27
|
+
import type { EvalRun } from './eval-framework.js';
|
|
28
|
+
/** The capability modes compared, in run order. */
|
|
29
|
+
export type ParityMode = 'balanced' | 'max';
|
|
30
|
+
/**
|
|
31
|
+
* The task ids the parity run uses by default: the established tasks that are
|
|
32
|
+
* genuinely multi-step and long-horizon, which is exactly where capability is
|
|
33
|
+
* expected to separate the two modes. `loop-autonomy-multistep` is the purest
|
|
34
|
+
* one (it exists to measure unattended multi-step autonomy); the continuation
|
|
35
|
+
* and multi-file tasks add the long-context dimension; the display-state trace
|
|
36
|
+
* task adds the "observe behaviour, don't just parse" dimension.
|
|
37
|
+
*
|
|
38
|
+
* The non-coding (loop-only) tasks are appended when their env gate is on, so
|
|
39
|
+
* the parity run covers the loop's expanded reach too.
|
|
40
|
+
*/
|
|
41
|
+
export declare const PARITY_TASK_IDS: readonly string[];
|
|
42
|
+
/** One mode's aggregate over the parity tasks. */
|
|
43
|
+
export interface CapabilityRunSummary {
|
|
44
|
+
mode: ParityMode;
|
|
45
|
+
tasks: number;
|
|
46
|
+
/** Mean composite score (0–1). */
|
|
47
|
+
avgComposite: number;
|
|
48
|
+
/** Fraction of tasks whose hidden tests passed. */
|
|
49
|
+
testPassRate: number;
|
|
50
|
+
/** Fraction of tasks reported complete. */
|
|
51
|
+
completedRate: number;
|
|
52
|
+
/** Fraction of tasks that hit their step bound (lower is better). */
|
|
53
|
+
boundedRate: number;
|
|
54
|
+
/** Mean user-visible interruptions per task (lower is better). */
|
|
55
|
+
avgPermissionAsks: number;
|
|
56
|
+
totalTokens: number;
|
|
57
|
+
totalCostUsd: number;
|
|
58
|
+
/**
|
|
59
|
+
* Tasks whose SERVED model differed from the requested pin. Non-zero means the
|
|
60
|
+
* comparison did not run the model the user asked for — both arms may then have
|
|
61
|
+
* run the same substituted model, and a zero delta measures nothing. Surfaced
|
|
62
|
+
* because this was the exact trap: three live parity runs substituted to the
|
|
63
|
+
* same weak model and reported a delta of 0 by construction.
|
|
64
|
+
*/
|
|
65
|
+
substitutedTasks: number;
|
|
66
|
+
/** Tasks that ran no tool at all (loop arm; not a completion). */
|
|
67
|
+
actionlessTasks: number;
|
|
68
|
+
}
|
|
69
|
+
/** The full report: each mode plus the max-minus-balanced deltas. */
|
|
70
|
+
export interface CapabilityParityReport {
|
|
71
|
+
balanced: CapabilityRunSummary;
|
|
72
|
+
max: CapabilityRunSummary;
|
|
73
|
+
/** max − balanced for each numeric metric (positive = max is higher). */
|
|
74
|
+
delta: Omit<CapabilityRunSummary, 'mode'>;
|
|
75
|
+
}
|
|
76
|
+
/** Aggregate one eval run into the comparable summary (pure). */
|
|
77
|
+
export declare function summarizeCapabilityRun(mode: ParityMode, run: EvalRun): CapabilityRunSummary;
|
|
78
|
+
/** Compare the two modes (pure). Positive deltas mean `max` is higher. */
|
|
79
|
+
export declare function compareCapabilityRuns(balanced: EvalRun, max: EvalRun): CapabilityParityReport;
|
|
80
|
+
export interface CapabilityParityOptions {
|
|
81
|
+
/** Provider + model to run (required unless `runSuite` is injected). */
|
|
82
|
+
provider?: InferenceProvider;
|
|
83
|
+
providerName?: string;
|
|
84
|
+
model?: string;
|
|
85
|
+
/** Override the default parity task set. */
|
|
86
|
+
taskIds?: readonly string[];
|
|
87
|
+
/** Engine arm to measure — the loop is where the capability gap lives. */
|
|
88
|
+
engine?: 'loop' | 'pipeline';
|
|
89
|
+
/**
|
|
90
|
+
* Injection seam for tests / custom runners: given the mode, run the suite
|
|
91
|
+
* and return its `EvalRun`. The mode is passed for the runner's own logging,
|
|
92
|
+
* but this function has ALREADY set `NUVIRA_CAPABILITY_MODE` for the duration
|
|
93
|
+
* of the call and restores it afterwards — the runner must not set it itself.
|
|
94
|
+
*/
|
|
95
|
+
runSuite?: (mode: ParityMode) => Promise<EvalRun>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Run the parity tasks under both modes and return the comparison.
|
|
99
|
+
*
|
|
100
|
+
* The mode is applied with `NUVIRA_CAPABILITY_MODE` (saved + restored, even on
|
|
101
|
+
* failure) so the run exercises the real resolution path — the same switch the
|
|
102
|
+
* CLI and dashboard use. Order is balanced → max, so a crash in the second run
|
|
103
|
+
* still leaves the first measured.
|
|
104
|
+
*/
|
|
105
|
+
export declare function runCapabilityParity(options: CapabilityParityOptions): Promise<CapabilityParityReport>;
|
|
106
|
+
/** Render the report as a short, readable table (for a CLI/log surface). */
|
|
107
|
+
export declare function formatCapabilityParity(report: CapabilityParityReport): string;
|
|
108
|
+
//# sourceMappingURL=capability-parity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-parity.d.ts","sourceRoot":"","sources":["../../src/learning/capability-parity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,qBAAqB,CAAC;AAE/D,mDAAmD;AACnD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAE5C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAM5C,CAAC;AAEF,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,yEAAyE;IACzE,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;CAC3C;AAOD,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAG,oBAAoB,CAuB3F;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAmB7F;AAED,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA0B3G;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAuB7E"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability parity (`src/learning/capability-parity.ts`) — the MEASUREMENT half
|
|
3
|
+
* of the "narrow the gap" work.
|
|
4
|
+
*
|
|
5
|
+
* The whole point of the capability switch is a claim: `max` should reason and
|
|
6
|
+
* self-correct more like a frontier agent than `balanced`. A claim without a
|
|
7
|
+
* measurement is a vibe. This module runs the SAME hard, multi-step eval tasks
|
|
8
|
+
* twice — once under `balanced`, once under `max` — and reports the deltas that
|
|
9
|
+
* actually matter for the gap:
|
|
10
|
+
*
|
|
11
|
+
* - completion + hidden-test pass rate → does it DELIVER?
|
|
12
|
+
* - bounded rate → does it run out of room?
|
|
13
|
+
* - interruptions (permission asks) → does it stop to nag?
|
|
14
|
+
* - tokens + cost → what the extra capability costs.
|
|
15
|
+
*
|
|
16
|
+
* It deliberately reuses the existing eval tasks (`eval-framework.ts`) rather
|
|
17
|
+
* than inventing fragile fixtures: the parity question is "does the same task
|
|
18
|
+
* score better at higher capability", so the tasks must be the established ones.
|
|
19
|
+
*
|
|
20
|
+
* Running it needs a real provider (real tokens, real cost), so it is NOT a CI
|
|
21
|
+
* unit test — the pure summary/compare layer is unit-tested, and the run itself
|
|
22
|
+
* is invoked on demand. The mode is applied through `NUVIRA_CAPABILITY_MODE`,
|
|
23
|
+
* the same switch the CLI and dashboard write, so the measurement exercises the
|
|
24
|
+
* REAL resolution path rather than a test-only knob.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* The task ids the parity run uses by default: the established tasks that are
|
|
28
|
+
* genuinely multi-step and long-horizon, which is exactly where capability is
|
|
29
|
+
* expected to separate the two modes. `loop-autonomy-multistep` is the purest
|
|
30
|
+
* one (it exists to measure unattended multi-step autonomy); the continuation
|
|
31
|
+
* and multi-file tasks add the long-context dimension; the display-state trace
|
|
32
|
+
* task adds the "observe behaviour, don't just parse" dimension.
|
|
33
|
+
*
|
|
34
|
+
* The non-coding (loop-only) tasks are appended when their env gate is on, so
|
|
35
|
+
* the parity run covers the loop's expanded reach too.
|
|
36
|
+
*/
|
|
37
|
+
export const PARITY_TASK_IDS = [
|
|
38
|
+
'loop-autonomy-multistep',
|
|
39
|
+
'js-display-state-trace-fix',
|
|
40
|
+
'js-continuation',
|
|
41
|
+
'py-multi-file',
|
|
42
|
+
'py-nvda-addon',
|
|
43
|
+
];
|
|
44
|
+
function mean(xs) {
|
|
45
|
+
if (xs.length === 0)
|
|
46
|
+
return 0;
|
|
47
|
+
return xs.reduce((a, b) => a + b, 0) / xs.length;
|
|
48
|
+
}
|
|
49
|
+
/** Aggregate one eval run into the comparable summary (pure). */
|
|
50
|
+
export function summarizeCapabilityRun(mode, run) {
|
|
51
|
+
const results = run.results ?? [];
|
|
52
|
+
const bounded = results.filter((r) => r.metrics.bounded === true).length;
|
|
53
|
+
const asks = results
|
|
54
|
+
.map((r) => r.metrics.permissionAsks)
|
|
55
|
+
.filter((n) => typeof n === 'number');
|
|
56
|
+
return {
|
|
57
|
+
mode,
|
|
58
|
+
tasks: results.length,
|
|
59
|
+
avgComposite: mean(results.map((r) => r.compositeScore)),
|
|
60
|
+
testPassRate: mean(results.map((r) => (r.metrics.testPassed ? 1 : 0))),
|
|
61
|
+
completedRate: mean(results.map((r) => (r.metrics.completed ? 1 : 0))),
|
|
62
|
+
boundedRate: results.length === 0 ? 0 : bounded / results.length,
|
|
63
|
+
// Interruptions are only observable on arms that can ask; a run with none
|
|
64
|
+
// recorded reports 0 rather than fabricating a number.
|
|
65
|
+
avgPermissionAsks: asks.length === 0 ? 0 : mean(asks),
|
|
66
|
+
totalTokens: results.reduce((a, r) => a + (r.metrics.totalTokens ?? 0), 0),
|
|
67
|
+
totalCostUsd: results.reduce((a, r) => a + (r.metrics.costUsd ?? 0), 0),
|
|
68
|
+
substitutedTasks: results.filter((r) => r.metrics.servedModel !== undefined && r.metrics.servedModel !== r.metrics.requestedModel).length,
|
|
69
|
+
actionlessTasks: results.filter((r) => r.metrics.actionless === true).length,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** Compare the two modes (pure). Positive deltas mean `max` is higher. */
|
|
73
|
+
export function compareCapabilityRuns(balanced, max) {
|
|
74
|
+
const b = summarizeCapabilityRun('balanced', balanced);
|
|
75
|
+
const m = summarizeCapabilityRun('max', max);
|
|
76
|
+
return {
|
|
77
|
+
balanced: b,
|
|
78
|
+
max: m,
|
|
79
|
+
delta: {
|
|
80
|
+
tasks: m.tasks - b.tasks,
|
|
81
|
+
avgComposite: m.avgComposite - b.avgComposite,
|
|
82
|
+
testPassRate: m.testPassRate - b.testPassRate,
|
|
83
|
+
completedRate: m.completedRate - b.completedRate,
|
|
84
|
+
boundedRate: m.boundedRate - b.boundedRate,
|
|
85
|
+
avgPermissionAsks: m.avgPermissionAsks - b.avgPermissionAsks,
|
|
86
|
+
totalTokens: m.totalTokens - b.totalTokens,
|
|
87
|
+
totalCostUsd: m.totalCostUsd - b.totalCostUsd,
|
|
88
|
+
substitutedTasks: m.substitutedTasks - b.substitutedTasks,
|
|
89
|
+
actionlessTasks: m.actionlessTasks - b.actionlessTasks,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Run the parity tasks under both modes and return the comparison.
|
|
95
|
+
*
|
|
96
|
+
* The mode is applied with `NUVIRA_CAPABILITY_MODE` (saved + restored, even on
|
|
97
|
+
* failure) so the run exercises the real resolution path — the same switch the
|
|
98
|
+
* CLI and dashboard use. Order is balanced → max, so a crash in the second run
|
|
99
|
+
* still leaves the first measured.
|
|
100
|
+
*/
|
|
101
|
+
export async function runCapabilityParity(options) {
|
|
102
|
+
const ids = options.taskIds && options.taskIds.length > 0 ? [...options.taskIds] : [...PARITY_TASK_IDS];
|
|
103
|
+
const engine = options.engine ?? 'loop';
|
|
104
|
+
const previous = process.env.NUVIRA_CAPABILITY_MODE;
|
|
105
|
+
const runOne = async (mode) => {
|
|
106
|
+
process.env.NUVIRA_CAPABILITY_MODE = mode;
|
|
107
|
+
try {
|
|
108
|
+
if (options.runSuite)
|
|
109
|
+
return await options.runSuite(mode);
|
|
110
|
+
if (!options.provider) {
|
|
111
|
+
throw new Error('runCapabilityParity needs a provider (or an injected runSuite) to run the eval.');
|
|
112
|
+
}
|
|
113
|
+
const { runEvalSuite } = await import('./eval-framework.js');
|
|
114
|
+
return await runEvalSuite(options.provider, options.providerName ?? 'auto', options.model ?? 'auto', {
|
|
115
|
+
taskIds: ids,
|
|
116
|
+
engine,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
if (previous === undefined)
|
|
121
|
+
delete process.env.NUVIRA_CAPABILITY_MODE;
|
|
122
|
+
else
|
|
123
|
+
process.env.NUVIRA_CAPABILITY_MODE = previous;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const balanced = await runOne('balanced');
|
|
127
|
+
const max = await runOne('max');
|
|
128
|
+
return compareCapabilityRuns(balanced, max);
|
|
129
|
+
}
|
|
130
|
+
/** Render the report as a short, readable table (for a CLI/log surface). */
|
|
131
|
+
export function formatCapabilityParity(report) {
|
|
132
|
+
const pct = (n) => `${(n * 100).toFixed(0)}%`;
|
|
133
|
+
const signedPct = (n) => `${n >= 0 ? '+' : ''}${(n * 100).toFixed(0)}%`;
|
|
134
|
+
const rows = [
|
|
135
|
+
['tasks', String(report.balanced.tasks), String(report.max.tasks), ''],
|
|
136
|
+
['composite (0-1)', report.balanced.avgComposite.toFixed(3), report.max.avgComposite.toFixed(3), report.delta.avgComposite.toFixed(3)],
|
|
137
|
+
['hidden tests pass', pct(report.balanced.testPassRate), pct(report.max.testPassRate), signedPct(report.delta.testPassRate)],
|
|
138
|
+
['completed', pct(report.balanced.completedRate), pct(report.max.completedRate), signedPct(report.delta.completedRate)],
|
|
139
|
+
['bounded (lower better)', pct(report.balanced.boundedRate), pct(report.max.boundedRate), signedPct(report.delta.boundedRate)],
|
|
140
|
+
['asks/task (lower better)', report.balanced.avgPermissionAsks.toFixed(2), report.max.avgPermissionAsks.toFixed(2), report.delta.avgPermissionAsks.toFixed(2)],
|
|
141
|
+
['substituted (lower better)', String(report.balanced.substitutedTasks), String(report.max.substitutedTasks), String(report.delta.substitutedTasks)],
|
|
142
|
+
['no-action (lower better)', String(report.balanced.actionlessTasks), String(report.max.actionlessTasks), String(report.delta.actionlessTasks)],
|
|
143
|
+
['tokens', String(report.balanced.totalTokens), String(report.max.totalTokens), String(report.delta.totalTokens)],
|
|
144
|
+
['cost (USD)', report.balanced.totalCostUsd.toFixed(4), report.max.totalCostUsd.toFixed(4), report.delta.totalCostUsd.toFixed(4)],
|
|
145
|
+
];
|
|
146
|
+
const width = Math.max(...rows.map((r) => r[0].length), 10);
|
|
147
|
+
const line = (label, a, b, d) => `${label.padEnd(width)} ${a.padStart(10)} ${b.padStart(10)} ${d.padStart(10)}`;
|
|
148
|
+
return [
|
|
149
|
+
'Capability parity — balanced vs max (same tasks, same engine)',
|
|
150
|
+
line('metric', 'balanced', 'max', 'delta'),
|
|
151
|
+
...rows.map((r) => line(...r)),
|
|
152
|
+
].join('\n');
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=capability-parity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-parity.js","sourceRoot":"","sources":["../../src/learning/capability-parity.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,13 @@ export interface CostEntry {
|
|
|
36
36
|
* estimates were used. The dashboard splits measured vs estimated spend.
|
|
37
37
|
*/
|
|
38
38
|
measured?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* True when `costUsd` was reported BY THE PROVIDER for this call rather than
|
|
41
|
+
* computed from the local price table. A provider-reported cost is the most
|
|
42
|
+
* accurate value available (it reflects credits, free tier, discounts), so it
|
|
43
|
+
* wins over any estimate — see calculateCost's `reportedCostUsd` parameter.
|
|
44
|
+
*/
|
|
45
|
+
costReported?: boolean;
|
|
39
46
|
}
|
|
40
47
|
export interface CostSummary {
|
|
41
48
|
/** Total cost in USD across all time */
|
|
@@ -60,10 +67,26 @@ export interface CostSummary {
|
|
|
60
67
|
* Rough heuristic: ~4 characters per token for code, ~5 for prose.
|
|
61
68
|
*/
|
|
62
69
|
export declare function estimateTokens(text: string): number;
|
|
70
|
+
/**
|
|
71
|
+
* True when the provider/model pair provably costs nothing per call — a
|
|
72
|
+
* provider-declared free id (`:free` suffix) or a keyless local runtime.
|
|
73
|
+
*
|
|
74
|
+
* Delegates to the ONE authority for this question (classifyModelEntitlement),
|
|
75
|
+
* so the dashboard badge and the cost ledger can never disagree about what is
|
|
76
|
+
* free. A zero price in the catalog is deliberately NOT free — see the module
|
|
77
|
+
* header on model-entitlement.ts (Gemini paid models 403 without billing).
|
|
78
|
+
*/
|
|
79
|
+
export declare function isFreeModel(provider: string, model: string): boolean;
|
|
63
80
|
/**
|
|
64
81
|
* Calculate the cost for a given provider, model, and token counts.
|
|
82
|
+
*
|
|
83
|
+
* @param reportedCostUsd When the PROVIDER told us the exact cost of this call
|
|
84
|
+
* (e.g. OpenRouter's `usage.cost`), that figure is authoritative and is
|
|
85
|
+
* returned verbatim (rounded to the ledger's micro-cent precision). This is
|
|
86
|
+
* what lets a free/subscription call report a TRUE $0 instead of a generic
|
|
87
|
+
* rate, and a discounted call report what was actually charged.
|
|
65
88
|
*/
|
|
66
|
-
export declare function calculateCost(provider: string, model: string, inputTokens: number, outputTokens: number): number;
|
|
89
|
+
export declare function calculateCost(provider: string, model: string, inputTokens: number, outputTokens: number, reportedCostUsd?: number): number;
|
|
67
90
|
/**
|
|
68
91
|
* Tracks API usage costs per provider.
|
|
69
92
|
*/
|
|
@@ -80,7 +103,7 @@ export declare class CostTracker {
|
|
|
80
103
|
* @param outputTokens Output tokens generated (or estimated)
|
|
81
104
|
* @param task Optional task description
|
|
82
105
|
*/
|
|
83
|
-
recordCall(provider: string, model: string, inputTokens: number, outputTokens: number, task?: string, measured?: boolean): CostEntry;
|
|
106
|
+
recordCall(provider: string, model: string, inputTokens: number, outputTokens: number, task?: string, measured?: boolean, reportedCostUsd?: number): CostEntry;
|
|
84
107
|
/**
|
|
85
108
|
* Record a call with EXACT tokens reported by the provider/gateway usage
|
|
86
109
|
* (M2.2 wire-token metering). Cost is computed from real token counts × the
|
|
@@ -88,7 +111,7 @@ export declare class CostTracker {
|
|
|
88
111
|
* tokens also flow to the Model Availability Registry so Auto routing's cost
|
|
89
112
|
* scoring can prefer measured cost over TYPICAL-token estimates.
|
|
90
113
|
*/
|
|
91
|
-
recordCallMeasured(provider: string, model: string, inputTokens: number, outputTokens: number, task?: string): CostEntry;
|
|
114
|
+
recordCallMeasured(provider: string, model: string, inputTokens: number, outputTokens: number, task?: string, reportedCostUsd?: number): CostEntry;
|
|
92
115
|
/**
|
|
93
116
|
* Record a call with estimated tokens from prompt/response lengths.
|
|
94
117
|
* Useful when the API doesn't return exact token counts.
|
|
@@ -135,5 +158,6 @@ export declare function costSince(since: number): {
|
|
|
135
158
|
export declare function recordCallWithUsage(costTracker: CostTracker, provider: string, model: string, prompt: string, content: string, usage?: {
|
|
136
159
|
promptTokens?: number;
|
|
137
160
|
completionTokens?: number;
|
|
138
|
-
|
|
161
|
+
costUsd?: number;
|
|
162
|
+
}, reportedCostUsd?: number): void;
|
|
139
163
|
//# sourceMappingURL=cost-tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/learning/cost-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/learning/cost-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ import { formatCount } from '../utils/format.js';
|
|
|
19
19
|
import { join } from 'node:path';
|
|
20
20
|
import { getQuotaLedger } from './quota-ledger.js';
|
|
21
21
|
import { getModelRegistry } from './model-registry.js';
|
|
22
|
+
import { classifyModelEntitlement } from '../inference/model-entitlement.js';
|
|
22
23
|
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
23
24
|
const CURRENT_VERSION = 1;
|
|
24
25
|
/**
|
|
@@ -79,10 +80,44 @@ function writeCosts(data) {
|
|
|
79
80
|
export function estimateTokens(text) {
|
|
80
81
|
return Math.ceil(text.length / 4.5);
|
|
81
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* True when the provider/model pair provably costs nothing per call — a
|
|
85
|
+
* provider-declared free id (`:free` suffix) or a keyless local runtime.
|
|
86
|
+
*
|
|
87
|
+
* Delegates to the ONE authority for this question (classifyModelEntitlement),
|
|
88
|
+
* so the dashboard badge and the cost ledger can never disagree about what is
|
|
89
|
+
* free. A zero price in the catalog is deliberately NOT free — see the module
|
|
90
|
+
* header on model-entitlement.ts (Gemini paid models 403 without billing).
|
|
91
|
+
*/
|
|
92
|
+
export function isFreeModel(provider, model) {
|
|
93
|
+
try {
|
|
94
|
+
return classifyModelEntitlement(provider, model).tier === 'free';
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
82
100
|
/**
|
|
83
101
|
* Calculate the cost for a given provider, model, and token counts.
|
|
102
|
+
*
|
|
103
|
+
* @param reportedCostUsd When the PROVIDER told us the exact cost of this call
|
|
104
|
+
* (e.g. OpenRouter's `usage.cost`), that figure is authoritative and is
|
|
105
|
+
* returned verbatim (rounded to the ledger's micro-cent precision). This is
|
|
106
|
+
* what lets a free/subscription call report a TRUE $0 instead of a generic
|
|
107
|
+
* rate, and a discounted call report what was actually charged.
|
|
84
108
|
*/
|
|
85
|
-
export function calculateCost(provider, model, inputTokens, outputTokens) {
|
|
109
|
+
export function calculateCost(provider, model, inputTokens, outputTokens, reportedCostUsd) {
|
|
110
|
+
// Provider-reported cost wins over everything — it is the provider's own
|
|
111
|
+
// accounting, not our estimate.
|
|
112
|
+
if (typeof reportedCostUsd === 'number' && Number.isFinite(reportedCostUsd)) {
|
|
113
|
+
return Math.round(reportedCostUsd * 100000) / 100000;
|
|
114
|
+
}
|
|
115
|
+
// A free model bills $0 regardless of token count — a provider-declared
|
|
116
|
+
// free id or a local runtime. Without this, a `:free` OpenRouter id was
|
|
117
|
+
// charged the generic OpenRouter rate, inventing spend the user never paid.
|
|
118
|
+
if (isFreeModel(provider, model)) {
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
86
121
|
const pricing = DEFAULT_PRICING[provider] || { inputPer1K: 0.00010, outputPer1K: 0.00010 };
|
|
87
122
|
// Model-specific pricing overrides for known expensive models
|
|
88
123
|
const expensiveModels = {
|
|
@@ -115,8 +150,9 @@ export class CostTracker {
|
|
|
115
150
|
* @param outputTokens Output tokens generated (or estimated)
|
|
116
151
|
* @param task Optional task description
|
|
117
152
|
*/
|
|
118
|
-
recordCall(provider, model, inputTokens, outputTokens, task, measured) {
|
|
119
|
-
const
|
|
153
|
+
recordCall(provider, model, inputTokens, outputTokens, task, measured, reportedCostUsd) {
|
|
154
|
+
const costReported = typeof reportedCostUsd === 'number' && Number.isFinite(reportedCostUsd);
|
|
155
|
+
const costUsd = calculateCost(provider, model, inputTokens, outputTokens, reportedCostUsd);
|
|
120
156
|
const entry = {
|
|
121
157
|
provider,
|
|
122
158
|
model,
|
|
@@ -130,6 +166,9 @@ export class CostTracker {
|
|
|
130
166
|
// writeCosts and any post-hoc mutation never reaches disk (which would
|
|
131
167
|
// silently zero the dashboard's measured-vs-estimated split).
|
|
132
168
|
measured,
|
|
169
|
+
// Set (only when true) so the dashboard can show provider-billed spend
|
|
170
|
+
// apart from locally-priced estimates.
|
|
171
|
+
...(costReported ? { costReported: true } : {}),
|
|
133
172
|
};
|
|
134
173
|
// Store in session
|
|
135
174
|
this.sessionEntries.push(entry);
|
|
@@ -170,10 +209,10 @@ export class CostTracker {
|
|
|
170
209
|
* tokens also flow to the Model Availability Registry so Auto routing's cost
|
|
171
210
|
* scoring can prefer measured cost over TYPICAL-token estimates.
|
|
172
211
|
*/
|
|
173
|
-
recordCallMeasured(provider, model, inputTokens, outputTokens, task) {
|
|
212
|
+
recordCallMeasured(provider, model, inputTokens, outputTokens, task, reportedCostUsd) {
|
|
174
213
|
// measured: true is set inside recordCall BEFORE the entry is persisted,
|
|
175
214
|
// so the dashboard's measured-vs-estimated split reads correctly from disk.
|
|
176
|
-
const entry = this.recordCall(provider, model, inputTokens, outputTokens, task, true);
|
|
215
|
+
const entry = this.recordCall(provider, model, inputTokens, outputTokens, task, true, reportedCostUsd);
|
|
177
216
|
// Write the exact measured tokens through to the registry (best-effort) so
|
|
178
217
|
// getMeasuredUsage() feeds measured-cost routing scoring.
|
|
179
218
|
try {
|
|
@@ -309,12 +348,23 @@ export function costSince(since) {
|
|
|
309
348
|
* the OpenAI-compatible adapters so the measured-vs-estimated logic lives in
|
|
310
349
|
* one place. Best-effort — never throws.
|
|
311
350
|
*/
|
|
312
|
-
export function recordCallWithUsage(costTracker, provider, model, prompt, content, usage) {
|
|
351
|
+
export function recordCallWithUsage(costTracker, provider, model, prompt, content, usage, reportedCostUsd) {
|
|
352
|
+
// Prefer the explicit reported-cost argument, else the cost carried on the
|
|
353
|
+
// usage object (sse/tools attach it from the endpoint's `usage.cost`).
|
|
354
|
+
const cost = typeof reportedCostUsd === 'number'
|
|
355
|
+
? reportedCostUsd
|
|
356
|
+
: typeof usage?.costUsd === 'number'
|
|
357
|
+
? usage.costUsd
|
|
358
|
+
: undefined;
|
|
313
359
|
if (usage && typeof usage.promptTokens === 'number' && typeof usage.completionTokens === 'number') {
|
|
314
|
-
costTracker.recordCallMeasured(provider, model, usage.promptTokens, usage.completionTokens);
|
|
360
|
+
costTracker.recordCallMeasured(provider, model, usage.promptTokens, usage.completionTokens, undefined, cost);
|
|
315
361
|
}
|
|
316
362
|
else {
|
|
317
|
-
|
|
363
|
+
// No measured tokens: estimate token counts, but still honor a
|
|
364
|
+
// provider-reported cost when the endpoint gave us one.
|
|
365
|
+
const inputTokens = estimateTokens(prompt);
|
|
366
|
+
const outputTokens = estimateTokens(content);
|
|
367
|
+
costTracker.recordCall(provider, model, inputTokens, outputTokens, undefined, undefined, cost);
|
|
318
368
|
}
|
|
319
369
|
}
|
|
320
370
|
//# sourceMappingURL=cost-tracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../src/learning/cost-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../src/learning/cost-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AA4D7E,+EAA+E;AAE/E,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;;GAKG;AACH,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,eAAe,GAAgE;IACnF,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAI,wBAAwB;IAC/E,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAM,kBAAkB;IAC1E,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAe,uBAAuB;IAC/E,UAAU,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,iCAAiC;IAC5F,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAgB,uBAAuB;CAChF,CAAC;AAEF,6CAA6C;AAC7C,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B,+EAA+E;AAE/E,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;QACnD,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAa;IACzD,IAAI,CAAC;QACH,OAAO,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,KAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,eAAwB;IAExB,yEAAyE;IACzE,gCAAgC;IAChC,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IACvD,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,4EAA4E;IAC5E,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAE3F,8DAA8D;IAC9D,MAAM,eAAe,GAAgE;QACnF,qBAAqB,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;QACpE,oBAAoB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE;QACpE,kBAAkB,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;KAClE,CAAC;IAEF,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,YAAY,IAAI,OAAO,CAAC;IAElC,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;IACtD,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;IAEzD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,uBAAuB;AACxF,CAAC;AAED,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,YAAY,CAAS;IACrB,cAAc,GAAgB,EAAE,CAAC;IAEzC;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU,CACR,QAAgB,EAChB,KAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,IAAa,EACb,QAAkB,EAClB,eAAwB;QAExB,MAAM,YAAY,GAChB,OAAO,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAE3F,MAAM,KAAK,GAAc;YACvB,QAAQ;YACR,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,WAAW;YACX,YAAY;YACZ,WAAW,EAAE,WAAW,GAAG,YAAY;YACvC,OAAO;YACP,IAAI;YACJ,sEAAsE;YACtE,uEAAuE;YACvE,8DAA8D;YAC9D,QAAQ;YACR,uEAAuE;YACvE,uCAAuC;YACvC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC;QAEF,mBAAmB;QACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhC,kBAAkB;QAClB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,kCAAkC;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,sEAAsE;QACtE,IAAI,CAAC;YACH,cAAc,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;QAClE,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,2EAA2E;QAC3E,uDAAuD;QACvD,IAAI,CAAC;YACH,gBAAgB,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAChB,QAAgB,EAChB,KAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,IAAa,EACb,eAAwB;QAExB,yEAAyE;QACzE,4EAA4E;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QACvG,2EAA2E;QAC3E,0DAA0D;QAC1D,IAAI,CAAC;YACH,gBAAgB,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,mBAAmB,CACjB,QAAgB,EAChB,KAAa,EACb,UAAkB,EAClB,YAAoB,EACpB,IAAa;QAEb,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAEhC,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC;YAC3B,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC;YACjC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACrE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE/E,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,MAAM;YAClD,UAAU;YACV,OAAO;YACP,WAAW;YACX,aAAa,EAAE,UAAU,CAAC,MAAM;YAChC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;YAC3C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,MAAM;YACtD,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,MAAM,KAAK,GAAa;YACtB,iBAAiB;YACjB,EAAE;YACF,eAAe;YACf,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,EAAE;YAChE,gBAAgB,OAAO,CAAC,eAAe,EAAE;YACzC,qBAAqB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrD,EAAE;YACF,gBAAgB;YAChB,sBAAsB,OAAO,CAAC,aAAa,EAAE;YAC7C,oBAAoB,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACtD,mBAAmB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACjD,EAAE;SACH,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChG,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACxF,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YACxE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACvG,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,eAAe,GAAuB,IAAI,CAAC;AAE/C,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK;YAAE,SAAS;QACtC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC;QAC5B,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAwB,EACxB,QAAgB,EAChB,KAAa,EACb,MAAc,EACd,OAAe,EACf,KAA8E,EAC9E,eAAwB;IAExB,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,IAAI,GACR,OAAO,eAAe,KAAK,QAAQ;QACjC,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ;YAClC,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,SAAS,CAAC;IAClB,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAClG,WAAW,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/G,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,wDAAwD;QACxD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACjG,CAAC;AACH,CAAC"}
|
|
@@ -172,6 +172,23 @@ export interface EvalMetrics {
|
|
|
172
172
|
* an incomplete run has no meaningful ratio and leaves this undefined.
|
|
173
173
|
*/
|
|
174
174
|
asksPerCompletedTask?: number;
|
|
175
|
+
/**
|
|
176
|
+
* The model that ACTUALLY served the run, when the arm can report it (loop
|
|
177
|
+
* arm: `runLoopExecutor` echoes the served route). Recorded separately from
|
|
178
|
+
* `EvalResult.model` (which is the REQUESTED provider/model): a substitution is
|
|
179
|
+
* only visible when both are kept, and without it a parity report claims it ran
|
|
180
|
+
* the model the user pinned while it ran a repaired one.
|
|
181
|
+
*/
|
|
182
|
+
servedModel?: string;
|
|
183
|
+
/** The model the run was ASKED to use (the pin). */
|
|
184
|
+
requestedModel?: string;
|
|
185
|
+
/**
|
|
186
|
+
* Loop arm: the turn ran ZERO tools successfully — nothing was changed and
|
|
187
|
+
* nothing was observed. The honesty signal behind the completion fix: a
|
|
188
|
+
* `completed` turn that did nothing is not a completion, and this is the
|
|
189
|
+
* evidence a report can show for why. Undefined on arms that cannot observe it.
|
|
190
|
+
*/
|
|
191
|
+
actionless?: boolean;
|
|
175
192
|
}
|
|
176
193
|
/** Result of running one eval task */
|
|
177
194
|
export interface EvalResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval-framework.d.ts","sourceRoot":"","sources":["../../src/learning/eval-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AASH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"eval-framework.d.ts","sourceRoot":"","sources":["../../src/learning/eval-framework.ts"],"names":[],"mappings":"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"}
|