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.
Files changed (714) hide show
  1. package/INDEX.md +45 -40
  2. package/dist/adapter-execution-trace.cjs.map +1 -1
  3. package/dist/adapter-execution-trace.d.cts +26 -0
  4. package/dist/adapter-execution-trace.d.mts +26 -0
  5. package/dist/adapter-execution-trace.d.ts +26 -0
  6. package/dist/adapter-usage.cjs.map +1 -1
  7. package/dist/adapter-usage.d.cts +9 -0
  8. package/dist/adapter-usage.d.mts +9 -0
  9. package/dist/adapter-usage.d.ts +9 -0
  10. package/dist/adapter.cjs +19 -4
  11. package/dist/adapter.cjs.map +1 -1
  12. package/dist/adapter.d.cts +37 -12
  13. package/dist/adapter.d.mts +37 -12
  14. package/dist/adapter.d.ts +37 -12
  15. package/dist/agents/ai-sdk.cjs +3 -0
  16. package/dist/agents/ai-sdk.cjs.map +1 -1
  17. package/dist/agents/bub.cjs +3 -0
  18. package/dist/agents/bub.cjs.map +1 -1
  19. package/dist/agents/claude-code-native.cjs +28 -2
  20. package/dist/agents/claude-code-native.cjs.map +1 -1
  21. package/dist/agents/claude-code.cjs +3 -0
  22. package/dist/agents/claude-code.cjs.map +1 -1
  23. package/dist/agents/codex.cjs +3 -0
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/coding-cli-versions.cjs +9 -10
  26. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  27. package/dist/agents/coding-cli-versions.d.cts +1 -1
  28. package/dist/agents/coding-cli-versions.d.mts +1 -1
  29. package/dist/agents/coding-cli-versions.d.ts +1 -1
  30. package/dist/agents/deepseek-harness.cjs +3 -0
  31. package/dist/agents/deepseek-harness.cjs.map +1 -1
  32. package/dist/agents/hermes.cjs +3 -0
  33. package/dist/agents/hermes.cjs.map +1 -1
  34. package/dist/agents/index.cjs.map +1 -1
  35. package/dist/agents/index.d.cts +3 -2
  36. package/dist/agents/index.d.mts +3 -2
  37. package/dist/agents/index.d.ts +3 -2
  38. package/dist/agents/omp.cjs +3 -0
  39. package/dist/agents/omp.cjs.map +1 -1
  40. package/dist/agents/openai-compat.cjs +6 -0
  41. package/dist/agents/openai-compat.cjs.map +1 -1
  42. package/dist/agents/openclaw.cjs +3 -0
  43. package/dist/agents/openclaw.cjs.map +1 -1
  44. package/dist/agents/opencode.cjs +3 -0
  45. package/dist/agents/opencode.cjs.map +1 -1
  46. package/dist/agents/sdk-streams.cjs +9 -0
  47. package/dist/agents/sdk-streams.cjs.map +1 -1
  48. package/dist/agents/ui-message-stream.cjs +3 -0
  49. package/dist/agents/ui-message-stream.cjs.map +1 -1
  50. package/dist/assertions/api.cjs.map +1 -1
  51. package/dist/assertions/api.d.cts +27 -5
  52. package/dist/assertions/api.d.mts +27 -5
  53. package/dist/assertions/api.d.ts +27 -5
  54. package/dist/assertions/collection.cjs +6 -0
  55. package/dist/assertions/collection.cjs.map +1 -1
  56. package/dist/assertions/collection.d.cts +4 -2
  57. package/dist/assertions/collection.d.mts +4 -2
  58. package/dist/assertions/collection.d.ts +4 -2
  59. package/dist/assertions/collection.js +12 -8
  60. package/dist/assertions/context-match.cjs +70 -0
  61. package/dist/assertions/context-match.cjs.map +1 -0
  62. package/dist/assertions/context-match.d.cts +107 -0
  63. package/dist/assertions/context-match.d.mts +107 -0
  64. package/dist/assertions/context-match.d.ts +107 -0
  65. package/dist/assertions/context-match.js +12 -0
  66. package/dist/assertions/context-match.js.map +1 -0
  67. package/dist/assertions/full-content.cjs +109 -0
  68. package/dist/assertions/full-content.cjs.map +1 -0
  69. package/dist/assertions/full-content.d.cts +6 -0
  70. package/dist/assertions/full-content.d.mts +6 -0
  71. package/dist/assertions/full-content.d.ts +6 -0
  72. package/dist/assertions/full-content.js +12 -0
  73. package/dist/assertions/full-content.js.map +1 -0
  74. package/dist/assertions/judge-presets.cjs +2 -34
  75. package/dist/assertions/judge-presets.cjs.map +1 -1
  76. package/dist/assertions/judge-presets.d.cts +6 -9
  77. package/dist/assertions/judge-presets.d.mts +6 -9
  78. package/dist/assertions/judge-presets.d.ts +6 -9
  79. package/dist/assertions/judge-presets.js +8 -8
  80. package/dist/assertions/judge.cjs +107 -29
  81. package/dist/assertions/judge.cjs.map +1 -1
  82. package/dist/assertions/judge.d.cts +2 -0
  83. package/dist/assertions/judge.d.mts +2 -0
  84. package/dist/assertions/judge.d.ts +2 -0
  85. package/dist/assertions/match.cjs +244 -5
  86. package/dist/assertions/match.cjs.map +1 -1
  87. package/dist/assertions/match.d.cts +43 -3
  88. package/dist/assertions/match.d.mts +43 -3
  89. package/dist/assertions/match.d.ts +43 -3
  90. package/dist/assertions/match.js +88 -78
  91. package/dist/assertions/material.cjs +520 -0
  92. package/dist/assertions/material.cjs.map +1 -0
  93. package/dist/assertions/material.d.cts +56 -0
  94. package/dist/assertions/material.d.mts +56 -0
  95. package/dist/assertions/material.d.ts +56 -0
  96. package/dist/assertions/material.js +20 -0
  97. package/dist/assertions/material.js.map +1 -0
  98. package/dist/assertions/record/attachment.cjs +5 -2
  99. package/dist/assertions/record/attachment.cjs.map +1 -1
  100. package/dist/assertions/record/codec.cjs +2 -1
  101. package/dist/assertions/record/codec.cjs.map +1 -1
  102. package/dist/assertions/record/model.cjs.map +1 -1
  103. package/dist/assertions/record/model.d.cts +6 -1
  104. package/dist/assertions/record/model.d.mts +6 -1
  105. package/dist/assertions/record/model.d.ts +6 -1
  106. package/dist/assertions/runtime.cjs +207 -14
  107. package/dist/assertions/runtime.cjs.map +1 -1
  108. package/dist/assertions/runtime.d.cts +9 -0
  109. package/dist/assertions/runtime.d.mts +9 -0
  110. package/dist/assertions/runtime.d.ts +9 -0
  111. package/dist/assertions/runtime.js +14 -8
  112. package/dist/assertions/score-match-audit.cjs +18 -8
  113. package/dist/assertions/score-match-audit.cjs.map +1 -1
  114. package/dist/assertions/score-match-gateway.cjs +83 -25
  115. package/dist/assertions/score-match-gateway.cjs.map +1 -1
  116. package/dist/assertions/score-match-gateway.d.cts +2 -0
  117. package/dist/assertions/score-match-gateway.d.mts +2 -0
  118. package/dist/assertions/score-match-gateway.d.ts +2 -0
  119. package/dist/assertions/value-composition.test-d.cjs +77 -0
  120. package/dist/assertions/value-composition.test-d.cjs.map +1 -0
  121. package/dist/assertions/value-composition.test-d.d.cts +1 -0
  122. package/dist/assertions/value-composition.test-d.d.mts +1 -0
  123. package/dist/assertions/value-composition.test-d.d.ts +1 -0
  124. package/dist/assertions/value-composition.test-d.js +4 -0
  125. package/dist/assertions/value-composition.test-d.js.map +1 -0
  126. package/dist/context/assert-first.cjs +207 -213
  127. package/dist/context/assert-first.cjs.map +1 -1
  128. package/dist/context/assert-first.d.cts +49 -23
  129. package/dist/context/assert-first.d.mts +49 -23
  130. package/dist/context/assert-first.d.ts +49 -23
  131. package/dist/context/session.cjs +111 -9
  132. package/dist/context/session.cjs.map +1 -1
  133. package/dist/context/session.d.cts +18 -0
  134. package/dist/context/session.d.mts +18 -0
  135. package/dist/context/session.d.ts +18 -0
  136. package/dist/define.cjs +17 -1
  137. package/dist/define.cjs.map +1 -1
  138. package/dist/eval/cli/contribution.cjs +2 -0
  139. package/dist/eval/cli/contribution.cjs.map +1 -1
  140. package/dist/eval/host/index.cjs +2 -0
  141. package/dist/eval/host/index.cjs.map +1 -1
  142. package/dist/eval/record/evaluation.cjs +3 -0
  143. package/dist/eval/record/evaluation.cjs.map +1 -1
  144. package/dist/eval/record/membership-provenance.d.cts +15 -15
  145. package/dist/eval/record/membership-provenance.d.mts +15 -15
  146. package/dist/eval/record/membership-provenance.d.ts +15 -15
  147. package/dist/eval/record/score.cjs +7 -0
  148. package/dist/eval/record/score.cjs.map +1 -1
  149. package/dist/eval/record/sealed-assertion.cjs +3 -0
  150. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  151. package/dist/eval/record/verdict.cjs +7 -0
  152. package/dist/eval/record/verdict.cjs.map +1 -1
  153. package/dist/expect/index.cjs +8 -2
  154. package/dist/expect/index.cjs.map +1 -1
  155. package/dist/expect/index.d.cts +9 -4
  156. package/dist/expect/index.d.mts +9 -4
  157. package/dist/expect/index.d.ts +9 -4
  158. package/dist/expect/index.js +72 -62
  159. package/dist/expect/index.mjs +72 -62
  160. package/dist/experiment/host/cli/contribution.cjs +37 -23
  161. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  162. package/dist/experiment/host/cli/contribution.d.cts +9 -1
  163. package/dist/experiment/host/cli/contribution.d.mts +9 -1
  164. package/dist/experiment/host/cli/contribution.d.ts +9 -1
  165. package/dist/experiment/host/current.cjs +74 -0
  166. package/dist/experiment/host/current.cjs.map +1 -0
  167. package/dist/experiment/host/current.d.cts +33 -0
  168. package/dist/experiment/host/current.d.mts +33 -0
  169. package/dist/experiment/host/current.d.ts +33 -0
  170. package/dist/experiment/host/current.js +10 -0
  171. package/dist/experiment/host/current.js.map +1 -0
  172. package/dist/experiment/host/index.cjs +17 -174
  173. package/dist/experiment/host/index.cjs.map +1 -1
  174. package/dist/experiment/host/index.d.cts +8 -54
  175. package/dist/experiment/host/index.d.mts +8 -54
  176. package/dist/experiment/host/index.d.ts +8 -54
  177. package/dist/experiment/host/operations.cjs +33 -10
  178. package/dist/experiment/host/operations.cjs.map +1 -1
  179. package/dist/experiment/host/operations.d.cts +29 -1
  180. package/dist/experiment/host/operations.d.mts +29 -1
  181. package/dist/experiment/host/operations.d.ts +29 -1
  182. package/dist/experiment/host/operations.js +6 -4
  183. package/dist/experiment/host/requirements.cjs +3 -0
  184. package/dist/experiment/host/requirements.cjs.map +1 -0
  185. package/dist/experiment/host/requirements.d.cts +3 -0
  186. package/dist/experiment/host/requirements.d.mts +3 -0
  187. package/dist/experiment/host/requirements.d.ts +3 -0
  188. package/dist/experiment/host/requirements.js +4 -0
  189. package/dist/experiment/host/requirements.js.map +1 -0
  190. package/dist/experiment/host/runtime.cjs +179 -0
  191. package/dist/experiment/host/runtime.cjs.map +1 -0
  192. package/dist/experiment/host/runtime.d.cts +79 -0
  193. package/dist/experiment/host/runtime.d.mts +79 -0
  194. package/dist/experiment/host/runtime.d.ts +79 -0
  195. package/dist/experiment/host/runtime.js +6 -0
  196. package/dist/experiment/host/runtime.js.map +1 -0
  197. package/dist/experiment/host/types.cjs.map +1 -1
  198. package/dist/experiment/host/types.d.cts +17 -16
  199. package/dist/experiment/host/types.d.mts +17 -16
  200. package/dist/experiment/host/types.d.ts +17 -16
  201. package/dist/fresh-import.cjs +2 -1
  202. package/dist/fresh-import.cjs.map +1 -1
  203. package/dist/index.cjs +4 -2
  204. package/dist/index.cjs.map +1 -1
  205. package/dist/index.d.cts +12 -6
  206. package/dist/index.d.mts +12 -6
  207. package/dist/index.d.ts +12 -6
  208. package/dist/index.js +32 -30
  209. package/dist/index.mjs +32 -30
  210. package/dist/inspection/artifacts.cjs +83 -54
  211. package/dist/inspection/artifacts.cjs.map +1 -1
  212. package/dist/inspection/artifacts.d.cts +8 -0
  213. package/dist/inspection/artifacts.d.mts +8 -0
  214. package/dist/inspection/artifacts.d.ts +8 -0
  215. package/dist/inspection/artifacts.js +2 -0
  216. package/dist/inspection/assertions.cjs +4 -1
  217. package/dist/inspection/assertions.cjs.map +1 -1
  218. package/dist/inspection/cli/contribution.cjs +27 -4
  219. package/dist/inspection/cli/contribution.cjs.map +1 -1
  220. package/dist/inspection/cli/contribution.d.cts +2 -1
  221. package/dist/inspection/cli/contribution.d.mts +2 -1
  222. package/dist/inspection/cli/contribution.d.ts +2 -1
  223. package/dist/inspection/execution-traces.cjs +114 -8
  224. package/dist/inspection/execution-traces.cjs.map +1 -1
  225. package/dist/inspection/execution-traces.d.cts +38 -0
  226. package/dist/inspection/execution-traces.d.mts +38 -0
  227. package/dist/inspection/execution-traces.d.ts +38 -0
  228. package/dist/inspection/facts.cjs +12 -0
  229. package/dist/inspection/facts.cjs.map +1 -1
  230. package/dist/inspection/limits.cjs +5 -1
  231. package/dist/inspection/limits.cjs.map +1 -1
  232. package/dist/inspection/limits.d.cts +4 -0
  233. package/dist/inspection/limits.d.mts +4 -0
  234. package/dist/inspection/limits.d.ts +4 -0
  235. package/dist/inspection/limits.js +6 -2
  236. package/dist/inspection/overview.cjs +74 -33
  237. package/dist/inspection/overview.cjs.map +1 -1
  238. package/dist/inspection/overview.d.cts +19 -1
  239. package/dist/inspection/overview.d.mts +19 -1
  240. package/dist/inspection/overview.d.ts +19 -1
  241. package/dist/inspection/overview.js +4 -2
  242. package/dist/inspection/project-input.cjs +9 -0
  243. package/dist/inspection/project-input.cjs.map +1 -0
  244. package/dist/inspection/project-input.d.cts +20 -0
  245. package/dist/inspection/project-input.d.mts +20 -0
  246. package/dist/inspection/project-input.d.ts +20 -0
  247. package/dist/inspection/project-input.js +8 -0
  248. package/dist/inspection/project-input.js.map +1 -0
  249. package/dist/inspection/project-result.cjs +60 -0
  250. package/dist/inspection/project-result.cjs.map +1 -0
  251. package/dist/inspection/project-result.d.cts +1264 -0
  252. package/dist/inspection/project-result.d.mts +1264 -0
  253. package/dist/inspection/project-result.d.ts +1264 -0
  254. package/dist/inspection/project-result.js +10 -0
  255. package/dist/inspection/project-result.js.map +1 -0
  256. package/dist/inspection/project-source.cjs +109 -0
  257. package/dist/inspection/project-source.cjs.map +1 -0
  258. package/dist/inspection/project-source.d.cts +10 -0
  259. package/dist/inspection/project-source.d.mts +10 -0
  260. package/dist/inspection/project-source.d.ts +10 -0
  261. package/dist/inspection/project-source.js +6 -0
  262. package/dist/inspection/project-source.js.map +1 -0
  263. package/dist/inspection/project.cjs +100 -0
  264. package/dist/inspection/project.cjs.map +1 -0
  265. package/dist/inspection/project.d.cts +3 -0
  266. package/dist/inspection/project.d.mts +3 -0
  267. package/dist/inspection/project.d.ts +3 -0
  268. package/dist/inspection/project.js +6 -0
  269. package/dist/inspection/project.js.map +1 -0
  270. package/dist/inspection/protocol.cjs +19 -9
  271. package/dist/inspection/protocol.cjs.map +1 -1
  272. package/dist/inspection/protocol.d.cts +5506 -38189
  273. package/dist/inspection/protocol.d.mts +5506 -38189
  274. package/dist/inspection/protocol.d.ts +5506 -38189
  275. package/dist/inspection/public.mjs +896 -84
  276. package/dist/inspection/query.cjs +2 -0
  277. package/dist/inspection/query.cjs.map +1 -1
  278. package/dist/inspection/results.cjs +234 -29
  279. package/dist/inspection/results.cjs.map +1 -1
  280. package/dist/inspection/results.d.cts +870 -13
  281. package/dist/inspection/results.d.mts +870 -13
  282. package/dist/inspection/results.d.ts +870 -13
  283. package/dist/inspection/results.js +36 -34
  284. package/dist/inspection/select.cjs +126 -14
  285. package/dist/inspection/select.cjs.map +1 -1
  286. package/dist/inspection/select.d.cts +1 -1
  287. package/dist/inspection/select.d.mts +1 -1
  288. package/dist/inspection/select.d.ts +1 -1
  289. package/dist/inspection/source.cjs +4 -0
  290. package/dist/inspection/source.cjs.map +1 -1
  291. package/dist/inspection/sources.cjs +5 -0
  292. package/dist/inspection/sources.cjs.map +1 -1
  293. package/dist/inspection/trace.cjs +82 -84
  294. package/dist/inspection/trace.cjs.map +1 -1
  295. package/dist/inspection/trace.d.cts +7 -2
  296. package/dist/inspection/trace.d.mts +7 -2
  297. package/dist/inspection/trace.d.ts +7 -2
  298. package/dist/model-slots.cjs +35 -0
  299. package/dist/model-slots.cjs.map +1 -0
  300. package/dist/model-slots.d.cts +19 -0
  301. package/dist/model-slots.d.mts +19 -0
  302. package/dist/model-slots.d.ts +19 -0
  303. package/dist/model-slots.js +8 -0
  304. package/dist/model-slots.js.map +1 -0
  305. package/dist/o11y/adapter-call-price.cjs +4 -0
  306. package/dist/o11y/adapter-call-price.cjs.map +1 -1
  307. package/dist/o11y/adapter-call-price.d.cts +24 -0
  308. package/dist/o11y/adapter-call-price.d.mts +24 -0
  309. package/dist/o11y/adapter-call-price.d.ts +24 -0
  310. package/dist/o11y/adapter-call-price.js +6 -2
  311. package/dist/o11y/adapter-usage-projection.cjs +158 -0
  312. package/dist/o11y/adapter-usage-projection.cjs.map +1 -0
  313. package/dist/o11y/adapter-usage-projection.d.cts +141 -0
  314. package/dist/o11y/adapter-usage-projection.d.mts +141 -0
  315. package/dist/o11y/adapter-usage-projection.d.ts +141 -0
  316. package/dist/o11y/adapter-usage-projection.js +20 -0
  317. package/dist/o11y/adapter-usage-projection.js.map +1 -0
  318. package/dist/o11y/eval-usage.cjs +149 -0
  319. package/dist/o11y/eval-usage.cjs.map +1 -0
  320. package/dist/o11y/eval-usage.d.cts +46 -0
  321. package/dist/o11y/eval-usage.d.mts +46 -0
  322. package/dist/o11y/eval-usage.d.ts +46 -0
  323. package/dist/o11y/eval-usage.js +8 -0
  324. package/dist/o11y/eval-usage.js.map +1 -0
  325. package/dist/o11y/judge-call-price.cjs +62 -0
  326. package/dist/o11y/judge-call-price.cjs.map +1 -0
  327. package/dist/o11y/judge-call-price.d.cts +3 -0
  328. package/dist/o11y/judge-call-price.d.mts +3 -0
  329. package/dist/o11y/judge-call-price.d.ts +3 -0
  330. package/dist/o11y/judge-call-price.js +6 -0
  331. package/dist/o11y/judge-call-price.js.map +1 -0
  332. package/dist/o11y/judge-usage-projection.cjs +134 -0
  333. package/dist/o11y/judge-usage-projection.cjs.map +1 -0
  334. package/dist/o11y/judge-usage-projection.d.cts +18 -0
  335. package/dist/o11y/judge-usage-projection.d.mts +18 -0
  336. package/dist/o11y/judge-usage-projection.d.ts +18 -0
  337. package/dist/o11y/judge-usage-projection.js +20 -0
  338. package/dist/o11y/judge-usage-projection.js.map +1 -0
  339. package/dist/o11y/judge-usage-receipt.cjs +135 -0
  340. package/dist/o11y/judge-usage-receipt.cjs.map +1 -0
  341. package/dist/o11y/judge-usage-receipt.d.cts +5 -0
  342. package/dist/o11y/judge-usage-receipt.d.mts +5 -0
  343. package/dist/o11y/judge-usage-receipt.d.ts +5 -0
  344. package/dist/o11y/judge-usage-receipt.js +6 -0
  345. package/dist/o11y/judge-usage-receipt.js.map +1 -0
  346. package/dist/o11y/judge-usage.cjs +171 -0
  347. package/dist/o11y/judge-usage.cjs.map +1 -0
  348. package/dist/o11y/judge-usage.d.cts +35 -0
  349. package/dist/o11y/judge-usage.d.mts +35 -0
  350. package/dist/o11y/judge-usage.d.ts +35 -0
  351. package/dist/o11y/judge-usage.js +6 -0
  352. package/dist/o11y/judge-usage.js.map +1 -0
  353. package/dist/plugin/contracts.cjs +2 -0
  354. package/dist/plugin/contracts.cjs.map +1 -1
  355. package/dist/plugin/link.cjs +7 -0
  356. package/dist/plugin/link.cjs.map +1 -1
  357. package/dist/record/attachment/protocol.cjs +8 -6
  358. package/dist/record/attachment/protocol.cjs.map +1 -1
  359. package/dist/record/attachment/protocol.d.cts +10 -0
  360. package/dist/record/attachment/protocol.d.mts +10 -0
  361. package/dist/record/attachment/protocol.d.ts +10 -0
  362. package/dist/record/attachment/protocol.js +38 -36
  363. package/dist/record/codec/seal-manifest.d.cts +3 -3
  364. package/dist/record/codec/seal-manifest.d.mts +3 -3
  365. package/dist/record/codec/seal-manifest.d.ts +3 -3
  366. package/dist/record/family/adapter-usage/definition.d.cts +1 -0
  367. package/dist/record/family/adapter-usage/definition.d.mts +1 -0
  368. package/dist/record/family/adapter-usage/definition.d.ts +1 -0
  369. package/dist/record/family/adapter-usage/persistence.cjs +1 -1
  370. package/dist/record/family/adapter-usage/persistence.cjs.map +1 -1
  371. package/dist/record/family/adapter-usage/persistence.d.cts +2 -1
  372. package/dist/record/family/adapter-usage/persistence.d.mts +2 -1
  373. package/dist/record/family/adapter-usage/persistence.d.ts +2 -1
  374. package/dist/record/family/adapter-usage/schema.cjs +21 -2
  375. package/dist/record/family/adapter-usage/schema.cjs.map +1 -1
  376. package/dist/record/family/adapter-usage/schema.d.cts +85 -0
  377. package/dist/record/family/adapter-usage/schema.d.mts +85 -0
  378. package/dist/record/family/adapter-usage/schema.d.ts +85 -0
  379. package/dist/record/family/adapter-usage/schema.js +18 -12
  380. package/dist/record/family/catalog.cjs +31 -27
  381. package/dist/record/family/catalog.cjs.map +1 -1
  382. package/dist/record/family/catalog.d.cts +94 -3
  383. package/dist/record/family/catalog.d.mts +94 -3
  384. package/dist/record/family/catalog.d.ts +94 -3
  385. package/dist/record/family/current.cjs +45 -42
  386. package/dist/record/family/current.cjs.map +1 -1
  387. package/dist/record/family/current.d.cts +240 -1
  388. package/dist/record/family/current.d.mts +240 -1
  389. package/dist/record/family/current.d.ts +240 -1
  390. package/dist/record/family/execution-traces/definition.d.cts +26 -0
  391. package/dist/record/family/execution-traces/definition.d.mts +26 -0
  392. package/dist/record/family/execution-traces/definition.d.ts +26 -0
  393. package/dist/record/family/execution-traces/definition.js +20 -14
  394. package/dist/record/family/execution-traces/schema.cjs +57 -1
  395. package/dist/record/family/execution-traces/schema.cjs.map +1 -1
  396. package/dist/record/family/execution-traces/schema.d.cts +114 -0
  397. package/dist/record/family/execution-traces/schema.d.mts +114 -0
  398. package/dist/record/family/execution-traces/schema.d.ts +114 -0
  399. package/dist/record/family/execution-traces/schema.js +18 -12
  400. package/dist/record/family/judge-usage/definition.cjs +12 -0
  401. package/dist/record/family/judge-usage/definition.cjs.map +1 -0
  402. package/dist/record/family/judge-usage/definition.d.cts +91 -0
  403. package/dist/record/family/judge-usage/definition.d.mts +91 -0
  404. package/dist/record/family/judge-usage/definition.d.ts +91 -0
  405. package/dist/record/family/judge-usage/definition.js +6 -0
  406. package/dist/record/family/judge-usage/definition.js.map +1 -0
  407. package/dist/record/family/judge-usage/persistence.cjs +10 -0
  408. package/dist/record/family/judge-usage/persistence.cjs.map +1 -0
  409. package/dist/record/family/judge-usage/persistence.d.cts +91 -0
  410. package/dist/record/family/judge-usage/persistence.d.mts +91 -0
  411. package/dist/record/family/judge-usage/persistence.d.ts +91 -0
  412. package/dist/record/family/judge-usage/persistence.js +6 -0
  413. package/dist/record/family/judge-usage/persistence.js.map +1 -0
  414. package/dist/record/family/judge-usage/schema.cjs +307 -0
  415. package/dist/record/family/judge-usage/schema.cjs.map +1 -0
  416. package/dist/record/family/judge-usage/schema.d.cts +351 -0
  417. package/dist/record/family/judge-usage/schema.d.mts +351 -0
  418. package/dist/record/family/judge-usage/schema.d.ts +351 -0
  419. package/dist/record/family/judge-usage/schema.js +18 -0
  420. package/dist/record/family/judge-usage/schema.js.map +1 -0
  421. package/dist/record/host/sqlite-host.cjs +55 -9
  422. package/dist/record/host/sqlite-host.cjs.map +1 -1
  423. package/dist/record/host/types.cjs.map +1 -1
  424. package/dist/record/host/types.d.cts +7 -0
  425. package/dist/record/host/types.d.mts +7 -0
  426. package/dist/record/host/types.d.ts +7 -0
  427. package/dist/record/model/run-context.cjs +7 -1
  428. package/dist/record/model/run-context.cjs.map +1 -1
  429. package/dist/record/model/run-context.d.cts +4 -0
  430. package/dist/record/model/run-context.d.mts +4 -0
  431. package/dist/record/model/run-context.d.ts +4 -0
  432. package/dist/record/model/seal-manifest.d.cts +1 -1
  433. package/dist/record/model/seal-manifest.d.mts +1 -1
  434. package/dist/record/model/seal-manifest.d.ts +1 -1
  435. package/dist/record/sqlite/client.cjs +18 -5
  436. package/dist/record/sqlite/client.cjs.map +1 -1
  437. package/dist/record/sqlite/client.d.cts +1 -1
  438. package/dist/record/sqlite/client.d.mts +1 -1
  439. package/dist/record/sqlite/client.d.ts +1 -1
  440. package/dist/record/sqlite/project-state-database.cjs +29 -8
  441. package/dist/record/sqlite/project-state-database.cjs.map +1 -1
  442. package/dist/run/host/runtime.cjs +4 -0
  443. package/dist/run/host/runtime.cjs.map +1 -1
  444. package/dist/run/storage/sqlite.cjs +20 -0
  445. package/dist/run/storage/sqlite.cjs.map +1 -1
  446. package/dist/runner/adapter-execution-trace.cjs +125 -2
  447. package/dist/runner/adapter-execution-trace.cjs.map +1 -1
  448. package/dist/runner/adapter-execution-trace.d.cts +1 -1
  449. package/dist/runner/adapter-execution-trace.d.mts +1 -1
  450. package/dist/runner/adapter-execution-trace.d.ts +1 -1
  451. package/dist/runner/adapter-usage.cjs +55 -7
  452. package/dist/runner/adapter-usage.cjs.map +1 -1
  453. package/dist/runner/adapter-usage.d.cts +9 -2
  454. package/dist/runner/adapter-usage.d.mts +9 -2
  455. package/dist/runner/adapter-usage.d.ts +9 -2
  456. package/dist/runner/adoption.cjs +9 -0
  457. package/dist/runner/adoption.cjs.map +1 -1
  458. package/dist/runner/attempt-cancellation.cjs +12 -0
  459. package/dist/runner/attempt-cancellation.cjs.map +1 -0
  460. package/dist/runner/attempt-cancellation.d.cts +6 -0
  461. package/dist/runner/attempt-cancellation.d.mts +6 -0
  462. package/dist/runner/attempt-cancellation.d.ts +6 -0
  463. package/dist/runner/attempt-cancellation.js +6 -0
  464. package/dist/runner/attempt-cancellation.js.map +1 -0
  465. package/dist/runner/attempt-resources.cjs +10 -4
  466. package/dist/runner/attempt-resources.cjs.map +1 -1
  467. package/dist/runner/attempt-resources.d.cts +2 -1
  468. package/dist/runner/attempt-resources.d.mts +2 -1
  469. package/dist/runner/attempt-resources.d.ts +2 -1
  470. package/dist/runner/attempt.cjs +1177 -1139
  471. package/dist/runner/attempt.cjs.map +1 -1
  472. package/dist/runner/config-identity.cjs +20 -1
  473. package/dist/runner/config-identity.cjs.map +1 -1
  474. package/dist/runner/config-identity.d.cts +5 -0
  475. package/dist/runner/config-identity.d.mts +5 -0
  476. package/dist/runner/config-identity.d.ts +5 -0
  477. package/dist/runner/discover.cjs +14 -0
  478. package/dist/runner/discover.cjs.map +1 -1
  479. package/dist/runner/discover.d.cts +3 -0
  480. package/dist/runner/discover.d.mts +3 -0
  481. package/dist/runner/discover.d.ts +3 -0
  482. package/dist/runner/feedback/human.cjs +9 -4
  483. package/dist/runner/feedback/human.cjs.map +1 -1
  484. package/dist/runner/fingerprint.cjs +1 -0
  485. package/dist/runner/fingerprint.cjs.map +1 -1
  486. package/dist/runner/judge-usage.cjs +18 -0
  487. package/dist/runner/judge-usage.cjs.map +1 -0
  488. package/dist/runner/judge-usage.d.cts +5 -0
  489. package/dist/runner/judge-usage.d.mts +5 -0
  490. package/dist/runner/judge-usage.d.ts +5 -0
  491. package/dist/runner/judge-usage.js +8 -0
  492. package/dist/runner/judge-usage.js.map +1 -0
  493. package/dist/runner/project-target.cjs.map +1 -1
  494. package/dist/runner/project-target.d.cts +2 -0
  495. package/dist/runner/project-target.d.mts +2 -0
  496. package/dist/runner/project-target.d.ts +2 -0
  497. package/dist/runner/record/planning.cjs +1 -0
  498. package/dist/runner/record/planning.cjs.map +1 -1
  499. package/dist/runner/record.cjs +4 -0
  500. package/dist/runner/record.cjs.map +1 -1
  501. package/dist/runner/reporters/braintrust.cjs +2 -0
  502. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  503. package/dist/runner/reuse-diagnostics.cjs +9 -10
  504. package/dist/runner/reuse-diagnostics.cjs.map +1 -1
  505. package/dist/runner/reuse-diagnostics.d.cts +5 -6
  506. package/dist/runner/reuse-diagnostics.d.mts +5 -6
  507. package/dist/runner/reuse-diagnostics.d.ts +5 -6
  508. package/dist/runner/reuse-diagnostics.js +4 -4
  509. package/dist/runner/reuse-plan.cjs +100 -48
  510. package/dist/runner/reuse-plan.cjs.map +1 -1
  511. package/dist/runner/reuse-plan.d.cts +60 -3
  512. package/dist/runner/reuse-plan.d.mts +60 -3
  513. package/dist/runner/reuse-plan.d.ts +60 -3
  514. package/dist/runner/reuse-plan.js +14 -10
  515. package/dist/runner/run.cjs +8 -6
  516. package/dist/runner/run.cjs.map +1 -1
  517. package/dist/runner/session.cjs +1 -1
  518. package/dist/runner/session.cjs.map +1 -1
  519. package/dist/runner/session.d.cts +1 -1
  520. package/dist/runner/session.d.mts +1 -1
  521. package/dist/runner/session.d.ts +1 -1
  522. package/dist/runner/source-producer.cjs +3 -1
  523. package/dist/runner/source-producer.cjs.map +1 -1
  524. package/dist/runner/types.cjs.map +1 -1
  525. package/dist/runner/types.d.cts +26 -5
  526. package/dist/runner/types.d.mts +26 -5
  527. package/dist/runner/types.d.ts +26 -5
  528. package/dist/sandbox/action.cjs +3 -0
  529. package/dist/sandbox/action.cjs.map +1 -1
  530. package/dist/sandbox/commands.cjs +3 -0
  531. package/dist/sandbox/commands.cjs.map +1 -1
  532. package/dist/sandbox/compose.cjs +6 -0
  533. package/dist/sandbox/compose.cjs.map +1 -1
  534. package/dist/sandbox/docker-profile/registry.cjs +7 -0
  535. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  536. package/dist/sandbox/docker-profile/runtime.cjs +3 -0
  537. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  538. package/dist/sandbox/docker-profile/schema.cjs +7 -0
  539. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  540. package/dist/sandbox/incus.cjs +7 -0
  541. package/dist/sandbox/incus.cjs.map +1 -1
  542. package/dist/sandbox/layer.cjs +12 -0
  543. package/dist/sandbox/layer.cjs.map +1 -1
  544. package/dist/shared/adapter-cleanup.cjs +18 -0
  545. package/dist/shared/adapter-cleanup.cjs.map +1 -0
  546. package/dist/shared/adapter-cleanup.d.cts +4 -0
  547. package/dist/shared/adapter-cleanup.d.mts +4 -0
  548. package/dist/shared/adapter-cleanup.d.ts +4 -0
  549. package/dist/shared/adapter-cleanup.js +10 -0
  550. package/dist/shared/adapter-cleanup.js.map +1 -0
  551. package/dist/shared/attempt-lifecycle.cjs +3 -0
  552. package/dist/shared/attempt-lifecycle.cjs.map +1 -0
  553. package/dist/shared/attempt-lifecycle.d.cts +13 -0
  554. package/dist/shared/attempt-lifecycle.d.mts +13 -0
  555. package/dist/shared/attempt-lifecycle.d.ts +13 -0
  556. package/dist/shared/attempt-lifecycle.js +4 -0
  557. package/dist/shared/attempt-lifecycle.js.map +1 -0
  558. package/dist/show/contribution.cjs +52 -14
  559. package/dist/show/contribution.cjs.map +1 -1
  560. package/dist/show/contribution.d.cts +23 -1
  561. package/dist/show/contribution.d.mts +23 -1
  562. package/dist/show/contribution.d.ts +23 -1
  563. package/dist/show/model.cjs +8 -1
  564. package/dist/show/model.cjs.map +1 -1
  565. package/dist/show/model.d.cts +10 -1
  566. package/dist/show/model.d.mts +10 -1
  567. package/dist/show/model.d.ts +10 -1
  568. package/dist/show/render.cjs +287 -49
  569. package/dist/show/render.cjs.map +1 -1
  570. package/dist/show/render.d.cts +3 -0
  571. package/dist/show/render.d.mts +3 -0
  572. package/dist/show/render.d.ts +3 -0
  573. package/dist/sources/projector.cjs +3 -0
  574. package/dist/sources/projector.cjs.map +1 -1
  575. package/dist/types.cjs.map +1 -1
  576. package/dist/types.d.cts +1 -1
  577. package/dist/types.d.mts +1 -1
  578. package/dist/types.d.ts +1 -1
  579. package/dist/view/app-dist/.vite/manifest.json +2 -2
  580. package/dist/view/app-dist/assets/index-CmVoXbwG.js +63 -0
  581. package/dist/view/app-dist/assets/{quality-cost-scatter-CFB3wnkN.js → quality-cost-scatter-BuLISaH4.js} +1 -1
  582. package/dist/view/app-dist/index.html +1 -1
  583. package/dist/view/cli/contribution.cjs +54 -21
  584. package/dist/view/cli/contribution.cjs.map +1 -1
  585. package/dist/view/cli/contribution.d.cts +2 -1
  586. package/dist/view/cli/contribution.d.mts +2 -1
  587. package/dist/view/cli/contribution.d.ts +2 -1
  588. package/dist/view/function-runtime.mjs +13231 -11647
  589. package/dist/view/http-protocol.cjs +3 -0
  590. package/dist/view/http-protocol.cjs.map +1 -1
  591. package/dist/view/http-protocol.d.cts +8 -0
  592. package/dist/view/http-protocol.d.mts +8 -0
  593. package/dist/view/http-protocol.d.ts +8 -0
  594. package/dist/view/inspection-host.cjs +17 -1
  595. package/dist/view/inspection-host.cjs.map +1 -1
  596. package/dist/view/render.cjs +1 -0
  597. package/dist/view/render.cjs.map +1 -1
  598. package/dist/view/render.d.cts +2 -1
  599. package/dist/view/render.d.mts +2 -1
  600. package/dist/view/render.d.ts +2 -1
  601. package/dist/view/revision.cjs.map +1 -1
  602. package/dist/view/revision.d.cts +12 -0
  603. package/dist/view/revision.d.mts +12 -0
  604. package/dist/view/revision.d.ts +12 -0
  605. package/dist/view/server.cjs +10 -9
  606. package/dist/view/server.cjs.map +1 -1
  607. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  608. package/docs-site/zh/explanation/adapter.mdx +2 -2
  609. package/docs-site/zh/explanation/assert.mdx +60 -24
  610. package/docs-site/zh/explanation/drive.mdx +1 -1
  611. package/docs-site/zh/explanation/evals.mdx +31 -29
  612. package/docs-site/zh/explanation/experiment.mdx +15 -15
  613. package/docs-site/zh/explanation/judge.mdx +23 -15
  614. package/docs-site/zh/explanation/overview.mdx +44 -21
  615. package/docs-site/zh/explanation/record.mdx +28 -13
  616. package/docs-site/zh/explanation/results-flow.mdx +37 -0
  617. package/docs-site/zh/explanation/runner.mdx +27 -6
  618. package/docs-site/zh/index.mdx +22 -115
  619. package/docs-site/zh/introduction.mdx +89 -61
  620. package/docs-site/zh/reference/cli.mdx +50 -26
  621. package/docs-site/zh/reference/define-agent.mdx +37 -5
  622. package/docs-site/zh/reference/define-eval.mdx +130 -29
  623. package/docs-site/zh/reference/define-experiment.mdx +251 -0
  624. package/docs-site/zh/reference/events.mdx +34 -30
  625. package/docs-site/zh/reference/expect.mdx +77 -2
  626. package/docs-site/zh/reference/official-adapters.mdx +2 -2
  627. package/docs-site/zh/troubleshooting/debug-sandbox.mdx +43 -24
  628. package/docs-site/zh/troubleshooting/debugging.mdx +65 -42
  629. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +35 -28
  630. package/docs-site/zh/tutorials/accept-results.mdx +34 -24
  631. package/docs-site/zh/tutorials/agent-feedback-loop.mdx +74 -43
  632. package/docs-site/zh/tutorials/agent-onboarding.mdx +27 -20
  633. package/docs-site/zh/tutorials/authoring.mdx +138 -121
  634. package/docs-site/zh/tutorials/ci-integration.mdx +46 -22
  635. package/docs-site/zh/tutorials/compare-runs.mdx +40 -13
  636. package/docs-site/zh/tutorials/concurrency.mdx +66 -62
  637. package/docs-site/zh/tutorials/configuration.mdx +17 -17
  638. package/docs-site/zh/tutorials/connect-otel.mdx +48 -37
  639. package/docs-site/zh/tutorials/connect-your-agent.mdx +80 -173
  640. package/docs-site/zh/tutorials/control-run-cost.mdx +63 -12
  641. package/docs-site/zh/tutorials/criteria-files.mdx +28 -21
  642. package/docs-site/zh/tutorials/custom-application.mdx +75 -55
  643. package/docs-site/zh/tutorials/dataset-fanout.mdx +32 -22
  644. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +38 -31
  645. package/docs-site/zh/tutorials/docker-in-docker.mdx +83 -89
  646. package/docs-site/zh/tutorials/eval-groups.mdx +70 -89
  647. package/docs-site/zh/tutorials/evaluation-kinds.mdx +12 -5
  648. package/docs-site/zh/tutorials/experiment-services.mdx +243 -0
  649. package/docs-site/zh/tutorials/fixtures.mdx +42 -26
  650. package/docs-site/zh/tutorials/handle-execution-failures.mdx +41 -19
  651. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +21 -16
  652. package/docs-site/zh/tutorials/niceeval-taste-application.mdx +394 -0
  653. package/docs-site/zh/tutorials/niceeval-taste.mdx +190 -0
  654. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +51 -39
  655. package/docs-site/zh/tutorials/plugins.mdx +55 -31
  656. package/docs-site/zh/tutorials/prebuilt-sandbox.mdx +204 -0
  657. package/docs-site/zh/tutorials/quickstart.mdx +91 -47
  658. package/docs-site/zh/tutorials/reporters.mdx +45 -30
  659. package/docs-site/zh/tutorials/rerun-and-cache.mdx +39 -40
  660. package/docs-site/zh/tutorials/sandbox-agent.mdx +65 -40
  661. package/docs-site/zh/tutorials/sandbox-providers.mdx +104 -282
  662. package/docs-site/zh/tutorials/sandbox-reuse.mdx +65 -97
  663. package/docs-site/zh/tutorials/select-and-preview.mdx +25 -20
  664. package/docs-site/zh/tutorials/verify-judge.mdx +49 -26
  665. package/docs-site/zh/tutorials/viewing-results.mdx +130 -80
  666. package/docs-site/zh/tutorials/write-experiment.mdx +116 -298
  667. package/docs-site/zh/tutorials/write-send.mdx +53 -52
  668. package/node_modules/undici/docs/docs/api/Agent.md +8 -8
  669. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
  670. package/node_modules/undici/docs/docs/api/Errors.md +25 -0
  671. package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
  672. package/node_modules/undici/docs/docs/api/Pool.md +5 -6
  673. package/node_modules/undici/lib/api/readable.js +1 -2
  674. package/node_modules/undici/lib/core/request.js +23 -2
  675. package/node_modules/undici/lib/core/util.js +0 -39
  676. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
  677. package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
  678. package/node_modules/undici/lib/dispatcher/client.js +1 -1
  679. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -2
  680. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
  681. package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
  682. package/node_modules/undici/lib/dispatcher/pool.js +90 -7
  683. package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
  684. package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
  685. package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
  686. package/node_modules/undici/lib/handler/retry-handler.js +72 -13
  687. package/node_modules/undici/lib/interceptor/cache.js +4 -1
  688. package/node_modules/undici/lib/interceptor/decompress.js +236 -69
  689. package/node_modules/undici/lib/web/cache/cache.js +17 -8
  690. package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
  691. package/node_modules/undici/lib/web/cookies/index.js +19 -7
  692. package/node_modules/undici/lib/web/cookies/util.js +3 -1
  693. package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
  694. package/node_modules/undici/lib/web/fetch/body.js +22 -15
  695. package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
  696. package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
  697. package/node_modules/undici/lib/web/fetch/headers.js +34 -31
  698. package/node_modules/undici/lib/web/fetch/index.js +38 -14
  699. package/node_modules/undici/lib/web/fetch/request.js +74 -79
  700. package/node_modules/undici/lib/web/fetch/response.js +43 -44
  701. package/node_modules/undici/lib/web/fetch/util.js +7 -7
  702. package/node_modules/undici/lib/web/infra/index.js +16 -1
  703. package/node_modules/undici/lib/web/webidl/index.js +2 -14
  704. package/node_modules/undici/lib/web/websocket/events.js +43 -26
  705. package/node_modules/undici/lib/web/websocket/receiver.js +5 -0
  706. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
  707. package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
  708. package/node_modules/undici/package.json +1 -1
  709. package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
  710. package/node_modules/undici/types/interceptors.d.ts +1 -1
  711. package/node_modules/undici/types/webidl.d.ts +13 -7
  712. package/package.json +4 -4
  713. package/dist/view/app-dist/assets/index-DFzw1L97.js +0 -63
  714. package/docs-site/zh/tutorials/experiments.mdx +0 -101
@@ -1,14 +1,18 @@
1
1
  ---
2
- title: "评估自定义应用"
3
- description: "保留应用自己的方法与上下文,用 NiceEval 评估结构化结果和业务操作。"
2
+ title: "评估自定义应用:发帖、生图这类业务操作"
3
+ sidebarTitle: "评估自定义应用"
4
+ description: "被测应用不是对话式 Agent 时,用 defineAdapter 把它的业务方法直接暴露给评估用例,检查结构化结果和业务操作。"
4
5
  ---
5
6
 
6
- 应用可以提供发帖、生成图片、刷新时间线等方法。用 `defineAdapter` 创建连接,返回对象的顶层操作会成为评估中强类型的 `t` 方法。
7
- Agent 是实现 `send(input, ctx) → Turn`、Session 和 Turn 的另一种 Adapter;自定义应用不要求实现这个 Agent 协议。
7
+ 你在评估一个社交应用里的 AI 功能:用户发帖后,AI 自动生成配图、推荐回复。这里没有“发一条消息、收一条回复”的对话,有的是发帖、回复、生成图片这些业务操作。
8
+
9
+ 硬把它们写成 `t.send("帮我发帖")` 很别扭。更直接的做法是用 `defineAdapter` 把应用自己的方法交给评估用例:返回对象里的每个操作,都会变成评估用例里带类型的 `t.post(...)`、`t.generateImage(...)`。
10
+
11
+ 对话式 Agent 用的 `defineAgent` 是 Adapter 的一种特例,要实现 `send`、多轮会话和 Turn。自定义应用不需要实现这些。
8
12
 
9
13
  ## 定义应用连接
10
14
 
11
- 下面连接一个已有的社交应用。`createSocialApp` 属于你的应用;返回对象明确列出评估需要的操作。
15
+ 先告诉 NiceEval 怎么创建你的应用、评估要用到它的哪些操作。下面连接一个已有的社交应用。`createSocialApp` 属于你的应用,返回对象逐个列出评估需要的操作。
12
16
 
13
17
  ```ts application.ts
14
18
  import { defineAdapter } from "niceeval";
@@ -29,16 +33,17 @@ export const social = defineAdapter({
29
33
  });
30
34
  ```
31
35
 
32
- 运行器每个 Attempt 调用一次 `create`,并在结束时执行已登记的 `onCleanup` 回调。实例隔离由你的 factory 实现;运行器不保证返回独立实例,也不会释放未登记 `onCleanup` 的资源。
33
- 取得资源后立即登记 `onCleanup`。
34
- 把 `signal` 传到应用的网络请求和长任务,才能响应取消。
36
+ 运行器每个 Attempt 调用一次 `create`,Attempt 结束时执行登记过的 `onCleanup` 回调。
37
+
38
+ - 每个 Attempt 要不要拿到独立的应用实例,由你的 `create` 决定。运行器不会替你复制实例。
39
+ - 没登记 `onCleanup` 的资源,运行器不会释放。取得资源后立即登记。
40
+ - 把 `signal` 传进应用的网络请求和长任务,超时或取消时它们才会停下。
35
41
 
36
- TypeScript 自动从返回对象推导方法参数和结果,不需要手写 `t` 的类型。
37
- 应用没有提供 `send` 时,`t.send` 会报类型错误。`check` 等 NiceEval 核心名称不能覆盖;已有类实例用上面的闭包方式暴露方法。
42
+ TypeScript 会从返回对象推导出每个方法的参数和结果,不需要手写 `t` 的类型。返回对象里没有 `send` 时,在评估用例里写 `t.send` 会报类型错误。`check` 等 NiceEval 自带的名称不能被覆盖。已有的类实例,用上面的闭包写法逐个暴露方法。
38
43
 
39
44
  ## 调用应用动作并自定义检查
40
45
 
41
- `test(t)` 同时提供应用操作与评估能力。应用返回的 Post、Reply 等对象可以直接交给 `defineValueMatch` 定义的自定义 Match。
46
+ 接下来在评估用例里调用这些操作,再检查结果。`test(t)` 里既有应用的操作,也有 NiceEval 的检查方法。应用返回的 Post、Reply 等对象,可以直接交给 `defineValueMatch` 定义的自定义 Match。
42
47
 
43
48
  ```ts evals/publish.eval.ts
44
49
  import { defineValueMatch } from "niceeval/expect";
@@ -64,13 +69,13 @@ export default social.defineEval({
64
69
  });
65
70
  ```
66
71
 
67
- 这里的动作签名由你的应用决定。`defineValueMatch` 只描述值怎样匹配;`t.check` 登记 Assertion,`.gate()` 显式把 Boolean 条件设为质量门。也可以复用字符串、数值或 Schema 匹配器。
68
- 需要累计分数时使用 `social.defineScoreEval`,再对检查调用 `.score(points)`。
69
- 开放式语气、人物一致性或内容质量可以交给 [Judge](/zh/explanation/judge)。
72
+ 操作的参数和返回值由你的应用决定。`defineValueMatch` 只描述一个值怎样算匹配。`t.check` 登记一条断言,`.gate()` 表示这条不通过,整个评估用例就不通过。字符串、数值和 Schema 匹配器也都能直接用。
73
+
74
+ 需要累计分数时,改用 `social.defineScoreEval`,再在检查上调用 `.score(points)`。语气、人物一致性、内容质量这类开放式标准可以交给 [Judge](/zh/explanation/judge)。
70
75
 
71
76
  ## 在连接处定义断言方法
72
77
 
73
- 多个评估需要同一种检查时,在 Adapter 的 `assertions` 中定义便捷方法。它取得当前 Attempt 的 `app` 和统一的 `check`,返回原有断言 handle。
78
+ 好几个评估用例都要做同一种检查时,把它写成 Adapter 上的断言方法,评估用例里一行就能调用。在 `assertions` 里定义这些方法,它们拿到当前 Attempt 的 `app` 和 `check`,返回 `check` 的结果。
74
79
 
75
80
  ```ts application.ts
76
81
  import { defineAdapter } from "niceeval";
@@ -113,15 +118,20 @@ export default social.defineScoreEval({
113
118
  });
114
119
  ```
115
120
 
116
- `hasPublishedText()` 与显式 `check` 共享评分和报告。`defineEval` 的断言方法没有 `.score()`;`defineScoreEval` 的方法提供它。动作方法 `post()` 仍只执行应用操作。
121
+ `hasPublishedText()` 和直接写 `t.check` 的效果一样,计分和报告里的展示也一样。`defineEval` 里的断言方法没有 `.score()`,`defineScoreEval` 里的有。`post()` 这样的操作方法仍然只调用应用。
122
+
123
+ 写断言方法时注意几点:
117
124
 
118
- 在断言方法被调用时读取证据。`assertions` 本身只组装方法,不能提前调用 `check`;返回对象不能包含 getter、非函数值或与应用及核心成员重名的方法。
119
- 方法同步返回本次 `check` 的 handle,不返回 Boolean 或 Promise。异步动作、等待和证据封存放在应用方法中,在检查前显式完成。
120
- 证据不完整时应报告明确错误,不能当作空历史来判断“没有发生”。
121
- 便捷方法使用具体参数签名。无法保留类型关联的泛型或重载便捷方法不可调用;这类组合可以使用独立 Match 和显式 `t.check`,应用操作自身的泛型方法仍可使用。
125
+ - 在方法被调用时才读取要检查的数据。`assertions` 只负责组装方法,不能在里面提前调用 `check`。
126
+ - 返回对象里只放函数,不放 getter 或其它值,方法名也不能和应用操作或 NiceEval 自带的名称重名。
127
+ - 方法同步返回 `check` 的结果,不返回 Boolean 或 Promise。异步操作和等待放在应用方法里,在检查前先完成。
128
+ - 数据不完整时报一个明确的错误,不要当成“什么都没发生”来判断。
129
+ - 参数写成具体类型。泛型或重载的断言方法无法调用,这类检查改用独立的 Match 加 `t.check`。应用操作本身可以是泛型方法。
122
130
 
123
131
  ## 选择实现并运行
124
132
 
133
+ 写一个 Experiment 选定这个应用,然后运行。
134
+
125
135
  ```ts experiments/local.ts
126
136
  import { defineExperiment } from "niceeval";
127
137
  import { social } from "../application.ts";
@@ -135,16 +145,17 @@ export default defineExperiment({
135
145
  ```bash
136
146
  pnpm exec niceeval check
137
147
  pnpm exec niceeval exp local
138
- pnpm exec niceeval view
139
148
  ```
140
149
 
141
- 实验选择的应用必须满足评估声明的接口。接口不匹配时,NiceEval 会在创建应用前报错。
142
- 具体操作的顺序、参数和重复次数由评估代码决定;应用动作不会自动获得 Agent 的消息重试。
143
- 自定义方法可以命名为 `send`,其参数和返回值仍由应用决定,不需要构造 `Turn`。如果返回对象没有定义 `send`,`t` 也不会自动获得这个方法。
150
+ 跑完后用 `pnpm exec niceeval show` 在终端看结果,或用 `pnpm exec niceeval view` 在浏览器里看。
151
+
152
+ Experiment 选的应用必须提供评估用例用到的操作。缺了操作时,NiceEval 在创建应用之前就报错,先核对 `create` 的返回对象。
153
+
154
+ 操作的顺序、参数和重复次数都由评估代码决定。应用操作失败时不会像 Agent 消息那样自动重试。你也可以把某个操作命名为 `send`,它的参数和返回值仍由应用决定,不需要构造 `Turn`。
144
155
 
145
156
  ## 用相同评估比较两个实现
146
157
 
147
- 需要替换应用实现时,创建共同的类型化契约,再分别提供实现:
158
+ 想知道换一套实现后效果是变好还是变差,就让两套实现跑同一批评估用例。先声明它们共同的接口,再分别提供实现:
148
159
 
149
160
  ```ts
150
161
  import { defineAdapterContract } from "niceeval";
@@ -155,10 +166,9 @@ export const baseline = social.implement({ name: "baseline", create: createBasel
155
166
  export const candidate = social.implement({ name: "candidate", create: createCandidate });
156
167
  ```
157
168
 
158
- 评估通过 `social.defineEval` 编写,两个 Experiment 分别选择 `baseline` 与 `candidate`。
159
- 只有共同接口里的方法可在该评估中使用;两个独立创建但同名的契约不能互换。
169
+ 评估用例用 `social.defineEval` 编写,两个 Experiment 分别选 `baseline` 和 `candidate`。评估用例里只能用共同接口里的方法。两次分别调用 `defineAdapterContract` 得到的接口即使同名,也不能互换。
160
170
 
161
- 需要共享断言方法时,在创建实现前调用 `withAssertions`:
171
+ 两套实现要共用断言方法时,在创建实现前调用 `withAssertions`:
162
172
 
163
173
  ```ts
164
174
  const social = defineAdapterContract<SocialContext>({ name: "social/v1" })
@@ -169,15 +179,19 @@ const social = defineAdapterContract<SocialContext>({ name: "social/v1" })
169
179
  }));
170
180
  ```
171
181
 
172
- 从这个返回契约创建实现和评估,各实现就会使用相同检查。`withAssertions` 返回新契约,之前创建的实现不会自动取得这些方法。
182
+ 用 `withAssertions` 返回的接口创建实现和评估用例,各实现就会用同一套检查。`withAssertions` 返回的是一个新接口,在它之前创建的实现拿不到这些方法。
183
+
184
+ ### 什么时候沿用上次结果
173
185
 
174
- 执行身份同时包含 Adapter identity(`name`、`contract`、`behaviorRevision`)和 experiment 的 `flags`。评估用例静态项目内相对 import/export 闭包变化会自动使候选失效。
175
- Experiment 单独选择的实现、动态 import、外部包和远端服务不在自动范围内。为这些行为声明非空 `behaviorRevision`,或用显式配置表达变化;未声明版本的自定义 Adapter 不会自动复用。
186
+ 再次运行时,NiceEval 会判断能否沿用上次的结果。参与判断的有 Adapter 的 `name`、`contract`、`behaviorRevision`,以及 Experiment 的 `flags`。评估用例文件和它在项目内用相对路径静态 import 的文件一改,这道题就会重跑。
187
+
188
+ Experiment 单独选择的实现、动态 import、外部包和远端服务,NiceEval 看不到它们的变化。改了这些行为时,提高 `behaviorRevision`,或者用显式配置体现变化。没有声明 `behaviorRevision` 的自定义 Adapter 每次都重跑,不沿用上次结果。用 `pnpm exec niceeval exp local --dry` 可以先看哪些会沿用、哪些会重跑,见[修改后只重跑受影响的评估](/zh/tutorials/rerun-and-cache)。
176
189
 
177
190
  ## 保存应用执行轨迹
178
191
 
179
- 应用结束并取得完整日志后,在 Adapter 内调用 `ctx.recordTrace`。每个事件保留自己的类型、主体、摘要和已知关系。
180
- 应用不用把操作包装成聊天消息。下面的事件只表示请求已接纳;实际完成应记录另一条事件。
192
+ 评估失败时,你想知道应用内部到底做了什么。把应用的执行日志交给 NiceEval,之后就能用 `niceeval show` 逐条查看,不必再去应用那边翻日志。
193
+
194
+ 应用结束、拿到完整日志后,在 Adapter 里调用 `ctx.recordTrace`。每个事件保留自己的类型、执行者、摘要和已知的关联,不需要包装成聊天消息。下面的事件只表示发帖请求已被接受,真正发布完成要另记一条事件。
181
195
 
182
196
  ```ts
183
197
  const attachment = await ctx.attach({
@@ -207,23 +221,25 @@ const receipt = await ctx.recordTrace({
207
221
  });
208
222
  ```
209
223
 
210
- `key` 是这份快照内的关联键,`source.eventId` 只填写应用真实提供的 ID;没有时省略。
211
- `schema.id` 标识应用的事件格式,不需要填写 `revision`;NiceEval 自行管理记录格式。旧记录仍可读取,旧调用则需删去 `schema.revision`。
212
- 返回的 `receipt.events` 给出可供查看的稳定 `eventId`。同一 `traceId` 重交相同快照返回同一身份,内容冲突会拒绝。
213
- 摘要有界,大输入通过证据引用精确定位到附件中的值,查看时不需要手动扫描整份日志。
224
+ - `key` 用来在这次提交的事件之间互相引用。`source.eventId` 只填应用真实提供的 ID,没有就省略。
225
+ - `schema.id` 标明应用的事件格式,只填 `id`,不填 `revision`。
226
+ - 返回的 `receipt.events` 给出每个事件的 `eventId`,查看时用它展开。同一个 `traceId` 再次提交相同内容,返回同样的 `eventId`;内容不同会被拒绝。
227
+ - 摘要有长度上限。大段输入放进附件,用 `evidence` 的 `pointer` 指向附件里的具体位置,查看时直接定位,不用扫完整份日志。
228
+
229
+ 跑完后查看这个 Attempt 的执行过程,再展开某个事件:
214
230
 
215
231
  ```sh
216
- niceeval show @<attempt> --execution
217
- niceeval show @<attempt> --execution --expand <eventId>
232
+ pnpm exec niceeval show @<attempt> --execution
233
+ pnpm exec niceeval show @<attempt> --execution --expand <eventId>
218
234
  ```
219
235
 
220
- 清理回调在独立时限内仍可提交轨迹。取消与完整性是两回事:取消后取得完整日志可以是 complete,
221
- 缺少日志时使用 partial 并列出 limitations;不要用空集合表示未知。窗口外事件保留为 excluded 或 unknown,轨迹导入本身不产生评分。
222
- 已保存的轨迹与证据随 Record 搬迁,查看时不调用原应用或模型。
236
+ `collection.state` 描述日志是否完整,和运行有没有被取消无关。取消后仍拿到了完整日志,就写 `complete`。缺日志时写 `partial`,并在 `limitations` 里说明缺了什么,不要用空列表表示“不知道”。超出 `scopes` 采集范围的事件也保留下来,标成 `excluded`,判断不了的标成 `unknown`。提交执行日志本身不影响判分。
237
+
238
+ `onCleanup` 回调有自己的时限,在里面也能提交执行日志。保存后的执行日志和附件随结果文件 `.niceeval/record.sqlite` 一起保存,查看时不会再调用应用或模型。
223
239
 
224
240
  ## 归档大附件
225
241
 
226
- 应用可把文件、网络响应或生成器作为原始字节流交给 `ctx.attach`。NiceEval 不解析日志格式:
242
+ 应用的原始日志、网络响应这类大文件,可以作为附件和结果一起保存,排查时再取出来看。用 `ctx.attach` 把文件、网络响应或生成器作为字节流交给 NiceEval,NiceEval 不解析其中的格式:
227
243
 
228
244
  ```ts
229
245
  import { createReadStream } from "node:fs";
@@ -241,23 +257,27 @@ const receipt = await ctx.attach({
241
257
  });
242
258
  ```
243
259
 
244
- 先关闭本地日志的写入端,再提交归档;读取期间保持源文件稳定。
245
- 成功回执包含 `artifactId`、原始 bytes 的 `sha256` 和 `byteLength`,此后删除或改写源文件不会改变附件。
246
- 回执只表示内容已接管;Attempt 发布后,附件才能随 Record 持久保存。这不表示上传到了远端服务。
260
+ 先关掉本地日志的写入,再提交附件,读取期间不要改动源文件。
261
+
262
+ 返回的回执包含 `artifactId`、原始字节的 `sha256` 和 `byteLength`。拿到回执后,NiceEval 已经有了自己的副本,之后删除或改写源文件不影响附件。附件在这个 Attempt 的结果保存时一起写进结果文件,不会上传到任何远端服务。
247
263
 
248
- 流每块最多 1 MiB、单件最多 1 GiB,每个 Attempt 的附件总量最多 2 GiB,同时最多归档 4 个流。
249
- 字符串和数组仍是单件 64 MiB、累计 256 MiB。自定义来源必须响应传入的取消信号,释放自己的文件或连接。
250
- 框架逐块复制并写入后才拉取下一块,不收集整件内容。大附件可以分块读取;作为 trace 的 JSON pointer 证据时,单件仍须不超过 64 MiB。
264
+ 大小限制:
251
265
 
252
- 在 `ctx.onCleanup` 内归档时,使用 cleanup 回调提供的 `signal`,不要使用已取消的 `ctx.signal`。
253
- 归档失败即使被捕获,也会留下采集失败;此前成功接管的附件保留。大文件应在执行期归档,cleanup 总窗口仍是 30 秒。
266
+ - 字节流每块最多 1 MiB,单个附件最多 1 GiB,每个 Attempt 的附件合计最多 2 GiB,同时最多提交 4 个流。
267
+ - 字符串和数组形式的附件单个最多 64 MiB,合计最多 256 MiB。
268
+ - 作为执行日志里 `pointer` 证据的附件,单个不能超过 64 MiB。
269
+
270
+ NiceEval 写完一块才读下一块,不会把整个文件读进内存。自定义的流必须响应传入的 `signal`,并释放自己的文件或连接。
271
+
272
+ 在 `ctx.onCleanup` 里提交附件时,用 cleanup 回调提供的 `signal`,不要用已经取消的 `ctx.signal`。提交失败时,即使你捕获了错误,这个 Attempt 也会显示采集失败,之前成功提交的附件仍然保留。cleanup 总共只有 30 秒,大文件应在运行过程中提交。
254
273
 
255
274
  ## 阅读结果
256
275
 
257
- 应用结果交给 `t.check` 后,NiceEval 保存有界检查材料和判定。
258
- 没有采集的会话、工具调用和费用保持缺失。没有 Turn 不代表用了零 token,Judge 的费用也不代表整个应用的费用。
259
- 自定义应用不能声明依赖完整应用费用的 `budget`,也不能声明 Agent 专属的 Sandbox 或会话能力。
260
- 当前生命周期 Plugin 依赖 Agent 的执行准备,自定义应用配置它们会在运行前报错。
276
+ 用 `pnpm exec niceeval show` 查看这次运行。每条 `t.check` 保存了被检查的值(有长度上限)和判定。
277
+
278
+ NiceEval 没有采集到的会话、工具调用和费用会显示为缺失,不会填成零。没有 Turn 不代表用了零 token,Judge 的费用也不等于整个应用的费用。
279
+
280
+ 因为拿不到应用的完整费用,自定义应用不能设置 `budget`,也不能声明只有 Agent 才有的 Sandbox 或会话能力。生命周期 Plugin 需要 Agent 的执行准备步骤,在自定义应用上配置它们会在运行前报错。
261
281
 
262
282
  完整可运行的模拟 X 示例位于 [LLM X 源码](https://github.com/CorrectRoadH/niceeval/tree/main/examples/zh/llm-x)。
263
283
  它由 LLM 生成人物、个人主页、推文、配图和后续社交动态,并使用应用原生方法进行评估。
@@ -1,18 +1,20 @@
1
1
  ---
2
- title: "数据驱动测试(dataset fan-out):用多份数据运行同一套评估用例"
2
+ title: "数据驱动测试:一份测试集生成多条评估用例"
3
3
  sidebarTitle: "数据驱动测试"
4
- description: "从 .eval.ts 文件导出数组或 keyed record,将一套评估逻辑展开为多个 case。用 loadYaml 或 loadJson 读取外部测试集,并获得稳定 ID。"
4
+ description: "几十条评估逻辑相同、只有输入不同时,从一个 .eval.ts 导出数组或对象,一套逻辑生成多条评估用例。也可以用 loadYaml 或 loadJson 读外部测试集,并给每条起稳定的 ID。"
5
5
  ---
6
6
 
7
7
  import { DatasetFanout } from '/snippets/diagram-dataset-fanout.jsx';
8
8
 
9
- 数据驱动测试(dataset fan-out)适合大量结构相同、输入不同的测试。例如 SQL 生成、意图分类、检索问答和工具选择。
9
+ 你在评估一个 SQL 生成功能,手上有 80 个“问题 + 期望结果”的样例。每条的检查逻辑都一样:发问题、跑 SQL、比结果。给每条写一个文件,改一次检查逻辑就要改 80 处。
10
+
11
+ 数据驱动测试让你只写一份逻辑,用测试集生成多条评估用例。意图分类、检索问答、工具选择这类大量同构的测试都适合这样写。
10
12
 
11
13
  <DatasetFanout />
12
14
 
13
- ## 工作原理
15
+ ## 从一个文件导出一组评估用例
14
16
 
15
- 没有外部业务 ID 时,一个 `.eval.ts` 文件默认导出数组:
17
+ 把样例放进数组,用 `map` 给每一行生成一个 `defineEval`,再把整个数组作为默认导出。检查逻辑只写一次,改它时所有样例一起生效:
16
18
 
17
19
  ```ts
18
20
  import { defineEval } from "niceeval";
@@ -34,18 +36,18 @@ export default rows.map((row) =>
34
36
  );
35
37
  ```
36
38
 
37
- ## 生成 ID
39
+ ## 确认每条评估用例的 ID
38
40
 
39
- 如果文件是 `evals/sql.eval.ts`,生成的 ID 是:
41
+ 导出数组时,NiceEval 按位置给每条编号。如果文件是 `evals/sql.eval.ts`,生成的 ID 是:
40
42
 
41
43
  ```text
42
44
  sql/0000
43
45
  sql/0001
44
46
  ```
45
47
 
46
- 序号零填充,便于稳定引用和过滤。
48
+ 序号补零到固定宽度,方便引用和按前缀筛选。注意数组顺序一变,同一个样例的 ID 也会跟着变。
47
49
 
48
- 数据源已经带稳定 case、issue 或 benchmark ID 时,默认导出 keyed record:
50
+ 数据源已经带有稳定的 case、issue 或 benchmark ID 时,改为导出一个对象,用这些 ID 作 key:
49
51
 
50
52
  ```ts
51
53
  export default Object.fromEntries(
@@ -62,9 +64,13 @@ export default Object.fromEntries(
62
64
  );
63
65
  ```
64
66
 
65
- 文件是 `evals/swelancer.eval.ts`、key 是 `15193` 时,ID 就是 `swelancer/15193`。key 必须是一个非空路径片段:不能是 `.` / `..`,不能含 `/`、`\\` 或控制字符。NiceEval 按 key 字典序发现,数据源返回顺序变化不会改变运行顺序。
67
+ 文件是 `evals/swelancer.eval.ts`、key 是 `15193` 时,ID 就是 `swelancer/15193`。key 必须是一个非空的路径片段:不能是 `.` 或 `..`,不能含 `/`、`\\` 或控制字符。NiceEval 按 key 的字典序排列,数据源返回的顺序变了,运行顺序和 ID 都不变。
68
+
69
+ 运行前可以用 `pnpm exec niceeval exp local sql --dry` 确认生成了哪些 ID、一共多少条。
70
+
71
+ ## 从 YAML 或 JSON 读取测试集
66
72
 
67
- ## 从 YAML / JSON 加载
73
+ 样例多了以后,放进单独的数据文件更好维护。用 `loadYaml` 或 `loadJson` 读取,并传入一个校验函数:
68
74
 
69
75
  ```ts
70
76
  import { loadYaml } from "niceeval/loaders";
@@ -84,32 +90,36 @@ cases:
84
90
  sql: SELECT COUNT(*) FROM users;
85
91
  ```
86
92
 
87
- `loadYaml` / `loadJson` 必须接 decoder。未验证的动态值只出现在 decoder 入口。验证通过后,返回值就是可以直接使用的强类型数据。
93
+ `loadYaml` 和 `loadJson` 必须传入校验函数(decoder)。文件内容只在校验函数里以未知类型出现;校验通过后,返回值就是带类型的数据,可以直接使用。数据文件格式不对时,校验函数会报错,这个评估文件加载失败。
88
94
 
89
- ## 过滤测试集评估用例
95
+ ## 只跑测试集里的一部分
96
+
97
+ 在 Experiment 后面写评估用例 ID 前缀,就能只跑其中几条:
90
98
 
91
99
  ```bash
92
100
  # 运行整个测试集
93
- npx niceeval exp local sql
101
+ pnpm exec niceeval exp local sql
94
102
 
95
- # 只运行第一个数组 case
96
- npx niceeval exp local sql/0000
103
+ # 只运行数组里的第一条
104
+ pnpm exec niceeval exp local sql/0000
97
105
 
98
- # 运行一个 keyed case
99
- npx niceeval exp local swelancer/15193
106
+ # 运行对象导出里的一条
107
+ pnpm exec niceeval exp local swelancer/15193
100
108
  ```
101
109
 
102
- ## 测试集 vs 独立文件
110
+ 跑完后用 `pnpm exec niceeval show` 在终端查看结果,或用 `pnpm exec niceeval view` 在浏览器里查看。每条样例都是独立的评估用例,失败的那几条会单独列出。
111
+
112
+ ## 选择测试集还是独立文件
103
113
 
104
114
  <Tabs>
105
115
  <Tab title="使用测试集">
106
- case 结构完全一致,主要差异是输入和预期输出。
116
+ 每条样例的流程完全一样,只有输入和预期输出不同。
107
117
  </Tab>
108
118
  <Tab title="使用独立文件">
109
- 每个 case 有不同流程、不同断言或需要不同 agent 配置。
119
+ 每条有不同的流程、不同的断言,或需要不同的 Agent 配置。
110
120
  </Tab>
111
121
  </Tabs>
112
122
 
113
123
  <Tip>
114
- 测试集适合”横向覆盖”,独立评估用例文件适合”行为复杂”的场景。
124
+ 测试集适合用大量同类样例覆盖一个功能,独立的评估用例文件适合流程复杂的场景。
115
125
  </Tip>
@@ -1,32 +1,35 @@
1
1
  ---
2
- title: "运行前检查 Sandbox 计划"
2
+ title: "运行前检查 Sandbox 会怎样准备"
3
3
  sidebarTitle: "检查 Sandbox 计划"
4
- description: "用 niceeval debug 查看 Experiment、评估组、评估用例与 Agent 的实际 action 顺序和数值,而不创建运行资源。"
4
+ description: "用 niceeval debug 列出一条评估在 Sandbox 里会按什么顺序准备、安装、执行和收尾,以及每一步的实际参数,不创建任何资源。"
5
5
  ---
6
6
 
7
- `exp --dry` 适合确认运行矩阵。需要检查一条评估在 Sandbox 里会按什么顺序准备、安装、执行和收尾时,使用 `niceeval debug`。
7
+ 你在 Experiment、评估组和评估用例上都写了 `.before()`,又给 Agent 配了安装步骤。真正跑起来之前,你想确认这些步骤最终按什么顺序执行、每一步的参数是什么,而不是等 Sandbox 建好、装了五分钟依赖之后才发现顺序不对。
8
8
 
9
- ## 选择一个精确配对
9
+ `exp --dry` 告诉你会跑哪些评估、多少次。`niceeval debug` 更进一步:它列出某一条评估在 Sandbox 里的完整准备、安装、执行和收尾步骤,不创建任何 Sandbox,也不调用模型。
10
+
11
+ ## 选定一个 Experiment 和一条评估用例
12
+
13
+ `debug` 一次只看一个 Experiment 下的一条评估用例:
10
14
 
11
15
  ```sh
12
16
  pnpm exec niceeval debug compare/codex memory/commit0
13
17
  ```
14
18
 
15
- Experiment 和评估用例 selector 都必须唯一。精确 ID 优先;前缀命中多个候选时,CLI 会列出候选并停止。
19
+ 两个参数都必须只命中一个。精确 ID 优先;前缀命中多个时,CLI 会列出候选并停止,你从中复制完整 ID 再运行一次。
16
20
 
17
- 评估用例只能从该 Experiment 已选择的范围中匹配。选择一个评估组成员不会把其它成员加入计划,但输出仍会显示评估组贡献的 action。
21
+ 评估用例只能从这个 Experiment 已经选中的范围里找。选中评估组里的一条时,计划不会把同组其它评估用例加进来,但仍会显示评估组贡献的准备步骤。
18
22
 
19
- ## 按顺序阅读计划
23
+ ## 按顺序读计划
20
24
 
21
- Human 输出使用分层框,不把所有步骤压成一段文本。顶层是 Experiment,下面按 lane、slot 和生命周期节点展开。每个 `sandbox.before` action 都显示:
25
+ 输出用分层的框展示:最外层是 Experiment,往里依次是每个 Attempt 和它的各个生命周期步骤。每个 `sandbox.before` 步骤会显示:
22
26
 
23
- - owner 与 action ID;
24
- - 拓扑执行序号和 occurrence 路径;
25
- - 用户填写的 `changeFrequency` 数值、来源和匹配的 preset;
26
- - 依赖、排序原因与当前固定的 `attempt` occurrence;
27
- - Provider 的缓存能力,以及尚未探测的运行时状态;
28
- - 由已链接 Action、顺序、依赖、state 与 fingerprint 得出的 `prefixIdentity`;
29
- - `cache.state` 的 `declared`、`cumulative`、`providerCoverage` 和 `barrier`。
27
+ - 这一步由谁声明(`owner`)和它的 ID(`action`);
28
+ - 它最终的执行序号,以及属于哪条评估用例;
29
+ - 你填写的 `changeFrequency` 数值、它从哪里来、对应哪个 preset;
30
+ - 它依赖哪些步骤、为什么排在这个位置,以及它在哪一层执行(`occurrence`,当前固定为 `attempt`);
31
+ - Provider 能不能缓存这一步,以及运行时还没有检查的缓存状态;
32
+ - 这一步能否从缓存恢复(`cache.state` 的 `declared`、`cumulative`、`providerCoverage` 和 `barrier`)。
30
33
 
31
34
  ```text
32
35
  ╭─ sandbox.before ───────────────────────────────── EXACT ─╮
@@ -44,33 +47,37 @@ Human 输出使用分层框,不把所有步骤压成一段文本。顶层是 E
44
47
  ╰─────────────────────────────────────────────────────────╯
45
48
  ```
46
49
 
47
- 数字是最终 linked schedule 的数字,不是只显示声明引入顺序。依赖永远优先;两个 ready action 数值相同时,才按 owner 与声明序稳定决定顺序。评估组的低频 action 因此可以排在 Experiment 的高频 action 前面。
50
+ `execution order` 是真实运行时的顺序,不是你在代码里写下的顺序。排序规则是:依赖总是先执行;几个步骤都可以执行时,`changeFrequency` 数值小的先执行;数值也相同时,按声明者和声明先后决定。所以评估组里很少变化的步骤,可以排在 Experiment 里经常变化的步骤前面。
51
+
52
+ ## 判断哪些步骤能从缓存恢复
53
+
54
+ - `declared` 是这一步自己声明会改变的状态。
55
+ - `cumulative` 包含它和它之前所有准备步骤会改变的状态。
56
+ - `providerCoverage` 说明 Provider 实际能恢复的范围。
57
+ - `barrier` 不是 `none` 时,输出还会给出 `barrierActionId`,指出第一个无法缓存的步骤。原因可能是它的状态声明是默认的 `all`、是 `opaque`,或者 Provider 不支持。这一步和它之后的所有步骤都会真实执行。
58
+
59
+ ## 确认命令和参数
48
60
 
49
- `declared` 是这个 Action 的完整状态承诺,`cumulative` 包含它之前的准备链。`providerCoverage`
50
- 说明 Provider 实际能恢复的范围。`barrier` 不是 `none` 时,输出还会给出 `barrierActionId`;它指出第一个
51
- 默认 `all`、`opaque` 或不受支持的 Action。该 Action 和所有后缀会真实执行。
61
+ 写死的命令步骤会显示命令的形状。普通的 callback 标为 `OPAQUE`,因为它只能在运行时执行,`debug` 看不到里面做了什么。
52
62
 
53
- 固定 action 会展示安全的命令形状。普通 callback 标为 `OPAQUE`,因为它只能在运行时执行。环境变量只显示 key 和摘要,stdin 只显示摘要与字节数。凭据值、stdin 原文和不安全的远端 locator 不会泄露到 Human 或 JSON 输出。
63
+ 环境变量只显示变量名和摘要,stdin 只显示摘要和字节数。凭据值、stdin 原文和不安全的远端地址不会出现在终端或 JSON 输出里。
54
64
 
55
- ## 给工具读取结构化计划
65
+ ## 让工具读取计划
56
66
 
57
67
  ```sh
58
68
  pnpm exec niceeval debug compare/codex memory/commit0 --json > debug-plan.json
59
69
  ```
60
70
 
61
- JSON 保留同一棵结构化计划,不包含终端框线。action 节点带 `declarationOrder`、`executionOrder`、
62
- `changeFrequency`、`dependencies`、`occurrence` 和 `cache`。
71
+ JSON 和终端输出是同一份计划,只是去掉了框线。每个步骤带 `declarationOrder`、`executionOrder`、`changeFrequency`、`dependencies`、`occurrence` 和 `cache`。
63
72
 
64
- `cache.state` 固定给出 `declared`、`cumulative`、`providerCoverage`、`barrier`,并在有 barrier 时给出
65
- `barrierActionId`;可确定的 Action 还给出 `cache.prefixIdentity`。`cache.lookup` 与
66
- `cache.runtime.finalKey` 固定是 `not-probed`,`cache.runtime.status` 是 `pending`,因为 debug 不读取运行时缓存 inventory。
73
+ `cache.state` 总会给出 `declared`、`cumulative`、`providerCoverage`、`barrier`,有 barrier 时再给出 `barrierActionId`;能确定的步骤还会给出 `cache.prefixIdentity`。`debug` 不读取运行时的缓存,所以 `cache.lookup` 与 `cache.runtime.finalKey` 总是 `not-probed`,`cache.runtime.status` 总是 `pending`。
67
74
 
68
- `debug` 只接受 `--json`;预算、重跑、并发等运行 flag 不适用于这个命令。
75
+ `debug` 只接受 `--json`。预算、重跑、并发这些运行参数对它不适用。
69
76
 
70
- ## 确认它不会执行资源操作
77
+ ## 它不会创建任何资源
71
78
 
72
- `debug` 不运行 before callback、test、after、ensure 或 Provider finalizer,也不创建 Invocation、Run、Record、锁、Sandbox 或构建任务。
79
+ `debug` 不运行 before callback、test、after、ensure 或 Provider 的收尾函数,也不创建 Run、锁、Sandbox 或构建任务,不写入结果文件。
73
80
 
74
- 它会加载受信任定义并执行 Experiment 的选择 predicate。Provider planner 也可能读取本地文件、调用只读 CLI 或查询远端控制面,因此仍应只在可信项目中运行。
81
+ 它会加载你的 Experiment 定义并执行 `evals` 选择函数。Provider 在规划时也可能读取本地文件、调用只读 CLI 或查询远端服务,所以仍然只在可信项目里运行它。
75
82
 
76
- 矩阵和 Attempt 数量先用[选择并预览运行范围](/zh/tutorials/select-and-preview)确认。真实执行失败后需要进入保留现场时,使用[保留 Sandbox 现场排查问题](/zh/troubleshooting/debug-sandbox)。
83
+ 要确认跑哪些题、每题跑几次,用[运行前确认跑哪些、跑几次](/zh/tutorials/select-and-preview)。真实运行失败后需要进入现场时,用[保留 Sandbox 现场排查问题](/zh/troubleshooting/debug-sandbox)。