modelrig 0.8.1 → 0.10.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/CHANGELOG.md +324 -0
- package/README.md +55 -29
- package/data/PROVENANCE.md +14 -0
- package/data/pricing-map.json +26 -0
- package/dist/adapters/attempt-meta-map.d.ts +8 -1
- package/dist/adapters/attempt-meta-map.d.ts.map +1 -1
- package/dist/adapters/attempt-meta-map.js +4 -0
- package/dist/adapters/build-adapters.js +2 -2
- package/dist/adapters/gemini.d.ts +28 -1
- package/dist/adapters/gemini.d.ts.map +1 -1
- package/dist/adapters/gemini.js +38 -9
- package/dist/adapters/grok.d.ts.map +1 -1
- package/dist/adapters/grok.js +53 -4
- package/dist/adapters/openai-compat.d.ts +8 -2
- package/dist/adapters/openai-compat.d.ts.map +1 -1
- package/dist/adapters/openai-compat.js +8 -1
- package/dist/adapters/openai-stream.d.ts +10 -2
- package/dist/adapters/openai-stream.d.ts.map +1 -1
- package/dist/adapters/openai-stream.js +5 -1
- package/dist/adapters/openai.d.ts +10 -1
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js +57 -7
- package/dist/adapters/responses-api.d.ts +61 -0
- package/dist/adapters/responses-api.d.ts.map +1 -0
- package/dist/adapters/responses-api.js +124 -0
- package/dist/artifacts/artifact.d.ts +31 -12
- package/dist/artifacts/artifact.d.ts.map +1 -1
- package/dist/artifacts/artifact.js +218 -188
- package/dist/artifacts/index.d.ts +15 -5
- package/dist/artifacts/index.d.ts.map +1 -1
- package/dist/artifacts/index.js +19 -5
- package/dist/artifacts/run-context.d.ts +3 -24
- package/dist/artifacts/run-context.d.ts.map +1 -1
- package/dist/artifacts/run-context.js +3 -39
- package/dist/bakeoff/engine.d.ts +29 -0
- package/dist/bakeoff/engine.d.ts.map +1 -1
- package/dist/bakeoff/engine.js +47 -0
- package/dist/bakeoff/eval-cases-rig.d.ts +36 -0
- package/dist/bakeoff/eval-cases-rig.d.ts.map +1 -0
- package/dist/bakeoff/eval-cases-rig.js +27 -0
- package/dist/bakeoff/eval-cases.d.ts +19 -0
- package/dist/bakeoff/eval-cases.d.ts.map +1 -1
- package/dist/bakeoff/eval-cases.js +18 -1
- package/dist/bakeoff/golden-judge.d.ts +47 -0
- package/dist/bakeoff/golden-judge.d.ts.map +1 -0
- package/dist/bakeoff/golden-judge.js +49 -0
- package/dist/bakeoff/groundedness.d.ts +58 -0
- package/dist/bakeoff/groundedness.d.ts.map +1 -0
- package/dist/bakeoff/groundedness.js +165 -0
- package/dist/bakeoff/quality.d.ts +43 -0
- package/dist/bakeoff/quality.d.ts.map +1 -1
- package/dist/bakeoff/quality.js +31 -0
- package/dist/bakeoff/replay.d.ts +11 -0
- package/dist/bakeoff/replay.d.ts.map +1 -1
- package/dist/bakeoff/replay.js +12 -0
- package/dist/bakeoff/report.d.ts +7 -0
- package/dist/bakeoff/report.d.ts.map +1 -1
- package/dist/bakeoff/report.js +26 -0
- package/dist/cli-judge.d.ts +12 -0
- package/dist/cli-judge.d.ts.map +1 -0
- package/dist/cli-judge.js +48 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +22 -42
- package/dist/config.d.ts +85 -29
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +109 -47
- package/dist/detect/detector.d.ts +4 -2
- package/dist/detect/detector.d.ts.map +1 -1
- package/dist/detect/safe-harbor.d.ts +57 -0
- package/dist/detect/safe-harbor.d.ts.map +1 -0
- package/dist/detect/safe-harbor.js +278 -0
- package/dist/doctor-cli.d.ts +7 -0
- package/dist/doctor-cli.d.ts.map +1 -0
- package/dist/doctor-cli.js +67 -0
- package/dist/doctor-preflight.d.ts +52 -0
- package/dist/doctor-preflight.d.ts.map +1 -0
- package/dist/doctor-preflight.js +112 -0
- package/dist/feedback/coverage.d.ts +11 -8
- package/dist/feedback/coverage.d.ts.map +1 -1
- package/dist/feedback/coverage.js +29 -16
- package/dist/feedback/grade.d.ts +58 -0
- package/dist/feedback/grade.d.ts.map +1 -0
- package/dist/feedback/grade.js +67 -0
- package/dist/gateway/http-protocol.d.ts +20 -1
- package/dist/gateway/http-protocol.d.ts.map +1 -1
- package/dist/gateway/http-protocol.js +1 -1
- package/dist/gateway/serve-client.d.ts +99 -0
- package/dist/gateway/serve-client.d.ts.map +1 -0
- package/dist/gateway/serve-client.js +360 -0
- package/dist/index.d.ts +68 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +167 -46
- package/dist/init/observe-cli.js +1 -1
- package/dist/init/observe.d.ts +2 -2
- package/dist/init/observe.d.ts.map +1 -1
- package/dist/init/observe.js +11 -7
- package/dist/mask/arm.d.ts +112 -0
- package/dist/mask/arm.d.ts.map +1 -0
- package/dist/mask/arm.js +179 -0
- package/dist/mask/index.d.ts +2 -0
- package/dist/mask/index.d.ts.map +1 -1
- package/dist/mask/index.js +7 -1
- package/dist/mask/mask-policy-cli.d.ts +12 -4
- package/dist/mask/mask-policy-cli.d.ts.map +1 -1
- package/dist/mask/mask-policy-cli.js +34 -9
- package/dist/prompts/manifest.d.ts +128 -0
- package/dist/prompts/manifest.d.ts.map +1 -0
- package/dist/prompts/manifest.js +214 -0
- package/dist/prompts/prompt-fetch.d.ts +84 -0
- package/dist/prompts/prompt-fetch.d.ts.map +1 -0
- package/dist/prompts/prompt-fetch.js +120 -0
- package/dist/prompts/prompt-resolve.d.ts +76 -0
- package/dist/prompts/prompt-resolve.d.ts.map +1 -0
- package/dist/prompts/prompt-resolve.js +93 -0
- package/dist/prompts/slot-resolver.d.ts +91 -0
- package/dist/prompts/slot-resolver.d.ts.map +1 -0
- package/dist/prompts/slot-resolver.js +135 -0
- package/dist/prompts/tools-register.d.ts +60 -0
- package/dist/prompts/tools-register.d.ts.map +1 -0
- package/dist/prompts/tools-register.js +48 -0
- package/dist/prompts/version-hash.d.ts +29 -0
- package/dist/prompts/version-hash.d.ts.map +1 -0
- package/dist/prompts/version-hash.js +54 -0
- package/dist/prompts-export-cli.d.ts +21 -0
- package/dist/prompts-export-cli.d.ts.map +1 -0
- package/dist/prompts-export-cli.js +130 -0
- package/dist/query/grammar.d.ts +2 -2
- package/dist/query/grammar.d.ts.map +1 -1
- package/dist/query/grammar.js +3 -1
- package/dist/query/saved.d.ts +13 -0
- package/dist/query/saved.d.ts.map +1 -1
- package/dist/query/saved.js +67 -1
- package/dist/receipts/types.d.ts +1 -1
- package/dist/receipts/types.d.ts.map +1 -1
- package/dist/receipts/types.js +1 -0
- package/dist/registry/build.d.ts +43 -1
- package/dist/registry/build.d.ts.map +1 -1
- package/dist/registry/build.js +52 -0
- package/dist/registry/cache-policy.d.ts.map +1 -1
- package/dist/registry/cache-policy.js +22 -0
- package/dist/registry/pricing-shape.d.ts +67 -8
- package/dist/registry/pricing-shape.d.ts.map +1 -1
- package/dist/registry/pricing-shape.js +50 -13
- package/dist/registry/pricing.d.ts +6 -5
- package/dist/registry/pricing.d.ts.map +1 -1
- package/dist/registry/pricing.js +9 -5
- package/dist/registry/rows.d.ts.map +1 -1
- package/dist/registry/rows.js +1 -0
- package/dist/registry/select.d.ts +6 -1
- package/dist/registry/select.d.ts.map +1 -1
- package/dist/registry/select.js +11 -0
- package/dist/routes/call-config.d.ts +199 -0
- package/dist/routes/call-config.d.ts.map +1 -0
- package/dist/routes/call-config.js +343 -0
- package/dist/routes/destination-loader.d.ts +16 -0
- package/dist/routes/destination-loader.d.ts.map +1 -0
- package/dist/routes/destination-loader.js +29 -0
- package/dist/routes/draft.d.ts +7 -0
- package/dist/routes/draft.d.ts.map +1 -1
- package/dist/routes/draft.js +12 -0
- package/dist/routes/loader.d.ts.map +1 -1
- package/dist/routes/loader.js +31 -56
- package/dist/routes/objective-loader.d.ts +12 -0
- package/dist/routes/objective-loader.d.ts.map +1 -1
- package/dist/routes/objective-loader.js +82 -0
- package/dist/routes/output-loader.d.ts +42 -0
- package/dist/routes/output-loader.d.ts.map +1 -0
- package/dist/routes/output-loader.js +112 -0
- package/dist/routes/prompt-loader.d.ts +49 -0
- package/dist/routes/prompt-loader.d.ts.map +1 -0
- package/dist/routes/prompt-loader.js +113 -0
- package/dist/routes/resolved-bundle.d.ts +69 -0
- package/dist/routes/resolved-bundle.d.ts.map +1 -1
- package/dist/routes/resolved-bundle.js +76 -0
- package/dist/routes/screen-loader.d.ts +29 -1
- package/dist/routes/screen-loader.d.ts.map +1 -1
- package/dist/routes/screen-loader.js +59 -1
- package/dist/run/accept.d.ts +5 -0
- package/dist/run/accept.d.ts.map +1 -1
- package/dist/run/accept.js +2 -0
- package/dist/run/cost.d.ts +31 -2
- package/dist/run/cost.d.ts.map +1 -1
- package/dist/run/cost.js +57 -2
- package/dist/run/destination.d.ts +39 -0
- package/dist/run/destination.d.ts.map +1 -0
- package/dist/run/destination.js +45 -0
- package/dist/run/dispatch.d.ts +67 -16
- package/dist/run/dispatch.d.ts.map +1 -1
- package/dist/run/dispatch.js +133 -29
- package/dist/run/grounding.d.ts +28 -2
- package/dist/run/grounding.d.ts.map +1 -1
- package/dist/run/grounding.js +54 -10
- package/dist/run/raw-defaults.d.ts.map +1 -1
- package/dist/run/raw-defaults.js +6 -1
- package/dist/run/raw-finalize.d.ts +50 -0
- package/dist/run/raw-finalize.d.ts.map +1 -0
- package/dist/run/raw-finalize.js +266 -0
- package/dist/run/raw-knobs.d.ts +36 -0
- package/dist/run/raw-knobs.d.ts.map +1 -0
- package/dist/run/raw-knobs.js +99 -0
- package/dist/run/raw-request.d.ts +24 -0
- package/dist/run/raw-request.d.ts.map +1 -0
- package/dist/run/raw-request.js +69 -0
- package/dist/run/raw-schema.d.ts +76 -0
- package/dist/run/raw-schema.d.ts.map +1 -0
- package/dist/run/raw-schema.js +166 -0
- package/dist/run/raw-search-cost.d.ts +48 -0
- package/dist/run/raw-search-cost.d.ts.map +1 -0
- package/dist/run/raw-search-cost.js +78 -0
- package/dist/run/raw-support.d.ts +64 -6
- package/dist/run/raw-support.d.ts.map +1 -1
- package/dist/run/raw-support.js +84 -11
- package/dist/run/raw.d.ts +25 -26
- package/dist/run/raw.d.ts.map +1 -1
- package/dist/run/raw.js +30 -351
- package/dist/run/record-attempt.d.ts +12 -0
- package/dist/run/record-attempt.d.ts.map +1 -1
- package/dist/run/record-attempt.js +30 -12
- package/dist/run/repair-attempt.d.ts +68 -0
- package/dist/run/repair-attempt.d.ts.map +1 -0
- package/dist/run/repair-attempt.js +180 -0
- package/dist/run/resolve-destination.d.ts +49 -0
- package/dist/run/resolve-destination.d.ts.map +1 -0
- package/dist/run/resolve-destination.js +76 -0
- package/dist/run/routing-docs.d.ts.map +1 -1
- package/dist/run/routing-docs.js +10 -5
- package/dist/run/run.d.ts +30 -1
- package/dist/run/run.d.ts.map +1 -1
- package/dist/run/run.js +94 -172
- package/dist/run/telemetry-row.d.ts +92 -0
- package/dist/run/telemetry-row.d.ts.map +1 -0
- package/dist/run/telemetry-row.js +81 -0
- package/dist/run/validate.d.ts +12 -1
- package/dist/run/validate.d.ts.map +1 -1
- package/dist/run/validate.js +31 -0
- package/dist/run/web-search-pricing.d.ts +43 -0
- package/dist/run/web-search-pricing.d.ts.map +1 -0
- package/dist/run/web-search-pricing.js +56 -0
- package/dist/savings/odometer.d.ts +4 -0
- package/dist/savings/odometer.d.ts.map +1 -1
- package/dist/savings/odometer.js +20 -1
- package/dist/savings/swap-execute.d.ts +7 -0
- package/dist/savings/swap-execute.d.ts.map +1 -1
- package/dist/savings/swap-execute.js +30 -0
- package/dist/savings/swaps-client.d.ts +10 -0
- package/dist/savings/swaps-client.d.ts.map +1 -1
- package/dist/screen/fixtures/probe-corpora.d.ts +23 -0
- package/dist/screen/fixtures/probe-corpora.d.ts.map +1 -0
- package/dist/screen/fixtures/probe-corpora.js +69 -0
- package/dist/screen/index.d.ts +21 -0
- package/dist/screen/index.d.ts.map +1 -0
- package/dist/screen/index.js +64 -0
- package/dist/screen/model-screen.d.ts +111 -0
- package/dist/screen/model-screen.d.ts.map +1 -0
- package/dist/screen/model-screen.js +178 -0
- package/dist/screen/patterns.d.ts +51 -0
- package/dist/screen/patterns.d.ts.map +1 -0
- package/dist/screen/patterns.js +151 -0
- package/dist/screen/phi-gate.d.ts +52 -0
- package/dist/screen/phi-gate.d.ts.map +1 -0
- package/dist/screen/phi-gate.js +86 -0
- package/dist/screen/policy.d.ts +71 -0
- package/dist/screen/policy.d.ts.map +1 -0
- package/dist/screen/policy.js +334 -0
- package/dist/screen/probe.d.ts +118 -0
- package/dist/screen/probe.d.ts.map +1 -0
- package/dist/screen/probe.js +132 -0
- package/dist/screen/screen-cli.d.ts +16 -0
- package/dist/screen/screen-cli.d.ts.map +1 -0
- package/dist/screen/screen-cli.js +178 -0
- package/dist/screen/screen.d.ts +99 -0
- package/dist/screen/screen.d.ts.map +1 -0
- package/dist/screen/screen.js +0 -0
- package/dist/screen/sidecar.d.ts +69 -0
- package/dist/screen/sidecar.d.ts.map +1 -0
- package/dist/screen/sidecar.js +145 -0
- package/dist/screen/types.d.ts +43 -2
- package/dist/screen/types.d.ts.map +1 -1
- package/dist/settings/api-fetcher.d.ts +14 -3
- package/dist/settings/api-fetcher.d.ts.map +1 -1
- package/dist/settings/api-fetcher.js +61 -10
- package/dist/settings/grading-guide.d.ts +102 -0
- package/dist/settings/grading-guide.d.ts.map +1 -0
- package/dist/settings/grading-guide.js +23 -0
- package/dist/settings/index.d.ts +3 -2
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +2 -1
- package/dist/settings/task-settings.d.ts +44 -7
- package/dist/settings/task-settings.d.ts.map +1 -1
- package/dist/settings/task-settings.js +53 -12
- package/dist/status.d.ts +32 -20
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +51 -30
- package/dist/telemetry/artifact-store.d.ts +5 -6
- package/dist/telemetry/artifact-store.d.ts.map +1 -1
- package/dist/telemetry/artifact-store.js +21 -24
- package/dist/telemetry/attempt-meta.d.ts +76 -1
- package/dist/telemetry/attempt-meta.d.ts.map +1 -1
- package/dist/telemetry/attempt-meta.js +33 -1
- package/dist/telemetry/exporter-setup.d.ts +2 -0
- package/dist/telemetry/exporter-setup.d.ts.map +1 -1
- package/dist/telemetry/exporter-setup.js +6 -1
- package/dist/telemetry/exporter.d.ts +2 -2
- package/dist/telemetry/exporter.d.ts.map +1 -1
- package/dist/telemetry/exporter.js +22 -41
- package/dist/telemetry/grade-mappers.d.ts +25 -0
- package/dist/telemetry/grade-mappers.d.ts.map +1 -0
- package/dist/telemetry/grade-mappers.js +64 -0
- package/dist/telemetry/grades-sql.d.ts +56 -0
- package/dist/telemetry/grades-sql.d.ts.map +1 -0
- package/dist/telemetry/grades-sql.js +156 -0
- package/dist/telemetry/ingest-protocol.d.ts +55 -48
- package/dist/telemetry/ingest-protocol.d.ts.map +1 -1
- package/dist/telemetry/ingest-protocol.js +48 -83
- package/dist/telemetry/org-identity.d.ts +44 -0
- package/dist/telemetry/org-identity.d.ts.map +1 -0
- package/dist/telemetry/org-identity.js +98 -0
- package/dist/telemetry/route-registration.d.ts +48 -0
- package/dist/telemetry/route-registration.d.ts.map +1 -0
- package/dist/telemetry/route-registration.js +77 -0
- package/dist/telemetry/sinks.d.ts +10 -1
- package/dist/telemetry/sinks.d.ts.map +1 -1
- package/dist/telemetry/sinks.js +52 -6
- package/dist/telemetry/store-migrations.d.ts.map +1 -1
- package/dist/telemetry/store-migrations.js +64 -0
- package/dist/telemetry/store.d.ts +9 -6
- package/dist/telemetry/store.d.ts.map +1 -1
- package/dist/telemetry/store.js +8 -50
- package/dist/tenancy/api-key-format.d.ts +45 -1
- package/dist/tenancy/api-key-format.d.ts.map +1 -1
- package/dist/tenancy/api-key-format.js +50 -1
- package/dist/types/provider.d.ts +23 -3
- package/dist/types/provider.d.ts.map +1 -1
- package/dist/types/provider.js +26 -0
- package/dist/types/route.d.ts +154 -2
- package/dist/types/route.d.ts.map +1 -1
- package/dist/types/telemetry.d.ts +73 -48
- package/dist/types/telemetry.d.ts.map +1 -1
- package/dist/validate-cli.d.ts.map +1 -1
- package/dist/validate-cli.js +32 -0
- package/dist/verify/verify.d.ts +5 -0
- package/dist/verify/verify.d.ts.map +1 -1
- package/dist/verify/verify.js +2 -0
- package/dist/watch/evaluate.d.ts +84 -1
- package/dist/watch/evaluate.d.ts.map +1 -1
- package/dist/watch/evaluate.js +28 -0
- package/dist/watch/monitor.d.ts +8 -2
- package/dist/watch/monitor.d.ts.map +1 -1
- package/dist/watch/monitor.js +13 -5
- package/dist/watch/regret-monitor-cli.d.ts +16 -0
- package/dist/watch/regret-monitor-cli.d.ts.map +1 -0
- package/dist/watch/regret-monitor-cli.js +137 -0
- package/dist/watch/regret-monitor.d.ts +168 -0
- package/dist/watch/regret-monitor.d.ts.map +1 -0
- package/dist/watch/regret-monitor.js +304 -0
- package/dist/watch/upgrade.d.ts +62 -0
- package/dist/watch/upgrade.d.ts.map +1 -0
- package/dist/watch/upgrade.js +57 -0
- package/docs/agent-skill/SKILL.md +181 -9
- package/docs/how-it-fits.md +3 -2
- package/docs/instrumentation.md +219 -46
- package/docs/llms.txt +158 -35
- package/docs/managed-serving.md +150 -0
- package/docs/mcp-oracle.md +322 -0
- package/docs/migration-playbook.md +5 -4
- package/docs/quickstart.md +263 -89
- package/package.json +18 -4
- package/registry/leaderboard.json +74 -0
- package/registry/registry.json +232 -112
- package/screen.d.ts +16 -0
- package/templates/call-disposition-qa.json +77 -0
- package/templates/catalog-cleansing.json +77 -0
- package/templates/compliance-review.json +76 -0
- package/templates/cs-next-action.json +76 -0
- package/templates/document-extraction.json +78 -0
- package/templates/financial-classification.json +75 -0
- package/templates/lead-qualification.json +76 -0
- package/templates/medical-classification.json +71 -0
- package/templates/ticket-triage.json +76 -0
- package/dist/feedback/feedback.d.ts +0 -35
- package/dist/feedback/feedback.d.ts.map +0 -1
- package/dist/feedback/feedback.js +0 -39
package/dist/registry/pricing.js
CHANGED
|
@@ -29,6 +29,9 @@ const KEY_PREFIXES = {
|
|
|
29
29
|
// Fireworks pricing keys carry the accounts/… wire prefix.
|
|
30
30
|
deepinfra: ["deepinfra/"],
|
|
31
31
|
fireworks: ["fireworks_ai/accounts/fireworks/models/", "fireworks_ai/"],
|
|
32
|
+
// Z.ai (B4a): GLM models keyed under "zai/" in the snapshot. Registry entries
|
|
33
|
+
// carry their own declared pricing, so this only gaps-fills a future snapshot.
|
|
34
|
+
zai: ["zai/"],
|
|
32
35
|
};
|
|
33
36
|
let cachedMap = null;
|
|
34
37
|
/** Host-swept gap-filler (scripts/pricing-sweep.ts): prices for models the
|
|
@@ -77,11 +80,12 @@ function getPricing(provider, model) {
|
|
|
77
80
|
return null;
|
|
78
81
|
}
|
|
79
82
|
/**
|
|
80
|
-
* The richer `ModelPricingV2`
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
83
|
+
* The richer `ModelPricingV2` on file for a model, if any — resolved by the SAME
|
|
84
|
+
* key precedence as {@link getPricing} (snapshot wins on a shared key; a snapshot
|
|
85
|
+
* entry yields its hand-grafted `pricing_v2` when it has one — issue #2's gemini
|
|
86
|
+
* tiers — else null → the caller synthesizes from the flat rate; an overlay or
|
|
87
|
+
* manual entry yields its own block). Returns null when no richer shape is on
|
|
88
|
+
* file. Never guesses: absence is `base`-only downstream.
|
|
85
89
|
*/
|
|
86
90
|
function getPricingV2(provider, model) {
|
|
87
91
|
if (model === "")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/registry/rows.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/registry/rows.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA0C/C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CA4BxE"}
|
package/dist/registry/rows.js
CHANGED
|
@@ -49,6 +49,7 @@ function loadRegistryRows(registryPath) {
|
|
|
49
49
|
nativeRungRate: entry.probed?.schema?.native_rung_rate ?? null,
|
|
50
50
|
groundedRate: entry.probed?.grounding?.grounded_rate ?? null,
|
|
51
51
|
cacheHitRate: entry.probed?.caching?.cache_hit_rate ?? null,
|
|
52
|
+
imageExtractRate: entry.probed?.image?.extract_rate ?? null,
|
|
52
53
|
effectiveUsdPer1k: effective.get(entry.model_key) ?? null,
|
|
53
54
|
discrepancies: entry.discrepancies?.length ?? 0,
|
|
54
55
|
probedAsOf: entry.probed?.as_of ?? null,
|
|
@@ -18,7 +18,7 @@ import type { CapabilityFlag } from "../types/provider";
|
|
|
18
18
|
import type { Requirement } from "../types/route";
|
|
19
19
|
/** The capability predicates a question can carry. Deliberately the probed
|
|
20
20
|
* dimensions only — we answer from measurement, not from provider claims. */
|
|
21
|
-
export type CapabilityPredicate = "structured-native" | "structured-coached" | "grounding" | "caching";
|
|
21
|
+
export type CapabilityPredicate = "structured-native" | "structured-coached" | "grounding" | "caching" | "image_input";
|
|
22
22
|
export declare const ALL_CAPABILITY_PREDICATES: readonly CapabilityPredicate[];
|
|
23
23
|
/** Plain-language gloss per predicate — the explainability layer travels
|
|
24
24
|
* WITH the answer (console-explainability.md §1), it is not a separate doc. */
|
|
@@ -34,6 +34,11 @@ export interface ModelSelectRow {
|
|
|
34
34
|
readonly nativeRungRate: number | null;
|
|
35
35
|
readonly groundedRate: number | null;
|
|
36
36
|
readonly cacheHitRate: number | null;
|
|
37
|
+
/** Probed image-input schema-conformant extraction rate (UC-3 M0). `null` when
|
|
38
|
+
* the model has NOT been probed on the image class — which the filter treats
|
|
39
|
+
* as "does not qualify" (a match needs measured evidence), NEVER as "cannot"
|
|
40
|
+
* (that distinction is preserved by the surfaces that render it). */
|
|
41
|
+
readonly imageExtractRate: number | null;
|
|
37
42
|
readonly effectiveUsdPer1k: number | null;
|
|
38
43
|
readonly discrepancies: number;
|
|
39
44
|
readonly probedAsOf: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/registry/select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;6EAC6E;AAC7E,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,oBAAoB,GACpB,WAAW,GACX,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/registry/select.ts"],"names":[],"mappings":"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"}
|
package/dist/registry/select.js
CHANGED
|
@@ -28,6 +28,7 @@ exports.ALL_CAPABILITY_PREDICATES = [
|
|
|
28
28
|
"structured-coached",
|
|
29
29
|
"grounding",
|
|
30
30
|
"caching",
|
|
31
|
+
"image_input",
|
|
31
32
|
];
|
|
32
33
|
/** Plain-language gloss per predicate — the explainability layer travels
|
|
33
34
|
* WITH the answer (console-explainability.md §1), it is not a separate doc. */
|
|
@@ -36,9 +37,12 @@ exports.PREDICATE_GLOSS = {
|
|
|
36
37
|
"structured-coached": "output matched the schema at least 90% of probed samples, whether or not the provider enforced it natively",
|
|
37
38
|
grounding: "at least half of probed answers cited real retrieved sources rather than answering from memory",
|
|
38
39
|
caching: "repeat calls actually reported cached input tokens — a measured discount, not a claim",
|
|
40
|
+
image_input: "a probe sent a form image and the model returned schema-conformant JSON extracting the planted fields on at least 90% of samples — a MEASURED read of an image, never a provider's vision claim",
|
|
39
41
|
};
|
|
40
42
|
const CONFORMANCE_BAR = 0.9;
|
|
41
43
|
const GROUNDED_BAR = 0.5;
|
|
44
|
+
/** Image-input extraction bar (UC-3 M0) — the same 0.9 the schema bar uses. */
|
|
45
|
+
const IMAGE_BAR = 0.9;
|
|
42
46
|
function hasCapability(row, cap) {
|
|
43
47
|
switch (cap) {
|
|
44
48
|
case "structured-native":
|
|
@@ -49,6 +53,12 @@ function hasCapability(row, cap) {
|
|
|
49
53
|
return (row.groundedRate ?? 0) >= GROUNDED_BAR;
|
|
50
54
|
case "caching":
|
|
51
55
|
return (row.cacheHitRate ?? 0) > 0;
|
|
56
|
+
case "image_input":
|
|
57
|
+
// Probed-only: an unprobed model (null) is never returned as image-capable
|
|
58
|
+
// — absence is not a match. It is also not "cannot": the filter answers
|
|
59
|
+
// "which models we MEASURED can do this", and the empty-selection prose
|
|
60
|
+
// says exactly that.
|
|
61
|
+
return (row.imageExtractRate ?? 0) >= IMAGE_BAR;
|
|
52
62
|
}
|
|
53
63
|
}
|
|
54
64
|
/** Question scaffolding. A search box gets keywords; the MCP oracle gets a
|
|
@@ -71,6 +81,7 @@ const CAP_WORDS = [
|
|
|
71
81
|
[["json", "strict", "structured", "schema"], "structured-native"],
|
|
72
82
|
[["grounded", "grounding", "search", "web"], "grounding"],
|
|
73
83
|
[["cache", "caching", "cached"], "caching"],
|
|
84
|
+
[["image", "images", "vision", "multimodal", "ocr"], "image_input"],
|
|
74
85
|
];
|
|
75
86
|
/** The tiny grammar behind the query box and the oracle's free-text input:
|
|
76
87
|
* capability words + an "under $N/M" price cap; everything else is a
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK-side live call-config resolution (live-routing-evals spec §4, R-1; LRE-1a).
|
|
3
|
+
*
|
|
4
|
+
* A route's live call-config (which model/provider + sampling) can be edited in
|
|
5
|
+
* the console WITHOUT a redeploy. The SDK reads it just-before-call through
|
|
6
|
+
* `GET /v1/routes/:route/call-config`, caches the policy (short TTL, ETag-
|
|
7
|
+
* revalidated), and MERGES the pin over the resolved (mirrored/deploy-time)
|
|
8
|
+
* bundle before `run()`. This is R-1's cached-policy model: no per-call network
|
|
9
|
+
* cost when fresh, and outage-safe.
|
|
10
|
+
*
|
|
11
|
+
* ── FAIL-OPEN, ALWAYS — the hot path never throws ─────────────────────────
|
|
12
|
+
* `getCallConfig` NEVER throws. On any error it returns the LAST-KNOWN-GOOD
|
|
13
|
+
* cached policy; if there is none, it returns null — and a null resolution means
|
|
14
|
+
* "serve the mirrored/pinned bundle unchanged". A route with no override
|
|
15
|
+
* resolves BYTE-IDENTICAL to today (the golden invariant): `applyCallConfig`
|
|
16
|
+
* returns the SAME bundle reference when there is nothing to merge.
|
|
17
|
+
*
|
|
18
|
+
* ── PHASE 1 = PIN ONLY ────────────────────────────────────────────────────
|
|
19
|
+
* `mode='experiment'` (local weighted arm draw) and `mode='live'` (strict per-
|
|
20
|
+
* call read) are TYPED here so the wire shape is complete, but they are INERT:
|
|
21
|
+
* `applyCallConfig` acts on `mode='pin'` only and passes everything else through
|
|
22
|
+
* unchanged. Experiments ship in LRE-2.
|
|
23
|
+
*/
|
|
24
|
+
import type { RouteBundle } from "../types/route";
|
|
25
|
+
export type CallConfigMode = "pin" | "experiment" | "live";
|
|
26
|
+
export type CallConfigSource = "user" | "optimizer" | "yaml-default";
|
|
27
|
+
/** The on-the-wire sampling block (snake_case, as the endpoint returns it). */
|
|
28
|
+
export interface CallConfigSampling {
|
|
29
|
+
readonly temperature?: number;
|
|
30
|
+
readonly top_p?: number;
|
|
31
|
+
readonly max_output_tokens?: number;
|
|
32
|
+
}
|
|
33
|
+
/** A `mode='pin'` config: a single model + optional sampling/variant. */
|
|
34
|
+
export interface CallConfigPin {
|
|
35
|
+
readonly provider: string;
|
|
36
|
+
readonly model: string;
|
|
37
|
+
readonly sampling?: CallConfigSampling;
|
|
38
|
+
readonly variant?: string;
|
|
39
|
+
}
|
|
40
|
+
/** A resolved current config, as the resolver caches it. `version===0` and
|
|
41
|
+
* `mode===null` is the INERT default (no override) — resolution is byte-identical
|
|
42
|
+
* to the mirrored bundle. */
|
|
43
|
+
export interface ResolvedCallConfig {
|
|
44
|
+
readonly version: number;
|
|
45
|
+
readonly mode: CallConfigMode | null;
|
|
46
|
+
readonly config: unknown;
|
|
47
|
+
readonly etag: string;
|
|
48
|
+
}
|
|
49
|
+
/** Pulls one route's current config from the control plane, ETag-aware. Returns
|
|
50
|
+
* the config, `"not-modified"` (304 — keep the cache), or null (miss / error —
|
|
51
|
+
* the resolver keeps last-known-good). NEVER throws. */
|
|
52
|
+
export interface CallConfigFetcher {
|
|
53
|
+
fetch(route: string, etag: string | undefined): Promise<ResolvedCallConfig | "not-modified" | null>;
|
|
54
|
+
}
|
|
55
|
+
export interface CallConfigResolver {
|
|
56
|
+
/** The effective config for a route. Reads the cache when fresh (within TTL);
|
|
57
|
+
* otherwise revalidates (ETag) and folds the result in. Fail-open: on error,
|
|
58
|
+
* returns last-known-good, else null. NEVER throws. `null` ⇒ no override ⇒
|
|
59
|
+
* serve the mirrored bundle unchanged. */
|
|
60
|
+
getCallConfig(route: string): Promise<ResolvedCallConfig | null>;
|
|
61
|
+
/** A copy of every resolved route's last-known config — for status/boot. */
|
|
62
|
+
snapshot(): ReadonlyMap<string, ResolvedCallConfig>;
|
|
63
|
+
}
|
|
64
|
+
export interface CallConfigResolverConfig {
|
|
65
|
+
readonly fetcher: CallConfigFetcher;
|
|
66
|
+
/** Cache freshness window (spec §4: ~30–60s). Within it, no fetch. */
|
|
67
|
+
readonly ttlMs: number;
|
|
68
|
+
/** Injectable clock for tests; defaults to Date.now. */
|
|
69
|
+
readonly now?: () => number;
|
|
70
|
+
}
|
|
71
|
+
/** Narrow an unknown endpoint body into a `ResolvedCallConfig`, or null when the
|
|
72
|
+
* shape is not what the endpoint promises (a malformed 200 is a miss, not
|
|
73
|
+
* trusted — we never fabricate an override from junk). */
|
|
74
|
+
export declare function parseCallConfig(body: unknown): ResolvedCallConfig | null;
|
|
75
|
+
/** Narrow a config to a `CallConfigPin`, or null (T7 — jsonb is not proof of
|
|
76
|
+
* shape). The single place a pin's shape is trusted on the SDK side. */
|
|
77
|
+
export declare function narrowPin(config: unknown): CallConfigPin | null;
|
|
78
|
+
/** The pin carried by a resolved config, or null when there is no pin override
|
|
79
|
+
* (no override, or a non-pin mode — inert in Phase 1). */
|
|
80
|
+
export declare function pinFromResolved(resolved: ResolvedCallConfig | null): CallConfigPin | null;
|
|
81
|
+
/**
|
|
82
|
+
* Merge a resolved call-config over a bundle, returning a runnable bundle.
|
|
83
|
+
*
|
|
84
|
+
* INERT BY DEFAULT: when `resolved` is null, or its mode is not `pin`, or the pin
|
|
85
|
+
* does not narrow, the SAME `bundle` reference is returned — byte-identical to
|
|
86
|
+
* today (the golden invariant). Otherwise the pin REPLACES the candidate set with
|
|
87
|
+
* the single pinned model (eligibility was gated at write, so it satisfies the
|
|
88
|
+
* route `require`) and merges its sampling into the policy.
|
|
89
|
+
*
|
|
90
|
+
* `mode='experiment'` is INERT here (returns the bundle unchanged): an experiment
|
|
91
|
+
* resolves through {@link resolveCallConfigForRun}, which draws an arm and returns
|
|
92
|
+
* the arm name for `inferences.meta.arm`. `applyCallConfig` stays pin-only so the
|
|
93
|
+
* pin/golden path is byte-identical.
|
|
94
|
+
*/
|
|
95
|
+
export declare function applyCallConfig(bundle: RouteBundle, resolved: ResolvedCallConfig | null): RouteBundle;
|
|
96
|
+
/** One arm of an experiment: a resolved pin config + a positive weight + an
|
|
97
|
+
* optional stable name (defaults to the pin's variant or `provider/model`). The
|
|
98
|
+
* `ref` is a `CallConfigPin` so an arm merges over the bundle exactly like a pin. */
|
|
99
|
+
export interface ExperimentArm {
|
|
100
|
+
readonly ref: CallConfigPin;
|
|
101
|
+
readonly weight: number;
|
|
102
|
+
readonly name?: string;
|
|
103
|
+
}
|
|
104
|
+
/** A `mode='experiment'` config (spec §2.1): weighted arms, an optional
|
|
105
|
+
* stickiness key (names the input field whose VALUE keys deterministic
|
|
106
|
+
* assignment), and a fallback pin (served when the experiment cannot draw). */
|
|
107
|
+
export interface CallConfigExperiment {
|
|
108
|
+
readonly arms: readonly ExperimentArm[];
|
|
109
|
+
readonly stickyKey?: string;
|
|
110
|
+
readonly fallback: CallConfigPin;
|
|
111
|
+
}
|
|
112
|
+
/** The stable arm name stamped on `inferences.meta.arm` — the caller-declared
|
|
113
|
+
* name, else the pin's variant, else `provider/model`. Kept meta-safe (short, no
|
|
114
|
+
* whitespace) by construction: providers/models/variants are identifiers. */
|
|
115
|
+
export declare function armName(arm: ExperimentArm): string;
|
|
116
|
+
/** Narrow a jsonb `config` to a `CallConfigExperiment`, or null (T7 — jsonb is
|
|
117
|
+
* not proof of shape). Requires ≥1 well-formed arm (each `ref` a valid pin, each
|
|
118
|
+
* `weight` a positive finite number) and a fallback pin. Fail-open: a malformed
|
|
119
|
+
* experiment narrows to null and the caller serves the mirrored bundle. */
|
|
120
|
+
export declare function narrowExperiment(config: unknown): CallConfigExperiment | null;
|
|
121
|
+
/** FNV-1a 32-bit hash of a string → a stable uint32. Pure, dependency-free — the
|
|
122
|
+
* sticky-assignment key so the SAME unit key always draws the SAME arm (an A/B is
|
|
123
|
+
* measured honestly). Not cryptographic; a fast, well-distributed bucket hash. */
|
|
124
|
+
export declare function hashUnitKey(key: string): number;
|
|
125
|
+
export interface DrawArmOptions {
|
|
126
|
+
/** A stickiness unit key (already resolved from the input). When present the
|
|
127
|
+
* draw is DETERMINISTIC by `hash(unitKey)` — the same unit always lands on the
|
|
128
|
+
* same arm. Absent ⇒ a weighted random draw. */
|
|
129
|
+
readonly unitKey?: string;
|
|
130
|
+
/** Injectable RNG in [0,1) for the weighted-random path (tests seed it);
|
|
131
|
+
* defaults to Math.random. Ignored when `unitKey` is supplied. */
|
|
132
|
+
readonly rng?: () => number;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Draw one arm from an experiment (spec §4). Weighted by `weight`: an arm's draw
|
|
136
|
+
* probability is `weight / Σweights`. DETERMINISTIC by `hash(unitKey)` when a
|
|
137
|
+
* unit key is supplied (sticky assignment); weighted-random otherwise. Returns
|
|
138
|
+
* null only when there are no positive-weight arms (⇒ the caller serves the
|
|
139
|
+
* fallback). Pure over its inputs (the RNG/hash are the only entropy).
|
|
140
|
+
*/
|
|
141
|
+
export declare function drawArm(experiment: CallConfigExperiment, opts?: DrawArmOptions): ExperimentArm | null;
|
|
142
|
+
/** The resolved bundle for a run PLUS the chosen arm name (or null for pin / no
|
|
143
|
+
* override / a non-experiment mode). The arm name is stamped on
|
|
144
|
+
* `inferences.meta.arm` (thread it into `run` via `RunOptions.arm`). */
|
|
145
|
+
export interface ResolvedForRun {
|
|
146
|
+
readonly bundle: RouteBundle;
|
|
147
|
+
readonly arm: string | null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Resolve a route's call-config into a runnable bundle for ONE call, drawing an
|
|
151
|
+
* experiment arm locally when `mode='experiment'` (spec §4, R-1). FAIL-OPEN and
|
|
152
|
+
* byte-identical for pin: `mode='pin'` merges exactly like {@link applyCallConfig}
|
|
153
|
+
* (arm null), a null/`live`/malformed resolution returns the bundle unchanged
|
|
154
|
+
* (arm null), and a malformed experiment falls back to the experiment's own
|
|
155
|
+
* fallback pin, else the mirrored bundle. NEVER throws.
|
|
156
|
+
*
|
|
157
|
+
* For an experiment, the stickiness unit key is `opts.unitKey` when given, else
|
|
158
|
+
* the value of `input[experiment.stickyKey]` (resolved from the run's input) —
|
|
159
|
+
* so the SAME unit is served the SAME arm across calls.
|
|
160
|
+
*/
|
|
161
|
+
export declare function resolveCallConfigForRun(bundle: RouteBundle, resolved: ResolvedCallConfig | null, opts?: {
|
|
162
|
+
readonly unitKey?: string;
|
|
163
|
+
readonly input?: Record<string, unknown>;
|
|
164
|
+
readonly rng?: () => number;
|
|
165
|
+
}): ResolvedForRun;
|
|
166
|
+
/**
|
|
167
|
+
* Build the cached call-config resolver. Holds a per-route cache with a fetch
|
|
168
|
+
* timestamp + ETag; a read within `ttlMs` returns the cache with no network; a
|
|
169
|
+
* stale read revalidates (If-None-Match) and folds the result in. Every fetch is
|
|
170
|
+
* fail-open: a rejection or a null leaves the last-known value in place, and a
|
|
171
|
+
* route never yet resolved returns null (⇒ serve the mirrored bundle unchanged).
|
|
172
|
+
*/
|
|
173
|
+
export declare function createCallConfigResolver(config: CallConfigResolverConfig): CallConfigResolver;
|
|
174
|
+
export interface ApiCallConfigFetcherConfig {
|
|
175
|
+
/** Base URL of the hosted control plane — the SAME `ingestUrl` the api sink
|
|
176
|
+
* uses (the call-config path hangs off the host). */
|
|
177
|
+
readonly ingestUrl: string;
|
|
178
|
+
/** `rig_sk_…` key. GET needs no special scope (a read rides the readable route
|
|
179
|
+
* + config rows). Header only, never a URL (C2). */
|
|
180
|
+
readonly apiKey: string;
|
|
181
|
+
readonly fetchFn?: typeof fetch;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The api-mode call-config fetcher: one authenticated, ETag-aware GET per route.
|
|
185
|
+
* Mirrors the api sink's leak discipline (status only, never the body/URL in an
|
|
186
|
+
* error — C2). NEVER throws: a network/HTTP failure resolves null, a 304 resolves
|
|
187
|
+
* "not-modified", a malformed 200 resolves null — so the resolver stays fail-open.
|
|
188
|
+
*/
|
|
189
|
+
export declare function createApiCallConfigFetcher(config: ApiCallConfigFetcherConfig): CallConfigFetcher;
|
|
190
|
+
/**
|
|
191
|
+
* Convenience: resolve `route`'s config through the resolver, then merge it over
|
|
192
|
+
* `bundle`. NEVER throws (delegates to `getCallConfig`'s fail-open) and returns
|
|
193
|
+
* the SAME bundle reference when there is no override (byte-identical).
|
|
194
|
+
*/
|
|
195
|
+
export declare function getCallConfig(route: string, deps: {
|
|
196
|
+
readonly resolver: CallConfigResolver;
|
|
197
|
+
readonly bundle: RouteBundle;
|
|
198
|
+
}): Promise<RouteBundle>;
|
|
199
|
+
//# sourceMappingURL=call-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-config.d.ts","sourceRoot":"","sources":["../../src/routes/call-config.ts"],"names":[],"mappings":"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"}
|