modelrig 0.0.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +94 -0
- package/LICENSE +201 -0
- package/README.md +145 -8
- package/data/PROVENANCE.md +19 -0
- package/data/pricing-manual.json +22 -0
- package/data/pricing-map.json +46362 -0
- package/data/pricing-overlay.json +419 -0
- package/dist/adapters/anthropic.d.ts +90 -0
- package/dist/adapters/anthropic.d.ts.map +1 -0
- package/dist/adapters/anthropic.js +296 -0
- package/dist/adapters/build-adapters.d.ts +11 -0
- package/dist/adapters/build-adapters.d.ts.map +1 -0
- package/dist/adapters/build-adapters.js +45 -0
- package/dist/adapters/deepseek.d.ts +47 -0
- package/dist/adapters/deepseek.d.ts.map +1 -0
- package/dist/adapters/deepseek.js +216 -0
- package/dist/adapters/gemini.d.ts +44 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +262 -0
- package/dist/adapters/grok.d.ts +53 -0
- package/dist/adapters/grok.d.ts.map +1 -0
- package/dist/adapters/grok.js +232 -0
- package/dist/adapters/openai-compat.d.ts +80 -0
- package/dist/adapters/openai-compat.d.ts.map +1 -0
- package/dist/adapters/openai-compat.js +244 -0
- package/dist/adapters/openai-stream.d.ts +58 -0
- package/dist/adapters/openai-stream.d.ts.map +1 -0
- package/dist/adapters/openai-stream.js +120 -0
- package/dist/adapters/openai.d.ts +55 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +281 -0
- package/dist/adapters/sampling.d.ts +28 -0
- package/dist/adapters/sampling.d.ts.map +1 -0
- package/dist/adapters/sampling.js +34 -0
- package/dist/adapters/tool-mapping.d.ts +92 -0
- package/dist/adapters/tool-mapping.d.ts.map +1 -0
- package/dist/adapters/tool-mapping.js +143 -0
- package/dist/artifacts/artifact.d.ts +137 -0
- package/dist/artifacts/artifact.d.ts.map +1 -0
- package/dist/artifacts/artifact.js +377 -0
- package/dist/artifacts/content-uploader.d.ts +87 -0
- package/dist/artifacts/content-uploader.d.ts.map +1 -0
- package/dist/artifacts/content-uploader.js +124 -0
- package/dist/artifacts/index.d.ts +63 -0
- package/dist/artifacts/index.d.ts.map +1 -0
- package/dist/artifacts/index.js +80 -0
- package/dist/artifacts/run-context.d.ts +129 -0
- package/dist/artifacts/run-context.d.ts.map +1 -0
- package/dist/artifacts/run-context.js +208 -0
- package/dist/artifacts/scrub.d.ts +60 -0
- package/dist/artifacts/scrub.d.ts.map +1 -0
- package/dist/artifacts/scrub.js +139 -0
- package/dist/artifacts/step.d.ts +26 -0
- package/dist/artifacts/step.d.ts.map +1 -0
- package/dist/artifacts/step.js +37 -0
- package/dist/artifacts/taint.d.ts +63 -0
- package/dist/artifacts/taint.d.ts.map +1 -0
- package/dist/artifacts/taint.js +76 -0
- package/dist/bakeoff/cache-sim.d.ts +99 -0
- package/dist/bakeoff/cache-sim.d.ts.map +1 -0
- package/dist/bakeoff/cache-sim.js +126 -0
- package/dist/bakeoff/engine.d.ts +52 -0
- package/dist/bakeoff/engine.d.ts.map +1 -0
- package/dist/bakeoff/engine.js +163 -0
- package/dist/bakeoff/eval-cases.d.ts +96 -0
- package/dist/bakeoff/eval-cases.d.ts.map +1 -0
- package/dist/bakeoff/eval-cases.js +105 -0
- package/dist/bakeoff/replay.d.ts +52 -0
- package/dist/bakeoff/replay.d.ts.map +1 -0
- package/dist/bakeoff/replay.js +94 -0
- package/dist/bakeoff/report.d.ts +41 -0
- package/dist/bakeoff/report.d.ts.map +1 -0
- package/dist/bakeoff/report.js +142 -0
- package/dist/bakeoff/samples.d.ts +77 -0
- package/dist/bakeoff/samples.d.ts.map +1 -0
- package/dist/bakeoff/samples.js +148 -0
- package/dist/bakeoff/stats.d.ts +13 -0
- package/dist/bakeoff/stats.d.ts.map +1 -0
- package/dist/bakeoff/stats.js +48 -0
- package/dist/bakeoff/types.d.ts +37 -0
- package/dist/bakeoff/types.d.ts.map +1 -0
- package/dist/bakeoff/types.js +10 -0
- package/dist/cli.d.ts +25 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +590 -0
- package/dist/config.d.ts +204 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +252 -0
- package/dist/deprecations.d.ts +32 -0
- package/dist/deprecations.d.ts.map +1 -0
- package/dist/deprecations.js +59 -0
- package/dist/feedback/coverage.d.ts +32 -0
- package/dist/feedback/coverage.d.ts.map +1 -0
- package/dist/feedback/coverage.js +95 -0
- package/dist/feedback/feedback.d.ts +35 -0
- package/dist/feedback/feedback.d.ts.map +1 -0
- package/dist/feedback/feedback.js +39 -0
- package/dist/gateway/http-protocol.d.ts +175 -0
- package/dist/gateway/http-protocol.d.ts.map +1 -0
- package/dist/gateway/http-protocol.js +105 -0
- package/dist/index.d.ts +242 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +576 -0
- package/dist/init/finder.d.ts +94 -0
- package/dist/init/finder.d.ts.map +1 -0
- package/dist/init/finder.js +343 -0
- package/dist/init/init-cli.d.ts +10 -0
- package/dist/init/init-cli.d.ts.map +1 -0
- package/dist/init/init-cli.js +86 -0
- package/dist/init/observe-cli.d.ts +19 -0
- package/dist/init/observe-cli.d.ts.map +1 -0
- package/dist/init/observe-cli.js +73 -0
- package/dist/init/observe.d.ts +81 -0
- package/dist/init/observe.d.ts.map +1 -0
- package/dist/init/observe.js +245 -0
- package/dist/init/run.d.ts +99 -0
- package/dist/init/run.d.ts.map +1 -0
- package/dist/init/run.js +281 -0
- package/dist/init/signatures.d.ts +39 -0
- package/dist/init/signatures.d.ts.map +1 -0
- package/dist/init/signatures.js +116 -0
- package/dist/matrix/aggregate.d.ts +89 -0
- package/dist/matrix/aggregate.d.ts.map +1 -0
- package/dist/matrix/aggregate.js +186 -0
- package/dist/query/grammar.d.ts +35 -0
- package/dist/query/grammar.d.ts.map +1 -0
- package/dist/query/grammar.js +279 -0
- package/dist/query/run.d.ts +8 -0
- package/dist/query/run.d.ts.map +1 -0
- package/dist/query/run.js +21 -0
- package/dist/registry/build.d.ts +219 -0
- package/dist/registry/build.d.ts.map +1 -0
- package/dist/registry/build.js +313 -0
- package/dist/registry/cache-policy.d.ts +94 -0
- package/dist/registry/cache-policy.d.ts.map +1 -0
- package/dist/registry/cache-policy.js +238 -0
- package/dist/registry/call-notes.d.ts +11 -0
- package/dist/registry/call-notes.d.ts.map +1 -0
- package/dist/registry/call-notes.js +110 -0
- package/dist/registry/claims.d.ts +63 -0
- package/dist/registry/claims.d.ts.map +1 -0
- package/dist/registry/claims.js +107 -0
- package/dist/registry/effective-rate.d.ts +151 -0
- package/dist/registry/effective-rate.d.ts.map +1 -0
- package/dist/registry/effective-rate.js +156 -0
- package/dist/registry/facts.d.ts +32 -0
- package/dist/registry/facts.d.ts.map +1 -0
- package/dist/registry/facts.js +136 -0
- package/dist/registry/fingerprint.d.ts +20 -0
- package/dist/registry/fingerprint.d.ts.map +1 -0
- package/dist/registry/fingerprint.js +150 -0
- package/dist/registry/parity.d.ts +52 -0
- package/dist/registry/parity.d.ts.map +1 -0
- package/dist/registry/parity.js +82 -0
- package/dist/registry/pricing-shape.d.ts +113 -0
- package/dist/registry/pricing-shape.d.ts.map +1 -0
- package/dist/registry/pricing-shape.js +123 -0
- package/dist/registry/pricing.d.ts +43 -0
- package/dist/registry/pricing.d.ts.map +1 -0
- package/dist/registry/pricing.js +127 -0
- package/dist/registry/rows.d.ts +16 -0
- package/dist/registry/rows.d.ts.map +1 -0
- package/dist/registry/rows.js +57 -0
- package/dist/registry/seed.d.ts +43 -0
- package/dist/registry/seed.d.ts.map +1 -0
- package/dist/registry/seed.js +97 -0
- package/dist/registry/select.d.ts +68 -0
- package/dist/registry/select.d.ts.map +1 -0
- package/dist/registry/select.js +141 -0
- package/dist/registry/staleness.d.ts +18 -0
- package/dist/registry/staleness.d.ts.map +1 -0
- package/dist/registry/staleness.js +39 -0
- package/dist/rigindex/bootstrap.d.ts +36 -0
- package/dist/rigindex/bootstrap.d.ts.map +1 -0
- package/dist/rigindex/bootstrap.js +97 -0
- package/dist/rigindex/fit.d.ts +24 -0
- package/dist/rigindex/fit.d.ts.map +1 -0
- package/dist/rigindex/fit.js +76 -0
- package/dist/rigindex/gates.d.ts +52 -0
- package/dist/rigindex/gates.d.ts.map +1 -0
- package/dist/rigindex/gates.js +109 -0
- package/dist/rigindex/graph.d.ts +31 -0
- package/dist/rigindex/graph.d.ts.map +1 -0
- package/dist/rigindex/graph.js +120 -0
- package/dist/rigindex/index.d.ts +23 -0
- package/dist/rigindex/index.d.ts.map +1 -0
- package/dist/rigindex/index.js +112 -0
- package/dist/rigindex/types.d.ts +76 -0
- package/dist/rigindex/types.d.ts.map +1 -0
- package/dist/rigindex/types.js +8 -0
- package/dist/routes/cache-lint.d.ts +41 -0
- package/dist/routes/cache-lint.d.ts.map +1 -0
- package/dist/routes/cache-lint.js +81 -0
- package/dist/routes/draft.d.ts +83 -0
- package/dist/routes/draft.d.ts.map +1 -0
- package/dist/routes/draft.js +135 -0
- package/dist/routes/loader.d.ts +63 -0
- package/dist/routes/loader.d.ts.map +1 -0
- package/dist/routes/loader.js +574 -0
- package/dist/routes/manifest.d.ts +24 -0
- package/dist/routes/manifest.d.ts.map +1 -0
- package/dist/routes/manifest.js +118 -0
- package/dist/routes/resolved-bundle.d.ts +79 -0
- package/dist/routes/resolved-bundle.d.ts.map +1 -0
- package/dist/routes/resolved-bundle.js +148 -0
- package/dist/routes/sampling-config.d.ts +32 -0
- package/dist/routes/sampling-config.d.ts.map +1 -0
- package/dist/routes/sampling-config.js +91 -0
- package/dist/routes/serveability.d.ts +52 -0
- package/dist/routes/serveability.d.ts.map +1 -0
- package/dist/routes/serveability.js +73 -0
- package/dist/routes/template.d.ts +18 -0
- package/dist/routes/template.d.ts.map +1 -0
- package/dist/routes/template.js +94 -0
- package/dist/run/ajv.d.ts +22 -0
- package/dist/run/ajv.d.ts.map +1 -0
- package/dist/run/ajv.js +32 -0
- package/dist/run/cache-handle.d.ts +58 -0
- package/dist/run/cache-handle.d.ts.map +1 -0
- package/dist/run/cache-handle.js +54 -0
- package/dist/run/cache-stamp.d.ts +65 -0
- package/dist/run/cache-stamp.d.ts.map +1 -0
- package/dist/run/cache-stamp.js +0 -0
- package/dist/run/capture-write.d.ts +33 -0
- package/dist/run/capture-write.d.ts.map +1 -0
- package/dist/run/capture-write.js +55 -0
- package/dist/run/cost.d.ts +26 -0
- package/dist/run/cost.d.ts.map +1 -0
- package/dist/run/cost.js +41 -0
- package/dist/run/dispatch.d.ts +99 -0
- package/dist/run/dispatch.d.ts.map +1 -0
- package/dist/run/dispatch.js +191 -0
- package/dist/run/envelope.d.ts +21 -0
- package/dist/run/envelope.d.ts.map +1 -0
- package/dist/run/envelope.js +45 -0
- package/dist/run/grounding.d.ts +56 -0
- package/dist/run/grounding.d.ts.map +1 -0
- package/dist/run/grounding.js +89 -0
- package/dist/run/raw.d.ts +88 -0
- package/dist/run/raw.d.ts.map +1 -0
- package/dist/run/raw.js +286 -0
- package/dist/run/record-attempt.d.ts +40 -0
- package/dist/run/record-attempt.d.ts.map +1 -0
- package/dist/run/record-attempt.js +99 -0
- package/dist/run/repair.d.ts +36 -0
- package/dist/run/repair.d.ts.map +1 -0
- package/dist/run/repair.js +61 -0
- package/dist/run/resolve.d.ts +99 -0
- package/dist/run/resolve.d.ts.map +1 -0
- package/dist/run/resolve.js +203 -0
- package/dist/run/retry.d.ts +19 -0
- package/dist/run/retry.d.ts.map +1 -0
- package/dist/run/retry.js +50 -0
- package/dist/run/run.d.ts +55 -0
- package/dist/run/run.d.ts.map +1 -0
- package/dist/run/run.js +540 -0
- package/dist/run/stream.d.ts +49 -0
- package/dist/run/stream.d.ts.map +1 -0
- package/dist/run/stream.js +87 -0
- package/dist/run/validate.d.ts +15 -0
- package/dist/run/validate.d.ts.map +1 -0
- package/dist/run/validate.js +55 -0
- package/dist/savings/cache-ledger.d.ts +108 -0
- package/dist/savings/cache-ledger.d.ts.map +1 -0
- package/dist/savings/cache-ledger.js +174 -0
- package/dist/savings/cache-reconcile.d.ts +64 -0
- package/dist/savings/cache-reconcile.d.ts.map +1 -0
- package/dist/savings/cache-reconcile.js +59 -0
- package/dist/savings/cache-stats.d.ts +63 -0
- package/dist/savings/cache-stats.d.ts.map +1 -0
- package/dist/savings/cache-stats.js +108 -0
- package/dist/savings/emit.d.ts +38 -0
- package/dist/savings/emit.d.ts.map +1 -0
- package/dist/savings/emit.js +100 -0
- package/dist/savings/odometer.d.ts +32 -0
- package/dist/savings/odometer.d.ts.map +1 -0
- package/dist/savings/odometer.js +70 -0
- package/dist/savings/swap-execute.d.ts +58 -0
- package/dist/savings/swap-execute.d.ts.map +1 -0
- package/dist/savings/swap-execute.js +130 -0
- package/dist/savings/swaps-client.d.ts +55 -0
- package/dist/savings/swaps-client.d.ts.map +1 -0
- package/dist/savings/swaps-client.js +95 -0
- package/dist/settings/api-fetcher.d.ts +39 -0
- package/dist/settings/api-fetcher.d.ts.map +1 -0
- package/dist/settings/api-fetcher.js +92 -0
- package/dist/settings/index.d.ts +10 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +15 -0
- package/dist/settings/task-settings.d.ts +91 -0
- package/dist/settings/task-settings.d.ts.map +1 -0
- package/dist/settings/task-settings.js +116 -0
- package/dist/status.d.ts +77 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +113 -0
- package/dist/telemetry/artifact-store.d.ts +48 -0
- package/dist/telemetry/artifact-store.d.ts.map +1 -0
- package/dist/telemetry/artifact-store.js +189 -0
- package/dist/telemetry/cache-miss-streak.d.ts +79 -0
- package/dist/telemetry/cache-miss-streak.d.ts.map +1 -0
- package/dist/telemetry/cache-miss-streak.js +99 -0
- package/dist/telemetry/capture.d.ts +31 -0
- package/dist/telemetry/capture.d.ts.map +1 -0
- package/dist/telemetry/capture.js +81 -0
- package/dist/telemetry/exporter-setup.d.ts +28 -0
- package/dist/telemetry/exporter-setup.d.ts.map +1 -0
- package/dist/telemetry/exporter-setup.js +34 -0
- package/dist/telemetry/exporter.d.ts +137 -0
- package/dist/telemetry/exporter.d.ts.map +1 -0
- package/dist/telemetry/exporter.js +510 -0
- package/dist/telemetry/health.d.ts +76 -0
- package/dist/telemetry/health.d.ts.map +1 -0
- package/dist/telemetry/health.js +92 -0
- package/dist/telemetry/ingest-protocol.d.ts +310 -0
- package/dist/telemetry/ingest-protocol.d.ts.map +1 -0
- package/dist/telemetry/ingest-protocol.js +363 -0
- package/dist/telemetry/load-error-report.d.ts +24 -0
- package/dist/telemetry/load-error-report.d.ts.map +1 -0
- package/dist/telemetry/load-error-report.js +50 -0
- package/dist/telemetry/otel-map.d.ts +121 -0
- package/dist/telemetry/otel-map.d.ts.map +1 -0
- package/dist/telemetry/otel-map.js +224 -0
- package/dist/telemetry/otel-normalize.d.ts +104 -0
- package/dist/telemetry/otel-normalize.d.ts.map +1 -0
- package/dist/telemetry/otel-normalize.js +530 -0
- package/dist/telemetry/otlp-emitter.d.ts +52 -0
- package/dist/telemetry/otlp-emitter.d.ts.map +1 -0
- package/dist/telemetry/otlp-emitter.js +144 -0
- package/dist/telemetry/otlp-proto.d.ts +29 -0
- package/dist/telemetry/otlp-proto.d.ts.map +1 -0
- package/dist/telemetry/otlp-proto.js +266 -0
- package/dist/telemetry/sinks.d.ts +90 -0
- package/dist/telemetry/sinks.d.ts.map +1 -0
- package/dist/telemetry/sinks.js +180 -0
- package/dist/telemetry/store.d.ts +65 -0
- package/dist/telemetry/store.d.ts.map +1 -0
- package/dist/telemetry/store.js +547 -0
- package/dist/tenancy/api-key-format.d.ts +77 -0
- package/dist/tenancy/api-key-format.d.ts.map +1 -0
- package/dist/tenancy/api-key-format.js +110 -0
- package/dist/tenancy/constants.d.ts +23 -0
- package/dist/tenancy/constants.d.ts.map +1 -0
- package/dist/tenancy/constants.js +25 -0
- package/dist/tenancy/scrub.d.ts +47 -0
- package/dist/tenancy/scrub.d.ts.map +1 -0
- package/dist/tenancy/scrub.js +85 -0
- package/dist/types/config-teaching.d.ts +62 -0
- package/dist/types/config-teaching.d.ts.map +1 -0
- package/dist/types/config-teaching.js +183 -0
- package/dist/types/failures-teaching.d.ts +56 -0
- package/dist/types/failures-teaching.d.ts.map +1 -0
- package/dist/types/failures-teaching.js +177 -0
- package/dist/types/failures.d.ts +27 -0
- package/dist/types/failures.d.ts.map +1 -0
- package/dist/types/failures.js +41 -0
- package/dist/types/provider.d.ts +200 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +40 -0
- package/dist/types/route.d.ts +205 -0
- package/dist/types/route.d.ts.map +1 -0
- package/dist/types/route.js +6 -0
- package/dist/types/telemetry.d.ts +206 -0
- package/dist/types/telemetry.d.ts.map +1 -0
- package/dist/types/telemetry.js +6 -0
- package/dist/validate-cli.d.ts +12 -0
- package/dist/validate-cli.d.ts.map +1 -0
- package/dist/validate-cli.js +57 -0
- package/dist/verify/capture.d.ts +66 -0
- package/dist/verify/capture.d.ts.map +1 -0
- package/dist/verify/capture.js +180 -0
- package/dist/verify/cli-run.d.ts +23 -0
- package/dist/verify/cli-run.d.ts.map +1 -0
- package/dist/verify/cli-run.js +57 -0
- package/dist/verify/diff.d.ts +48 -0
- package/dist/verify/diff.d.ts.map +1 -0
- package/dist/verify/diff.js +157 -0
- package/dist/verify/index.d.ts +17 -0
- package/dist/verify/index.d.ts.map +1 -0
- package/dist/verify/index.js +24 -0
- package/dist/verify/report.d.ts +14 -0
- package/dist/verify/report.d.ts.map +1 -0
- package/dist/verify/report.js +88 -0
- package/dist/verify/types.d.ts +101 -0
- package/dist/verify/types.d.ts.map +1 -0
- package/dist/verify/types.js +17 -0
- package/dist/verify/verify.d.ts +29 -0
- package/dist/verify/verify.d.ts.map +1 -0
- package/dist/verify/verify.js +148 -0
- package/dist/watch/budget.d.ts +19 -0
- package/dist/watch/budget.d.ts.map +1 -0
- package/dist/watch/budget.js +35 -0
- package/dist/watch/evaluate.d.ts +225 -0
- package/dist/watch/evaluate.d.ts.map +1 -0
- package/dist/watch/evaluate.js +155 -0
- package/dist/watch/monitor.d.ts +116 -0
- package/dist/watch/monitor.d.ts.map +1 -0
- package/dist/watch/monitor.js +199 -0
- package/dist/watch/proposals.d.ts +89 -0
- package/dist/watch/proposals.d.ts.map +1 -0
- package/dist/watch/proposals.js +197 -0
- package/dist/watch/run-record.d.ts +64 -0
- package/dist/watch/run-record.d.ts.map +1 -0
- package/dist/watch/run-record.js +86 -0
- package/dist/watch/run-reported.d.ts +20 -0
- package/dist/watch/run-reported.d.ts.map +1 -0
- package/dist/watch/run-reported.js +53 -0
- package/dist/watch/run.d.ts +73 -0
- package/dist/watch/run.d.ts.map +1 -0
- package/dist/watch/run.js +83 -0
- package/dist/watch/state-store.d.ts +48 -0
- package/dist/watch/state-store.d.ts.map +1 -0
- package/dist/watch/state-store.js +86 -0
- package/dist/watch/state.d.ts +21 -0
- package/dist/watch/state.d.ts.map +1 -0
- package/dist/watch/state.js +93 -0
- package/package.json +56 -14
- package/registry/LICENSE +20 -0
- package/registry/leaderboard.json +3639 -0
- package/registry/registry.json +7263 -0
- package/index.js +0 -3
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Candidate resolution — plan §4. THE ONLY constructor of CandidateRef in the
|
|
4
|
+
* codebase (the candidate-set invariant is enforced here structurally).
|
|
5
|
+
* Phase 1 selection: first candidate whose static capability flags satisfy
|
|
6
|
+
* route.require, ordered by prefer:[cost] via the pricing snapshot; on a
|
|
7
|
+
* retryable failure the run loop asks for the next candidate.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.resolveCandidates = resolveCandidates;
|
|
11
|
+
exports.applyRunRequirements = applyRunRequirements;
|
|
12
|
+
exports.candidateFilterFromOptions = candidateFilterFromOptions;
|
|
13
|
+
exports.filterSummary = filterSummary;
|
|
14
|
+
exports.mintRawCandidate = mintRawCandidate;
|
|
15
|
+
exports.resolveDeclaredCandidate = resolveDeclaredCandidate;
|
|
16
|
+
function satisfiesRequirements(route, flags, searchAvailable) {
|
|
17
|
+
for (const requirement of route.require) {
|
|
18
|
+
switch (requirement) {
|
|
19
|
+
case "schema_conformant":
|
|
20
|
+
// The native rung demands native strict enforcement; the json_mode
|
|
21
|
+
// rung accepts either mechanism (a native-capable model still serves
|
|
22
|
+
// a json_mode route).
|
|
23
|
+
if (route.policy.json === "native") {
|
|
24
|
+
if (!flags.has("structured_native"))
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
else if (!flags.has("structured_native") && !flags.has("json_mode")) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
case "grounded":
|
|
32
|
+
// Phase 3 WS3: a configured search provider satisfies `grounded` for
|
|
33
|
+
// candidates without native grounding — the run loop orchestrates
|
|
34
|
+
// search-and-inject for them.
|
|
35
|
+
if (!flags.has("grounded_native") && !searchAvailable)
|
|
36
|
+
return false;
|
|
37
|
+
break;
|
|
38
|
+
case "trace_visible":
|
|
39
|
+
// Phase 3 WS6: reasoning-observability — the model's chain of thought
|
|
40
|
+
// is exposed to the caller (regulated/audit buyers hard-require this).
|
|
41
|
+
if (!flags.has("trace_visible"))
|
|
42
|
+
return false;
|
|
43
|
+
break;
|
|
44
|
+
case "zero_retention":
|
|
45
|
+
// G-3: opt-in data-governance filter. Route only to endpoints the
|
|
46
|
+
// credential-scoped registry facts designate zero-retention (claims.ts
|
|
47
|
+
// → facts.ts materializes the flag under the managed/any scope). A hard
|
|
48
|
+
// capability filter exactly like trace_visible; the empty-set case falls
|
|
49
|
+
// through to the existing no-eligible-candidate path (fail-closed — never
|
|
50
|
+
// a silent non-ZDR dispatch). The claim ceiling: "route only to
|
|
51
|
+
// zero-retention–designated endpoints," never "verified non-retention."
|
|
52
|
+
if (!flags.has("zero_retention"))
|
|
53
|
+
return false;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
function resolveCandidates(route, capabilities, costUsdPerMTok, searchAvailable = false, filter, shadowWarmth) {
|
|
60
|
+
// Filter order (spec §4.1): provider only → provider ignore → capability+ZDR
|
|
61
|
+
// → maxPrice → prefer:[cost]. When `filter` is absent every step is a no-op,
|
|
62
|
+
// so the path is byte-for-byte the pre-G-2 behavior (back-compat).
|
|
63
|
+
let pool = route.candidates;
|
|
64
|
+
if (filter?.only && filter.only.length > 0) {
|
|
65
|
+
const only = new Set(filter.only);
|
|
66
|
+
pool = pool.filter((c) => only.has(c.provider));
|
|
67
|
+
}
|
|
68
|
+
if (filter?.ignore && filter.ignore.length > 0) {
|
|
69
|
+
const ignore = new Set(filter.ignore);
|
|
70
|
+
pool = pool.filter((c) => !ignore.has(c.provider));
|
|
71
|
+
}
|
|
72
|
+
let eligible = pool.filter((c) => satisfiesRequirements(route, capabilities(c.provider, c.model), searchAvailable));
|
|
73
|
+
if (filter?.maxPriceUsdPerMTok != null) {
|
|
74
|
+
const cap = filter.maxPriceUsdPerMTok;
|
|
75
|
+
// Unknown cost + a ceiling set → DROP (fail-closed: we can't prove it is
|
|
76
|
+
// under the cap; same stance as the envelope on unpriced models).
|
|
77
|
+
eligible = eligible.filter((c) => {
|
|
78
|
+
const usd = costUsdPerMTok(c.provider, c.model);
|
|
79
|
+
return usd !== null && usd <= cap;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// prefer: [cost] — ascending, unknown cost sorts last, stable otherwise.
|
|
83
|
+
// "latency" is advisory in Phase 1 (no probe data): declared order stands.
|
|
84
|
+
const ordered = [...eligible];
|
|
85
|
+
if (route.prefer.includes("cost")) {
|
|
86
|
+
const cost = (c) => {
|
|
87
|
+
const usd = costUsdPerMTok(c.provider, c.model);
|
|
88
|
+
return usd === null ? Number.POSITIVE_INFINITY : usd;
|
|
89
|
+
};
|
|
90
|
+
ordered.sort((a, b) => cost(a) - cost(b));
|
|
91
|
+
// SHADOW MODE (spec §5.5, step 8): compute what ordering by cache-ADJUSTED
|
|
92
|
+
// effective cost would recommend, log chosen-vs-recommended, and DO NOTHING
|
|
93
|
+
// ELSE. `ordered` (the list-cost order) is what we return — warmth never
|
|
94
|
+
// flips a route this mission. A no-op when `shadowWarmth` is absent, so the
|
|
95
|
+
// returned order is byte-identical to the pre-WS-B resolver.
|
|
96
|
+
//
|
|
97
|
+
// WRAPPED so shadow-mode is STRICTLY non-interfering: this is the actuation
|
|
98
|
+
// path (the only CandidateRef minter). A throwing warmth/log callback is a
|
|
99
|
+
// shadow-observation bug and must NEVER take down live candidate resolution
|
|
100
|
+
// — swallow it. `ordered` is already fixed above; nothing here can change it.
|
|
101
|
+
if (shadowWarmth !== undefined) {
|
|
102
|
+
try {
|
|
103
|
+
const effCost = (c) => {
|
|
104
|
+
const usd = shadowWarmth.effectiveCostUsdPerMTok(c.provider, c.model);
|
|
105
|
+
return usd === null ? Number.POSITIVE_INFINITY : usd;
|
|
106
|
+
};
|
|
107
|
+
const recommended = [...eligible].sort((a, b) => effCost(a) - effCost(b));
|
|
108
|
+
const same = recommended.length === ordered.length &&
|
|
109
|
+
recommended.every((c, i) => c.provider === ordered[i].provider && c.model === ordered[i].model);
|
|
110
|
+
shadowWarmth.log({
|
|
111
|
+
route: route.route,
|
|
112
|
+
chosen: ordered.map((c) => ({ provider: c.provider, model: c.model })),
|
|
113
|
+
recommended: recommended.map((c) => ({ provider: c.provider, model: c.model })),
|
|
114
|
+
diverged: !same,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Shadow observation failed — intentionally ignored. Routing proceeds on
|
|
119
|
+
// the list-cost order exactly as if no warmth had been supplied.
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// THE brand site — the only place in the codebase a CandidateRef may be
|
|
124
|
+
// minted. The cast below is the single sanctioned exception to the
|
|
125
|
+
// "no `as CandidateRef`" grep (scoped to run/resolve.ts in CI).
|
|
126
|
+
const refs = ordered.map((c) => Object.freeze({ provider: c.provider, model: c.model }));
|
|
127
|
+
let index = 0;
|
|
128
|
+
return {
|
|
129
|
+
next() {
|
|
130
|
+
return index < refs.length ? refs[index++] : null;
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Per-run requirement opt-ins (G-3). A caller can demand zero-retention routing
|
|
136
|
+
* for a single run without editing the route bundle: `zero_retention` is unioned
|
|
137
|
+
* into the effective `require`, so the existing satisfiesRequirements filter, the
|
|
138
|
+
* no-eligible-candidate message, and the fail-closed empty-set path all apply
|
|
139
|
+
* unchanged. Additive only — a run opts INTO a stricter requirement, never OUT of
|
|
140
|
+
* a route's declared one (opting out would be a governance downgrade).
|
|
141
|
+
*/
|
|
142
|
+
function applyRunRequirements(route, zeroRetention) {
|
|
143
|
+
if (!zeroRetention || route.require.includes("zero_retention"))
|
|
144
|
+
return route;
|
|
145
|
+
return Object.freeze({
|
|
146
|
+
...route,
|
|
147
|
+
require: Object.freeze([...route.require, "zero_retention"]),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/** Map a run's RunOptions to a CandidateFilter (G-2), or undefined when no knob
|
|
151
|
+
* is set — so the resolver takes the byte-identical pre-G-2 path (back-compat). */
|
|
152
|
+
function candidateFilterFromOptions(opts) {
|
|
153
|
+
const only = opts.providers?.only;
|
|
154
|
+
const ignore = opts.providers?.ignore;
|
|
155
|
+
const max = opts.maxPriceUsdPerMTok;
|
|
156
|
+
if (max == null && (only?.length ?? 0) === 0 && (ignore?.length ?? 0) === 0)
|
|
157
|
+
return undefined;
|
|
158
|
+
return {
|
|
159
|
+
...(max != null ? { maxPriceUsdPerMTok: max } : {}),
|
|
160
|
+
...(only ? { only } : {}),
|
|
161
|
+
...(ignore ? { ignore } : {}),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/** A human-readable suffix naming the binding request-time filters, for the
|
|
165
|
+
* existing no-eligible-candidate error (spec §4.3 — explainability, not a new
|
|
166
|
+
* error class). Empty when no filter is set. */
|
|
167
|
+
function filterSummary(opts) {
|
|
168
|
+
const parts = [];
|
|
169
|
+
if (opts.maxPriceUsdPerMTok != null)
|
|
170
|
+
parts.push(`maxPrice ≤ $${opts.maxPriceUsdPerMTok}/MTok`);
|
|
171
|
+
if (opts.providers?.only?.length)
|
|
172
|
+
parts.push(`only=[${opts.providers.only.join(", ")}]`);
|
|
173
|
+
if (opts.providers?.ignore?.length)
|
|
174
|
+
parts.push(`ignore=[${opts.providers.ignore.join(", ")}]`);
|
|
175
|
+
return parts.length > 0 ? ` and request filters {${parts.join("; ")}}` : "";
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Mint a CandidateRef for the RAW LANE (http-gateway spec §4.2) — a
|
|
179
|
+
* `provider/model` the caller named explicitly, dispatched at zero margin on
|
|
180
|
+
* the caller's own BYOK key with NO route and NO verified pipeline.
|
|
181
|
+
*
|
|
182
|
+
* The candidate-set invariant guards against substituting a model outside a
|
|
183
|
+
* ROUTE's declared list; a route-free, explicitly-named passthrough is outside
|
|
184
|
+
* that invariant's scope by construction (there is no list to escape). This is
|
|
185
|
+
* the ONE sanctioned brand site for it, so the "no `as CandidateRef`" grep stays
|
|
186
|
+
* clean and the brand stays centralized here. The authorization that replaces
|
|
187
|
+
* route membership lives server-side: the raw lane dispatches only after
|
|
188
|
+
* `resolveProviderKeyForCall` returns a BYOK key fail-closed (spec §4.2).
|
|
189
|
+
*/
|
|
190
|
+
function mintRawCandidate(provider, model) {
|
|
191
|
+
return Object.freeze({ provider, model });
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Mint a CandidateRef for a SPECIFIC declared candidate (the repair rung's
|
|
195
|
+
* designated repair model — loader-validated to be in the route's candidate
|
|
196
|
+
* list; re-checked here). Same brand site, same sanctioned-cast scope.
|
|
197
|
+
*/
|
|
198
|
+
function resolveDeclaredCandidate(route, spec) {
|
|
199
|
+
const declared = route.candidates.some((c) => c.provider === spec.provider && c.model === spec.model);
|
|
200
|
+
if (!declared)
|
|
201
|
+
return null;
|
|
202
|
+
return Object.freeze({ provider: spec.provider, model: spec.model });
|
|
203
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-class retry accounting — spec §2, plan §4. Budgets are NON-FUNGIBLE:
|
|
3
|
+
* exhausting one class never consumes another. Terminal classes
|
|
4
|
+
* (budget_exhausted, invariant_violation) are never retried.
|
|
5
|
+
*/
|
|
6
|
+
import type { FailureClass } from "../types/failures";
|
|
7
|
+
import type { RoutePolicy } from "../types/route";
|
|
8
|
+
export interface RetryLedger {
|
|
9
|
+
/** True if a retry is permitted for this class (and consumes one unit). */
|
|
10
|
+
consume(cls: FailureClass): boolean;
|
|
11
|
+
remaining(cls: FailureClass): number;
|
|
12
|
+
snapshot(): Partial<Record<FailureClass, number>>;
|
|
13
|
+
/** Backoff before the retry the most recent consume() granted — per-class:
|
|
14
|
+
* exponential for capacity_shed (30s base, mirrors the production flex
|
|
15
|
+
* backoff ladder) and network (1s base); immediate for content classes. */
|
|
16
|
+
delayMs(cls: FailureClass): number;
|
|
17
|
+
}
|
|
18
|
+
export declare function createRetryLedger(policy: RoutePolicy): RetryLedger;
|
|
19
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/run/retry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC;IACrC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD;;+EAE2E;IAC3E,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC;CACpC;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAsClE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Per-class retry accounting — spec §2, plan §4. Budgets are NON-FUNGIBLE:
|
|
4
|
+
* exhausting one class never consumes another. Terminal classes
|
|
5
|
+
* (budget_exhausted, invariant_violation) are never retried.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createRetryLedger = createRetryLedger;
|
|
9
|
+
const failures_1 = require("../types/failures");
|
|
10
|
+
const CAPACITY_BACKOFF_MS = [30000, 60000, 120000, 240000];
|
|
11
|
+
const NETWORK_BACKOFF_BASE_MS = 1000;
|
|
12
|
+
const NETWORK_BACKOFF_CAP_MS = 30000;
|
|
13
|
+
function createRetryLedger(policy) {
|
|
14
|
+
const used = new Map();
|
|
15
|
+
function budget(cls) {
|
|
16
|
+
return policy.retries[cls] ?? 0;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
consume(cls) {
|
|
20
|
+
if (failures_1.TERMINAL_CLASSES.has(cls))
|
|
21
|
+
return false;
|
|
22
|
+
const attemptsUsed = used.get(cls) ?? 0;
|
|
23
|
+
if (attemptsUsed >= budget(cls))
|
|
24
|
+
return false;
|
|
25
|
+
used.set(cls, attemptsUsed + 1);
|
|
26
|
+
return true;
|
|
27
|
+
},
|
|
28
|
+
remaining(cls) {
|
|
29
|
+
if (failures_1.TERMINAL_CLASSES.has(cls))
|
|
30
|
+
return 0;
|
|
31
|
+
return Math.max(0, budget(cls) - (used.get(cls) ?? 0));
|
|
32
|
+
},
|
|
33
|
+
snapshot() {
|
|
34
|
+
const out = {};
|
|
35
|
+
for (const [cls, n] of used)
|
|
36
|
+
out[cls] = n;
|
|
37
|
+
return out;
|
|
38
|
+
},
|
|
39
|
+
delayMs(cls) {
|
|
40
|
+
const attempt = Math.max(0, (used.get(cls) ?? 1) - 1);
|
|
41
|
+
if (cls === "capacity_shed") {
|
|
42
|
+
return CAPACITY_BACKOFF_MS[Math.min(attempt, CAPACITY_BACKOFF_MS.length - 1)];
|
|
43
|
+
}
|
|
44
|
+
if (cls === "network") {
|
|
45
|
+
return Math.min(NETWORK_BACKOFF_BASE_MS * 2 ** attempt, NETWORK_BACKOFF_CAP_MS);
|
|
46
|
+
}
|
|
47
|
+
return 0;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The run loop — spec §4, plan §4/step 6. State machine:
|
|
3
|
+
* resolve → render → (envelope check) → dispatch → validate
|
|
4
|
+
* → retry per failure class | advance candidate | fail typed | succeed
|
|
5
|
+
* → record telemetry on every INFERENCE exit path (RouteConfigError exits
|
|
6
|
+
* record nothing by design — config errors precede any dispatch; C1
|
|
7
|
+
* ruling 2 / finding F3).
|
|
8
|
+
*/
|
|
9
|
+
import type { LoadedRoutes } from "../routes/loader";
|
|
10
|
+
import type { ProviderAdapter } from "../types/provider";
|
|
11
|
+
import type { RigManifest } from "../routes/manifest";
|
|
12
|
+
import type { RunOptions, RunResult } from "../types/route";
|
|
13
|
+
import type { TelemetryStore } from "../types/telemetry";
|
|
14
|
+
import type { CaptureStore } from "../telemetry/capture";
|
|
15
|
+
import type { CapabilityLookup } from "./resolve";
|
|
16
|
+
import type { SearchProvider } from "./grounding";
|
|
17
|
+
import type { StreamDeltaSink } from "./dispatch";
|
|
18
|
+
import type { TaskSettingsResolver } from "../settings/task-settings";
|
|
19
|
+
export interface RunDeps {
|
|
20
|
+
readonly routes: LoadedRoutes;
|
|
21
|
+
readonly adapters: ReadonlyMap<string, ProviderAdapter>;
|
|
22
|
+
readonly telemetry: TelemetryStore;
|
|
23
|
+
readonly capabilities: CapabilityLookup;
|
|
24
|
+
/** Budget for envelopes first opened by this rig (see envelope.ts default). */
|
|
25
|
+
readonly envelopeBudgetUsd?: number;
|
|
26
|
+
/** Addendum A1: USD per million tokens charged against an ACTIVE envelope
|
|
27
|
+
* when a model has no pricing entry — envelopes fail closed, never free.
|
|
28
|
+
* Deliberately generous-high by default. */
|
|
29
|
+
readonly unpricedRateUsdPerMTok?: number;
|
|
30
|
+
/** Rig manifest (declared dimensions) — null/omitted when no rig.yaml. */
|
|
31
|
+
readonly manifest?: RigManifest | null;
|
|
32
|
+
/** Local-only capture store (Phase 3 WS4) — writes gated per route by the
|
|
33
|
+
* bundle's `capture: true`; null/omitted disables capture entirely. */
|
|
34
|
+
readonly captures?: CaptureStore | null;
|
|
35
|
+
/** Search provider for the grounding-inject rung (Phase 3 WS3) —
|
|
36
|
+
* null/omitted means `require: grounded` resolves natively-grounded
|
|
37
|
+
* candidates only. */
|
|
38
|
+
readonly search?: SearchProvider | null;
|
|
39
|
+
/** Injectable backoff sleep — tests pass a no-op. */
|
|
40
|
+
readonly sleep?: (ms: number) => Promise<void>;
|
|
41
|
+
/** Streaming side-channel (G-1/G-5 Phase A). When set AND the serving
|
|
42
|
+
* adapter can stream, the primary attempt forwards raw text deltas here as
|
|
43
|
+
* they arrive; the buffered terminal result still drives validation/telemetry
|
|
44
|
+
* unchanged. `rig.runStream()` wires this; `rig.run()` leaves it undefined. */
|
|
45
|
+
readonly onStreamDelta?: StreamDeltaSink;
|
|
46
|
+
/** Control-plane task-settings resolver (settings-plane §1.5) — present only
|
|
47
|
+
* in api mode. The capture-WRITE gate consults it: `effectiveCapture` lets a
|
|
48
|
+
* control-plane flip WIN over the YAML `capture:` flag (a console flip turns
|
|
49
|
+
* capture on/off with no redeploy), and the task's scrub setting governs
|
|
50
|
+
* content before a capture row is written. null/omitted = local-only (the
|
|
51
|
+
* YAML flag governs, no per-task scrub policy). */
|
|
52
|
+
readonly settings?: TaskSettingsResolver | null;
|
|
53
|
+
}
|
|
54
|
+
export declare function run(deps: RunDeps, routeName: string, opts: RunOptions): Promise<RunResult>;
|
|
55
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run/run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrD,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,mBAAmB,CAAC;AAGvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAsC,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAQlD,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,aAAa,CAAC;AASpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,+EAA+E;IAC/E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;gDAE4C;IAC5C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC;2EACuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC;;0BAEsB;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACxC,qDAAqD;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;mFAG+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;IACzC;;;;;uDAKmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACjD;AAsED,wBAAsB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAoiBhG"}
|