niceeval 0.15.1-canary.76 → 0.16.1
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/INDEX.md +45 -40
- package/dist/adapter-execution-trace.cjs.map +1 -1
- package/dist/adapter-execution-trace.d.cts +26 -0
- package/dist/adapter-execution-trace.d.mts +26 -0
- package/dist/adapter-execution-trace.d.ts +26 -0
- package/dist/adapter-usage.cjs.map +1 -1
- package/dist/adapter-usage.d.cts +9 -0
- package/dist/adapter-usage.d.mts +9 -0
- package/dist/adapter-usage.d.ts +9 -0
- package/dist/adapter.cjs +19 -4
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +37 -12
- package/dist/adapter.d.mts +37 -12
- package/dist/adapter.d.ts +37 -12
- package/dist/agents/ai-sdk.cjs +3 -0
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/bub.cjs +3 -0
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/claude-code-native.cjs +28 -2
- package/dist/agents/claude-code-native.cjs.map +1 -1
- package/dist/agents/claude-code.cjs +3 -0
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/codex.cjs +3 -0
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/coding-cli-versions.cjs +9 -10
- package/dist/agents/coding-cli-versions.cjs.map +1 -1
- package/dist/agents/coding-cli-versions.d.cts +1 -1
- package/dist/agents/coding-cli-versions.d.mts +1 -1
- package/dist/agents/coding-cli-versions.d.ts +1 -1
- package/dist/agents/deepseek-harness.cjs +3 -0
- package/dist/agents/deepseek-harness.cjs.map +1 -1
- package/dist/agents/hermes.cjs +3 -0
- package/dist/agents/hermes.cjs.map +1 -1
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +3 -2
- package/dist/agents/index.d.mts +3 -2
- package/dist/agents/index.d.ts +3 -2
- package/dist/agents/omp.cjs +3 -0
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/openai-compat.cjs +6 -0
- package/dist/agents/openai-compat.cjs.map +1 -1
- package/dist/agents/openclaw.cjs +3 -0
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/opencode.cjs +3 -0
- package/dist/agents/opencode.cjs.map +1 -1
- package/dist/agents/sdk-streams.cjs +9 -0
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/ui-message-stream.cjs +3 -0
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +27 -5
- package/dist/assertions/api.d.mts +27 -5
- package/dist/assertions/api.d.ts +27 -5
- package/dist/assertions/collection.cjs +6 -0
- package/dist/assertions/collection.cjs.map +1 -1
- package/dist/assertions/collection.d.cts +4 -2
- package/dist/assertions/collection.d.mts +4 -2
- package/dist/assertions/collection.d.ts +4 -2
- package/dist/assertions/collection.js +12 -8
- package/dist/assertions/context-match.cjs +70 -0
- package/dist/assertions/context-match.cjs.map +1 -0
- package/dist/assertions/context-match.d.cts +107 -0
- package/dist/assertions/context-match.d.mts +107 -0
- package/dist/assertions/context-match.d.ts +107 -0
- package/dist/assertions/context-match.js +12 -0
- package/dist/assertions/context-match.js.map +1 -0
- package/dist/assertions/full-content.cjs +109 -0
- package/dist/assertions/full-content.cjs.map +1 -0
- package/dist/assertions/full-content.d.cts +6 -0
- package/dist/assertions/full-content.d.mts +6 -0
- package/dist/assertions/full-content.d.ts +6 -0
- package/dist/assertions/full-content.js +12 -0
- package/dist/assertions/full-content.js.map +1 -0
- package/dist/assertions/judge-presets.cjs +2 -34
- package/dist/assertions/judge-presets.cjs.map +1 -1
- package/dist/assertions/judge-presets.d.cts +6 -9
- package/dist/assertions/judge-presets.d.mts +6 -9
- package/dist/assertions/judge-presets.d.ts +6 -9
- package/dist/assertions/judge-presets.js +8 -8
- package/dist/assertions/judge.cjs +107 -29
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/judge.d.cts +2 -0
- package/dist/assertions/judge.d.mts +2 -0
- package/dist/assertions/judge.d.ts +2 -0
- package/dist/assertions/match.cjs +244 -5
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +43 -3
- package/dist/assertions/match.d.mts +43 -3
- package/dist/assertions/match.d.ts +43 -3
- package/dist/assertions/match.js +88 -78
- package/dist/assertions/material.cjs +520 -0
- package/dist/assertions/material.cjs.map +1 -0
- package/dist/assertions/material.d.cts +56 -0
- package/dist/assertions/material.d.mts +56 -0
- package/dist/assertions/material.d.ts +56 -0
- package/dist/assertions/material.js +20 -0
- package/dist/assertions/material.js.map +1 -0
- package/dist/assertions/record/attachment.cjs +5 -2
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/codec.cjs +2 -1
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +6 -1
- package/dist/assertions/record/model.d.mts +6 -1
- package/dist/assertions/record/model.d.ts +6 -1
- package/dist/assertions/runtime.cjs +207 -14
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/assertions/runtime.d.cts +9 -0
- package/dist/assertions/runtime.d.mts +9 -0
- package/dist/assertions/runtime.d.ts +9 -0
- package/dist/assertions/runtime.js +14 -8
- package/dist/assertions/score-match-audit.cjs +18 -8
- package/dist/assertions/score-match-audit.cjs.map +1 -1
- package/dist/assertions/score-match-gateway.cjs +83 -25
- package/dist/assertions/score-match-gateway.cjs.map +1 -1
- package/dist/assertions/score-match-gateway.d.cts +2 -0
- package/dist/assertions/score-match-gateway.d.mts +2 -0
- package/dist/assertions/score-match-gateway.d.ts +2 -0
- package/dist/assertions/value-composition.test-d.cjs +77 -0
- package/dist/assertions/value-composition.test-d.cjs.map +1 -0
- package/dist/assertions/value-composition.test-d.d.cts +1 -0
- package/dist/assertions/value-composition.test-d.d.mts +1 -0
- package/dist/assertions/value-composition.test-d.d.ts +1 -0
- package/dist/assertions/value-composition.test-d.js +4 -0
- package/dist/assertions/value-composition.test-d.js.map +1 -0
- package/dist/context/assert-first.cjs +207 -213
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +49 -23
- package/dist/context/assert-first.d.mts +49 -23
- package/dist/context/assert-first.d.ts +49 -23
- package/dist/context/session.cjs +111 -9
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +18 -0
- package/dist/context/session.d.mts +18 -0
- package/dist/context/session.d.ts +18 -0
- package/dist/define.cjs +17 -1
- package/dist/define.cjs.map +1 -1
- package/dist/eval/cli/contribution.cjs +2 -0
- package/dist/eval/cli/contribution.cjs.map +1 -1
- package/dist/eval/host/index.cjs +2 -0
- package/dist/eval/host/index.cjs.map +1 -1
- package/dist/eval/record/evaluation.cjs +3 -0
- package/dist/eval/record/evaluation.cjs.map +1 -1
- package/dist/eval/record/membership-provenance.d.cts +15 -15
- package/dist/eval/record/membership-provenance.d.mts +15 -15
- package/dist/eval/record/membership-provenance.d.ts +15 -15
- package/dist/eval/record/score.cjs +7 -0
- package/dist/eval/record/score.cjs.map +1 -1
- package/dist/eval/record/sealed-assertion.cjs +3 -0
- package/dist/eval/record/sealed-assertion.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +7 -0
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/expect/index.cjs +8 -2
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +9 -4
- package/dist/expect/index.d.mts +9 -4
- package/dist/expect/index.d.ts +9 -4
- package/dist/expect/index.js +72 -62
- package/dist/expect/index.mjs +72 -62
- package/dist/experiment/host/cli/contribution.cjs +37 -23
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +9 -1
- package/dist/experiment/host/cli/contribution.d.mts +9 -1
- package/dist/experiment/host/cli/contribution.d.ts +9 -1
- package/dist/experiment/host/current.cjs +74 -0
- package/dist/experiment/host/current.cjs.map +1 -0
- package/dist/experiment/host/current.d.cts +33 -0
- package/dist/experiment/host/current.d.mts +33 -0
- package/dist/experiment/host/current.d.ts +33 -0
- package/dist/experiment/host/current.js +10 -0
- package/dist/experiment/host/current.js.map +1 -0
- package/dist/experiment/host/index.cjs +17 -174
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +8 -54
- package/dist/experiment/host/index.d.mts +8 -54
- package/dist/experiment/host/index.d.ts +8 -54
- package/dist/experiment/host/operations.cjs +33 -10
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/operations.d.cts +29 -1
- package/dist/experiment/host/operations.d.mts +29 -1
- package/dist/experiment/host/operations.d.ts +29 -1
- package/dist/experiment/host/operations.js +6 -4
- package/dist/experiment/host/requirements.cjs +3 -0
- package/dist/experiment/host/requirements.cjs.map +1 -0
- package/dist/experiment/host/requirements.d.cts +3 -0
- package/dist/experiment/host/requirements.d.mts +3 -0
- package/dist/experiment/host/requirements.d.ts +3 -0
- package/dist/experiment/host/requirements.js +4 -0
- package/dist/experiment/host/requirements.js.map +1 -0
- package/dist/experiment/host/runtime.cjs +179 -0
- package/dist/experiment/host/runtime.cjs.map +1 -0
- package/dist/experiment/host/runtime.d.cts +79 -0
- package/dist/experiment/host/runtime.d.mts +79 -0
- package/dist/experiment/host/runtime.d.ts +79 -0
- package/dist/experiment/host/runtime.js +6 -0
- package/dist/experiment/host/runtime.js.map +1 -0
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +17 -16
- package/dist/experiment/host/types.d.mts +17 -16
- package/dist/experiment/host/types.d.ts +17 -16
- package/dist/fresh-import.cjs +2 -1
- package/dist/fresh-import.cjs.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -6
- package/dist/index.d.mts +12 -6
- package/dist/index.d.ts +12 -6
- package/dist/index.js +32 -30
- package/dist/index.mjs +32 -30
- package/dist/inspection/artifacts.cjs +83 -54
- package/dist/inspection/artifacts.cjs.map +1 -1
- package/dist/inspection/artifacts.d.cts +8 -0
- package/dist/inspection/artifacts.d.mts +8 -0
- package/dist/inspection/artifacts.d.ts +8 -0
- package/dist/inspection/artifacts.js +2 -0
- package/dist/inspection/assertions.cjs +4 -1
- package/dist/inspection/assertions.cjs.map +1 -1
- package/dist/inspection/cli/contribution.cjs +27 -4
- package/dist/inspection/cli/contribution.cjs.map +1 -1
- package/dist/inspection/cli/contribution.d.cts +2 -1
- package/dist/inspection/cli/contribution.d.mts +2 -1
- package/dist/inspection/cli/contribution.d.ts +2 -1
- package/dist/inspection/execution-traces.cjs +114 -8
- package/dist/inspection/execution-traces.cjs.map +1 -1
- package/dist/inspection/execution-traces.d.cts +38 -0
- package/dist/inspection/execution-traces.d.mts +38 -0
- package/dist/inspection/execution-traces.d.ts +38 -0
- package/dist/inspection/facts.cjs +12 -0
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/limits.cjs +5 -1
- package/dist/inspection/limits.cjs.map +1 -1
- package/dist/inspection/limits.d.cts +4 -0
- package/dist/inspection/limits.d.mts +4 -0
- package/dist/inspection/limits.d.ts +4 -0
- package/dist/inspection/limits.js +6 -2
- package/dist/inspection/overview.cjs +74 -33
- package/dist/inspection/overview.cjs.map +1 -1
- package/dist/inspection/overview.d.cts +19 -1
- package/dist/inspection/overview.d.mts +19 -1
- package/dist/inspection/overview.d.ts +19 -1
- package/dist/inspection/overview.js +4 -2
- package/dist/inspection/project-input.cjs +9 -0
- package/dist/inspection/project-input.cjs.map +1 -0
- package/dist/inspection/project-input.d.cts +20 -0
- package/dist/inspection/project-input.d.mts +20 -0
- package/dist/inspection/project-input.d.ts +20 -0
- package/dist/inspection/project-input.js +8 -0
- package/dist/inspection/project-input.js.map +1 -0
- package/dist/inspection/project-result.cjs +60 -0
- package/dist/inspection/project-result.cjs.map +1 -0
- package/dist/inspection/project-result.d.cts +1264 -0
- package/dist/inspection/project-result.d.mts +1264 -0
- package/dist/inspection/project-result.d.ts +1264 -0
- package/dist/inspection/project-result.js +10 -0
- package/dist/inspection/project-result.js.map +1 -0
- package/dist/inspection/project-source.cjs +109 -0
- package/dist/inspection/project-source.cjs.map +1 -0
- package/dist/inspection/project-source.d.cts +10 -0
- package/dist/inspection/project-source.d.mts +10 -0
- package/dist/inspection/project-source.d.ts +10 -0
- package/dist/inspection/project-source.js +6 -0
- package/dist/inspection/project-source.js.map +1 -0
- package/dist/inspection/project.cjs +100 -0
- package/dist/inspection/project.cjs.map +1 -0
- package/dist/inspection/project.d.cts +3 -0
- package/dist/inspection/project.d.mts +3 -0
- package/dist/inspection/project.d.ts +3 -0
- package/dist/inspection/project.js +6 -0
- package/dist/inspection/project.js.map +1 -0
- package/dist/inspection/protocol.cjs +19 -9
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +5506 -38189
- package/dist/inspection/protocol.d.mts +5506 -38189
- package/dist/inspection/protocol.d.ts +5506 -38189
- package/dist/inspection/public.mjs +896 -84
- package/dist/inspection/query.cjs +2 -0
- package/dist/inspection/query.cjs.map +1 -1
- package/dist/inspection/results.cjs +234 -29
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +870 -13
- package/dist/inspection/results.d.mts +870 -13
- package/dist/inspection/results.d.ts +870 -13
- package/dist/inspection/results.js +36 -34
- package/dist/inspection/select.cjs +126 -14
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/select.d.cts +1 -1
- package/dist/inspection/select.d.mts +1 -1
- package/dist/inspection/select.d.ts +1 -1
- package/dist/inspection/source.cjs +4 -0
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/sources.cjs +5 -0
- package/dist/inspection/sources.cjs.map +1 -1
- package/dist/inspection/trace.cjs +82 -84
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/inspection/trace.d.cts +7 -2
- package/dist/inspection/trace.d.mts +7 -2
- package/dist/inspection/trace.d.ts +7 -2
- package/dist/model-slots.cjs +35 -0
- package/dist/model-slots.cjs.map +1 -0
- package/dist/model-slots.d.cts +19 -0
- package/dist/model-slots.d.mts +19 -0
- package/dist/model-slots.d.ts +19 -0
- package/dist/model-slots.js +8 -0
- package/dist/model-slots.js.map +1 -0
- package/dist/o11y/adapter-call-price.cjs +4 -0
- package/dist/o11y/adapter-call-price.cjs.map +1 -1
- package/dist/o11y/adapter-call-price.d.cts +24 -0
- package/dist/o11y/adapter-call-price.d.mts +24 -0
- package/dist/o11y/adapter-call-price.d.ts +24 -0
- package/dist/o11y/adapter-call-price.js +6 -2
- package/dist/o11y/adapter-usage-projection.cjs +158 -0
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -0
- package/dist/o11y/adapter-usage-projection.d.cts +141 -0
- package/dist/o11y/adapter-usage-projection.d.mts +141 -0
- package/dist/o11y/adapter-usage-projection.d.ts +141 -0
- package/dist/o11y/adapter-usage-projection.js +20 -0
- package/dist/o11y/adapter-usage-projection.js.map +1 -0
- package/dist/o11y/eval-usage.cjs +149 -0
- package/dist/o11y/eval-usage.cjs.map +1 -0
- package/dist/o11y/eval-usage.d.cts +46 -0
- package/dist/o11y/eval-usage.d.mts +46 -0
- package/dist/o11y/eval-usage.d.ts +46 -0
- package/dist/o11y/eval-usage.js +8 -0
- package/dist/o11y/eval-usage.js.map +1 -0
- package/dist/o11y/judge-call-price.cjs +62 -0
- package/dist/o11y/judge-call-price.cjs.map +1 -0
- package/dist/o11y/judge-call-price.d.cts +3 -0
- package/dist/o11y/judge-call-price.d.mts +3 -0
- package/dist/o11y/judge-call-price.d.ts +3 -0
- package/dist/o11y/judge-call-price.js +6 -0
- package/dist/o11y/judge-call-price.js.map +1 -0
- package/dist/o11y/judge-usage-projection.cjs +134 -0
- package/dist/o11y/judge-usage-projection.cjs.map +1 -0
- package/dist/o11y/judge-usage-projection.d.cts +18 -0
- package/dist/o11y/judge-usage-projection.d.mts +18 -0
- package/dist/o11y/judge-usage-projection.d.ts +18 -0
- package/dist/o11y/judge-usage-projection.js +20 -0
- package/dist/o11y/judge-usage-projection.js.map +1 -0
- package/dist/o11y/judge-usage-receipt.cjs +135 -0
- package/dist/o11y/judge-usage-receipt.cjs.map +1 -0
- package/dist/o11y/judge-usage-receipt.d.cts +5 -0
- package/dist/o11y/judge-usage-receipt.d.mts +5 -0
- package/dist/o11y/judge-usage-receipt.d.ts +5 -0
- package/dist/o11y/judge-usage-receipt.js +6 -0
- package/dist/o11y/judge-usage-receipt.js.map +1 -0
- package/dist/o11y/judge-usage.cjs +171 -0
- package/dist/o11y/judge-usage.cjs.map +1 -0
- package/dist/o11y/judge-usage.d.cts +35 -0
- package/dist/o11y/judge-usage.d.mts +35 -0
- package/dist/o11y/judge-usage.d.ts +35 -0
- package/dist/o11y/judge-usage.js +6 -0
- package/dist/o11y/judge-usage.js.map +1 -0
- package/dist/plugin/contracts.cjs +2 -0
- package/dist/plugin/contracts.cjs.map +1 -1
- package/dist/plugin/link.cjs +7 -0
- package/dist/plugin/link.cjs.map +1 -1
- package/dist/record/attachment/protocol.cjs +8 -6
- package/dist/record/attachment/protocol.cjs.map +1 -1
- package/dist/record/attachment/protocol.d.cts +10 -0
- package/dist/record/attachment/protocol.d.mts +10 -0
- package/dist/record/attachment/protocol.d.ts +10 -0
- package/dist/record/attachment/protocol.js +38 -36
- package/dist/record/codec/seal-manifest.d.cts +3 -3
- package/dist/record/codec/seal-manifest.d.mts +3 -3
- package/dist/record/codec/seal-manifest.d.ts +3 -3
- package/dist/record/family/adapter-usage/definition.d.cts +1 -0
- package/dist/record/family/adapter-usage/definition.d.mts +1 -0
- package/dist/record/family/adapter-usage/definition.d.ts +1 -0
- package/dist/record/family/adapter-usage/persistence.cjs +1 -1
- package/dist/record/family/adapter-usage/persistence.cjs.map +1 -1
- package/dist/record/family/adapter-usage/persistence.d.cts +2 -1
- package/dist/record/family/adapter-usage/persistence.d.mts +2 -1
- package/dist/record/family/adapter-usage/persistence.d.ts +2 -1
- package/dist/record/family/adapter-usage/schema.cjs +21 -2
- package/dist/record/family/adapter-usage/schema.cjs.map +1 -1
- package/dist/record/family/adapter-usage/schema.d.cts +85 -0
- package/dist/record/family/adapter-usage/schema.d.mts +85 -0
- package/dist/record/family/adapter-usage/schema.d.ts +85 -0
- package/dist/record/family/adapter-usage/schema.js +18 -12
- package/dist/record/family/catalog.cjs +31 -27
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +94 -3
- package/dist/record/family/catalog.d.mts +94 -3
- package/dist/record/family/catalog.d.ts +94 -3
- package/dist/record/family/current.cjs +45 -42
- package/dist/record/family/current.cjs.map +1 -1
- package/dist/record/family/current.d.cts +240 -1
- package/dist/record/family/current.d.mts +240 -1
- package/dist/record/family/current.d.ts +240 -1
- package/dist/record/family/execution-traces/definition.d.cts +26 -0
- package/dist/record/family/execution-traces/definition.d.mts +26 -0
- package/dist/record/family/execution-traces/definition.d.ts +26 -0
- package/dist/record/family/execution-traces/definition.js +20 -14
- package/dist/record/family/execution-traces/schema.cjs +57 -1
- package/dist/record/family/execution-traces/schema.cjs.map +1 -1
- package/dist/record/family/execution-traces/schema.d.cts +114 -0
- package/dist/record/family/execution-traces/schema.d.mts +114 -0
- package/dist/record/family/execution-traces/schema.d.ts +114 -0
- package/dist/record/family/execution-traces/schema.js +18 -12
- package/dist/record/family/judge-usage/definition.cjs +12 -0
- package/dist/record/family/judge-usage/definition.cjs.map +1 -0
- package/dist/record/family/judge-usage/definition.d.cts +91 -0
- package/dist/record/family/judge-usage/definition.d.mts +91 -0
- package/dist/record/family/judge-usage/definition.d.ts +91 -0
- package/dist/record/family/judge-usage/definition.js +6 -0
- package/dist/record/family/judge-usage/definition.js.map +1 -0
- package/dist/record/family/judge-usage/persistence.cjs +10 -0
- package/dist/record/family/judge-usage/persistence.cjs.map +1 -0
- package/dist/record/family/judge-usage/persistence.d.cts +91 -0
- package/dist/record/family/judge-usage/persistence.d.mts +91 -0
- package/dist/record/family/judge-usage/persistence.d.ts +91 -0
- package/dist/record/family/judge-usage/persistence.js +6 -0
- package/dist/record/family/judge-usage/persistence.js.map +1 -0
- package/dist/record/family/judge-usage/schema.cjs +307 -0
- package/dist/record/family/judge-usage/schema.cjs.map +1 -0
- package/dist/record/family/judge-usage/schema.d.cts +351 -0
- package/dist/record/family/judge-usage/schema.d.mts +351 -0
- package/dist/record/family/judge-usage/schema.d.ts +351 -0
- package/dist/record/family/judge-usage/schema.js +18 -0
- package/dist/record/family/judge-usage/schema.js.map +1 -0
- package/dist/record/host/sqlite-host.cjs +55 -9
- package/dist/record/host/sqlite-host.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +7 -0
- package/dist/record/host/types.d.mts +7 -0
- package/dist/record/host/types.d.ts +7 -0
- package/dist/record/model/run-context.cjs +7 -1
- package/dist/record/model/run-context.cjs.map +1 -1
- package/dist/record/model/run-context.d.cts +4 -0
- package/dist/record/model/run-context.d.mts +4 -0
- package/dist/record/model/run-context.d.ts +4 -0
- package/dist/record/model/seal-manifest.d.cts +1 -1
- package/dist/record/model/seal-manifest.d.mts +1 -1
- package/dist/record/model/seal-manifest.d.ts +1 -1
- package/dist/record/sqlite/client.cjs +18 -5
- package/dist/record/sqlite/client.cjs.map +1 -1
- package/dist/record/sqlite/client.d.cts +1 -1
- package/dist/record/sqlite/client.d.mts +1 -1
- package/dist/record/sqlite/client.d.ts +1 -1
- package/dist/record/sqlite/project-state-database.cjs +29 -8
- package/dist/record/sqlite/project-state-database.cjs.map +1 -1
- package/dist/run/host/runtime.cjs +4 -0
- package/dist/run/host/runtime.cjs.map +1 -1
- package/dist/run/storage/sqlite.cjs +20 -0
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/adapter-execution-trace.cjs +125 -2
- package/dist/runner/adapter-execution-trace.cjs.map +1 -1
- package/dist/runner/adapter-execution-trace.d.cts +1 -1
- package/dist/runner/adapter-execution-trace.d.mts +1 -1
- package/dist/runner/adapter-execution-trace.d.ts +1 -1
- package/dist/runner/adapter-usage.cjs +55 -7
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adapter-usage.d.cts +9 -2
- package/dist/runner/adapter-usage.d.mts +9 -2
- package/dist/runner/adapter-usage.d.ts +9 -2
- package/dist/runner/adoption.cjs +9 -0
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-cancellation.cjs +12 -0
- package/dist/runner/attempt-cancellation.cjs.map +1 -0
- package/dist/runner/attempt-cancellation.d.cts +6 -0
- package/dist/runner/attempt-cancellation.d.mts +6 -0
- package/dist/runner/attempt-cancellation.d.ts +6 -0
- package/dist/runner/attempt-cancellation.js +6 -0
- package/dist/runner/attempt-cancellation.js.map +1 -0
- package/dist/runner/attempt-resources.cjs +10 -4
- package/dist/runner/attempt-resources.cjs.map +1 -1
- package/dist/runner/attempt-resources.d.cts +2 -1
- package/dist/runner/attempt-resources.d.mts +2 -1
- package/dist/runner/attempt-resources.d.ts +2 -1
- package/dist/runner/attempt.cjs +1177 -1139
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/config-identity.cjs +20 -1
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +5 -0
- package/dist/runner/config-identity.d.mts +5 -0
- package/dist/runner/config-identity.d.ts +5 -0
- package/dist/runner/discover.cjs +14 -0
- package/dist/runner/discover.cjs.map +1 -1
- package/dist/runner/discover.d.cts +3 -0
- package/dist/runner/discover.d.mts +3 -0
- package/dist/runner/discover.d.ts +3 -0
- package/dist/runner/feedback/human.cjs +9 -4
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/fingerprint.cjs +1 -0
- package/dist/runner/fingerprint.cjs.map +1 -1
- package/dist/runner/judge-usage.cjs +18 -0
- package/dist/runner/judge-usage.cjs.map +1 -0
- package/dist/runner/judge-usage.d.cts +5 -0
- package/dist/runner/judge-usage.d.mts +5 -0
- package/dist/runner/judge-usage.d.ts +5 -0
- package/dist/runner/judge-usage.js +8 -0
- package/dist/runner/judge-usage.js.map +1 -0
- package/dist/runner/project-target.cjs.map +1 -1
- package/dist/runner/project-target.d.cts +2 -0
- package/dist/runner/project-target.d.mts +2 -0
- package/dist/runner/project-target.d.ts +2 -0
- package/dist/runner/record/planning.cjs +1 -0
- package/dist/runner/record/planning.cjs.map +1 -1
- package/dist/runner/record.cjs +4 -0
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/reporters/braintrust.cjs +2 -0
- package/dist/runner/reporters/braintrust.cjs.map +1 -1
- package/dist/runner/reuse-diagnostics.cjs +9 -10
- package/dist/runner/reuse-diagnostics.cjs.map +1 -1
- package/dist/runner/reuse-diagnostics.d.cts +5 -6
- package/dist/runner/reuse-diagnostics.d.mts +5 -6
- package/dist/runner/reuse-diagnostics.d.ts +5 -6
- package/dist/runner/reuse-diagnostics.js +4 -4
- package/dist/runner/reuse-plan.cjs +100 -48
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/reuse-plan.d.cts +60 -3
- package/dist/runner/reuse-plan.d.mts +60 -3
- package/dist/runner/reuse-plan.d.ts +60 -3
- package/dist/runner/reuse-plan.js +14 -10
- package/dist/runner/run.cjs +8 -6
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/session.cjs +1 -1
- package/dist/runner/session.cjs.map +1 -1
- package/dist/runner/session.d.cts +1 -1
- package/dist/runner/session.d.mts +1 -1
- package/dist/runner/session.d.ts +1 -1
- package/dist/runner/source-producer.cjs +3 -1
- package/dist/runner/source-producer.cjs.map +1 -1
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +26 -5
- package/dist/runner/types.d.mts +26 -5
- package/dist/runner/types.d.ts +26 -5
- package/dist/sandbox/action.cjs +3 -0
- package/dist/sandbox/action.cjs.map +1 -1
- package/dist/sandbox/commands.cjs +3 -0
- package/dist/sandbox/commands.cjs.map +1 -1
- package/dist/sandbox/compose.cjs +6 -0
- package/dist/sandbox/compose.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.cjs +7 -0
- package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
- package/dist/sandbox/docker-profile/runtime.cjs +3 -0
- package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.cjs +7 -0
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/incus.cjs +7 -0
- package/dist/sandbox/incus.cjs.map +1 -1
- package/dist/sandbox/layer.cjs +12 -0
- package/dist/sandbox/layer.cjs.map +1 -1
- package/dist/shared/adapter-cleanup.cjs +18 -0
- package/dist/shared/adapter-cleanup.cjs.map +1 -0
- package/dist/shared/adapter-cleanup.d.cts +4 -0
- package/dist/shared/adapter-cleanup.d.mts +4 -0
- package/dist/shared/adapter-cleanup.d.ts +4 -0
- package/dist/shared/adapter-cleanup.js +10 -0
- package/dist/shared/adapter-cleanup.js.map +1 -0
- package/dist/shared/attempt-lifecycle.cjs +3 -0
- package/dist/shared/attempt-lifecycle.cjs.map +1 -0
- package/dist/shared/attempt-lifecycle.d.cts +13 -0
- package/dist/shared/attempt-lifecycle.d.mts +13 -0
- package/dist/shared/attempt-lifecycle.d.ts +13 -0
- package/dist/shared/attempt-lifecycle.js +4 -0
- package/dist/shared/attempt-lifecycle.js.map +1 -0
- package/dist/show/contribution.cjs +52 -14
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/contribution.d.cts +23 -1
- package/dist/show/contribution.d.mts +23 -1
- package/dist/show/contribution.d.ts +23 -1
- package/dist/show/model.cjs +8 -1
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +10 -1
- package/dist/show/model.d.mts +10 -1
- package/dist/show/model.d.ts +10 -1
- package/dist/show/render.cjs +287 -49
- package/dist/show/render.cjs.map +1 -1
- package/dist/show/render.d.cts +3 -0
- package/dist/show/render.d.mts +3 -0
- package/dist/show/render.d.ts +3 -0
- package/dist/sources/projector.cjs +3 -0
- package/dist/sources/projector.cjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/index-CmVoXbwG.js +63 -0
- package/dist/view/app-dist/assets/{quality-cost-scatter-CFB3wnkN.js → quality-cost-scatter-BuLISaH4.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/cli/contribution.cjs +54 -21
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/cli/contribution.d.cts +2 -1
- package/dist/view/cli/contribution.d.mts +2 -1
- package/dist/view/cli/contribution.d.ts +2 -1
- package/dist/view/function-runtime.mjs +13231 -11647
- package/dist/view/http-protocol.cjs +3 -0
- package/dist/view/http-protocol.cjs.map +1 -1
- package/dist/view/http-protocol.d.cts +8 -0
- package/dist/view/http-protocol.d.mts +8 -0
- package/dist/view/http-protocol.d.ts +8 -0
- package/dist/view/inspection-host.cjs +17 -1
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/render.cjs +1 -0
- package/dist/view/render.cjs.map +1 -1
- package/dist/view/render.d.cts +2 -1
- package/dist/view/render.d.mts +2 -1
- package/dist/view/render.d.ts +2 -1
- package/dist/view/revision.cjs.map +1 -1
- package/dist/view/revision.d.cts +12 -0
- package/dist/view/revision.d.mts +12 -0
- package/dist/view/revision.d.ts +12 -0
- package/dist/view/server.cjs +10 -9
- package/dist/view/server.cjs.map +1 -1
- package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
- package/docs-site/zh/explanation/adapter.mdx +2 -2
- package/docs-site/zh/explanation/assert.mdx +60 -24
- package/docs-site/zh/explanation/drive.mdx +1 -1
- package/docs-site/zh/explanation/evals.mdx +31 -29
- package/docs-site/zh/explanation/experiment.mdx +15 -15
- package/docs-site/zh/explanation/judge.mdx +23 -15
- package/docs-site/zh/explanation/overview.mdx +44 -21
- package/docs-site/zh/explanation/record.mdx +28 -13
- package/docs-site/zh/explanation/results-flow.mdx +37 -0
- package/docs-site/zh/explanation/runner.mdx +27 -6
- package/docs-site/zh/index.mdx +22 -115
- package/docs-site/zh/introduction.mdx +89 -61
- package/docs-site/zh/reference/cli.mdx +50 -26
- package/docs-site/zh/reference/define-agent.mdx +37 -5
- package/docs-site/zh/reference/define-eval.mdx +130 -29
- package/docs-site/zh/reference/define-experiment.mdx +251 -0
- package/docs-site/zh/reference/events.mdx +34 -30
- package/docs-site/zh/reference/expect.mdx +77 -2
- package/docs-site/zh/reference/official-adapters.mdx +2 -2
- package/docs-site/zh/troubleshooting/debug-sandbox.mdx +43 -24
- package/docs-site/zh/troubleshooting/debugging.mdx +65 -42
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +35 -28
- package/docs-site/zh/tutorials/accept-results.mdx +34 -24
- package/docs-site/zh/tutorials/agent-feedback-loop.mdx +74 -43
- package/docs-site/zh/tutorials/agent-onboarding.mdx +27 -20
- package/docs-site/zh/tutorials/authoring.mdx +138 -121
- package/docs-site/zh/tutorials/ci-integration.mdx +46 -22
- package/docs-site/zh/tutorials/compare-runs.mdx +40 -13
- package/docs-site/zh/tutorials/concurrency.mdx +66 -62
- package/docs-site/zh/tutorials/configuration.mdx +17 -17
- package/docs-site/zh/tutorials/connect-otel.mdx +48 -37
- package/docs-site/zh/tutorials/connect-your-agent.mdx +80 -173
- package/docs-site/zh/tutorials/control-run-cost.mdx +63 -12
- package/docs-site/zh/tutorials/criteria-files.mdx +28 -21
- package/docs-site/zh/tutorials/custom-application.mdx +75 -55
- package/docs-site/zh/tutorials/dataset-fanout.mdx +32 -22
- package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +38 -31
- package/docs-site/zh/tutorials/docker-in-docker.mdx +83 -89
- package/docs-site/zh/tutorials/eval-groups.mdx +70 -89
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +12 -5
- package/docs-site/zh/tutorials/experiment-services.mdx +243 -0
- package/docs-site/zh/tutorials/fixtures.mdx +42 -26
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +41 -19
- package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +21 -16
- package/docs-site/zh/tutorials/niceeval-taste-application.mdx +394 -0
- package/docs-site/zh/tutorials/niceeval-taste.mdx +190 -0
- package/docs-site/zh/tutorials/nixos-managed-dind.mdx +51 -39
- package/docs-site/zh/tutorials/plugins.mdx +55 -31
- package/docs-site/zh/tutorials/prebuilt-sandbox.mdx +204 -0
- package/docs-site/zh/tutorials/quickstart.mdx +91 -47
- package/docs-site/zh/tutorials/reporters.mdx +45 -30
- package/docs-site/zh/tutorials/rerun-and-cache.mdx +39 -40
- package/docs-site/zh/tutorials/sandbox-agent.mdx +65 -40
- package/docs-site/zh/tutorials/sandbox-providers.mdx +104 -282
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +65 -97
- package/docs-site/zh/tutorials/select-and-preview.mdx +25 -20
- package/docs-site/zh/tutorials/verify-judge.mdx +49 -26
- package/docs-site/zh/tutorials/viewing-results.mdx +130 -80
- package/docs-site/zh/tutorials/write-experiment.mdx +116 -298
- package/docs-site/zh/tutorials/write-send.mdx +53 -52
- package/node_modules/undici/docs/docs/api/Agent.md +8 -8
- package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
- package/node_modules/undici/docs/docs/api/Errors.md +25 -0
- package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
- package/node_modules/undici/docs/docs/api/Pool.md +5 -6
- package/node_modules/undici/lib/api/readable.js +1 -2
- package/node_modules/undici/lib/core/request.js +23 -2
- package/node_modules/undici/lib/core/util.js +0 -39
- package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
- package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
- package/node_modules/undici/lib/dispatcher/client.js +1 -1
- package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -2
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
- package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
- package/node_modules/undici/lib/dispatcher/pool.js +90 -7
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
- package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
- package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
- package/node_modules/undici/lib/handler/retry-handler.js +72 -13
- package/node_modules/undici/lib/interceptor/cache.js +4 -1
- package/node_modules/undici/lib/interceptor/decompress.js +236 -69
- package/node_modules/undici/lib/web/cache/cache.js +17 -8
- package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
- package/node_modules/undici/lib/web/cookies/index.js +19 -7
- package/node_modules/undici/lib/web/cookies/util.js +3 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
- package/node_modules/undici/lib/web/fetch/body.js +22 -15
- package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
- package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
- package/node_modules/undici/lib/web/fetch/headers.js +34 -31
- package/node_modules/undici/lib/web/fetch/index.js +38 -14
- package/node_modules/undici/lib/web/fetch/request.js +74 -79
- package/node_modules/undici/lib/web/fetch/response.js +43 -44
- package/node_modules/undici/lib/web/fetch/util.js +7 -7
- package/node_modules/undici/lib/web/infra/index.js +16 -1
- package/node_modules/undici/lib/web/webidl/index.js +2 -14
- package/node_modules/undici/lib/web/websocket/events.js +43 -26
- package/node_modules/undici/lib/web/websocket/receiver.js +5 -0
- package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
- package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
- package/node_modules/undici/package.json +1 -1
- package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
- package/node_modules/undici/types/interceptors.d.ts +1 -1
- package/node_modules/undici/types/webidl.d.ts +13 -7
- package/package.json +4 -4
- package/dist/view/app-dist/assets/index-DFzw1L97.js +0 -63
- package/docs-site/zh/tutorials/experiments.mdx +0 -101
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export declare const judgeUsageRecordAttachmentPersistence: import("../../attachment/protocol.mjs").RecordAttachmentPersistence<import("../../attachment/protocol.mjs").RecordAttachmentDefinition<"attempt", "niceeval.judge-usage", import("effect/Schema").Struct<{
|
|
2
|
+
readonly collection: import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
|
|
3
|
+
readonly state: import("effect/Schema").Literal<"complete">;
|
|
4
|
+
readonly limitations: import("effect/Schema").Tuple<readonly []>;
|
|
5
|
+
}>, import("effect/Schema").Struct<{
|
|
6
|
+
readonly state: import("effect/Schema").Literal<"partial">;
|
|
7
|
+
readonly limitations: import("effect/Schema").NonEmptyArray<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
|
|
8
|
+
readonly code: import("effect/Schema").Literals<readonly ["capture-failed", "capture-interrupted"]>;
|
|
9
|
+
readonly stage: import("effect/Schema").String;
|
|
10
|
+
}>, import("effect/Schema").Struct<{
|
|
11
|
+
readonly code: import("effect/Schema").Literals<readonly ["collection-cap-reached", "unsupported-input"]>;
|
|
12
|
+
readonly omittedAtLeast: import("effect/Schema").Number;
|
|
13
|
+
}>]>>;
|
|
14
|
+
}>]>;
|
|
15
|
+
readonly calls: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
16
|
+
readonly callId: import("effect/Schema").String;
|
|
17
|
+
readonly entryIndex: import("effect/Schema").Number;
|
|
18
|
+
readonly entryId: import("effect/Schema").Codec<import("../../../index.mjs").AssertionEntryId, string, never, never>;
|
|
19
|
+
readonly logicalOrdinal: import("effect/Schema").Number;
|
|
20
|
+
readonly transmissionOrdinal: import("effect/Schema").Number;
|
|
21
|
+
readonly operation: import("effect/Schema").Literals<readonly ["score", "classify", "extract", "batchClassify"]>;
|
|
22
|
+
readonly requestModel: import("effect/Schema").String;
|
|
23
|
+
readonly transportProvider: import("effect/Schema").Literals<readonly ["openai", "vercel", "openrouter", "typesafe"]>;
|
|
24
|
+
readonly provider: import("effect/Schema").NullOr<import("effect/Schema").String>;
|
|
25
|
+
readonly model: import("effect/Schema").NullOr<import("effect/Schema").String>;
|
|
26
|
+
readonly status: import("effect/Schema").Literals<readonly ["succeeded", "failed", "cancelled", "unknown"]>;
|
|
27
|
+
readonly httpStatus: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
28
|
+
readonly inputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
29
|
+
readonly inputTotalTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
30
|
+
readonly outputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
31
|
+
readonly cacheReadTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
32
|
+
readonly cacheWriteTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
33
|
+
readonly cost: import("effect/Schema").NullOr<import("effect/Schema").Struct<{
|
|
34
|
+
readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>;
|
|
35
|
+
readonly currency: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CurrencyCode, string, never, never>;
|
|
36
|
+
readonly source: import("effect/Schema").Struct<{
|
|
37
|
+
readonly kind: import("effect/Schema").Literal<"reported">;
|
|
38
|
+
readonly id: import("effect/Schema").String;
|
|
39
|
+
}>;
|
|
40
|
+
}>>;
|
|
41
|
+
readonly receipt: import("effect/Schema").Struct<{
|
|
42
|
+
readonly state: import("effect/Schema").Literals<readonly ["available", "unavailable"]>;
|
|
43
|
+
readonly reason: import("effect/Schema").NullOr<import("effect/Schema").Literals<readonly ["response-unavailable", "cancelled", "response-too-large", "invalid-json", "usage-not-reported", "invalid-usage", "response-model-too-large"]>>;
|
|
44
|
+
readonly responseDigest: import("effect/Schema").NullOr<import("effect/Schema").String>;
|
|
45
|
+
readonly fields: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
46
|
+
readonly path: import("effect/Schema").Literals<readonly ["model", "provider", "usage.completion_tokens", "usage.cost", "usage.input_tokens", "usage.output_tokens", "usage.prompt_tokens", "usage.prompt_tokens_details.cache_write_tokens", "usage.prompt_tokens_details.cached_tokens", "usage.total_tokens"]>;
|
|
47
|
+
readonly value: import("effect/Schema").Union<readonly [import("effect/Schema").String, import("effect/Schema").Number, import("effect/Schema").Null]>;
|
|
48
|
+
}>>;
|
|
49
|
+
}>;
|
|
50
|
+
}>>;
|
|
51
|
+
readonly priceReceipts: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
52
|
+
readonly kind: import("effect/Schema").Literal<"judge-call-price-estimate">;
|
|
53
|
+
readonly callId: import("effect/Schema").String;
|
|
54
|
+
readonly state: import("effect/Schema").Literals<readonly ["complete", "partial"]>;
|
|
55
|
+
readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>;
|
|
56
|
+
readonly currency: import("effect/Schema").Literal<"USD">;
|
|
57
|
+
readonly source: import("effect/Schema").Struct<{
|
|
58
|
+
readonly kind: import("effect/Schema").Literal<"estimated">;
|
|
59
|
+
readonly id: import("effect/Schema").String;
|
|
60
|
+
}>;
|
|
61
|
+
readonly pricing: import("effect/Schema").Struct<{
|
|
62
|
+
readonly basis: import("effect/Schema").Literal<"catalog-reference">;
|
|
63
|
+
readonly currency: import("effect/Schema").Literal<"USD">;
|
|
64
|
+
readonly source: import("effect/Schema").Struct<{
|
|
65
|
+
readonly kind: import("effect/Schema").Literal<"configured-profile">;
|
|
66
|
+
readonly id: import("effect/Schema").String;
|
|
67
|
+
readonly asOf: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
68
|
+
readonly profileDigest: import("effect/Schema").String;
|
|
69
|
+
}>;
|
|
70
|
+
readonly requestModel: import("effect/Schema").String;
|
|
71
|
+
readonly selector: import("effect/Schema").String;
|
|
72
|
+
readonly match: import("effect/Schema").Literals<readonly ["exact", "provider-wildcard"]>;
|
|
73
|
+
readonly ratesPerMTok: import("effect/Schema").Struct<{
|
|
74
|
+
readonly input: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
|
|
75
|
+
readonly output: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
|
|
76
|
+
readonly cacheRead: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
|
|
77
|
+
readonly cacheWrite: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
|
|
78
|
+
}>;
|
|
79
|
+
}>;
|
|
80
|
+
readonly charges: import("effect/Schema").NonEmptyArray<import("effect/Schema").Struct<{
|
|
81
|
+
readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
|
|
82
|
+
readonly tokens: import("effect/Schema").Number;
|
|
83
|
+
readonly ratePerMTok: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
|
|
84
|
+
readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>;
|
|
85
|
+
}>>;
|
|
86
|
+
readonly missing: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
87
|
+
readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
|
|
88
|
+
readonly reason: import("effect/Schema").Literals<readonly ["tokens-unknown", "rate-unknown"]>;
|
|
89
|
+
}>>;
|
|
90
|
+
}>>;
|
|
91
|
+
}>>, 1>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export declare const judgeUsageRecordAttachmentPersistence: import("../../attachment/protocol.js").RecordAttachmentPersistence<import("../../attachment/protocol.js").RecordAttachmentDefinition<"attempt", "niceeval.judge-usage", import("effect/Schema").Struct<{
|
|
2
|
+
readonly collection: import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
|
|
3
|
+
readonly state: import("effect/Schema").Literal<"complete">;
|
|
4
|
+
readonly limitations: import("effect/Schema").Tuple<readonly []>;
|
|
5
|
+
}>, import("effect/Schema").Struct<{
|
|
6
|
+
readonly state: import("effect/Schema").Literal<"partial">;
|
|
7
|
+
readonly limitations: import("effect/Schema").NonEmptyArray<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
|
|
8
|
+
readonly code: import("effect/Schema").Literals<readonly ["capture-failed", "capture-interrupted"]>;
|
|
9
|
+
readonly stage: import("effect/Schema").String;
|
|
10
|
+
}>, import("effect/Schema").Struct<{
|
|
11
|
+
readonly code: import("effect/Schema").Literals<readonly ["collection-cap-reached", "unsupported-input"]>;
|
|
12
|
+
readonly omittedAtLeast: import("effect/Schema").Number;
|
|
13
|
+
}>]>>;
|
|
14
|
+
}>]>;
|
|
15
|
+
readonly calls: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
16
|
+
readonly callId: import("effect/Schema").String;
|
|
17
|
+
readonly entryIndex: import("effect/Schema").Number;
|
|
18
|
+
readonly entryId: import("effect/Schema").Codec<import("../../../index.js").AssertionEntryId, string, never, never>;
|
|
19
|
+
readonly logicalOrdinal: import("effect/Schema").Number;
|
|
20
|
+
readonly transmissionOrdinal: import("effect/Schema").Number;
|
|
21
|
+
readonly operation: import("effect/Schema").Literals<readonly ["score", "classify", "extract", "batchClassify"]>;
|
|
22
|
+
readonly requestModel: import("effect/Schema").String;
|
|
23
|
+
readonly transportProvider: import("effect/Schema").Literals<readonly ["openai", "vercel", "openrouter", "typesafe"]>;
|
|
24
|
+
readonly provider: import("effect/Schema").NullOr<import("effect/Schema").String>;
|
|
25
|
+
readonly model: import("effect/Schema").NullOr<import("effect/Schema").String>;
|
|
26
|
+
readonly status: import("effect/Schema").Literals<readonly ["succeeded", "failed", "cancelled", "unknown"]>;
|
|
27
|
+
readonly httpStatus: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
28
|
+
readonly inputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
29
|
+
readonly inputTotalTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
30
|
+
readonly outputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
31
|
+
readonly cacheReadTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
32
|
+
readonly cacheWriteTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
33
|
+
readonly cost: import("effect/Schema").NullOr<import("effect/Schema").Struct<{
|
|
34
|
+
readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>;
|
|
35
|
+
readonly currency: import("effect/Schema").Codec<import("../source-receipt/model.js").CurrencyCode, string, never, never>;
|
|
36
|
+
readonly source: import("effect/Schema").Struct<{
|
|
37
|
+
readonly kind: import("effect/Schema").Literal<"reported">;
|
|
38
|
+
readonly id: import("effect/Schema").String;
|
|
39
|
+
}>;
|
|
40
|
+
}>>;
|
|
41
|
+
readonly receipt: import("effect/Schema").Struct<{
|
|
42
|
+
readonly state: import("effect/Schema").Literals<readonly ["available", "unavailable"]>;
|
|
43
|
+
readonly reason: import("effect/Schema").NullOr<import("effect/Schema").Literals<readonly ["response-unavailable", "cancelled", "response-too-large", "invalid-json", "usage-not-reported", "invalid-usage", "response-model-too-large"]>>;
|
|
44
|
+
readonly responseDigest: import("effect/Schema").NullOr<import("effect/Schema").String>;
|
|
45
|
+
readonly fields: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
46
|
+
readonly path: import("effect/Schema").Literals<readonly ["model", "provider", "usage.completion_tokens", "usage.cost", "usage.input_tokens", "usage.output_tokens", "usage.prompt_tokens", "usage.prompt_tokens_details.cache_write_tokens", "usage.prompt_tokens_details.cached_tokens", "usage.total_tokens"]>;
|
|
47
|
+
readonly value: import("effect/Schema").Union<readonly [import("effect/Schema").String, import("effect/Schema").Number, import("effect/Schema").Null]>;
|
|
48
|
+
}>>;
|
|
49
|
+
}>;
|
|
50
|
+
}>>;
|
|
51
|
+
readonly priceReceipts: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
52
|
+
readonly kind: import("effect/Schema").Literal<"judge-call-price-estimate">;
|
|
53
|
+
readonly callId: import("effect/Schema").String;
|
|
54
|
+
readonly state: import("effect/Schema").Literals<readonly ["complete", "partial"]>;
|
|
55
|
+
readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>;
|
|
56
|
+
readonly currency: import("effect/Schema").Literal<"USD">;
|
|
57
|
+
readonly source: import("effect/Schema").Struct<{
|
|
58
|
+
readonly kind: import("effect/Schema").Literal<"estimated">;
|
|
59
|
+
readonly id: import("effect/Schema").String;
|
|
60
|
+
}>;
|
|
61
|
+
readonly pricing: import("effect/Schema").Struct<{
|
|
62
|
+
readonly basis: import("effect/Schema").Literal<"catalog-reference">;
|
|
63
|
+
readonly currency: import("effect/Schema").Literal<"USD">;
|
|
64
|
+
readonly source: import("effect/Schema").Struct<{
|
|
65
|
+
readonly kind: import("effect/Schema").Literal<"configured-profile">;
|
|
66
|
+
readonly id: import("effect/Schema").String;
|
|
67
|
+
readonly asOf: import("effect/Schema").NullOr<import("effect/Schema").Number>;
|
|
68
|
+
readonly profileDigest: import("effect/Schema").String;
|
|
69
|
+
}>;
|
|
70
|
+
readonly requestModel: import("effect/Schema").String;
|
|
71
|
+
readonly selector: import("effect/Schema").String;
|
|
72
|
+
readonly match: import("effect/Schema").Literals<readonly ["exact", "provider-wildcard"]>;
|
|
73
|
+
readonly ratesPerMTok: import("effect/Schema").Struct<{
|
|
74
|
+
readonly input: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
|
|
75
|
+
readonly output: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
|
|
76
|
+
readonly cacheRead: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
|
|
77
|
+
readonly cacheWrite: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
|
|
78
|
+
}>;
|
|
79
|
+
}>;
|
|
80
|
+
readonly charges: import("effect/Schema").NonEmptyArray<import("effect/Schema").Struct<{
|
|
81
|
+
readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
|
|
82
|
+
readonly tokens: import("effect/Schema").Number;
|
|
83
|
+
readonly ratePerMTok: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
|
|
84
|
+
readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>;
|
|
85
|
+
}>>;
|
|
86
|
+
readonly missing: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
87
|
+
readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
|
|
88
|
+
readonly reason: import("effect/Schema").Literals<readonly ["tokens-unknown", "rate-unknown"]>;
|
|
89
|
+
}>>;
|
|
90
|
+
}>>;
|
|
91
|
+
}>>, 1>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
|
+
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
|
+
const __niceevalCanonical = __niceevalRequire("./persistence.cjs");
|
|
4
|
+
const __niceevalExport0 = __niceevalCanonical["judgeUsageRecordAttachmentPersistence"];
|
|
5
|
+
export { __niceevalExport0 as judgeUsageRecordAttachmentPersistence };
|
|
6
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JudgeUsageAttachmentSchema = exports.JudgePriceReceiptSchema = exports.JudgeUsageCallSchema = exports.JudgeUsageReceiptPaths = exports.JudgeUsageModelSchema = exports.JudgeUsageLimits = void 0;
|
|
4
|
+
exports.validateJudgeUsageAttachment = validateJudgeUsageAttachment;
|
|
5
|
+
const effect_1 = require("effect");
|
|
6
|
+
const codec_ts_1 = require("../../../assertions/record/codec.cjs");
|
|
7
|
+
const index_ts_1 = require("../../attachment/index.cjs");
|
|
8
|
+
const common_ts_1 = require("../common.cjs");
|
|
9
|
+
const codec_ts_2 = require("../source-receipt/codec.cjs");
|
|
10
|
+
const pricing_ts_1 = require("../adapter-usage/pricing.cjs");
|
|
11
|
+
exports.JudgeUsageLimits = Object.freeze({
|
|
12
|
+
maximumCalls: 4000,
|
|
13
|
+
maximumModelBytes: 8192,
|
|
14
|
+
maximumReceiptBytes: 32768,
|
|
15
|
+
maximumReceiptFields: 24,
|
|
16
|
+
});
|
|
17
|
+
const encoder = new TextEncoder();
|
|
18
|
+
function boundedIdentity(maximumBytes) {
|
|
19
|
+
return effect_1.Schema.String.check(effect_1.Schema.makeFilter((value) => value.trim().length > 0 && !/[\ud800-\udfff]/u.test(value) &&
|
|
20
|
+
encoder.encode(value).byteLength <= maximumBytes && !/[\u0000-\u001f\u007f]/u.test(value)));
|
|
21
|
+
}
|
|
22
|
+
const Identity = boundedIdentity(256);
|
|
23
|
+
/** @internal Used to validate observations before retaining their response fields. */
|
|
24
|
+
exports.JudgeUsageModelSchema = boundedIdentity(exports.JudgeUsageLimits.maximumModelBytes);
|
|
25
|
+
const Digest = effect_1.Schema.String.check(effect_1.Schema.isPattern(/^sha256:[0-9a-f]{64}$/u));
|
|
26
|
+
const Tokens = effect_1.Schema.NullOr(common_ts_1.NonNegativeSafeIntegerSchema);
|
|
27
|
+
const NullableRate = effect_1.Schema.NullOr(codec_ts_2.CanonicalDecimalSchema);
|
|
28
|
+
/** Only these protocol facts may enter durable receipts; business text is excluded. */
|
|
29
|
+
exports.JudgeUsageReceiptPaths = Object.freeze([
|
|
30
|
+
"model",
|
|
31
|
+
"provider",
|
|
32
|
+
"usage.completion_tokens",
|
|
33
|
+
"usage.cost",
|
|
34
|
+
"usage.input_tokens",
|
|
35
|
+
"usage.output_tokens",
|
|
36
|
+
"usage.prompt_tokens",
|
|
37
|
+
"usage.prompt_tokens_details.cache_write_tokens",
|
|
38
|
+
"usage.prompt_tokens_details.cached_tokens",
|
|
39
|
+
"usage.total_tokens",
|
|
40
|
+
]);
|
|
41
|
+
const ReceiptFieldSchema = effect_1.Schema.Struct({
|
|
42
|
+
path: effect_1.Schema.Literals(exports.JudgeUsageReceiptPaths),
|
|
43
|
+
value: effect_1.Schema.Union([effect_1.Schema.String.check(effect_1.Schema.makeFilter((value) => !/[\ud800-\udfff]/u.test(value) && encoder.encode(value).byteLength <= exports.JudgeUsageLimits.maximumModelBytes &&
|
|
44
|
+
!/[\u0000-\u001f\u007f]/u.test(value))), common_ts_1.FiniteNonNegativeNumberSchema.check(effect_1.Schema.makeFilter((value) => !Object.is(value, -0))), effect_1.Schema.Null]),
|
|
45
|
+
});
|
|
46
|
+
const ReceiptSchema = effect_1.Schema.Struct({
|
|
47
|
+
state: effect_1.Schema.Literals(["available", "unavailable"]),
|
|
48
|
+
reason: effect_1.Schema.NullOr(effect_1.Schema.Literals([
|
|
49
|
+
"response-unavailable", "cancelled", "response-too-large", "invalid-json",
|
|
50
|
+
"usage-not-reported", "invalid-usage", "response-model-too-large",
|
|
51
|
+
])),
|
|
52
|
+
responseDigest: effect_1.Schema.NullOr(Digest),
|
|
53
|
+
fields: effect_1.Schema.Array(ReceiptFieldSchema),
|
|
54
|
+
}).check(effect_1.Schema.makeFilter((receipt) => {
|
|
55
|
+
if (receipt.fields.length > exports.JudgeUsageLimits.maximumReceiptFields ||
|
|
56
|
+
encoder.encode(JSON.stringify(receipt)).byteLength > exports.JudgeUsageLimits.maximumReceiptBytes ||
|
|
57
|
+
receipt.fields.some((field, index) => index > 0 && receipt.fields[index - 1].path >= field.path))
|
|
58
|
+
return false;
|
|
59
|
+
if (receipt.state === "available") {
|
|
60
|
+
return receipt.fields.some((field) => field.value !== null) && receipt.responseDigest !== null &&
|
|
61
|
+
(receipt.reason === null || receipt.reason === "invalid-usage" ||
|
|
62
|
+
receipt.reason === "usage-not-reported" || receipt.reason === "response-model-too-large");
|
|
63
|
+
}
|
|
64
|
+
return receipt.fields.length === 0 && receipt.reason !== null &&
|
|
65
|
+
(receipt.reason === "invalid-json" || receipt.reason === "invalid-usage" ||
|
|
66
|
+
receipt.reason === "usage-not-reported" || receipt.reason === "response-model-too-large"
|
|
67
|
+
? receipt.responseDigest !== null : receipt.responseDigest === null);
|
|
68
|
+
}));
|
|
69
|
+
const CallShapeSchema = effect_1.Schema.Struct({
|
|
70
|
+
callId: Identity,
|
|
71
|
+
entryIndex: common_ts_1.NonNegativeSafeIntegerSchema,
|
|
72
|
+
entryId: codec_ts_1.AssertionEntryIdSchema,
|
|
73
|
+
logicalOrdinal: common_ts_1.PositiveSafeIntegerSchema,
|
|
74
|
+
transmissionOrdinal: common_ts_1.PositiveSafeIntegerSchema,
|
|
75
|
+
operation: effect_1.Schema.Literals(["score", "classify", "extract", "batchClassify"]),
|
|
76
|
+
requestModel: exports.JudgeUsageModelSchema,
|
|
77
|
+
transportProvider: effect_1.Schema.Literals(["openai", "vercel", "openrouter", "typesafe"]),
|
|
78
|
+
provider: effect_1.Schema.NullOr(Identity),
|
|
79
|
+
model: effect_1.Schema.NullOr(exports.JudgeUsageModelSchema),
|
|
80
|
+
status: effect_1.Schema.Literals(["succeeded", "failed", "cancelled", "unknown"]),
|
|
81
|
+
httpStatus: effect_1.Schema.NullOr(common_ts_1.NonNegativeSafeIntegerSchema.check(effect_1.Schema.makeFilter((value) => value >= 100 && value <= 599))),
|
|
82
|
+
inputTokens: Tokens,
|
|
83
|
+
inputTotalTokens: Tokens,
|
|
84
|
+
outputTokens: Tokens,
|
|
85
|
+
cacheReadTokens: Tokens,
|
|
86
|
+
cacheWriteTokens: Tokens,
|
|
87
|
+
cost: effect_1.Schema.NullOr(effect_1.Schema.Struct({
|
|
88
|
+
amount: codec_ts_2.CanonicalDecimalSchema,
|
|
89
|
+
currency: codec_ts_2.CurrencyCodeSchema,
|
|
90
|
+
source: effect_1.Schema.Struct({ kind: effect_1.Schema.Literal("reported"), id: Identity }),
|
|
91
|
+
})),
|
|
92
|
+
receipt: ReceiptSchema,
|
|
93
|
+
});
|
|
94
|
+
exports.JudgeUsageCallSchema = CallShapeSchema.check(effect_1.Schema.makeFilter((call) => validCall(call)));
|
|
95
|
+
const PriceReceiptShapeSchema = effect_1.Schema.Struct({
|
|
96
|
+
kind: effect_1.Schema.Literal("judge-call-price-estimate"),
|
|
97
|
+
callId: Identity,
|
|
98
|
+
state: effect_1.Schema.Literals(["complete", "partial"]),
|
|
99
|
+
amount: codec_ts_2.CanonicalDecimalSchema,
|
|
100
|
+
currency: effect_1.Schema.Literal("USD"),
|
|
101
|
+
source: effect_1.Schema.Struct({ kind: effect_1.Schema.Literal("estimated"), id: Identity }),
|
|
102
|
+
pricing: effect_1.Schema.Struct({
|
|
103
|
+
basis: effect_1.Schema.Literal("catalog-reference"),
|
|
104
|
+
currency: effect_1.Schema.Literal("USD"),
|
|
105
|
+
source: effect_1.Schema.Struct({
|
|
106
|
+
kind: effect_1.Schema.Literal("configured-profile"), id: Identity,
|
|
107
|
+
asOf: effect_1.Schema.NullOr(common_ts_1.PositiveSafeIntegerSchema), profileDigest: Digest,
|
|
108
|
+
}),
|
|
109
|
+
requestModel: exports.JudgeUsageModelSchema,
|
|
110
|
+
selector: exports.JudgeUsageModelSchema,
|
|
111
|
+
match: effect_1.Schema.Literals(["exact", "provider-wildcard"]),
|
|
112
|
+
ratesPerMTok: effect_1.Schema.Struct({ input: NullableRate, output: NullableRate, cacheRead: NullableRate, cacheWrite: NullableRate }),
|
|
113
|
+
}),
|
|
114
|
+
charges: effect_1.Schema.NonEmptyArray(effect_1.Schema.Struct({
|
|
115
|
+
bucket: effect_1.Schema.Literals(pricing_ts_1.AdapterCallPriceBuckets), tokens: common_ts_1.NonNegativeSafeIntegerSchema,
|
|
116
|
+
ratePerMTok: NullableRate, amount: codec_ts_2.CanonicalDecimalSchema,
|
|
117
|
+
})),
|
|
118
|
+
missing: effect_1.Schema.Array(effect_1.Schema.Struct({
|
|
119
|
+
bucket: effect_1.Schema.Literals(pricing_ts_1.AdapterCallPriceBuckets), reason: effect_1.Schema.Literals(["tokens-unknown", "rate-unknown"]),
|
|
120
|
+
})),
|
|
121
|
+
});
|
|
122
|
+
exports.JudgePriceReceiptSchema = PriceReceiptShapeSchema.check(effect_1.Schema.makeFilter((receipt) => validPriceReceipt(receipt)));
|
|
123
|
+
const AttachmentSchema = effect_1.Schema.Struct({
|
|
124
|
+
collection: common_ts_1.CollectionStateSchema,
|
|
125
|
+
calls: effect_1.Schema.Array(exports.JudgeUsageCallSchema),
|
|
126
|
+
priceReceipts: effect_1.Schema.Array(exports.JudgePriceReceiptSchema),
|
|
127
|
+
});
|
|
128
|
+
exports.JudgeUsageAttachmentSchema = AttachmentSchema.check(effect_1.Schema.makeFilter((value) => validateJudgeUsageAttachment(value).length === 0));
|
|
129
|
+
function validCall(call) {
|
|
130
|
+
if (call.callId !== `judge:${call.entryIndex}:${call.logicalOrdinal}:${call.transmissionOrdinal}`)
|
|
131
|
+
return false;
|
|
132
|
+
const buckets = [call.inputTokens, call.cacheReadTokens, call.cacheWriteTokens];
|
|
133
|
+
const known = buckets.filter((value) => value !== null);
|
|
134
|
+
const sum = known.reduce((total, value) => total + value, 0);
|
|
135
|
+
if (!Number.isSafeInteger(sum) || call.inputTotalTokens !== null &&
|
|
136
|
+
(sum > call.inputTotalTokens || known.length === 3 && sum !== call.inputTotalTokens))
|
|
137
|
+
return false;
|
|
138
|
+
if (call.inputTotalTokens !== null && call.outputTokens !== null &&
|
|
139
|
+
!Number.isSafeInteger(call.inputTotalTokens + call.outputTokens))
|
|
140
|
+
return false;
|
|
141
|
+
const fields = new Map(call.receipt.fields.map((field) => [field.path, field.value]));
|
|
142
|
+
for (const field of call.receipt.fields) {
|
|
143
|
+
if (field.value === null)
|
|
144
|
+
continue;
|
|
145
|
+
if (field.path === "model") {
|
|
146
|
+
if (typeof field.value !== "string" || !effect_1.Schema.is(exports.JudgeUsageModelSchema)(field.value))
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
else if (field.path === "provider") {
|
|
150
|
+
if (call.transportProvider !== "openrouter" || typeof field.value !== "string" || !effect_1.Schema.is(Identity)(field.value))
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
else if (field.path === "usage.cost") {
|
|
154
|
+
const amount = typeof field.value === "number" ? (0, pricing_ts_1.canonicalDecimalFromNumber)(field.value) : field.value;
|
|
155
|
+
if (call.transportProvider !== "openrouter" || amount === undefined || !effect_1.Schema.is(codec_ts_2.CanonicalDecimalSchema)(amount))
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
else if (typeof field.value !== "number" || !effect_1.Schema.is(common_ts_1.NonNegativeSafeIntegerSchema)(field.value) ||
|
|
159
|
+
(call.transportProvider === "typesafe"
|
|
160
|
+
? !["usage.input_tokens", "usage.output_tokens", "usage.total_tokens"].includes(field.path)
|
|
161
|
+
: ["usage.input_tokens", "usage.output_tokens"].includes(field.path)) ||
|
|
162
|
+
field.path === "usage.prompt_tokens_details.cache_write_tokens" && call.transportProvider !== "openrouter")
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
if ((fields.get("model") ?? null) !== call.model || (fields.get("provider") ?? null) !== call.provider)
|
|
166
|
+
return false;
|
|
167
|
+
const inputPath = call.transportProvider === "typesafe" ? "usage.input_tokens" : "usage.prompt_tokens";
|
|
168
|
+
const outputPath = call.transportProvider === "typesafe" ? "usage.output_tokens" : "usage.completion_tokens";
|
|
169
|
+
if (call.inputTotalTokens !== null && fields.get(inputPath) !== call.inputTotalTokens ||
|
|
170
|
+
call.outputTokens !== null && fields.get(outputPath) !== call.outputTokens)
|
|
171
|
+
return false;
|
|
172
|
+
if (call.receipt.reason !== "invalid-usage" &&
|
|
173
|
+
(typeof fields.get(inputPath) === "number" && call.inputTotalTokens === null ||
|
|
174
|
+
typeof fields.get(outputPath) === "number" && call.outputTokens === null ||
|
|
175
|
+
typeof fields.get("usage.prompt_tokens_details.cached_tokens") === "number" && call.cacheReadTokens === null ||
|
|
176
|
+
typeof fields.get("usage.prompt_tokens_details.cache_write_tokens") === "number" && call.cacheWriteTokens === null))
|
|
177
|
+
return false;
|
|
178
|
+
const total = fields.get("usage.total_tokens");
|
|
179
|
+
if (typeof total === "number" &&
|
|
180
|
+
(call.inputTotalTokens !== null && call.inputTotalTokens > total ||
|
|
181
|
+
call.outputTokens !== null && call.outputTokens > total ||
|
|
182
|
+
call.inputTotalTokens !== null && call.outputTokens !== null && call.inputTotalTokens + call.outputTokens !== total))
|
|
183
|
+
return false;
|
|
184
|
+
if (call.transportProvider === "typesafe" && buckets.some((value) => value !== null))
|
|
185
|
+
return false;
|
|
186
|
+
if (call.transportProvider !== "typesafe" && call.inputTotalTokens === 0 && buckets.some((value) => value !== 0))
|
|
187
|
+
return false;
|
|
188
|
+
if (call.cacheReadTokens !== null && fields.get("usage.prompt_tokens_details.cached_tokens") !== call.cacheReadTokens &&
|
|
189
|
+
!(call.inputTotalTokens === 0 && call.cacheReadTokens === 0 && !fields.has("usage.prompt_tokens_details.cached_tokens")))
|
|
190
|
+
return false;
|
|
191
|
+
if (call.cacheWriteTokens !== null && fields.get("usage.prompt_tokens_details.cache_write_tokens") !== call.cacheWriteTokens &&
|
|
192
|
+
!(call.inputTotalTokens === 0 && call.cacheWriteTokens === 0 && !fields.has("usage.prompt_tokens_details.cache_write_tokens")))
|
|
193
|
+
return false;
|
|
194
|
+
if (call.inputTokens !== null && (call.inputTotalTokens === null || call.cacheReadTokens === null || call.cacheWriteTokens === null ||
|
|
195
|
+
call.inputTokens !== call.inputTotalTokens - call.cacheReadTokens - call.cacheWriteTokens))
|
|
196
|
+
return false;
|
|
197
|
+
if (call.inputTotalTokens !== null && call.cacheReadTokens !== null && call.cacheWriteTokens !== null && call.inputTokens === null)
|
|
198
|
+
return false;
|
|
199
|
+
const rawCost = fields.get("usage.cost");
|
|
200
|
+
if (rawCost !== undefined && rawCost !== null && call.cost === null)
|
|
201
|
+
return false;
|
|
202
|
+
if (call.cost !== null) {
|
|
203
|
+
const raw = rawCost;
|
|
204
|
+
const amount = typeof raw === "number" ? (0, pricing_ts_1.canonicalDecimalFromNumber)(raw) : raw;
|
|
205
|
+
if (call.transportProvider !== "openrouter" || call.cost.currency !== "USD" ||
|
|
206
|
+
call.cost.source.id !== "openrouter.usage.cost" || call.cost.amount !== amount)
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
function validPriceReceipt(receipt) {
|
|
212
|
+
const profile = receipt.pricing;
|
|
213
|
+
const expectedSelector = profile.match === "exact" ? profile.requestModel
|
|
214
|
+
: profile.requestModel.includes("/") ? `${profile.requestModel.slice(0, profile.requestModel.indexOf("/"))}/*` : undefined;
|
|
215
|
+
if (profile.selector !== expectedSelector || receipt.source.id !== profile.source.id ||
|
|
216
|
+
profile.source.profileDigest !== (0, pricing_ts_1.adapterCallPricingProfileDigest)({
|
|
217
|
+
basis: profile.basis, currency: profile.currency,
|
|
218
|
+
source: { kind: profile.source.kind, id: profile.source.id, asOf: profile.source.asOf },
|
|
219
|
+
requestModel: profile.requestModel, selector: profile.selector, match: profile.match,
|
|
220
|
+
ratesPerMTok: { input: profile.ratesPerMTok.input, output: profile.ratesPerMTok.output,
|
|
221
|
+
cacheRead: profile.ratesPerMTok.cacheRead, cacheWrite: profile.ratesPerMTok.cacheWrite },
|
|
222
|
+
}))
|
|
223
|
+
return false;
|
|
224
|
+
const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));
|
|
225
|
+
const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));
|
|
226
|
+
if (charges.size !== receipt.charges.length || missing.size !== receipt.missing.length ||
|
|
227
|
+
pricing_ts_1.AdapterCallPriceBuckets.some((bucket) => Number(charges.has(bucket)) + Number(missing.has(bucket)) !== 1))
|
|
228
|
+
return false;
|
|
229
|
+
for (const charge of receipt.charges) {
|
|
230
|
+
const rate = bucketRate(profile.ratesPerMTok, charge.bucket);
|
|
231
|
+
if (charge.ratePerMTok !== rate || charge.tokens > 0 && rate === null ||
|
|
232
|
+
charge.amount !== (rate === null ? "0" : (0, pricing_ts_1.multiplyCanonicalDecimalPerMillion)(rate, charge.tokens)))
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
return receipt.state === (missing.size === 0 ? "complete" : "partial") &&
|
|
236
|
+
receipt.amount === (0, pricing_ts_1.addCanonicalDecimals)(receipt.charges.map((charge) => charge.amount));
|
|
237
|
+
}
|
|
238
|
+
function bucketRate(rates, bucket) {
|
|
239
|
+
switch (bucket) {
|
|
240
|
+
case "input": return rates.input;
|
|
241
|
+
case "output": return rates.output;
|
|
242
|
+
case "cache-read": return rates.cacheRead;
|
|
243
|
+
case "cache-write": return rates.cacheWrite;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function bucketTokens(call, bucket) {
|
|
247
|
+
switch (bucket) {
|
|
248
|
+
case "input": return call.inputTokens;
|
|
249
|
+
case "output": return call.outputTokens;
|
|
250
|
+
case "cache-read": return call.cacheReadTokens;
|
|
251
|
+
case "cache-write": return call.cacheWriteTokens;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function validateJudgeUsageAttachment(value) {
|
|
255
|
+
const issue = (path) => [(0, index_ts_1.recordAttachmentIssue)("record-attachment-schema-invalid", path)];
|
|
256
|
+
if (value.calls.length > exports.JudgeUsageLimits.maximumCalls)
|
|
257
|
+
return issue(["calls"]);
|
|
258
|
+
const calls = new Map();
|
|
259
|
+
const entries = new Map();
|
|
260
|
+
const entryIds = new Map();
|
|
261
|
+
const transmissions = new Map();
|
|
262
|
+
for (const call of value.calls) {
|
|
263
|
+
if (!validCall(call) || calls.has(call.callId) ||
|
|
264
|
+
entries.has(call.entryIndex) && entries.get(call.entryIndex) !== call.entryId ||
|
|
265
|
+
entryIds.has(call.entryId) && entryIds.get(call.entryId) !== call.entryIndex)
|
|
266
|
+
return issue(["calls", "callId"]);
|
|
267
|
+
calls.set(call.callId, call);
|
|
268
|
+
entries.set(call.entryIndex, call.entryId);
|
|
269
|
+
entryIds.set(call.entryId, call.entryIndex);
|
|
270
|
+
const key = `${call.entryIndex}:${call.logicalOrdinal}`;
|
|
271
|
+
let logical = transmissions.get(key);
|
|
272
|
+
if (logical === undefined) {
|
|
273
|
+
logical = { operation: call.operation, model: call.requestModel, provider: call.transportProvider, ordinals: new Set() };
|
|
274
|
+
transmissions.set(key, logical);
|
|
275
|
+
}
|
|
276
|
+
if (logical.operation !== call.operation || logical.model !== call.requestModel || logical.provider !== call.transportProvider)
|
|
277
|
+
return issue(["calls", "logicalOrdinal"]);
|
|
278
|
+
logical.ordinals.add(call.transmissionOrdinal);
|
|
279
|
+
}
|
|
280
|
+
for (const logical of transmissions.values()) {
|
|
281
|
+
for (let ordinal = 1; ordinal <= logical.ordinals.size; ordinal++) {
|
|
282
|
+
if (!logical.ordinals.has(ordinal))
|
|
283
|
+
return issue(["calls", "transmissionOrdinal"]);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const seen = new Set();
|
|
287
|
+
for (const receipt of value.priceReceipts) {
|
|
288
|
+
const call = calls.get(receipt.callId);
|
|
289
|
+
if (call === undefined || seen.has(receipt.callId) || call.cost !== null ||
|
|
290
|
+
receipt.pricing.requestModel !== call.requestModel || !validPriceReceipt(receipt))
|
|
291
|
+
return issue(["priceReceipts", "callId"]);
|
|
292
|
+
seen.add(receipt.callId);
|
|
293
|
+
const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));
|
|
294
|
+
const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));
|
|
295
|
+
for (const bucket of pricing_ts_1.AdapterCallPriceBuckets) {
|
|
296
|
+
const tokens = bucketTokens(call, bucket);
|
|
297
|
+
const rate = bucketRate(receipt.pricing.ratesPerMTok, bucket);
|
|
298
|
+
const charge = charges.get(bucket);
|
|
299
|
+
if (tokens === null ? charge !== undefined || missing.get(bucket)?.reason !== "tokens-unknown"
|
|
300
|
+
: tokens === 0 || rate !== null ? charge?.tokens !== tokens
|
|
301
|
+
: charge !== undefined || missing.get(bucket)?.reason !== "rate-unknown")
|
|
302
|
+
return issue(["priceReceipts", "charges"]);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return [];
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=schema.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { Schema } from \"effect\";\nimport { AssertionEntryIdSchema } from \"../../../assertions/record/codec.ts\";\nimport { recordAttachmentIssue, type RecordAttachmentIssue } from \"../../attachment/index.ts\";\nimport { CollectionStateSchema, FiniteNonNegativeNumberSchema, NonNegativeSafeIntegerSchema, PositiveSafeIntegerSchema } from \"../common.ts\";\nimport { CanonicalDecimalSchema, CurrencyCodeSchema } from \"../source-receipt/codec.ts\";\nimport { AdapterCallPriceBuckets, adapterCallPricingProfileDigest, addCanonicalDecimals, canonicalDecimalFromNumber, multiplyCanonicalDecimalPerMillion, } from \"../adapter-usage/pricing.ts\";\nexport const JudgeUsageLimits = Object.freeze({\n maximumCalls: 4000,\n maximumModelBytes: 8192,\n maximumReceiptBytes: 32768,\n maximumReceiptFields: 24,\n});\nconst encoder = new TextEncoder();\nfunction boundedIdentity(maximumBytes: number) {\n return Schema.String.check(Schema.makeFilter((value) => value.trim().length > 0 && !/[\\ud800-\\udfff]/u.test(value) &&\n encoder.encode(value).byteLength <= maximumBytes && !/[\\u0000-\\u001f\\u007f]/u.test(value)));\n}\nconst Identity = boundedIdentity(256);\n/** @internal Used to validate observations before retaining their response fields. */\nexport const JudgeUsageModelSchema = boundedIdentity(JudgeUsageLimits.maximumModelBytes);\nconst Digest = Schema.String.check(Schema.isPattern(/^sha256:[0-9a-f]{64}$/u));\nconst Tokens = Schema.NullOr(NonNegativeSafeIntegerSchema);\nconst NullableRate = Schema.NullOr(CanonicalDecimalSchema);\n/** Only these protocol facts may enter durable receipts; business text is excluded. */\nexport const JudgeUsageReceiptPaths = Object.freeze([\n \"model\",\n \"provider\",\n \"usage.completion_tokens\",\n \"usage.cost\",\n \"usage.input_tokens\",\n \"usage.output_tokens\",\n \"usage.prompt_tokens\",\n \"usage.prompt_tokens_details.cache_write_tokens\",\n \"usage.prompt_tokens_details.cached_tokens\",\n \"usage.total_tokens\",\n] as const);\nconst ReceiptFieldSchema = Schema.Struct({\n path: Schema.Literals(JudgeUsageReceiptPaths),\n value: Schema.Union([Schema.String.check(Schema.makeFilter((value) => !/[\\ud800-\\udfff]/u.test(value) && encoder.encode(value).byteLength <= JudgeUsageLimits.maximumModelBytes &&\n !/[\\u0000-\\u001f\\u007f]/u.test(value))), FiniteNonNegativeNumberSchema.check(Schema.makeFilter((value) => !Object.is(value, -0))), Schema.Null]),\n});\nconst ReceiptSchema = Schema.Struct({\n state: Schema.Literals([\"available\", \"unavailable\"]),\n reason: Schema.NullOr(Schema.Literals([\n \"response-unavailable\", \"cancelled\", \"response-too-large\", \"invalid-json\",\n \"usage-not-reported\", \"invalid-usage\", \"response-model-too-large\",\n ])),\n responseDigest: Schema.NullOr(Digest),\n fields: Schema.Array(ReceiptFieldSchema),\n}).check(Schema.makeFilter((receipt) => {\n if (receipt.fields.length > JudgeUsageLimits.maximumReceiptFields ||\n encoder.encode(JSON.stringify(receipt)).byteLength > JudgeUsageLimits.maximumReceiptBytes ||\n receipt.fields.some((field, index) => index > 0 && receipt.fields[index - 1]!.path >= field.path))\n return false;\n if (receipt.state === \"available\") {\n return receipt.fields.some((field) => field.value !== null) && receipt.responseDigest !== null &&\n (receipt.reason === null || receipt.reason === \"invalid-usage\" ||\n receipt.reason === \"usage-not-reported\" || receipt.reason === \"response-model-too-large\");\n }\n return receipt.fields.length === 0 && receipt.reason !== null &&\n (receipt.reason === \"invalid-json\" || receipt.reason === \"invalid-usage\" ||\n receipt.reason === \"usage-not-reported\" || receipt.reason === \"response-model-too-large\"\n ? receipt.responseDigest !== null : receipt.responseDigest === null);\n}));\nconst CallShapeSchema = Schema.Struct({\n callId: Identity,\n entryIndex: NonNegativeSafeIntegerSchema,\n entryId: AssertionEntryIdSchema,\n logicalOrdinal: PositiveSafeIntegerSchema,\n transmissionOrdinal: PositiveSafeIntegerSchema,\n operation: Schema.Literals([\"score\", \"classify\", \"extract\", \"batchClassify\"]),\n requestModel: JudgeUsageModelSchema,\n transportProvider: Schema.Literals([\"openai\", \"vercel\", \"openrouter\", \"typesafe\"]),\n provider: Schema.NullOr(Identity),\n model: Schema.NullOr(JudgeUsageModelSchema),\n status: Schema.Literals([\"succeeded\", \"failed\", \"cancelled\", \"unknown\"]),\n httpStatus: Schema.NullOr(NonNegativeSafeIntegerSchema.check(Schema.makeFilter((value) => value >= 100 && value <= 599))),\n inputTokens: Tokens,\n inputTotalTokens: Tokens,\n outputTokens: Tokens,\n cacheReadTokens: Tokens,\n cacheWriteTokens: Tokens,\n cost: Schema.NullOr(Schema.Struct({\n amount: CanonicalDecimalSchema,\n currency: CurrencyCodeSchema,\n source: Schema.Struct({ kind: Schema.Literal(\"reported\"), id: Identity }),\n })),\n receipt: ReceiptSchema,\n});\nexport type JudgeUsageCall = Schema.Schema.Type<typeof CallShapeSchema>;\nexport const JudgeUsageCallSchema = CallShapeSchema.check(Schema.makeFilter((call) => validCall(call)));\nconst PriceReceiptShapeSchema = Schema.Struct({\n kind: Schema.Literal(\"judge-call-price-estimate\"),\n callId: Identity,\n state: Schema.Literals([\"complete\", \"partial\"]),\n amount: CanonicalDecimalSchema,\n currency: Schema.Literal(\"USD\"),\n source: Schema.Struct({ kind: Schema.Literal(\"estimated\"), id: Identity }),\n pricing: Schema.Struct({\n basis: Schema.Literal(\"catalog-reference\"),\n currency: Schema.Literal(\"USD\"),\n source: Schema.Struct({\n kind: Schema.Literal(\"configured-profile\"), id: Identity,\n asOf: Schema.NullOr(PositiveSafeIntegerSchema), profileDigest: Digest,\n }),\n requestModel: JudgeUsageModelSchema,\n selector: JudgeUsageModelSchema,\n match: Schema.Literals([\"exact\", \"provider-wildcard\"]),\n ratesPerMTok: Schema.Struct({ input: NullableRate, output: NullableRate, cacheRead: NullableRate, cacheWrite: NullableRate }),\n }),\n charges: Schema.NonEmptyArray(Schema.Struct({\n bucket: Schema.Literals(AdapterCallPriceBuckets), tokens: NonNegativeSafeIntegerSchema,\n ratePerMTok: NullableRate, amount: CanonicalDecimalSchema,\n })),\n missing: Schema.Array(Schema.Struct({\n bucket: Schema.Literals(AdapterCallPriceBuckets), reason: Schema.Literals([\"tokens-unknown\", \"rate-unknown\"]),\n })),\n});\nexport type JudgePriceReceipt = Schema.Schema.Type<typeof PriceReceiptShapeSchema>;\nexport const JudgePriceReceiptSchema = PriceReceiptShapeSchema.check(Schema.makeFilter((receipt) => validPriceReceipt(receipt)));\nconst AttachmentSchema = Schema.Struct({\n collection: CollectionStateSchema,\n calls: Schema.Array(JudgeUsageCallSchema),\n priceReceipts: Schema.Array(JudgePriceReceiptSchema),\n});\nexport type JudgeUsageAttachment = Schema.Schema.Type<typeof AttachmentSchema>;\nexport const JudgeUsageAttachmentSchema = AttachmentSchema.check(Schema.makeFilter((value) => validateJudgeUsageAttachment(value).length === 0));\nfunction validCall(call: JudgeUsageCall): boolean {\n if (call.callId !== `judge:${call.entryIndex}:${call.logicalOrdinal}:${call.transmissionOrdinal}`)\n return false;\n const buckets = [call.inputTokens, call.cacheReadTokens, call.cacheWriteTokens];\n const known = buckets.filter((value): value is number => value !== null);\n const sum = known.reduce((total, value) => total + value, 0);\n if (!Number.isSafeInteger(sum) || call.inputTotalTokens !== null &&\n (sum > call.inputTotalTokens || known.length === 3 && sum !== call.inputTotalTokens))\n return false;\n if (call.inputTotalTokens !== null && call.outputTokens !== null &&\n !Number.isSafeInteger(call.inputTotalTokens + call.outputTokens))\n return false;\n const fields = new Map(call.receipt.fields.map((field) => [field.path, field.value]));\n for (const field of call.receipt.fields) {\n if (field.value === null)\n continue;\n if (field.path === \"model\") {\n if (typeof field.value !== \"string\" || !Schema.is(JudgeUsageModelSchema)(field.value))\n return false;\n }\n else if (field.path === \"provider\") {\n if (call.transportProvider !== \"openrouter\" || typeof field.value !== \"string\" || !Schema.is(Identity)(field.value))\n return false;\n }\n else if (field.path === \"usage.cost\") {\n const amount = typeof field.value === \"number\" ? canonicalDecimalFromNumber(field.value) : field.value;\n if (call.transportProvider !== \"openrouter\" || amount === undefined || !Schema.is(CanonicalDecimalSchema)(amount))\n return false;\n }\n else if (typeof field.value !== \"number\" || !Schema.is(NonNegativeSafeIntegerSchema)(field.value) ||\n (call.transportProvider === \"typesafe\"\n ? ![\"usage.input_tokens\", \"usage.output_tokens\", \"usage.total_tokens\"].includes(field.path)\n : [\"usage.input_tokens\", \"usage.output_tokens\"].includes(field.path)) ||\n field.path === \"usage.prompt_tokens_details.cache_write_tokens\" && call.transportProvider !== \"openrouter\")\n return false;\n }\n if ((fields.get(\"model\") ?? null) !== call.model || (fields.get(\"provider\") ?? null) !== call.provider)\n return false;\n const inputPath = call.transportProvider === \"typesafe\" ? \"usage.input_tokens\" : \"usage.prompt_tokens\";\n const outputPath = call.transportProvider === \"typesafe\" ? \"usage.output_tokens\" : \"usage.completion_tokens\";\n if (call.inputTotalTokens !== null && fields.get(inputPath) !== call.inputTotalTokens ||\n call.outputTokens !== null && fields.get(outputPath) !== call.outputTokens)\n return false;\n if (call.receipt.reason !== \"invalid-usage\" &&\n (typeof fields.get(inputPath) === \"number\" && call.inputTotalTokens === null ||\n typeof fields.get(outputPath) === \"number\" && call.outputTokens === null ||\n typeof fields.get(\"usage.prompt_tokens_details.cached_tokens\") === \"number\" && call.cacheReadTokens === null ||\n typeof fields.get(\"usage.prompt_tokens_details.cache_write_tokens\") === \"number\" && call.cacheWriteTokens === null))\n return false;\n const total = fields.get(\"usage.total_tokens\");\n if (typeof total === \"number\" &&\n (call.inputTotalTokens !== null && call.inputTotalTokens > total ||\n call.outputTokens !== null && call.outputTokens > total ||\n call.inputTotalTokens !== null && call.outputTokens !== null && call.inputTotalTokens + call.outputTokens !== total))\n return false;\n if (call.transportProvider === \"typesafe\" && buckets.some((value) => value !== null))\n return false;\n if (call.transportProvider !== \"typesafe\" && call.inputTotalTokens === 0 && buckets.some((value) => value !== 0))\n return false;\n if (call.cacheReadTokens !== null && fields.get(\"usage.prompt_tokens_details.cached_tokens\") !== call.cacheReadTokens &&\n !(call.inputTotalTokens === 0 && call.cacheReadTokens === 0 && !fields.has(\"usage.prompt_tokens_details.cached_tokens\")))\n return false;\n if (call.cacheWriteTokens !== null && fields.get(\"usage.prompt_tokens_details.cache_write_tokens\") !== call.cacheWriteTokens &&\n !(call.inputTotalTokens === 0 && call.cacheWriteTokens === 0 && !fields.has(\"usage.prompt_tokens_details.cache_write_tokens\")))\n return false;\n if (call.inputTokens !== null && (call.inputTotalTokens === null || call.cacheReadTokens === null || call.cacheWriteTokens === null ||\n call.inputTokens !== call.inputTotalTokens - call.cacheReadTokens - call.cacheWriteTokens))\n return false;\n if (call.inputTotalTokens !== null && call.cacheReadTokens !== null && call.cacheWriteTokens !== null && call.inputTokens === null)\n return false;\n const rawCost = fields.get(\"usage.cost\");\n if (rawCost !== undefined && rawCost !== null && call.cost === null)\n return false;\n if (call.cost !== null) {\n const raw = rawCost;\n const amount = typeof raw === \"number\" ? canonicalDecimalFromNumber(raw) : raw;\n if (call.transportProvider !== \"openrouter\" || call.cost.currency !== \"USD\" ||\n call.cost.source.id !== \"openrouter.usage.cost\" || call.cost.amount !== amount)\n return false;\n }\n return true;\n}\nfunction validPriceReceipt(receipt: JudgePriceReceipt): boolean {\n const profile = receipt.pricing;\n const expectedSelector = profile.match === \"exact\" ? profile.requestModel\n : profile.requestModel.includes(\"/\") ? `${profile.requestModel.slice(0, profile.requestModel.indexOf(\"/\"))}/*` : undefined;\n if (profile.selector !== expectedSelector || receipt.source.id !== profile.source.id ||\n profile.source.profileDigest !== adapterCallPricingProfileDigest({\n basis: profile.basis, currency: profile.currency,\n source: { kind: profile.source.kind, id: profile.source.id, asOf: profile.source.asOf },\n requestModel: profile.requestModel, selector: profile.selector, match: profile.match,\n ratesPerMTok: { input: profile.ratesPerMTok.input, output: profile.ratesPerMTok.output,\n cacheRead: profile.ratesPerMTok.cacheRead, cacheWrite: profile.ratesPerMTok.cacheWrite },\n }))\n return false;\n const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));\n const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));\n if (charges.size !== receipt.charges.length || missing.size !== receipt.missing.length ||\n AdapterCallPriceBuckets.some((bucket) => Number(charges.has(bucket)) + Number(missing.has(bucket)) !== 1))\n return false;\n for (const charge of receipt.charges) {\n const rate = bucketRate(profile.ratesPerMTok, charge.bucket);\n if (charge.ratePerMTok !== rate || charge.tokens > 0 && rate === null ||\n charge.amount !== (rate === null ? \"0\" : multiplyCanonicalDecimalPerMillion(rate, charge.tokens)))\n return false;\n }\n return receipt.state === (missing.size === 0 ? \"complete\" : \"partial\") &&\n receipt.amount === addCanonicalDecimals(receipt.charges.map((charge) => charge.amount));\n}\nfunction bucketRate(rates: JudgePriceReceipt[\"pricing\"][\"ratesPerMTok\"], bucket: (typeof AdapterCallPriceBuckets)[number]): string | null {\n switch (bucket) {\n case \"input\": return rates.input;\n case \"output\": return rates.output;\n case \"cache-read\": return rates.cacheRead;\n case \"cache-write\": return rates.cacheWrite;\n }\n}\nfunction bucketTokens(call: JudgeUsageCall, bucket: (typeof AdapterCallPriceBuckets)[number]): number | null {\n switch (bucket) {\n case \"input\": return call.inputTokens;\n case \"output\": return call.outputTokens;\n case \"cache-read\": return call.cacheReadTokens;\n case \"cache-write\": return call.cacheWriteTokens;\n }\n}\nexport function validateJudgeUsageAttachment(value: JudgeUsageAttachment): readonly RecordAttachmentIssue[] {\n const issue = (path: string[]) => [recordAttachmentIssue(\"record-attachment-schema-invalid\", path)];\n if (value.calls.length > JudgeUsageLimits.maximumCalls)\n return issue([\"calls\"]);\n const calls = new Map<string, JudgeUsageCall>();\n const entries = new Map<number, string>();\n const entryIds = new Map<string, number>();\n const transmissions = new Map<string, {\n readonly operation: JudgeUsageCall[\"operation\"];\n readonly model: string;\n readonly provider: string;\n readonly ordinals: Set<number>;\n }>();\n for (const call of value.calls) {\n if (!validCall(call) || calls.has(call.callId) ||\n entries.has(call.entryIndex) && entries.get(call.entryIndex) !== call.entryId ||\n entryIds.has(call.entryId) && entryIds.get(call.entryId) !== call.entryIndex)\n return issue([\"calls\", \"callId\"]);\n calls.set(call.callId, call);\n entries.set(call.entryIndex, call.entryId);\n entryIds.set(call.entryId, call.entryIndex);\n const key = `${call.entryIndex}:${call.logicalOrdinal}`;\n let logical = transmissions.get(key);\n if (logical === undefined) {\n logical = { operation: call.operation, model: call.requestModel, provider: call.transportProvider, ordinals: new Set() };\n transmissions.set(key, logical);\n }\n if (logical.operation !== call.operation || logical.model !== call.requestModel || logical.provider !== call.transportProvider)\n return issue([\"calls\", \"logicalOrdinal\"]);\n logical.ordinals.add(call.transmissionOrdinal);\n }\n for (const logical of transmissions.values()) {\n for (let ordinal = 1; ordinal <= logical.ordinals.size; ordinal++) {\n if (!logical.ordinals.has(ordinal))\n return issue([\"calls\", \"transmissionOrdinal\"]);\n }\n }\n const seen = new Set<string>();\n for (const receipt of value.priceReceipts) {\n const call = calls.get(receipt.callId);\n if (call === undefined || seen.has(receipt.callId) || call.cost !== null ||\n receipt.pricing.requestModel !== call.requestModel || !validPriceReceipt(receipt))\n return issue([\"priceReceipts\", \"callId\"]);\n seen.add(receipt.callId);\n const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));\n const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));\n for (const bucket of AdapterCallPriceBuckets) {\n const tokens = bucketTokens(call, bucket);\n const rate = bucketRate(receipt.pricing.ratesPerMTok, bucket);\n const charge = charges.get(bucket);\n if (tokens === null ? charge !== undefined || missing.get(bucket)?.reason !== \"tokens-unknown\"\n : tokens === 0 || rate !== null ? charge?.tokens !== tokens\n : charge !== undefined || missing.get(bucket)?.reason !== \"rate-unknown\")\n return issue([\"priceReceipts\", \"charges\"]);\n }\n }\n return [];\n}\n"]}
|