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,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeJudgeUsageResponse = normalizeJudgeUsageResponse;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const core_ts_1 = require("../record/codec/core.cjs");
|
|
6
|
+
const digest_ts_1 = require("../record/definition/digest.cjs");
|
|
7
|
+
const common_ts_1 = require("../record/family/common.cjs");
|
|
8
|
+
const codec_ts_1 = require("../record/family/source-receipt/codec.cjs");
|
|
9
|
+
const pricing_ts_1 = require("../record/family/adapter-usage/pricing.cjs");
|
|
10
|
+
const schema_ts_1 = require("../record/family/judge-usage/schema.cjs");
|
|
11
|
+
const ProviderSchema = schema_ts_1.JudgeUsageModelSchema.check(effect_1.Schema.makeFilter((value) => new TextEncoder().encode(value).byteLength <= 256));
|
|
12
|
+
const JsonResponseSchema = effect_1.Schema.fromJsonString(effect_1.Schema.Unknown);
|
|
13
|
+
function unavailable(reason, responseDigest) {
|
|
14
|
+
return Object.freeze({
|
|
15
|
+
provider: null, model: null, inputTokens: null, inputTotalTokens: null, outputTokens: null,
|
|
16
|
+
cacheReadTokens: null, cacheWriteTokens: null, cost: null,
|
|
17
|
+
receipt: Object.freeze({ state: "unavailable", reason, responseDigest, fields: Object.freeze([]) }),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Retains only protocol facts, independently of status and QA/body interpretation. */
|
|
21
|
+
function normalizeJudgeUsageResponse(transportProvider, body) {
|
|
22
|
+
const bytes = new TextEncoder().encode(body);
|
|
23
|
+
if (body.length === 0)
|
|
24
|
+
return unavailable("response-unavailable", null);
|
|
25
|
+
const responseDigest = `sha256:${new digest_ts_1.RecordSha256().update(bytes).digestHex()}`;
|
|
26
|
+
const decoded = effect_1.Schema.decodeUnknownResult(JsonResponseSchema)(body);
|
|
27
|
+
if (effect_1.Result.isFailure(decoded))
|
|
28
|
+
return unavailable("invalid-json", responseDigest);
|
|
29
|
+
const root = decoded.success;
|
|
30
|
+
if (!effect_1.Predicate.isObject(root) || Array.isArray(root))
|
|
31
|
+
return unavailable("invalid-usage", responseDigest);
|
|
32
|
+
const fields = [];
|
|
33
|
+
let invalidUsage = root.usage !== undefined && (!effect_1.Predicate.isObject(root.usage) || Array.isArray(root.usage));
|
|
34
|
+
let modelTooLarge = false;
|
|
35
|
+
function read(path) {
|
|
36
|
+
let value = root;
|
|
37
|
+
for (const key of path.split(".")) {
|
|
38
|
+
if (!effect_1.Predicate.isObject(value) || Array.isArray(value) || !Object.hasOwn(value, key))
|
|
39
|
+
return undefined;
|
|
40
|
+
value = value[key];
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
function scalar(path, schema) {
|
|
45
|
+
const raw = read(path);
|
|
46
|
+
if (raw === undefined)
|
|
47
|
+
return null;
|
|
48
|
+
const value = effect_1.Schema.decodeUnknownResult(schema, core_ts_1.RecordExactParseOptions)(raw);
|
|
49
|
+
if (effect_1.Result.isFailure(value)) {
|
|
50
|
+
if (path === "model" && typeof raw === "string" && new TextEncoder().encode(raw).byteLength > schema_ts_1.JudgeUsageLimits.maximumModelBytes)
|
|
51
|
+
modelTooLarge = true;
|
|
52
|
+
else
|
|
53
|
+
invalidUsage = true;
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
// Schemas above accept only string/number encodings, so arbitrary JSON never enters a receipt.
|
|
57
|
+
if (typeof raw === "string" || typeof raw === "number")
|
|
58
|
+
fields.push({ path, value: raw === 0 ? 0 : raw });
|
|
59
|
+
return value.success;
|
|
60
|
+
}
|
|
61
|
+
const model = scalar("model", schema_ts_1.JudgeUsageModelSchema);
|
|
62
|
+
const provider = transportProvider === "openrouter" ? scalar("provider", ProviderSchema) : null;
|
|
63
|
+
const inputPath = transportProvider === "typesafe" ? "usage.input_tokens" : "usage.prompt_tokens";
|
|
64
|
+
const outputPath = transportProvider === "typesafe" ? "usage.output_tokens" : "usage.completion_tokens";
|
|
65
|
+
let inputTotalTokens = scalar(inputPath, common_ts_1.NonNegativeSafeIntegerSchema);
|
|
66
|
+
let outputTokens = scalar(outputPath, common_ts_1.NonNegativeSafeIntegerSchema);
|
|
67
|
+
const totalTokens = scalar("usage.total_tokens", common_ts_1.NonNegativeSafeIntegerSchema);
|
|
68
|
+
let cacheReadTokens = transportProvider === "typesafe" ? null
|
|
69
|
+
: scalar("usage.prompt_tokens_details.cached_tokens", common_ts_1.NonNegativeSafeIntegerSchema);
|
|
70
|
+
let cacheWriteTokens = transportProvider === "openrouter"
|
|
71
|
+
? scalar("usage.prompt_tokens_details.cache_write_tokens", common_ts_1.NonNegativeSafeIntegerSchema) : null;
|
|
72
|
+
let inputTokens = null;
|
|
73
|
+
if (transportProvider !== "typesafe") {
|
|
74
|
+
const details = read("usage.prompt_tokens_details.cached_tokens");
|
|
75
|
+
const write = read("usage.prompt_tokens_details.cache_write_tokens");
|
|
76
|
+
const usage = root.usage;
|
|
77
|
+
const malformedDetails = effect_1.Predicate.isObject(usage) && usage.prompt_tokens_details !== undefined &&
|
|
78
|
+
(!effect_1.Predicate.isObject(usage.prompt_tokens_details) || Array.isArray(usage.prompt_tokens_details));
|
|
79
|
+
if (malformedDetails)
|
|
80
|
+
invalidUsage = true;
|
|
81
|
+
const invalidCache = malformedDetails || details !== undefined && cacheReadTokens === null ||
|
|
82
|
+
transportProvider === "openrouter" && write !== undefined && cacheWriteTokens === null;
|
|
83
|
+
const invalidZeroWrite = write !== undefined &&
|
|
84
|
+
(!effect_1.Schema.is(common_ts_1.NonNegativeSafeIntegerSchema)(write) || write !== 0);
|
|
85
|
+
const knownSum = (cacheReadTokens ?? 0) + (cacheWriteTokens ?? 0);
|
|
86
|
+
if (!Number.isSafeInteger(knownSum) || inputTotalTokens !== null &&
|
|
87
|
+
(knownSum > inputTotalTokens || inputTotalTokens === 0 && (invalidCache || invalidZeroWrite))) {
|
|
88
|
+
invalidUsage = true;
|
|
89
|
+
inputTotalTokens = cacheReadTokens = cacheWriteTokens = null;
|
|
90
|
+
}
|
|
91
|
+
else if (inputTotalTokens === 0 && !invalidCache) {
|
|
92
|
+
// Non-negative sub-buckets of an explicitly zero total are independently zero.
|
|
93
|
+
inputTokens = cacheReadTokens = cacheWriteTokens = 0;
|
|
94
|
+
}
|
|
95
|
+
else if (inputTotalTokens !== null && cacheReadTokens !== null && cacheWriteTokens !== null) {
|
|
96
|
+
inputTokens = inputTotalTokens - cacheReadTokens - cacheWriteTokens;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const invalidTotal = read("usage.total_tokens") !== undefined && totalTokens === null;
|
|
100
|
+
if (invalidTotal || totalTokens !== null &&
|
|
101
|
+
(inputTotalTokens !== null && inputTotalTokens > totalTokens || outputTokens !== null && outputTokens > totalTokens) ||
|
|
102
|
+
inputTotalTokens !== null && outputTokens !== null &&
|
|
103
|
+
(!Number.isSafeInteger(inputTotalTokens + outputTokens) || totalTokens !== null && totalTokens !== inputTotalTokens + outputTokens)) {
|
|
104
|
+
invalidUsage = true;
|
|
105
|
+
inputTokens = inputTotalTokens = outputTokens = cacheReadTokens = cacheWriteTokens = null;
|
|
106
|
+
}
|
|
107
|
+
let cost = null;
|
|
108
|
+
if (transportProvider === "openrouter") {
|
|
109
|
+
const raw = read("usage.cost");
|
|
110
|
+
if (raw !== undefined) {
|
|
111
|
+
const amount = typeof raw === "number" && effect_1.Schema.is(common_ts_1.FiniteNonNegativeNumberSchema)(raw)
|
|
112
|
+
? (0, pricing_ts_1.canonicalDecimalFromNumber)(raw) : raw;
|
|
113
|
+
const parsed = effect_1.Schema.decodeUnknownResult(codec_ts_1.CanonicalDecimalSchema)(amount);
|
|
114
|
+
if (effect_1.Result.isFailure(parsed))
|
|
115
|
+
invalidUsage = true;
|
|
116
|
+
else {
|
|
117
|
+
const currency = effect_1.Schema.decodeUnknownSync(codec_ts_1.CurrencyCodeSchema)("USD");
|
|
118
|
+
cost = Object.freeze({ amount: parsed.success, currency, source: Object.freeze({ kind: "reported", id: "openrouter.usage.cost" }) });
|
|
119
|
+
if (typeof raw === "string" || typeof raw === "number")
|
|
120
|
+
fields.push({ path: "usage.cost", value: raw === 0 ? 0 : raw });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
fields.sort((left, right) => left.path < right.path ? -1 : left.path > right.path ? 1 : 0);
|
|
125
|
+
const usageReported = fields.some((field) => field.path.startsWith("usage."));
|
|
126
|
+
const reason = invalidUsage ? "invalid-usage" : modelTooLarge ? "response-model-too-large" : usageReported ? null : "usage-not-reported";
|
|
127
|
+
return Object.freeze({
|
|
128
|
+
provider, model, inputTokens, inputTotalTokens, outputTokens, cacheReadTokens, cacheWriteTokens, cost,
|
|
129
|
+
receipt: Object.freeze({
|
|
130
|
+
state: fields.length > 0 ? "available" : "unavailable", reason, responseDigest,
|
|
131
|
+
fields: Object.freeze(fields.map((field) => Object.freeze(field))),
|
|
132
|
+
}),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=judge-usage-receipt.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-usage-receipt.js","sourceRoot":"","sources":["judge-usage-receipt.ts"],"names":[],"mappings":"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","sourcesContent":["import { Predicate, Result, Schema } from \"effect\";\nimport { RecordExactParseOptions } from \"../record/codec/core.ts\";\nimport { RecordSha256 } from \"../record/definition/digest.ts\";\nimport { FiniteNonNegativeNumberSchema, NonNegativeSafeIntegerSchema } from \"../record/family/common.ts\";\nimport { CanonicalDecimalSchema, CurrencyCodeSchema } from \"../record/family/source-receipt/codec.ts\";\nimport { canonicalDecimalFromNumber } from \"../record/family/adapter-usage/pricing.ts\";\nimport { JudgeUsageLimits, JudgeUsageModelSchema, type JudgeUsageCall } from \"../record/family/judge-usage/schema.ts\";\ntype NormalizedResponse = Pick<JudgeUsageCall, \"provider\" | \"model\" | \"inputTokens\" | \"inputTotalTokens\" | \"outputTokens\" | \"cacheReadTokens\" | \"cacheWriteTokens\" | \"cost\" | \"receipt\">;\ntype Field = JudgeUsageCall[\"receipt\"][\"fields\"][number];\nconst ProviderSchema = JudgeUsageModelSchema.check(Schema.makeFilter((value) => new TextEncoder().encode(value).byteLength <= 256));\nconst JsonResponseSchema = Schema.fromJsonString(Schema.Unknown);\nfunction unavailable(reason: JudgeUsageCall[\"receipt\"][\"reason\"], responseDigest: string | null): NormalizedResponse {\n return Object.freeze({\n provider: null, model: null, inputTokens: null, inputTotalTokens: null, outputTokens: null,\n cacheReadTokens: null, cacheWriteTokens: null, cost: null,\n receipt: Object.freeze({ state: \"unavailable\", reason, responseDigest, fields: Object.freeze([]) }),\n });\n}\n/** Retains only protocol facts, independently of status and QA/body interpretation. */\nexport function normalizeJudgeUsageResponse(transportProvider: JudgeUsageCall[\"transportProvider\"], body: string): NormalizedResponse {\n const bytes = new TextEncoder().encode(body);\n if (body.length === 0)\n return unavailable(\"response-unavailable\", null);\n const responseDigest = `sha256:${new RecordSha256().update(bytes).digestHex()}`;\n const decoded = Schema.decodeUnknownResult(JsonResponseSchema)(body);\n if (Result.isFailure(decoded))\n return unavailable(\"invalid-json\", responseDigest);\n const root = decoded.success;\n if (!Predicate.isObject(root) || Array.isArray(root))\n return unavailable(\"invalid-usage\", responseDigest);\n const fields: Field[] = [];\n let invalidUsage = root.usage !== undefined && (!Predicate.isObject(root.usage) || Array.isArray(root.usage));\n let modelTooLarge = false;\n function read(path: Field[\"path\"]): unknown {\n let value: unknown = root;\n for (const key of path.split(\".\")) {\n if (!Predicate.isObject(value) || Array.isArray(value) || !Object.hasOwn(value, key))\n return undefined;\n value = value[key];\n }\n return value;\n }\n function scalar<A>(path: Field[\"path\"], schema: Schema.Codec<A, string | number>): A | null {\n const raw = read(path);\n if (raw === undefined)\n return null;\n const value = Schema.decodeUnknownResult(schema, RecordExactParseOptions)(raw);\n if (Result.isFailure(value)) {\n if (path === \"model\" && typeof raw === \"string\" && new TextEncoder().encode(raw).byteLength > JudgeUsageLimits.maximumModelBytes)\n modelTooLarge = true;\n else\n invalidUsage = true;\n return null;\n }\n // Schemas above accept only string/number encodings, so arbitrary JSON never enters a receipt.\n if (typeof raw === \"string\" || typeof raw === \"number\")\n fields.push({ path, value: raw === 0 ? 0 : raw });\n return value.success;\n }\n const model = scalar(\"model\", JudgeUsageModelSchema);\n const provider = transportProvider === \"openrouter\" ? scalar(\"provider\", ProviderSchema) : null;\n const inputPath = transportProvider === \"typesafe\" ? \"usage.input_tokens\" : \"usage.prompt_tokens\";\n const outputPath = transportProvider === \"typesafe\" ? \"usage.output_tokens\" : \"usage.completion_tokens\";\n let inputTotalTokens = scalar(inputPath, NonNegativeSafeIntegerSchema);\n let outputTokens = scalar(outputPath, NonNegativeSafeIntegerSchema);\n const totalTokens = scalar(\"usage.total_tokens\", NonNegativeSafeIntegerSchema);\n let cacheReadTokens = transportProvider === \"typesafe\" ? null\n : scalar(\"usage.prompt_tokens_details.cached_tokens\", NonNegativeSafeIntegerSchema);\n let cacheWriteTokens = transportProvider === \"openrouter\"\n ? scalar(\"usage.prompt_tokens_details.cache_write_tokens\", NonNegativeSafeIntegerSchema) : null;\n let inputTokens: number | null = null;\n if (transportProvider !== \"typesafe\") {\n const details = read(\"usage.prompt_tokens_details.cached_tokens\");\n const write = read(\"usage.prompt_tokens_details.cache_write_tokens\");\n const usage = root.usage;\n const malformedDetails = Predicate.isObject(usage) && usage.prompt_tokens_details !== undefined &&\n (!Predicate.isObject(usage.prompt_tokens_details) || Array.isArray(usage.prompt_tokens_details));\n if (malformedDetails)\n invalidUsage = true;\n const invalidCache = malformedDetails || details !== undefined && cacheReadTokens === null ||\n transportProvider === \"openrouter\" && write !== undefined && cacheWriteTokens === null;\n const invalidZeroWrite = write !== undefined &&\n (!Schema.is(NonNegativeSafeIntegerSchema)(write) || write !== 0);\n const knownSum = (cacheReadTokens ?? 0) + (cacheWriteTokens ?? 0);\n if (!Number.isSafeInteger(knownSum) || inputTotalTokens !== null &&\n (knownSum > inputTotalTokens || inputTotalTokens === 0 && (invalidCache || invalidZeroWrite))) {\n invalidUsage = true;\n inputTotalTokens = cacheReadTokens = cacheWriteTokens = null;\n }\n else if (inputTotalTokens === 0 && !invalidCache) {\n // Non-negative sub-buckets of an explicitly zero total are independently zero.\n inputTokens = cacheReadTokens = cacheWriteTokens = 0;\n }\n else if (inputTotalTokens !== null && cacheReadTokens !== null && cacheWriteTokens !== null) {\n inputTokens = inputTotalTokens - cacheReadTokens - cacheWriteTokens;\n }\n }\n const invalidTotal = read(\"usage.total_tokens\") !== undefined && totalTokens === null;\n if (invalidTotal || totalTokens !== null &&\n (inputTotalTokens !== null && inputTotalTokens > totalTokens || outputTokens !== null && outputTokens > totalTokens) ||\n inputTotalTokens !== null && outputTokens !== null &&\n (!Number.isSafeInteger(inputTotalTokens + outputTokens) || totalTokens !== null && totalTokens !== inputTotalTokens + outputTokens)) {\n invalidUsage = true;\n inputTokens = inputTotalTokens = outputTokens = cacheReadTokens = cacheWriteTokens = null;\n }\n let cost: JudgeUsageCall[\"cost\"] = null;\n if (transportProvider === \"openrouter\") {\n const raw = read(\"usage.cost\");\n if (raw !== undefined) {\n const amount = typeof raw === \"number\" && Schema.is(FiniteNonNegativeNumberSchema)(raw)\n ? canonicalDecimalFromNumber(raw) : raw;\n const parsed = Schema.decodeUnknownResult(CanonicalDecimalSchema)(amount);\n if (Result.isFailure(parsed))\n invalidUsage = true;\n else {\n const currency = Schema.decodeUnknownSync(CurrencyCodeSchema)(\"USD\");\n cost = Object.freeze({ amount: parsed.success, currency, source: Object.freeze({ kind: \"reported\", id: \"openrouter.usage.cost\" }) });\n if (typeof raw === \"string\" || typeof raw === \"number\")\n fields.push({ path: \"usage.cost\", value: raw === 0 ? 0 : raw });\n }\n }\n }\n fields.sort((left, right) => left.path < right.path ? -1 : left.path > right.path ? 1 : 0);\n const usageReported = fields.some((field) => field.path.startsWith(\"usage.\"));\n const reason = invalidUsage ? \"invalid-usage\" : modelTooLarge ? \"response-model-too-large\" : usageReported ? null : \"usage-not-reported\";\n return Object.freeze({\n provider, model, inputTokens, inputTotalTokens, outputTokens, cacheReadTokens, cacheWriteTokens, cost,\n receipt: Object.freeze({\n state: fields.length > 0 ? \"available\" : \"unavailable\", reason, responseDigest,\n fields: Object.freeze(fields.map((field) => Object.freeze(field))),\n }),\n });\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type JudgeUsageCall } from "../record/family/judge-usage/schema.cjs";
|
|
2
|
+
type NormalizedResponse = Pick<JudgeUsageCall, "provider" | "model" | "inputTokens" | "inputTotalTokens" | "outputTokens" | "cacheReadTokens" | "cacheWriteTokens" | "cost" | "receipt">;
|
|
3
|
+
/** Retains only protocol facts, independently of status and QA/body interpretation. */
|
|
4
|
+
export declare function normalizeJudgeUsageResponse(transportProvider: JudgeUsageCall["transportProvider"], body: string): NormalizedResponse;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type JudgeUsageCall } from "../record/family/judge-usage/schema.mjs";
|
|
2
|
+
type NormalizedResponse = Pick<JudgeUsageCall, "provider" | "model" | "inputTokens" | "inputTotalTokens" | "outputTokens" | "cacheReadTokens" | "cacheWriteTokens" | "cost" | "receipt">;
|
|
3
|
+
/** Retains only protocol facts, independently of status and QA/body interpretation. */
|
|
4
|
+
export declare function normalizeJudgeUsageResponse(transportProvider: JudgeUsageCall["transportProvider"], body: string): NormalizedResponse;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type JudgeUsageCall } from "../record/family/judge-usage/schema.js";
|
|
2
|
+
type NormalizedResponse = Pick<JudgeUsageCall, "provider" | "model" | "inputTokens" | "inputTotalTokens" | "outputTokens" | "cacheReadTokens" | "cacheWriteTokens" | "cost" | "receipt">;
|
|
3
|
+
/** Retains only protocol facts, independently of status and QA/body interpretation. */
|
|
4
|
+
export declare function normalizeJudgeUsageResponse(transportProvider: JudgeUsageCall["transportProvider"], body: string): NormalizedResponse;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
|
+
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
|
+
const __niceevalCanonical = __niceevalRequire("./judge-usage-receipt.cjs");
|
|
4
|
+
const __niceevalExport0 = __niceevalCanonical["normalizeJudgeUsageResponse"];
|
|
5
|
+
export { __niceevalExport0 as normalizeJudgeUsageResponse };
|
|
6
|
+
//# sourceMappingURL=judge-usage-receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-usage-receipt.js","sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JudgeUsageCollector = void 0;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const codec_ts_1 = require("../assertions/record/codec.cjs");
|
|
6
|
+
const canonical_ts_1 = require("../record/definition/canonical.cjs");
|
|
7
|
+
const protocol_ts_1 = require("../record/attachment/protocol.cjs");
|
|
8
|
+
const judge_usage_receipt_ts_1 = require("./judge-usage-receipt.cjs");
|
|
9
|
+
const judge_call_price_ts_1 = require("./judge-call-price.cjs");
|
|
10
|
+
const placeholderEntryId = effect_1.Schema.decodeUnknownSync(codec_ts_1.AssertionEntryIdSchema)("ae_00000000000000000000");
|
|
11
|
+
const emptyReceipt = Object.freeze({
|
|
12
|
+
state: "unavailable", reason: "response-unavailable", responseDigest: null, fields: Object.freeze([]),
|
|
13
|
+
});
|
|
14
|
+
const completeCollection = Object.freeze({ state: "complete", limitations: Object.freeze([]) });
|
|
15
|
+
/** One Attempt owns admission, receipt cuts and all transport cleanup promises. */
|
|
16
|
+
class JudgeUsageCollector {
|
|
17
|
+
signal;
|
|
18
|
+
onCleanupIncomplete;
|
|
19
|
+
rows = [];
|
|
20
|
+
entries = new Map();
|
|
21
|
+
cleanups = new Set();
|
|
22
|
+
closed = false;
|
|
23
|
+
cleanupIncomplete = false;
|
|
24
|
+
pricing;
|
|
25
|
+
onAbort = () => this.close();
|
|
26
|
+
constructor(pricing, signal, onCleanupIncomplete) {
|
|
27
|
+
this.signal = signal;
|
|
28
|
+
this.onCleanupIncomplete = onCleanupIncomplete;
|
|
29
|
+
this.pricing = pricing === undefined ? undefined : freeze(structuredClone(pricing));
|
|
30
|
+
signal?.addEventListener("abort", this.onAbort, { once: true });
|
|
31
|
+
if (signal?.aborted)
|
|
32
|
+
this.close();
|
|
33
|
+
}
|
|
34
|
+
forEntry(entryIndex) {
|
|
35
|
+
const previous = this.entries.get(entryIndex);
|
|
36
|
+
if (!Number.isSafeInteger(entryIndex) || entryIndex < 0 || (previous !== undefined && previous.rows.length > 0)) {
|
|
37
|
+
throw new Error("Judge usage requires one capability per Assertion entry");
|
|
38
|
+
}
|
|
39
|
+
if (previous !== undefined)
|
|
40
|
+
previous.closed = true;
|
|
41
|
+
const entry = { closed: this.closed, rows: [] };
|
|
42
|
+
this.entries.set(entryIndex, entry);
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
begin: (input) => {
|
|
45
|
+
if (this.closed || entry.closed || this.signal?.aborted || this.rows.length >= 4000)
|
|
46
|
+
return undefined;
|
|
47
|
+
const call = Object.freeze({
|
|
48
|
+
...input, entryIndex, entryId: placeholderEntryId,
|
|
49
|
+
callId: `judge:${entryIndex}:${input.logicalOrdinal}:${input.transmissionOrdinal}`,
|
|
50
|
+
provider: null, model: null, status: "unknown", httpStatus: null,
|
|
51
|
+
inputTokens: null, inputTotalTokens: null, outputTokens: null, cacheReadTokens: null, cacheWriteTokens: null,
|
|
52
|
+
cost: null, receipt: emptyReceipt,
|
|
53
|
+
});
|
|
54
|
+
if (this.rows.some((row) => row.call.callId === call.callId))
|
|
55
|
+
throw new Error("Duplicate Judge physical call identity");
|
|
56
|
+
const row = { call, open: true };
|
|
57
|
+
if (!this.canReserve(row))
|
|
58
|
+
return undefined;
|
|
59
|
+
this.rows.push(row);
|
|
60
|
+
entry.rows.push(row);
|
|
61
|
+
const terminal = (status, reason) => {
|
|
62
|
+
if (!row.open)
|
|
63
|
+
return;
|
|
64
|
+
row.open = false;
|
|
65
|
+
row.call = Object.freeze({ ...row.call, status, receipt: Object.freeze({ ...emptyReceipt, reason }) });
|
|
66
|
+
};
|
|
67
|
+
return Object.freeze({
|
|
68
|
+
headers: (status) => {
|
|
69
|
+
if (row.open && Number.isInteger(status) && status >= 100 && status <= 599)
|
|
70
|
+
row.call = Object.freeze({ ...row.call, httpStatus: status });
|
|
71
|
+
},
|
|
72
|
+
body: (body) => {
|
|
73
|
+
if (!row.open)
|
|
74
|
+
return;
|
|
75
|
+
// No await may separate the receipt cut and its immutable contribution.
|
|
76
|
+
const receipt = (0, judge_usage_receipt_ts_1.normalizeJudgeUsageResponse)(input.transportProvider, body);
|
|
77
|
+
row.open = false;
|
|
78
|
+
row.call = freeze({ ...row.call, ...receipt, status: row.call.httpStatus !== null && row.call.httpStatus >= 200 && row.call.httpStatus < 300 ? "succeeded" : "failed" });
|
|
79
|
+
},
|
|
80
|
+
fail: (reason) => terminal("failed", reason),
|
|
81
|
+
cancel: () => terminal("cancelled", "cancelled"),
|
|
82
|
+
trackCleanup: (work, deadlineAt) => this.trackCleanup(work, deadlineAt),
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
close: () => {
|
|
86
|
+
entry.closed = true;
|
|
87
|
+
for (const row of entry.rows)
|
|
88
|
+
this.cancelRow(row);
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
cancelRow(row) {
|
|
93
|
+
if (!row.open)
|
|
94
|
+
return;
|
|
95
|
+
row.open = false;
|
|
96
|
+
row.call = Object.freeze({ ...row.call, status: "cancelled", receipt: Object.freeze({ ...emptyReceipt, reason: "cancelled" }) });
|
|
97
|
+
}
|
|
98
|
+
close() {
|
|
99
|
+
if (this.closed)
|
|
100
|
+
return;
|
|
101
|
+
this.closed = true;
|
|
102
|
+
this.signal?.removeEventListener("abort", this.onAbort);
|
|
103
|
+
for (const entry of this.entries.values())
|
|
104
|
+
entry.closed = true;
|
|
105
|
+
for (const row of this.rows)
|
|
106
|
+
this.cancelRow(row);
|
|
107
|
+
}
|
|
108
|
+
async closeAndDrain() {
|
|
109
|
+
this.close();
|
|
110
|
+
while (this.cleanups.size > 0)
|
|
111
|
+
await Promise.all([...this.cleanups]);
|
|
112
|
+
}
|
|
113
|
+
snapshot() {
|
|
114
|
+
if (!this.closed)
|
|
115
|
+
throw new Error("Judge usage must close before publication");
|
|
116
|
+
const calls = Object.freeze(this.rows.map((row) => row.call));
|
|
117
|
+
return freeze({
|
|
118
|
+
collection: completeCollection,
|
|
119
|
+
calls,
|
|
120
|
+
priceReceipts: (0, judge_call_price_ts_1.createJudgeCallPriceReceipts)(calls, this.pricing),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
trackCleanup(work, deadlineAt) {
|
|
124
|
+
let timer;
|
|
125
|
+
const settled = work.then(() => true, () => false);
|
|
126
|
+
const expired = new Promise((resolve) => { timer = setTimeout(() => resolve(false), Math.max(0, Math.min(1000, deadlineAt - Date.now()))); });
|
|
127
|
+
const bounded = Promise.race([settled, expired]).then((ok) => {
|
|
128
|
+
if (timer !== undefined)
|
|
129
|
+
clearTimeout(timer);
|
|
130
|
+
if (!ok && !this.cleanupIncomplete) {
|
|
131
|
+
this.cleanupIncomplete = true;
|
|
132
|
+
this.onCleanupIncomplete?.();
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
this.cleanups.add(bounded);
|
|
136
|
+
void bounded.then(() => this.cleanups.delete(bounded));
|
|
137
|
+
}
|
|
138
|
+
canReserve(next) {
|
|
139
|
+
const rows = [...this.rows, next];
|
|
140
|
+
const terminalCalls = rows.filter((row) => !row.open).map((row) => row.call);
|
|
141
|
+
// Receipt padding bounds canonical bytes; scalar rows additionally bound nodes,
|
|
142
|
+
// keys and depth. Price padding includes both legal 8 KiB model selectors.
|
|
143
|
+
const calls = rows.map((row) => row.open ? {
|
|
144
|
+
...row.call, entryId: "a".repeat(256), provider: '"'.repeat(256), model: '"'.repeat(8192),
|
|
145
|
+
cost: { amount: "1".repeat(512), currency: "A".repeat(256), source: { kind: "reported", id: '"'.repeat(256) } },
|
|
146
|
+
receipt: { state: "available", reason: "invalid-usage", responseDigest: "0".repeat(71),
|
|
147
|
+
fields: Array.from({ length: 24 }, (_, index) => ({ path: String(index).padEnd(128, "p"), value: null })),
|
|
148
|
+
reservedCanonicalBytes: "x".repeat(32 * 1024) },
|
|
149
|
+
} : row.call);
|
|
150
|
+
const priceReceipts = [...(0, judge_call_price_ts_1.createJudgeCallPriceReceipts)(terminalCalls, this.pricing)];
|
|
151
|
+
if (this.pricing !== undefined)
|
|
152
|
+
for (const row of rows)
|
|
153
|
+
if (row.open)
|
|
154
|
+
priceReceipts.push({
|
|
155
|
+
callId: row.call.callId, requestModel: row.call.requestModel,
|
|
156
|
+
reservedCanonicalBytes: "x".repeat(64 * 1024),
|
|
157
|
+
reservedNodes: Array.from({ length: 256 }, () => ({ value: null })),
|
|
158
|
+
});
|
|
159
|
+
return effect_1.Result.isSuccess((0, canonical_ts_1.canonicalizeRecordValue)({ collection: completeCollection, calls, priceReceipts }, protocol_ts_1.RecordAttachmentEncodingLimits));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.JudgeUsageCollector = JudgeUsageCollector;
|
|
163
|
+
function freeze(value) {
|
|
164
|
+
if (value !== null && typeof value === "object") {
|
|
165
|
+
for (const child of Object.values(value))
|
|
166
|
+
freeze(child);
|
|
167
|
+
Object.freeze(value);
|
|
168
|
+
}
|
|
169
|
+
return value;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=judge-usage.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-usage.js","sourceRoot":"","sources":["judge-usage.ts"],"names":[],"mappings":"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","sourcesContent":["import { Result, Schema } from \"effect\";\nimport { AssertionEntryIdSchema } from \"../assertions/record/codec.ts\";\nimport { canonicalizeRecordValue } from \"../record/definition/canonical.ts\";\nimport { RecordAttachmentEncodingLimits } from \"../record/attachment/protocol.ts\";\nimport type { JudgeUsageAttachment, JudgeUsageCall } from \"../record/family/judge-usage/schema.ts\";\nimport type { PriceOverride } from \"../runner/types.ts\";\nimport { normalizeJudgeUsageResponse } from \"./judge-usage-receipt.ts\";\nimport { createJudgeCallPriceReceipts } from \"./judge-call-price.ts\";\ntype TransmissionInput = Pick<JudgeUsageCall, \"logicalOrdinal\" | \"transmissionOrdinal\" | \"operation\" | \"requestModel\" | \"transportProvider\">;\nexport interface JudgeUsageTransmission {\n headers(status: number): void;\n body(body: string): void;\n fail(reason: \"response-unavailable\" | \"response-too-large\"): void;\n cancel(): void;\n trackCleanup(work: Promise<unknown>, deadlineAt: number): void;\n}\nexport interface JudgeUsageEntry {\n begin(input: TransmissionInput): JudgeUsageTransmission | undefined;\n close(): void;\n}\ninterface PendingCall {\n call: JudgeUsageCall;\n open: boolean;\n}\nconst placeholderEntryId = Schema.decodeUnknownSync(AssertionEntryIdSchema)(\"ae_00000000000000000000\");\nconst emptyReceipt: JudgeUsageCall[\"receipt\"] = Object.freeze({\n state: \"unavailable\", reason: \"response-unavailable\", responseDigest: null, fields: Object.freeze([]),\n});\nconst completeCollection = Object.freeze({ state: \"complete\" as const, limitations: Object.freeze([] as const) });\n/** One Attempt owns admission, receipt cuts and all transport cleanup promises. */\nexport class JudgeUsageCollector {\n private readonly rows: PendingCall[] = [];\n private readonly entries = new Map<number, {\n closed: boolean;\n rows: PendingCall[];\n }>();\n private readonly cleanups = new Set<Promise<void>>();\n private closed = false;\n private cleanupIncomplete = false;\n private readonly pricing: Readonly<Record<string, PriceOverride>> | undefined;\n private readonly onAbort = () => this.close();\n constructor(pricing: Readonly<Record<string, PriceOverride>> | undefined, private readonly signal?: AbortSignal, private readonly onCleanupIncomplete?: () => void) {\n this.pricing = pricing === undefined ? undefined : freeze(structuredClone(pricing));\n signal?.addEventListener(\"abort\", this.onAbort, { once: true });\n if (signal?.aborted)\n this.close();\n }\n forEntry(entryIndex: number): JudgeUsageEntry {\n const previous = this.entries.get(entryIndex);\n if (!Number.isSafeInteger(entryIndex) || entryIndex < 0 || (previous !== undefined && previous.rows.length > 0)) {\n throw new Error(\"Judge usage requires one capability per Assertion entry\");\n }\n if (previous !== undefined)\n previous.closed = true;\n const entry = { closed: this.closed, rows: [] as PendingCall[] };\n this.entries.set(entryIndex, entry);\n return Object.freeze({\n begin: (input: TransmissionInput) => {\n if (this.closed || entry.closed || this.signal?.aborted || this.rows.length >= 4000)\n return undefined;\n const call: JudgeUsageCall = Object.freeze({\n ...input, entryIndex, entryId: placeholderEntryId,\n callId: `judge:${entryIndex}:${input.logicalOrdinal}:${input.transmissionOrdinal}`,\n provider: null, model: null, status: \"unknown\", httpStatus: null,\n inputTokens: null, inputTotalTokens: null, outputTokens: null, cacheReadTokens: null, cacheWriteTokens: null,\n cost: null, receipt: emptyReceipt,\n });\n if (this.rows.some((row) => row.call.callId === call.callId))\n throw new Error(\"Duplicate Judge physical call identity\");\n const row: PendingCall = { call, open: true };\n if (!this.canReserve(row))\n return undefined;\n this.rows.push(row);\n entry.rows.push(row);\n const terminal = (status: JudgeUsageCall[\"status\"], reason: JudgeUsageCall[\"receipt\"][\"reason\"]): void => {\n if (!row.open)\n return;\n row.open = false;\n row.call = Object.freeze({ ...row.call, status, receipt: Object.freeze({ ...emptyReceipt, reason }) });\n };\n return Object.freeze({\n headers: (status: number) => {\n if (row.open && Number.isInteger(status) && status >= 100 && status <= 599)\n row.call = Object.freeze({ ...row.call, httpStatus: status });\n },\n body: (body: string) => {\n if (!row.open)\n return;\n // No await may separate the receipt cut and its immutable contribution.\n const receipt = normalizeJudgeUsageResponse(input.transportProvider, body);\n row.open = false;\n row.call = freeze({ ...row.call, ...receipt, status: row.call.httpStatus !== null && row.call.httpStatus >= 200 && row.call.httpStatus < 300 ? \"succeeded\" : \"failed\" });\n },\n fail: (reason: \"response-unavailable\" | \"response-too-large\") => terminal(\"failed\", reason),\n cancel: () => terminal(\"cancelled\", \"cancelled\"),\n trackCleanup: (work: Promise<unknown>, deadlineAt: number) => this.trackCleanup(work, deadlineAt),\n });\n },\n close: () => {\n entry.closed = true;\n for (const row of entry.rows)\n this.cancelRow(row);\n },\n });\n }\n private cancelRow(row: PendingCall): void {\n if (!row.open)\n return;\n row.open = false;\n row.call = Object.freeze({ ...row.call, status: \"cancelled\", receipt: Object.freeze({ ...emptyReceipt, reason: \"cancelled\" }) });\n }\n close(): void {\n if (this.closed)\n return;\n this.closed = true;\n this.signal?.removeEventListener(\"abort\", this.onAbort);\n for (const entry of this.entries.values())\n entry.closed = true;\n for (const row of this.rows)\n this.cancelRow(row);\n }\n async closeAndDrain(): Promise<void> {\n this.close();\n while (this.cleanups.size > 0)\n await Promise.all([...this.cleanups]);\n }\n snapshot(): JudgeUsageAttachment {\n if (!this.closed)\n throw new Error(\"Judge usage must close before publication\");\n const calls = Object.freeze(this.rows.map((row) => row.call));\n return freeze({\n collection: completeCollection,\n calls,\n priceReceipts: createJudgeCallPriceReceipts(calls, this.pricing),\n });\n }\n private trackCleanup(work: Promise<unknown>, deadlineAt: number): void {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const settled = work.then(() => true, () => false);\n const expired = new Promise<false>((resolve) => { timer = setTimeout(() => resolve(false), Math.max(0, Math.min(1000, deadlineAt - Date.now()))); });\n const bounded = Promise.race([settled, expired]).then((ok) => {\n if (timer !== undefined)\n clearTimeout(timer);\n if (!ok && !this.cleanupIncomplete) {\n this.cleanupIncomplete = true;\n this.onCleanupIncomplete?.();\n }\n });\n this.cleanups.add(bounded);\n void bounded.then(() => this.cleanups.delete(bounded));\n }\n private canReserve(next: PendingCall): boolean {\n const rows = [...this.rows, next];\n const terminalCalls = rows.filter((row) => !row.open).map((row) => row.call);\n // Receipt padding bounds canonical bytes; scalar rows additionally bound nodes,\n // keys and depth. Price padding includes both legal 8 KiB model selectors.\n const calls = rows.map((row) => row.open ? {\n ...row.call, entryId: \"a\".repeat(256), provider: '\"'.repeat(256), model: '\"'.repeat(8192),\n cost: { amount: \"1\".repeat(512), currency: \"A\".repeat(256), source: { kind: \"reported\", id: '\"'.repeat(256) } },\n receipt: { state: \"available\", reason: \"invalid-usage\", responseDigest: \"0\".repeat(71),\n fields: Array.from({ length: 24 }, (_, index) => ({ path: String(index).padEnd(128, \"p\"), value: null })),\n reservedCanonicalBytes: \"x\".repeat(32 * 1024) },\n } : row.call);\n const priceReceipts: unknown[] = [...createJudgeCallPriceReceipts(terminalCalls, this.pricing)];\n if (this.pricing !== undefined)\n for (const row of rows)\n if (row.open)\n priceReceipts.push({\n callId: row.call.callId, requestModel: row.call.requestModel,\n reservedCanonicalBytes: \"x\".repeat(64 * 1024),\n reservedNodes: Array.from({ length: 256 }, () => ({ value: null })),\n });\n return Result.isSuccess(canonicalizeRecordValue({ collection: completeCollection, calls, priceReceipts }, RecordAttachmentEncodingLimits));\n }\n}\nfunction freeze<T>(value: T): T {\n if (value !== null && typeof value === \"object\") {\n for (const child of Object.values(value))\n freeze(child);\n Object.freeze(value);\n }\n return value;\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { JudgeUsageAttachment, JudgeUsageCall } from "../record/family/judge-usage/schema.cjs";
|
|
2
|
+
import type { PriceOverride } from "../runner/types.cjs";
|
|
3
|
+
type TransmissionInput = Pick<JudgeUsageCall, "logicalOrdinal" | "transmissionOrdinal" | "operation" | "requestModel" | "transportProvider">;
|
|
4
|
+
export interface JudgeUsageTransmission {
|
|
5
|
+
headers(status: number): void;
|
|
6
|
+
body(body: string): void;
|
|
7
|
+
fail(reason: "response-unavailable" | "response-too-large"): void;
|
|
8
|
+
cancel(): void;
|
|
9
|
+
trackCleanup(work: Promise<unknown>, deadlineAt: number): void;
|
|
10
|
+
}
|
|
11
|
+
export interface JudgeUsageEntry {
|
|
12
|
+
begin(input: TransmissionInput): JudgeUsageTransmission | undefined;
|
|
13
|
+
close(): void;
|
|
14
|
+
}
|
|
15
|
+
/** One Attempt owns admission, receipt cuts and all transport cleanup promises. */
|
|
16
|
+
export declare class JudgeUsageCollector {
|
|
17
|
+
private readonly signal?;
|
|
18
|
+
private readonly onCleanupIncomplete?;
|
|
19
|
+
private readonly rows;
|
|
20
|
+
private readonly entries;
|
|
21
|
+
private readonly cleanups;
|
|
22
|
+
private closed;
|
|
23
|
+
private cleanupIncomplete;
|
|
24
|
+
private readonly pricing;
|
|
25
|
+
private readonly onAbort;
|
|
26
|
+
constructor(pricing: Readonly<Record<string, PriceOverride>> | undefined, signal?: AbortSignal | undefined, onCleanupIncomplete?: (() => void) | undefined);
|
|
27
|
+
forEntry(entryIndex: number): JudgeUsageEntry;
|
|
28
|
+
private cancelRow;
|
|
29
|
+
close(): void;
|
|
30
|
+
closeAndDrain(): Promise<void>;
|
|
31
|
+
snapshot(): JudgeUsageAttachment;
|
|
32
|
+
private trackCleanup;
|
|
33
|
+
private canReserve;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { JudgeUsageAttachment, JudgeUsageCall } from "../record/family/judge-usage/schema.mjs";
|
|
2
|
+
import type { PriceOverride } from "../runner/types.mjs";
|
|
3
|
+
type TransmissionInput = Pick<JudgeUsageCall, "logicalOrdinal" | "transmissionOrdinal" | "operation" | "requestModel" | "transportProvider">;
|
|
4
|
+
export interface JudgeUsageTransmission {
|
|
5
|
+
headers(status: number): void;
|
|
6
|
+
body(body: string): void;
|
|
7
|
+
fail(reason: "response-unavailable" | "response-too-large"): void;
|
|
8
|
+
cancel(): void;
|
|
9
|
+
trackCleanup(work: Promise<unknown>, deadlineAt: number): void;
|
|
10
|
+
}
|
|
11
|
+
export interface JudgeUsageEntry {
|
|
12
|
+
begin(input: TransmissionInput): JudgeUsageTransmission | undefined;
|
|
13
|
+
close(): void;
|
|
14
|
+
}
|
|
15
|
+
/** One Attempt owns admission, receipt cuts and all transport cleanup promises. */
|
|
16
|
+
export declare class JudgeUsageCollector {
|
|
17
|
+
private readonly signal?;
|
|
18
|
+
private readonly onCleanupIncomplete?;
|
|
19
|
+
private readonly rows;
|
|
20
|
+
private readonly entries;
|
|
21
|
+
private readonly cleanups;
|
|
22
|
+
private closed;
|
|
23
|
+
private cleanupIncomplete;
|
|
24
|
+
private readonly pricing;
|
|
25
|
+
private readonly onAbort;
|
|
26
|
+
constructor(pricing: Readonly<Record<string, PriceOverride>> | undefined, signal?: AbortSignal | undefined, onCleanupIncomplete?: (() => void) | undefined);
|
|
27
|
+
forEntry(entryIndex: number): JudgeUsageEntry;
|
|
28
|
+
private cancelRow;
|
|
29
|
+
close(): void;
|
|
30
|
+
closeAndDrain(): Promise<void>;
|
|
31
|
+
snapshot(): JudgeUsageAttachment;
|
|
32
|
+
private trackCleanup;
|
|
33
|
+
private canReserve;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { JudgeUsageAttachment, JudgeUsageCall } from "../record/family/judge-usage/schema.js";
|
|
2
|
+
import type { PriceOverride } from "../runner/types.js";
|
|
3
|
+
type TransmissionInput = Pick<JudgeUsageCall, "logicalOrdinal" | "transmissionOrdinal" | "operation" | "requestModel" | "transportProvider">;
|
|
4
|
+
export interface JudgeUsageTransmission {
|
|
5
|
+
headers(status: number): void;
|
|
6
|
+
body(body: string): void;
|
|
7
|
+
fail(reason: "response-unavailable" | "response-too-large"): void;
|
|
8
|
+
cancel(): void;
|
|
9
|
+
trackCleanup(work: Promise<unknown>, deadlineAt: number): void;
|
|
10
|
+
}
|
|
11
|
+
export interface JudgeUsageEntry {
|
|
12
|
+
begin(input: TransmissionInput): JudgeUsageTransmission | undefined;
|
|
13
|
+
close(): void;
|
|
14
|
+
}
|
|
15
|
+
/** One Attempt owns admission, receipt cuts and all transport cleanup promises. */
|
|
16
|
+
export declare class JudgeUsageCollector {
|
|
17
|
+
private readonly signal?;
|
|
18
|
+
private readonly onCleanupIncomplete?;
|
|
19
|
+
private readonly rows;
|
|
20
|
+
private readonly entries;
|
|
21
|
+
private readonly cleanups;
|
|
22
|
+
private closed;
|
|
23
|
+
private cleanupIncomplete;
|
|
24
|
+
private readonly pricing;
|
|
25
|
+
private readonly onAbort;
|
|
26
|
+
constructor(pricing: Readonly<Record<string, PriceOverride>> | undefined, signal?: AbortSignal | undefined, onCleanupIncomplete?: (() => void) | undefined);
|
|
27
|
+
forEntry(entryIndex: number): JudgeUsageEntry;
|
|
28
|
+
private cancelRow;
|
|
29
|
+
close(): void;
|
|
30
|
+
closeAndDrain(): Promise<void>;
|
|
31
|
+
snapshot(): JudgeUsageAttachment;
|
|
32
|
+
private trackCleanup;
|
|
33
|
+
private canReserve;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
|
+
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
|
+
const __niceevalCanonical = __niceevalRequire("./judge-usage.cjs");
|
|
4
|
+
const __niceevalExport0 = __niceevalCanonical["JudgeUsageCollector"];
|
|
5
|
+
export { __niceevalExport0 as JudgeUsageCollector };
|
|
6
|
+
//# sourceMappingURL=judge-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-usage.js","sources":[],"names":[],"mappings":""}
|
|
@@ -85,6 +85,8 @@ const SANDBOX_ONLY_HOST_FRAGMENT = Object.freeze({
|
|
|
85
85
|
identity: Object.freeze({}),
|
|
86
86
|
hostDeclared: false,
|
|
87
87
|
});
|
|
88
|
+
// @concord-code ne-surface-define-plugin
|
|
89
|
+
// @concord-implements docs/feature/plugins/library.md
|
|
88
90
|
function definePlugin(definition) {
|
|
89
91
|
if (!isPlainRecord(definition))
|
|
90
92
|
throw new TypeError("definePlugin requires an object.");
|