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
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "实验(Experiment):评谁、怎么跑"
|
|
3
3
|
sidebarTitle: "实验"
|
|
4
|
-
description: "Experiment 是可签入的运行配置:同一批评估用例对着哪个
|
|
4
|
+
description: "Experiment 是可签入的运行配置:同一批评估用例对着哪个 Agent、哪个模型、开哪些 flags、跑几次。评估用例与 Experiment 分开,同一批评估用例才能换着对象跑。"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Experiment 说明对着哪个 Agent、用哪个模型、开哪些 flags、跑几次。它用来比较模型、prompt 和功能开关:`flags` 就是 A/B 测试里的 feature flag,一个 Experiment 是一组 flag 取值。
|
|
8
8
|
|
|
9
|
-
## 一个
|
|
9
|
+
## 一个 Experiment 里有什么
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Experiment 是 `experiments/` 下可签入的 TypeScript 文件,核心就几个字段:
|
|
12
12
|
|
|
13
13
|
```ts
|
|
14
14
|
// experiments/concise.ts
|
|
@@ -21,27 +21,27 @@ export default defineExperiment({
|
|
|
21
21
|
});
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
- `agent
|
|
25
|
-
- `model` / `flags
|
|
26
|
-
- `attempts`、`budget`、并发、`sandbox` 等运行参数:怎么跑、跑多少。完整字段见[
|
|
24
|
+
- `agent`:评谁。这里放已经配置好的 Adapter 实例。被测系统的地址和鉴权在创建实例时传给 Adapter,不写进 Experiment 的其它字段。
|
|
25
|
+
- `model` / `flags`:交给 Adapter 的实验条件。`flags` 只接受扁平的字符串、有限数字或布尔值,NiceEval 不解释它们的含义。Adapter 声明了 `parseFlags` 时,先校验和规范化,再经 `ctx` 交给 Adapter;Adapter 随请求转发,应用按值切换行为。模型对比(Tier 1)和功能 A/B(Tier 3)都走这条路,见[接入等级](/zh/explanation/tier)。
|
|
26
|
+
- `attempts`、`budget`、并发、`sandbox` 等运行参数:怎么跑、跑多少。完整字段见[编写实验](/zh/tutorials/write-experiment#常用字段)。
|
|
27
27
|
|
|
28
28
|
Experiment 还有一对实验级 Hook `setup` / `teardown`:整个实验只跑一次,在你自己的机器上执行,用来起停所有 Attempt 共享的服务(比如一条到内网服务的隧道、一个实验专用的 mock server)。
|
|
29
29
|
|
|
30
|
-
`setup`
|
|
30
|
+
`setup` 在这个实验的第一个 Attempt 开始前执行。`teardown` 在全部 Attempt 结束后执行,运行被中断时也会执行;但只有 `setup` 已经执行过,`teardown` 才会执行。
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
要在 Sandbox 里为整个实验准备环境,把准备步骤挂在 `sandbox` 字段的 `.before()` 上。内容不变的步骤下次可以直接沿用;动态回调可以用 `context.onCleanup()` 登记收尾。写法见[启动实验共享服务](/zh/tutorials/experiment-services)与[Sandbox · 按顺序准备 Sandbox](/zh/tutorials/sandbox-providers#按顺序准备-sandbox)。
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
同一个实验里,不同评估用例需要不同的预制环境时,把指定预制环境的 `sandbox` 配置写在各评估用例上,Experiment 就不再指定。重复的配置用普通的 TypeScript 函数复用,不需要额外注册。同一个 Experiment 仍然能覆盖全部评估用例,NiceEval 会逐条把评估用例的配置和 Experiment 的配置合在一起。写法见[编写实验 · 不同评估用例需要不同环境](/zh/tutorials/write-experiment#不同评估用例需要不同环境)。
|
|
35
35
|
|
|
36
36
|
## 矩阵对比
|
|
37
37
|
|
|
38
|
-
要比较的每个变体写一个
|
|
38
|
+
要比较的每个变体写一个 Experiment 文件:两个模型就是两个文件,只差 `model` 一行。prompt A/B 就是只差一个参数。同一批评估用例在多个 Experiment 下各跑一遍,再比较同一时刻已发布的结果。每个 Experiment 按自己跑的评估用例计算分母,不会硬凑一个共同的交集。适合比什么、结果怎么读,见[编写实验](/zh/tutorials/write-experiment#比较两个模型)。
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
只用于报告归类、不影响运行过程的值写进 `labels`。它们记在 Run 上,不会传给 Adapter 或评估用例。改了 `labels` 再运行,会建立一个带新标注的 Run,没受影响的旧结果照常沿用;历史 Run 保留当时的 `labels`。
|
|
41
41
|
|
|
42
42
|
## 相关阅读
|
|
43
43
|
|
|
44
|
-
- [
|
|
45
|
-
- [
|
|
46
|
-
- [评估](/zh/explanation/evals) —
|
|
44
|
+
- [编写实验](/zh/tutorials/write-experiment) — 比较模型和 prompt、读对比结果,以及常用字段。
|
|
45
|
+
- [启动实验共享服务](/zh/tutorials/experiment-services) — `setup` / `teardown` 的写法与时序。
|
|
46
|
+
- [评估](/zh/explanation/evals) — 另一半:评估用例是什么、生命周期与判定。
|
|
47
47
|
- [Tier](/zh/explanation/tier) — `model` / `flags` 各在哪一档生效。
|
|
@@ -12,7 +12,7 @@ Judge 用独立裁判模型评估事实一致性、摘要忠实度和说明质
|
|
|
12
12
|
在模块顶层写出标准。`rubric` 说明评价维度,`anchors` 给连续质量量尺提供可校准的落点:
|
|
13
13
|
|
|
14
14
|
```ts
|
|
15
|
-
import {
|
|
15
|
+
import { defineJudge } from "niceeval";
|
|
16
16
|
|
|
17
17
|
const explainsRisk = defineJudge({
|
|
18
18
|
name: "explains-risk",
|
|
@@ -51,29 +51,36 @@ export default defineEval({
|
|
|
51
51
|
|
|
52
52
|
需要观察图片内容时,在材料中放入 `judgeImage({ body, mediaType })`。它冻结 PNG 或 JPEG 字节,不创建另一个裁判,也不发起额外请求。图片和文字经同一次 Judge 调用发送,并保存在同一条断言的证据中。接线步骤见 [附加图片材料](/zh/tutorials/verify-judge#附加图片材料)。
|
|
53
53
|
|
|
54
|
-
`t.judge(material, explainsRisk)` 与 `t.check(material, explainsRisk)` 都登记一条测量 Assertion
|
|
54
|
+
`t.judge(material, explainsRisk)` 与 `t.check(material, explainsRisk)` 都登记一条测量 Assertion。它们会共享材料快照、预算、求值、审计、结果保存和 handle;没有 Match 允许列表。
|
|
55
55
|
|
|
56
56
|
## 直接使用现成 Judge
|
|
57
57
|
|
|
58
58
|
root `t`、Session 与 Turn 都提供现成方法,并返回 Assertions 的 `MeasurementAssertionHandle<Kind>`。例如:
|
|
59
59
|
|
|
60
60
|
```ts
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
answer.closeQA(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
answer.check(
|
|
71
|
-
{ input: "根据材料回答问题。", output: answer.message, context: "材料只说明产品在周五发布。" },
|
|
72
|
-
closeQA(),
|
|
61
|
+
import { eventMatch } from "niceeval/expect";
|
|
62
|
+
const answer = await t.send("列出风险与回滚步骤。");
|
|
63
|
+
answer.closeQA("这轮是否说明风险和可执行的回滚步骤?")
|
|
64
|
+
.gate(0.8).label("回滚说明");
|
|
65
|
+
|
|
66
|
+
// 特殊检查可以显式选择全部助手发言。
|
|
67
|
+
answer.closeQA(
|
|
68
|
+
eventMatch("message", { role: "assistant" }),
|
|
69
|
+
"全部发言是否清楚说明风险?",
|
|
73
70
|
).gate(0.8);
|
|
74
71
|
```
|
|
75
72
|
|
|
76
|
-
|
|
73
|
+
`closeQA(selector, question, options?)` 将全部命中材料保序交给一次 Judge。问题是只依据材料回答的验收问题,不是预设答案。
|
|
74
|
+
Agent 的 `closeQA(question, options?)` 默认使用该 Turn、Session 或 Attempt 的完整正式历史,包含消息与工具事实。它不会只挑最后一句或成功操作。
|
|
75
|
+
显式 EventMatch 选择三类事件视图;工具输入和回执问答使用 ToolMatch,或自定义 MaterialMatch。
|
|
76
|
+
|
|
77
|
+
这些写法都组合评分 Match 并交给同一个 `check`。`usedNoTools()` 等应用断言则封装固定判据,不接受另一个 Match。
|
|
78
|
+
满足条件为1,条件不成立为0,证据不足为 `unavailable`。完整空集为0且不调用模型;材料缺失或超限不能补零或截断后评分。
|
|
79
|
+
|
|
80
|
+
Adapter 通过 `create` 提供应用 ctx,`defineMaterialMatch` 的同步 reader 在断言登记时读取当前只读 ctx。
|
|
81
|
+
selector 的 predicate 只判断单项;`and` 约束同一项。普通存在性用 `t.check(selector).gate()`,整组问答用 `t.closeQA(selector, question).gate(0.8)`。
|
|
82
|
+
|
|
83
|
+
`factuality`、`faithfulness`、`instructionFollowing` 与 `pairwisePreference` 接收显式材料,构造 Match 后交给同一 `check`。
|
|
77
84
|
|
|
78
85
|
## 配置裁判 Provider
|
|
79
86
|
|
|
@@ -99,6 +106,7 @@ export default defineConfig({
|
|
|
99
106
|
| `OpenAIProvider` | OpenAI 或显式兼容网关 | `OPENAI_API_KEY` |
|
|
100
107
|
| `VercelProvider` | Vercel AI Gateway | `AI_GATEWAY_API_KEY` |
|
|
101
108
|
| `OpenRouterProvider` | OpenRouter | `OPENROUTER_API_KEY` |
|
|
109
|
+
|
|
102
110
|
| `TypesafeProvider` | TypeSafe System One | `TYPESAFE_API_KEY` |
|
|
103
111
|
|
|
104
112
|
四个工厂都从 `niceeval/judge` 导出。Vercel 工厂表示 AI Gateway,不表示 Vercel Sandbox 或通用 AI SDK model object。
|
|
@@ -1,37 +1,60 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "NiceEval
|
|
3
|
-
sidebarTitle: "
|
|
4
|
-
description: "
|
|
2
|
+
title: "NiceEval 的整体模型:一次评估由哪些部分组成"
|
|
3
|
+
sidebarTitle: "整体模型"
|
|
4
|
+
description: "评估用例、Experiment、Adapter、Sandbox、Runner 和 Record 各管什么,它们怎样连成一次运行,以及为什么同一条评估要跑多次。"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
NiceEval
|
|
7
|
+
一次评估回答一个问题:被测对象在这个配置下,能不能把这件事做对。NiceEval 把这个问题拆成几个部分,每部分只管一件事。
|
|
8
8
|
|
|
9
9
|
```text
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
评估用例(什么算做对) Experiment(对着谁、怎么跑)
|
|
11
|
+
\ /
|
|
12
|
+
\ /
|
|
13
|
+
Runner(调度 Attempt、打分)
|
|
14
|
+
│
|
|
15
|
+
Adapter(连接被测对象)
|
|
16
|
+
│
|
|
17
|
+
被测对象(直连,或在 Sandbox 里运行)
|
|
18
|
+
│
|
|
19
|
+
Record(保存每个 Attempt 的结果)
|
|
20
|
+
│
|
|
21
|
+
show(终端) · view(浏览器) · query(JSON)
|
|
15
22
|
```
|
|
16
23
|
|
|
17
|
-
##
|
|
24
|
+
## 评估用例:什么算做对
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
评估用例写在 `evals/*.eval.ts` 里,说明发什么、检查什么。它不写对着哪个 Agent、用哪个模型跑,所以同一条评估用例可以换着被测对象跑。
|
|
20
27
|
|
|
21
|
-
|
|
28
|
+
检查分两类。确定的事实用确定的规则检查,例如调用了哪个工具、测试有没有通过。开放式的质量交给 Judge,也就是裁判模型,由它按你写的标准打分。见[评估用例](/zh/explanation/evals)和 [Judge](/zh/explanation/judge)。
|
|
22
29
|
|
|
23
|
-
##
|
|
30
|
+
## Experiment:对着谁、怎么跑
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
Experiment 写在 `experiments/` 里,说明用哪个 Adapter、哪个模型、开哪些 flags、每条评估跑几次。要比较两个模型,就写两份只差 `model` 的 Experiment,对着同一批评估用例各跑一遍。见 [Experiment](/zh/explanation/experiment)。
|
|
26
33
|
|
|
27
|
-
|
|
34
|
+
## Adapter 和 Sandbox:怎样连上被测对象
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
Adapter 是你写的连接代码。它把评估用例里的动作发给被测对象,再把返回翻译成 NiceEval 能读的事件,例如回复、工具调用和用量。接入可以从只实现 `send` 开始,需要时再加 OTel 或 flags,见 [Adapter](/zh/explanation/adapter) 和[接入等级](/zh/explanation/tier)。
|
|
30
37
|
|
|
31
|
-
|
|
32
|
-
- `niceeval show` 是 terminal Show,面向人在终端快速审阅和下钻。
|
|
33
|
-
- `niceeval view` 是 browser View,面向人在受保护的 loopback 浏览器使用固定第一方 Insight。
|
|
38
|
+
Coding Agent 要在真实文件系统里改代码、跑命令,NiceEval 先创建一个隔离的 Sandbox,再在里面启动 Agent。直连的 Web Agent 和业务应用不需要 Sandbox。
|
|
34
39
|
|
|
35
|
-
|
|
40
|
+
## Runner 和 Attempt:为什么同一条评估要跑多次
|
|
36
41
|
|
|
37
|
-
|
|
42
|
+
LLM 的输出不确定,同一个问题这次答对,下次可能答错。只跑一次,说明不了改动是否真的有效。所以 Experiment 用 `attempts` 指定每条评估用例跑几次,每一次叫一个 Attempt。
|
|
43
|
+
|
|
44
|
+
Runner 按 Experiment 选出评估用例,展开成一批 Attempt,按并发限制调度执行。每个 Attempt 得到一个判定:`passed`、`failed`、`errored` 或 `skipped`。一批 Attempt 汇总起来,就是这条评估在这个配置下的通过率。计分制评估累计分数而不是读通过率,见[通过制与计分制](/zh/tutorials/evaluation-kinds)。
|
|
45
|
+
|
|
46
|
+
`failed` 和 `errored` 要分开看。`failed` 是被测对象正常回复了,但没做对。`errored` 是没能拿到可信的结果,例如服务没启动或凭据失效,它说明的是环境问题,不是被测对象的能力。
|
|
47
|
+
|
|
48
|
+
## Record:结果留下来,供对比和追查
|
|
49
|
+
|
|
50
|
+
每个 Attempt 跑完,结果连同对话、工具调用、文件改动、耗时和花费,一起保存在项目的 `.niceeval/record.sqlite`,这就是 Record。
|
|
51
|
+
|
|
52
|
+
结果留下来有两个用处。一是追查:回到某一次失败,看被测对象实际做了什么。二是沿用:再次运行时,没受改动影响的结果直接沿用,只重跑受影响的部分,见[重跑与沿用](/zh/tutorials/rerun-and-cache)。
|
|
53
|
+
|
|
54
|
+
读结果有三个入口:`show` 在终端逐层查看,你和 Coding Agent 都用它排查;`view` 在浏览器里翻对话和耗时;`query` 输出 JSON,给脚本和 CI 读取。三处读到的结论一致,见[运行结果的数据流](/zh/explanation/results-flow)。
|
|
55
|
+
|
|
56
|
+
## 接下来
|
|
57
|
+
|
|
58
|
+
- 第一次使用:读[快速开始](/zh/tutorials/quickstart)。
|
|
59
|
+
- 想了解某个部分:按上面每节末尾的链接继续读。
|
|
60
|
+
- 想查字段和命令:去 [Reference](/zh/reference/define-eval)。
|
|
@@ -1,31 +1,46 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Record"
|
|
3
3
|
sidebarTitle: "Record"
|
|
4
|
-
description: "
|
|
4
|
+
description: "了解项目结果文件 .niceeval/record.sqlite 保存什么、怎样复制给别人,以及读取时会校验什么。"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
你想把一次运行的结果交给同事复核,或者归档一份基线留着以后对比。NiceEval 的所有运行结果都在一个文件里:项目里的 `.niceeval/record.sqlite`,这就是 Record。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Record 里有什么
|
|
10
10
|
|
|
11
|
-
Run
|
|
11
|
+
Run、运行中的汇总、已发布的 Attempt,以及它们的附件和内容,都保存在这个文件里。缓存、凭据和用户级服务状态不在里面。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Run 一创建就能被查到。Attempt 跑完并发布后,就能被读取,不必等所在的 Run 结束。已发布的 Attempt 不会再被修改。`query`、`show` 和 `view` 都只读已发布的结果。
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## 把结果交给别人
|
|
16
|
+
|
|
17
|
+
运行完整结束后,直接复制这个文件:
|
|
16
18
|
|
|
17
19
|
```sh
|
|
18
20
|
cp .niceeval/record.sqlite ./baseline.record.sqlite
|
|
19
|
-
niceeval query explain --record ./baseline.record.sqlite --request request.json
|
|
20
|
-
niceeval show --record ./baseline.record.sqlite
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
只复制 `record.sqlite` 本身。不要复制旁边的 WAL、checkpoint 或 staging 文件,复制后也不要修改里面的 SQLite 内容。
|
|
24
|
+
|
|
25
|
+
拿到别人的文件后,用 `--record` 指向它:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
pnpm exec niceeval show --record ./baseline.record.sqlite
|
|
29
|
+
pnpm --silent exec niceeval query explain --record ./baseline.record.sqlite --request request.json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`view` 只读当前项目的 `.niceeval/record.sqlite`,不接受 `--record`。
|
|
33
|
+
|
|
34
|
+
## 读取外部文件前会先校验
|
|
35
|
+
|
|
36
|
+
`query` 和 `show` 把 `--record` 指定的文件当作不可信输入。只有格式版本完全匹配、SQLite 完整性检查通过、内部数据一致时,命令才会读取。校验不通过时,命令直接报错,不会迁移、修补或只读一部分。
|
|
37
|
+
|
|
38
|
+
文件被拒绝时,先确认它是运行结束后复制的完整单文件,复制期间没有别的进程在写。具体错误和下一步见[排查失败的评估结果](/zh/troubleshooting/debugging#无法打开结果)。
|
|
24
39
|
|
|
25
|
-
|
|
40
|
+
Record 可能包含敏感的业务内容,例如对话原文和文件改动。分享前由你负责权限、脱敏和保留期限。
|
|
26
41
|
|
|
27
|
-
##
|
|
42
|
+
## Record 不负责什么
|
|
28
43
|
|
|
29
|
-
Record
|
|
44
|
+
Record 只保存结果,不做统计、比较或页面。NiceEval 内置的固定查询读取已发布的结果,再把完整的查询结果交给 `query`、`show` 或 `view`。外部代码拿不到数据库连接、读取对象或 SQL 能力。
|
|
30
45
|
|
|
31
|
-
|
|
46
|
+
选择哪种查看方式见 [CLI](/zh/reference/cli)。
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "NiceEval 的运行后数据流"
|
|
3
|
+
sidebarTitle: "运行结果的数据流"
|
|
4
|
+
description: "理解运行结果保存在哪里,以及 query、show 和 view 三个查看入口各管什么。"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
一次运行结束后,你可能在终端看结果,也可能在浏览器里翻对话,或者让 CI 脚本读 JSON。三种方式看到的是同一份结果,只是排版不同。这一页说明结果保存在哪里、怎样被读出来,以及三个查看入口各管什么。
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
项目里的 .niceeval/record.sqlite(已发布的 Run 和 Attempt)
|
|
11
|
+
↓
|
|
12
|
+
NiceEval 内置的固定查询
|
|
13
|
+
↓
|
|
14
|
+
query(JSON) | show(终端) | view(浏览器)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 结果保存在一个文件里
|
|
18
|
+
|
|
19
|
+
每个项目的运行结果都保存在 `.niceeval/record.sqlite`,这就是 Record。`niceeval exp` 开始时创建 Run,并记下这次计划要跑的所有 Attempt。每个 Attempt 跑完就单独发布,马上可以读到,不必等整个 Run 结束。已发布的 Attempt 和已结束的 Run 都不会再被修改。
|
|
20
|
+
|
|
21
|
+
运行完整结束后,这个文件本身就可以复制或归档。要读别人交给你的副本时,给 `query` 或 `show` 加 `--record <file>`;NiceEval 会先完整校验这个文件,再只读打开。
|
|
22
|
+
|
|
23
|
+
## 读取规则由 NiceEval 固定
|
|
24
|
+
|
|
25
|
+
读取结果时,选哪些 Run、读到哪个时刻为止、哪些结果缺失、有哪些问题、用什么证据、怎样比较,都由 NiceEval 内置的固定查询决定。查询返回的是普通数据,不会把数据库连接、文件路径或读取对象交给调用者。
|
|
26
|
+
|
|
27
|
+
内置查询覆盖 Run、Attempt、trace、diff、sources、artifacts 和 Run 之间的比较。你不能用临时 SQL、JSON path 或公式自定义读取方式。
|
|
28
|
+
|
|
29
|
+
## 三个查看入口
|
|
30
|
+
|
|
31
|
+
- `niceeval show` 在终端里先看总览,再逐层查看某个 Attempt 的对话、耗时和改动。你和 Coding Agent 都用它排查问题。
|
|
32
|
+
- `niceeval query` 输出结构化 JSON,给脚本和 CI 读取,Agent 需要精确字段时也用它。
|
|
33
|
+
- `niceeval view` 给人在浏览器用,打开只监听本机地址、受访问保护的 Insight 界面。
|
|
34
|
+
|
|
35
|
+
三个入口读到的是同一份查询结果。它们只负责各自的排版:JSON、终端文字或浏览器页面。它们不会各自挑选结果,也不会重新计算通过率或分数,所以同一个 Run 在三处看到的结论一致。
|
|
36
|
+
|
|
37
|
+
完整命令见 [CLI](/zh/reference/cli)。结果文件怎样复制和校验,见 [Record](/zh/explanation/record)。
|
|
@@ -1,13 +1,34 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "
|
|
2
|
+
title: "运行怎样产出可读的结果"
|
|
3
3
|
sidebarTitle: "运行器"
|
|
4
|
-
description: "了解 Runner
|
|
4
|
+
description: "了解 Runner 怎样创建 Run、逐个发布 Attempt,以及查看命令为什么只读已发布的结果。"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
你启动 `niceeval exp` 后,还没等它跑完就想看已经出来的结果,或者想知道运行中途被打断时哪些结果还算数。这一页说明 Runner 怎样把一次运行变成可以查看的结果。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Run 在开始时就定下要跑什么
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Runner 为每个选中的 Experiment 创建一个 Run。创建时,它记下 `runId`、这次运行的 `invocationId`,以及这次计划要跑的所有 Attempt。之后这份计划不会再变,所以通过率的分母在开始时就确定了。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## 每个 Attempt 跑完就单独发布
|
|
14
|
+
|
|
15
|
+
一个 Attempt 跑完、结果全部写好后,会单独发布。发布后它马上可以被查看、比较、在下次运行中沿用,或用 `niceeval accept` 明确采用,即使所在的 Run 仍是 `active`。
|
|
16
|
+
|
|
17
|
+
还没发布的 Attempt、尚未算完的汇总,以及晚到的写入,都不会出现在任何查看命令里。所以你在运行中途看到的每条结果都是完整的,不会读到写了一半的数据。
|
|
18
|
+
|
|
19
|
+
## 运行结束时拿到这次的 Run ID
|
|
20
|
+
|
|
21
|
+
`niceeval exp` 结束时,终端的 `NEXT` 面板会列出这次新建的 Run,并给出两条查看命令:
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
pnpm exec niceeval show --run <run-id>
|
|
25
|
+
pnpm exec niceeval view --run <run-id>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
加 `--json` 时,最后一行是这次运行的 receipt,里面的 `createdRunIds` 列出新建的 Run,`publicationCutoff` 标记这次运行结束时已发布到哪里。`publicationCutoff` 不要解析,原样传给后续命令。脚本和 CI 先运行 `niceeval query discover` 找到可用的查询,再发送完整 request。
|
|
29
|
+
|
|
30
|
+
## 浏览器页面不会自己跳到新结果
|
|
31
|
+
|
|
32
|
+
`niceeval view` 打开时,固定读取当时已发布的结果。之后又有新的 Attempt 发布时,页面会提示刷新;你确认后,页面才切换到最新结果。这样你在对比数据时,页面不会中途变化。
|
|
33
|
+
|
|
34
|
+
Runner 不会把数据库、执行时的工作目录或尚未发布的记录交给查看命令。查看时选哪些结果、缺了什么、用什么证据、怎样比较,都由 NiceEval 内置的固定查询决定,见[运行结果的数据流](/zh/explanation/results-flow)。
|
package/docs-site/zh/index.mdx
CHANGED
|
@@ -1,135 +1,46 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "NiceEval"
|
|
3
3
|
sidebarTitle: "首页"
|
|
4
|
-
description: "
|
|
4
|
+
description: "像写单元测试一样写评估,像做实验一样比较 Agent。用 TypeScript 断言工具调用、回复、代码改动和业务结果,在本地反复运行并追查每一次失败。"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import { SandboxMode } from '/snippets/diagram-sandbox-mode.jsx';
|
|
8
|
-
import { DirectMode } from '/snippets/diagram-direct-mode.jsx';
|
|
9
|
-
|
|
10
7
|
<div align="center">
|
|
11
8
|
|
|
12
9
|
# NiceEval
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
**像写单元测试一样写评估,像做实验一样比较 Agent**
|
|
15
12
|
|
|
16
13
|
</div>
|
|
17
14
|
|
|
18
|
-
|
|
15
|
+
你改了 prompt、换了模型、给 Coding Agent 写了一个新 Skill,或者调了 LLM 游戏里的 NPC,想知道它到底有没有变好。NiceEval 让你用 TypeScript 写下“什么算做对”,然后反复运行、打分、比较,并回到每一次失败去看 Agent 实际做了什么。
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
所有运行都在你自己的机器和 CI 里完成,不需要注册账号。
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
## 从这里开始
|
|
23
20
|
|
|
24
21
|
<CardGroup cols={3}>
|
|
25
|
-
<Card title="
|
|
26
|
-
|
|
22
|
+
<Card title="NiceEval 是什么" icon="book-open" href="/zh/introduction">
|
|
23
|
+
适合评什么、一条评估用例长什么样、和其它工具有什么不同。
|
|
27
24
|
</Card>
|
|
28
|
-
<Card title="
|
|
29
|
-
|
|
25
|
+
<Card title="快速开始" icon="play" href="/zh/tutorials/quickstart">
|
|
26
|
+
十分钟左右跑通第一条评估用例,并看到结果。
|
|
30
27
|
</Card>
|
|
31
|
-
<Card title="
|
|
32
|
-
|
|
28
|
+
<Card title="可运行示例" icon="grid-2" href="/zh/examples">
|
|
29
|
+
AI SDK、Claude SDK、Codex SDK、Pi、LangGraph 的完整接入项目。
|
|
33
30
|
</Card>
|
|
34
31
|
</CardGroup>
|
|
35
32
|
|
|
36
|
-
##
|
|
37
|
-
|
|
38
|
-
[NiceEval](https://niceeval.com/) 支持两种接入方式,取决于被测系统是否需要隔离工作区。
|
|
39
|
-
|
|
40
|
-
### 模式一:Sandbox
|
|
41
|
-
|
|
42
|
-
跑 Codex、Claude Code 等需要 Sandbox 的 coding agent:
|
|
43
|
-
|
|
44
|
-
<SandboxMode />
|
|
45
|
-
|
|
46
|
-
### 模式二:直连
|
|
47
|
-
|
|
48
|
-
直接连接你自己的 AI Agent:
|
|
49
|
-
|
|
50
|
-
<DirectMode />
|
|
51
|
-
|
|
52
|
-
- **NiceEval runner** 负责发现评估用例、调度运行、打分并发布 Run 与 Attempt 事实。
|
|
53
|
-
- **Agent 适配器** 是开放边界:你决定如何调用被测系统,以及如何把输出映射成标准事件流。
|
|
54
|
-
- **Sandbox** 负责文件系统隔离:需要真实 workspace 的 coding agent 使用 Docker 或云端 Sandbox。自有 Web Agent 可以直连,无需 Docker。
|
|
55
|
-
|
|
56
|
-
## 核心概念一览
|
|
57
|
-
|
|
58
|
-
| 概念 | 一句话 |
|
|
59
|
-
|---|---|
|
|
60
|
-
| [评估用例](/zh/explanation/evals) | 一个测试用例:写在 `evals/*.eval.ts` 里,描述测什么。 |
|
|
61
|
-
| [Experiment](/zh/explanation/experiment) | 可签入的运行配置:决定连哪个 Adapter、什么 model、什么 flags。 |
|
|
62
|
-
| [Adapter](/zh/explanation/adapter) | 连接被测系统的适配层:实现一个 `send`,把返回翻译成标准事件流。 |
|
|
63
|
-
| [Sandbox](/zh/tutorials/sandbox-providers) | 需要隔离工作区的 coding agent 才用得到。直连 Web Agent 不需要。 |
|
|
64
|
-
| [Tier](/zh/explanation/tier) | 接入 Adapter 的三档投入:Tier 1 只接 send,Tier 2 加 OTel 换调用瀑布图,Tier 3 侵入改造做 feature A/B。 |
|
|
65
|
-
|
|
66
|
-
完整术语表见[架构概览](/zh/explanation/overview)。
|
|
67
|
-
|
|
68
|
-
## 示例
|
|
69
|
-
|
|
70
|
-
跑一条评估用例需要两个文件:评估用例本身(测什么)和 experiment(跑哪个 agent)。CLI 不接受单独的评估用例 id——`niceeval exp <experiment> <eval 前缀>` 里的 experiment 才决定「连哪个被测对象」。下面是一个直连 Web Agent 的真实场景(完整项目见仓库 `examples/zh/ai-sdk/`),验证 agent 遇到实时天气问题时会调用工具、并基于工具结果作答,而不是凭空编造:
|
|
71
|
-
|
|
72
|
-
```ts
|
|
73
|
-
// evals/weather-tool.eval.ts
|
|
74
|
-
import { defineEval, defineJudge } from "niceeval";
|
|
75
|
-
import { includes } from "niceeval/expect";
|
|
76
|
-
|
|
77
|
-
const groundedWeatherAnswer = defineJudge({
|
|
78
|
-
name: "grounded-weather-answer",
|
|
79
|
-
rubric: "根据 question 评价 answer 是否给出具体天气信息,而不是拒绝或含糊作答。",
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
export default defineEval({
|
|
83
|
-
judge: groundedWeatherAnswer,
|
|
84
|
-
description: "测试 agent 在实时天气问题中正确调用工具并基于结果作答的能力",
|
|
85
|
-
|
|
86
|
-
async test(t) {
|
|
87
|
-
const turn = await t.send("北京今天天气怎么样?");
|
|
88
|
-
turn.succeeded().label("Turn 成功");
|
|
89
|
-
|
|
90
|
-
await t.group("调用 get_weather 且回答天气", () => {
|
|
91
|
-
t.calledTool("get_weather").label("调用天气工具");
|
|
92
|
-
t.check(turn.message, includes("天气")).label("说明天气");
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
t.judge({ question: turn.input, answer: turn.message }, groundedWeatherAnswer).gate(0.7)
|
|
96
|
-
.label("回答有依据");
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
```ts
|
|
102
|
-
// experiments/local.ts
|
|
103
|
-
import { defineExperiment } from "niceeval";
|
|
104
|
-
import { webAgent } from "./adapter"; // 你自己写的 Adapter,接被测 Web Agent
|
|
105
|
-
|
|
106
|
-
export default defineExperiment({
|
|
107
|
-
agent: webAgent({ baseUrl: "http://127.0.0.1:5188" }),
|
|
108
|
-
model: "gpt-5.4",
|
|
109
|
-
});
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
```sh
|
|
113
|
-
npx niceeval exp local weather-tool
|
|
114
|
-
pnpm exec niceeval query discover # 让 AI、脚本或 CI 发现固定 JSON operation
|
|
115
|
-
pnpm exec niceeval view # 在网页中审阅结果
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
如果被测对象是需要隔离工作区的 coding agent(Codex、Claude Code 插件/Skill),评估用例里改用 `t.sandbox.uploadDirectory()` 铺工作区。检查文件变化用 `t.sandbox.fileChanged()` 等归因断言。`t.sandbox.runCommand()` 跑测试。参考独立仓库 [coding-agent-skill](https://github.com/CorrectRoadH/coding-agent-skill)。
|
|
119
|
-
|
|
120
|
-
## 快速开始
|
|
121
|
-
|
|
122
|
-
先从[快速开始](/zh/tutorials/quickstart)完成第一次运行。接入现有应用时,按[接入你的 Agent](/zh/tutorials/connect-your-agent)选择 Adapter 和 Experiment。
|
|
33
|
+
## 按你要评的对象
|
|
123
34
|
|
|
124
35
|
<CardGroup cols={3}>
|
|
125
|
-
<Card title="
|
|
126
|
-
|
|
36
|
+
<Card title="你自己的 AI Agent" icon="globe" href="/zh/tutorials/connect-your-agent">
|
|
37
|
+
写一个 Adapter 连上 Agent 接口,断言回复、工具调用和结构化输出。
|
|
127
38
|
</Card>
|
|
128
|
-
<Card title="
|
|
129
|
-
|
|
39
|
+
<Card title="Coding Agent 和它的扩展" icon="wand-magic-sparkles" href="/zh/examples/coding-agent-extensions">
|
|
40
|
+
在 Sandbox 里给 Agent 一个真实仓库,用对照实验衡量 Skill 和 Plugin 的效果。
|
|
130
41
|
</Card>
|
|
131
|
-
<Card title="
|
|
132
|
-
|
|
42
|
+
<Card title="任何 AI 应用,比如 LLM 游戏" icon="gamepad" href="/zh/tutorials/custom-application">
|
|
43
|
+
把发帖、回复、NPC 行动这类业务操作原样交给评估用例,检查结构化结果和世界状态。
|
|
133
44
|
</Card>
|
|
134
45
|
</CardGroup>
|
|
135
46
|
|
|
@@ -137,16 +48,12 @@ pnpm exec niceeval view # 在网页中审阅结果
|
|
|
137
48
|
|
|
138
49
|
<AccordionGroup>
|
|
139
50
|
<Accordion title="需要注册账号吗?">
|
|
140
|
-
|
|
51
|
+
不需要。运行评估和查看结果都在本地完成。只有被测对象需要隔离环境时,才会用到 Docker 或 E2B 这类 Sandbox Provider。
|
|
141
52
|
</Accordion>
|
|
142
|
-
<Accordion title="我的 Agent 不是用 TypeScript
|
|
143
|
-
|
|
53
|
+
<Accordion title="我的 Agent 不是用 TypeScript 写的,能接吗?">
|
|
54
|
+
能。评估用例和 Adapter 用 TypeScript 写,被测应用可以是任何语言。Adapter 只是通过 HTTP、gRPC 或 WebSocket 请求应用已有的接口,见 [Adapter](/zh/explanation/adapter)。
|
|
144
55
|
</Accordion>
|
|
145
56
|
<Accordion title="能接到 CI 里吗?">
|
|
146
|
-
|
|
57
|
+
能。在 CI 里运行同一条 `niceeval exp` 命令,退出码反映评估是否通过,见 [CI 集成](/zh/tutorials/ci-integration)。
|
|
147
58
|
</Accordion>
|
|
148
59
|
</AccordionGroup>
|
|
149
|
-
|
|
150
|
-
<Tip>
|
|
151
|
-
想先走最小路径,读 [快速开始](/zh/tutorials/quickstart)。想理解边界,读 [架构概览](/zh/explanation/overview)。
|
|
152
|
-
</Tip>
|