evalkit-py 0.2.0.dev12__py3-none-any.whl

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 (371) hide show
  1. evalkit/__init__.py +0 -0
  2. evalkit/api/__init__.py +0 -0
  3. evalkit/api/access.py +74 -0
  4. evalkit/api/agents.py +159 -0
  5. evalkit/api/app.py +360 -0
  6. evalkit/api/auth.py +225 -0
  7. evalkit/api/cli_dist.py +10 -0
  8. evalkit/api/datasets.py +169 -0
  9. evalkit/api/deps.py +79 -0
  10. evalkit/api/download.py +15 -0
  11. evalkit/api/evaluators.py +121 -0
  12. evalkit/api/experiments.py +616 -0
  13. evalkit/api/fixtures.py +95 -0
  14. evalkit/api/harness_check.py +48 -0
  15. evalkit/api/imports.py +180 -0
  16. evalkit/api/limits.py +84 -0
  17. evalkit/api/llm_providers.py +120 -0
  18. evalkit/api/mcp/__init__.py +0 -0
  19. evalkit/api/mcp/auth.py +100 -0
  20. evalkit/api/mcp/descriptions.py +336 -0
  21. evalkit/api/mcp/models.py +259 -0
  22. evalkit/api/mcp/server.py +101 -0
  23. evalkit/api/mcp/tools.py +844 -0
  24. evalkit/api/meta.py +19 -0
  25. evalkit/api/otel.py +350 -0
  26. evalkit/api/pull.py +197 -0
  27. evalkit/api/review.py +271 -0
  28. evalkit/api/runs.py +555 -0
  29. evalkit/api/server_keys.py +44 -0
  30. evalkit/api/tokens.py +51 -0
  31. evalkit/api/trace_imports.py +173 -0
  32. evalkit/api/trace_sources.py +49 -0
  33. evalkit/api/traces.py +196 -0
  34. evalkit/api/users.py +72 -0
  35. evalkit/api/workspaces.py +131 -0
  36. evalkit/bundled/contracts/atif-accepted.json +5 -0
  37. evalkit/bundled/contracts/custom-evaluator-api-v1.json +243 -0
  38. evalkit/bundled/contracts/harness-api-v1.json +938 -0
  39. evalkit/bundled/contracts/span-mapping-v1.json +314 -0
  40. evalkit/bundled/docs/concepts.md +26 -0
  41. evalkit/bundled/docs/config.md +38 -0
  42. evalkit/bundled/docs/harness-api.md +44 -0
  43. evalkit/bundled/docs/install.md +60 -0
  44. evalkit/bundled/docs/login.md +36 -0
  45. evalkit/bundled/docs/mappings.md +136 -0
  46. evalkit/bundled/docs/mcp.md +44 -0
  47. evalkit/bundled/docs/quickstart.md +142 -0
  48. evalkit/bundled/docs/sdk-runs.md +171 -0
  49. evalkit/bundled/docs/tracing.md +171 -0
  50. evalkit/bundled/docs/try-locally.md +288 -0
  51. evalkit/bundled/docs/workspaces.md +45 -0
  52. evalkit/bundled/skills/authoring-eval-cases/SKILL.md +387 -0
  53. evalkit/bundled/skills/authoring-eval-cases/references/overlays.md +83 -0
  54. evalkit/bundled/skills/authoring-eval-cases/references/tool-checks.md +71 -0
  55. evalkit/bundled/skills/connect-traces/SKILL.md +296 -0
  56. evalkit/bundled/skills/connect-traces/references/gen_ai.json +42 -0
  57. evalkit/bundled/skills/connect-traces/references/openinference.json +35 -0
  58. evalkit/bundled/skills/connect-traces/references/span-mapping-schema.md +88 -0
  59. evalkit/bundled/skills/eval-driven-development/SKILL.md +458 -0
  60. evalkit/bundled/skills/eval-driven-development/references/analyze-run.md +97 -0
  61. evalkit/bundled/skills/eval-driven-development/references/diagnose.md +130 -0
  62. evalkit/bundled/skills/eval-driven-development/references/synthesize-cases.md +87 -0
  63. evalkit/bundled/skills/eval-driven-development/references/synthesize.md +165 -0
  64. evalkit/bundled/skills/evalkit-deployment/SKILL.md +332 -0
  65. evalkit/bundled/skills/evalkit-deployment/config.example.yaml +49 -0
  66. evalkit/bundled/skills/evalkit-deployment/docker-compose.yml +51 -0
  67. evalkit/bundled/skills/evalkit-deployment/references/config-and-deploy.md +333 -0
  68. evalkit/bundled/skills/evalkit-deployment/references/harness-api.md +139 -0
  69. evalkit/bundled/skills/evalkit-deployment/try/.env.example +11 -0
  70. evalkit/bundled/skills/evalkit-deployment/try/agent.py +131 -0
  71. evalkit/bundled/skills/evalkit-deployment/try/cases/acme/balance-sheet/cases.yaml +25 -0
  72. evalkit/bundled/skills/evalkit-deployment/try/cases/acme/income-statement/cases.yaml +43 -0
  73. evalkit/bundled/skills/evalkit-deployment/try/config.yaml +17 -0
  74. evalkit/bundled/skills/evalkit-deployment/try/docker-compose.yml +82 -0
  75. evalkit/bundled/skills/evalkit-deployment/try/evalkit.yaml +4 -0
  76. evalkit/bundled/skills/evalkit-deployment/try/mapping.json +42 -0
  77. evalkit/bundled/skills/evalkit-deployment/try/run.py +33 -0
  78. evalkit/bundled/skills/evalkit-usage/SKILL.md +509 -0
  79. evalkit/bundled/skills/evalkit-usage/references/suite-fixtures.md +42 -0
  80. evalkit/bundled/ui/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  81. evalkit/bundled/ui/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  82. evalkit/bundled/ui/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  83. evalkit/bundled/ui/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  84. evalkit/bundled/ui/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  85. evalkit/bundled/ui/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  86. evalkit/bundled/ui/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  87. evalkit/bundled/ui/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  88. evalkit/bundled/ui/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  89. evalkit/bundled/ui/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  90. evalkit/bundled/ui/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  91. evalkit/bundled/ui/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  92. evalkit/bundled/ui/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  93. evalkit/bundled/ui/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  94. evalkit/bundled/ui/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  95. evalkit/bundled/ui/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  96. evalkit/bundled/ui/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  97. evalkit/bundled/ui/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  98. evalkit/bundled/ui/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  99. evalkit/bundled/ui/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  100. evalkit/bundled/ui/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  101. evalkit/bundled/ui/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  102. evalkit/bundled/ui/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  103. evalkit/bundled/ui/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  104. evalkit/bundled/ui/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  105. evalkit/bundled/ui/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  106. evalkit/bundled/ui/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  107. evalkit/bundled/ui/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  108. evalkit/bundled/ui/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  109. evalkit/bundled/ui/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  110. evalkit/bundled/ui/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  111. evalkit/bundled/ui/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  112. evalkit/bundled/ui/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  113. evalkit/bundled/ui/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  114. evalkit/bundled/ui/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  115. evalkit/bundled/ui/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  116. evalkit/bundled/ui/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  117. evalkit/bundled/ui/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  118. evalkit/bundled/ui/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  119. evalkit/bundled/ui/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  120. evalkit/bundled/ui/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  121. evalkit/bundled/ui/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  122. evalkit/bundled/ui/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  123. evalkit/bundled/ui/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  124. evalkit/bundled/ui/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  125. evalkit/bundled/ui/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  126. evalkit/bundled/ui/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  127. evalkit/bundled/ui/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  128. evalkit/bundled/ui/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  129. evalkit/bundled/ui/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  130. evalkit/bundled/ui/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  131. evalkit/bundled/ui/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  132. evalkit/bundled/ui/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  133. evalkit/bundled/ui/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  134. evalkit/bundled/ui/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  135. evalkit/bundled/ui/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  136. evalkit/bundled/ui/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  137. evalkit/bundled/ui/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  138. evalkit/bundled/ui/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  139. evalkit/bundled/ui/assets/abap-08VXUWAP.js +1 -0
  140. evalkit/bundled/ui/assets/apex-BWPQTe0t.js +1 -0
  141. evalkit/bundled/ui/assets/azcli-Bc_sGQ0U.js +1 -0
  142. evalkit/bundled/ui/assets/bat-i0X4ZdIN.js +1 -0
  143. evalkit/bundled/ui/assets/bicep-B5-_aFwp.js +2 -0
  144. evalkit/bundled/ui/assets/cameligo-DMUM7wLl.js +1 -0
  145. evalkit/bundled/ui/assets/clojure-Cm7r79vr.js +1 -0
  146. evalkit/bundled/ui/assets/codicon-DF1abBS2.ttf +0 -0
  147. evalkit/bundled/ui/assets/coffee-Ba7i2nA0.js +1 -0
  148. evalkit/bundled/ui/assets/cpp-C7h46wYY.js +1 -0
  149. evalkit/bundled/ui/assets/csharp-BKxtCVv1.js +1 -0
  150. evalkit/bundled/ui/assets/csp-bTuwJoIa.js +1 -0
  151. evalkit/bundled/ui/assets/css-DIMkf-bt.js +3 -0
  152. evalkit/bundled/ui/assets/css.worker-DwfUZ3fB.js +96 -0
  153. evalkit/bundled/ui/assets/cssMode-C97l1pbB.js +1 -0
  154. evalkit/bundled/ui/assets/cypher-CVaqCwHa.js +1 -0
  155. evalkit/bundled/ui/assets/dart-onAF5SnQ.js +1 -0
  156. evalkit/bundled/ui/assets/dockerfile-DZFCIeNp.js +1 -0
  157. evalkit/bundled/ui/assets/ecl-94qehhXe.js +1 -0
  158. evalkit/bundled/ui/assets/editor-DjpsE8to.css +1 -0
  159. evalkit/bundled/ui/assets/editor.api-NTesIxw5.js +908 -0
  160. evalkit/bundled/ui/assets/editor.worker-CRz__AKW.js +33 -0
  161. evalkit/bundled/ui/assets/elixir-6RTg0lbw.js +1 -0
  162. evalkit/bundled/ui/assets/flow9-C5_-GSwl.js +1 -0
  163. evalkit/bundled/ui/assets/freemarker2-BWqEFagp.js +3 -0
  164. evalkit/bundled/ui/assets/fsharp-C8Ef5oNN.js +1 -0
  165. evalkit/bundled/ui/assets/go-C-y9NEjX.js +1 -0
  166. evalkit/bundled/ui/assets/graphql-fmXr3nnJ.js +1 -0
  167. evalkit/bundled/ui/assets/handlebars-DkIF-whN.js +1 -0
  168. evalkit/bundled/ui/assets/hcl-CpzslTdj.js +1 -0
  169. evalkit/bundled/ui/assets/html-C_rpeQXJ.js +1 -0
  170. evalkit/bundled/ui/assets/html.worker-D9ugpX4y.js +509 -0
  171. evalkit/bundled/ui/assets/htmlMode-B0YIq3DF.js +1 -0
  172. evalkit/bundled/ui/assets/index-Cw-jBH6M.js +736 -0
  173. evalkit/bundled/ui/assets/index-DKtoQZtm.css +1 -0
  174. evalkit/bundled/ui/assets/ini-sBoK_t0W.js +1 -0
  175. evalkit/bundled/ui/assets/java-BEtHBSE6.js +1 -0
  176. evalkit/bundled/ui/assets/javascript-D4EGhYA6.js +1 -0
  177. evalkit/bundled/ui/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  178. evalkit/bundled/ui/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  179. evalkit/bundled/ui/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  180. evalkit/bundled/ui/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  181. evalkit/bundled/ui/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  182. evalkit/bundled/ui/assets/json.worker-CV9fqkUp.js +65 -0
  183. evalkit/bundled/ui/assets/jsonMode-pQjSfIH6.js +7 -0
  184. evalkit/bundled/ui/assets/julia-Bri6UV-V.js +1 -0
  185. evalkit/bundled/ui/assets/kotlin-BOotOW0E.js +1 -0
  186. evalkit/bundled/ui/assets/less-B9JPFI3C.js +2 -0
  187. evalkit/bundled/ui/assets/lexon-CfSJPG6W.js +1 -0
  188. evalkit/bundled/ui/assets/liquid-DbrvoYjD.js +1 -0
  189. evalkit/bundled/ui/assets/lspLanguageFeatures-D0B7cH6y.js +4 -0
  190. evalkit/bundled/ui/assets/lua-CsQS60Ue.js +1 -0
  191. evalkit/bundled/ui/assets/m3-D-oSqn_W.js +1 -0
  192. evalkit/bundled/ui/assets/markdown-Cimd5fb3.js +1 -0
  193. evalkit/bundled/ui/assets/mdx-B0HrujLR.js +1 -0
  194. evalkit/bundled/ui/assets/mips-CIPQ_RoX.js +1 -0
  195. evalkit/bundled/ui/assets/monacoEditor-DsoPncxW.js +68 -0
  196. evalkit/bundled/ui/assets/monacoEditor-n7clI0si.css +1 -0
  197. evalkit/bundled/ui/assets/msdax-DauUninz.js +1 -0
  198. evalkit/bundled/ui/assets/mysql-SOo6toE5.js +1 -0
  199. evalkit/bundled/ui/assets/objective-c-FvmIjYaQ.js +1 -0
  200. evalkit/bundled/ui/assets/pascal-DrH0SRf2.js +1 -0
  201. evalkit/bundled/ui/assets/pascaligo-D-ptJ9y-.js +1 -0
  202. evalkit/bundled/ui/assets/perl-oz_6vUea.js +1 -0
  203. evalkit/bundled/ui/assets/pgsql-DTj74zXo.js +1 -0
  204. evalkit/bundled/ui/assets/php-nr791fC2.js +1 -0
  205. evalkit/bundled/ui/assets/pla-CopQ2nXW.js +1 -0
  206. evalkit/bundled/ui/assets/postiats-43DmfD33.js +1 -0
  207. evalkit/bundled/ui/assets/powerquery-D3hlyOfw.js +1 -0
  208. evalkit/bundled/ui/assets/powershell-DmHpPYUd.js +1 -0
  209. evalkit/bundled/ui/assets/protobuf-C531GsRP.js +2 -0
  210. evalkit/bundled/ui/assets/pug-Z5eAx3Zn.js +1 -0
  211. evalkit/bundled/ui/assets/python-CieHVM9n.js +1 -0
  212. evalkit/bundled/ui/assets/qsharp-DkqhCAOL.js +1 -0
  213. evalkit/bundled/ui/assets/r-BwWrilGY.js +1 -0
  214. evalkit/bundled/ui/assets/razor-sLewSMyp.js +1 -0
  215. evalkit/bundled/ui/assets/redis-ClamHrr6.js +1 -0
  216. evalkit/bundled/ui/assets/redshift-DT7zqm-g.js +1 -0
  217. evalkit/bundled/ui/assets/restructuredtext-BYgofb2h.js +1 -0
  218. evalkit/bundled/ui/assets/ruby-DezsRK8O.js +1 -0
  219. evalkit/bundled/ui/assets/rust-DdL9SqIa.js +1 -0
  220. evalkit/bundled/ui/assets/sb-CcwsVR0C.js +1 -0
  221. evalkit/bundled/ui/assets/scala-DHpiXF5c.js +1 -0
  222. evalkit/bundled/ui/assets/scheme-BeGwcela.js +1 -0
  223. evalkit/bundled/ui/assets/scss-gp-XZpBa.js +3 -0
  224. evalkit/bundled/ui/assets/shell-CC2rA5mh.js +1 -0
  225. evalkit/bundled/ui/assets/solidity-BEEn4gHE.js +1 -0
  226. evalkit/bundled/ui/assets/sophia-CRfGWb83.js +1 -0
  227. evalkit/bundled/ui/assets/sparql-D_Lu-MrJ.js +1 -0
  228. evalkit/bundled/ui/assets/sql-NEE52Syq.js +1 -0
  229. evalkit/bundled/ui/assets/st-DbInun42.js +1 -0
  230. evalkit/bundled/ui/assets/swift-Bxkupp3x.js +1 -0
  231. evalkit/bundled/ui/assets/systemverilog-Bz4Y3fRF.js +1 -0
  232. evalkit/bundled/ui/assets/tcl-DISqw1ZD.js +1 -0
  233. evalkit/bundled/ui/assets/ts.worker-DIAQkoB3.js +67741 -0
  234. evalkit/bundled/ui/assets/tsMode-BcVQ1nu0.js +11 -0
  235. evalkit/bundled/ui/assets/twig-De2hgUGE.js +1 -0
  236. evalkit/bundled/ui/assets/typescript-CUvNWd9p.js +1 -0
  237. evalkit/bundled/ui/assets/typespec-B8J7ngcE.js +1 -0
  238. evalkit/bundled/ui/assets/vb-DV3o63ZY.js +1 -0
  239. evalkit/bundled/ui/assets/wgsl-DpFanUEy.js +298 -0
  240. evalkit/bundled/ui/assets/workers-CwpYQtzp.js +1 -0
  241. evalkit/bundled/ui/assets/xml-C1HnXMdF.js +1 -0
  242. evalkit/bundled/ui/assets/yaml-D7Ey3HQu.js +1 -0
  243. evalkit/bundled/ui/favicon.svg +6 -0
  244. evalkit/bundled/ui/index.html +14 -0
  245. evalkit/cli/__init__.py +0 -0
  246. evalkit/cli/admin_commands.py +590 -0
  247. evalkit/cli/client.py +67 -0
  248. evalkit/cli/init_server.py +165 -0
  249. evalkit/cli/local_run.py +195 -0
  250. evalkit/cli/main.py +1365 -0
  251. evalkit/cli/runs_commands.py +539 -0
  252. evalkit/cli/server_commands.py +130 -0
  253. evalkit/cli/skill_targets.py +43 -0
  254. evalkit/cli/tokens_commands.py +52 -0
  255. evalkit/cli/traces_commands.py +332 -0
  256. evalkit/cli/update.py +85 -0
  257. evalkit/client/__init__.py +0 -0
  258. evalkit/client/agents.py +25 -0
  259. evalkit/client/api.py +193 -0
  260. evalkit/client/blob.py +104 -0
  261. evalkit/client/connection.py +88 -0
  262. evalkit/client/evaluators.py +11 -0
  263. evalkit/client/sessions.py +17 -0
  264. evalkit/client/store.py +139 -0
  265. evalkit/client/summary.py +46 -0
  266. evalkit/client/sync.py +198 -0
  267. evalkit/config.py +227 -0
  268. evalkit/contracts/__init__.py +0 -0
  269. evalkit/contracts/atif.py +115 -0
  270. evalkit/contracts/cases.py +456 -0
  271. evalkit/contracts/custom_evaluator.py +58 -0
  272. evalkit/contracts/enums.py +86 -0
  273. evalkit/contracts/esf.py +120 -0
  274. evalkit/contracts/harness.py +281 -0
  275. evalkit/contracts/notes.json +4 -0
  276. evalkit/contracts/notes.py +7 -0
  277. evalkit/contracts/settings.py +41 -0
  278. evalkit/core/__init__.py +0 -0
  279. evalkit/core/access.py +75 -0
  280. evalkit/core/agents.py +65 -0
  281. evalkit/core/blob.py +46 -0
  282. evalkit/core/capabilities.py +36 -0
  283. evalkit/core/costmap.py +90 -0
  284. evalkit/core/custom_eval.py +50 -0
  285. evalkit/core/data/cost_map.json +81546 -0
  286. evalkit/core/endpoints.py +31 -0
  287. evalkit/core/evaluators/__init__.py +29 -0
  288. evalkit/core/evaluators/base.py +121 -0
  289. evalkit/core/evaluators/gauges.py +84 -0
  290. evalkit/core/evaluators/presentation.py +166 -0
  291. evalkit/core/evaluators/response_time.py +21 -0
  292. evalkit/core/evaluators/rubrics.py +494 -0
  293. evalkit/core/evaluators/tool_trajectory.py +187 -0
  294. evalkit/core/evaluators/trajectory_rubrics.py +198 -0
  295. evalkit/core/fixtures.py +57 -0
  296. evalkit/core/harness.py +227 -0
  297. evalkit/core/harness_check.py +191 -0
  298. evalkit/core/importer.py +257 -0
  299. evalkit/core/judge.py +78 -0
  300. evalkit/core/lint.py +265 -0
  301. evalkit/core/overlays.py +76 -0
  302. evalkit/core/paths.py +25 -0
  303. evalkit/core/promotion.py +94 -0
  304. evalkit/core/pull.py +198 -0
  305. evalkit/core/python_eval.py +59 -0
  306. evalkit/core/remote_evaluators.py +32 -0
  307. evalkit/core/review.py +220 -0
  308. evalkit/core/run_digest.py +421 -0
  309. evalkit/core/runner.py +995 -0
  310. evalkit/core/scorecard.py +255 -0
  311. evalkit/core/traces/__init__.py +0 -0
  312. evalkit/core/traces/convert.py +336 -0
  313. evalkit/core/traces/importer.py +113 -0
  314. evalkit/core/traces/mapping.py +385 -0
  315. evalkit/core/traces/poll.py +38 -0
  316. evalkit/core/traces/raw.py +21 -0
  317. evalkit/core/traces/sessions.py +172 -0
  318. evalkit/core/traces/settle.py +14 -0
  319. evalkit/core/traces/sources/__init__.py +19 -0
  320. evalkit/core/traces/sources/base.py +25 -0
  321. evalkit/core/traces/sources/phoenix.py +121 -0
  322. evalkit/core/trajectory.py +248 -0
  323. evalkit/core/workspace.py +30 -0
  324. evalkit/credentials.py +119 -0
  325. evalkit/db/__init__.py +0 -0
  326. evalkit/db/agents.py +289 -0
  327. evalkit/db/alembic/env.py +90 -0
  328. evalkit/db/alembic/script.py.mako +28 -0
  329. evalkit/db/alembic/versions/0011_baseline.py +1002 -0
  330. evalkit/db/alembic/versions/0012_ticket_token_kind.py +27 -0
  331. evalkit/db/alembic/versions/0013_keys_and_llm_providers.py +67 -0
  332. evalkit/db/cases.py +608 -0
  333. evalkit/db/crypto.py +12 -0
  334. evalkit/db/evaluators.py +156 -0
  335. evalkit/db/experiments.py +363 -0
  336. evalkit/db/fixture_blobs.py +91 -0
  337. evalkit/db/keys.py +78 -0
  338. evalkit/db/llm_providers.py +176 -0
  339. evalkit/db/locks.py +6 -0
  340. evalkit/db/mappings.py +168 -0
  341. evalkit/db/models.py +567 -0
  342. evalkit/db/promotion.py +271 -0
  343. evalkit/db/rekey.py +46 -0
  344. evalkit/db/review.py +250 -0
  345. evalkit/db/review_state.py +50 -0
  346. evalkit/db/runs.py +533 -0
  347. evalkit/db/scorecard.py +300 -0
  348. evalkit/db/session.py +71 -0
  349. evalkit/db/sessions.py +90 -0
  350. evalkit/db/spans.py +360 -0
  351. evalkit/db/store.py +209 -0
  352. evalkit/db/tokens.py +100 -0
  353. evalkit/db/trace_imports.py +308 -0
  354. evalkit/db/trace_sources.py +131 -0
  355. evalkit/db/users.py +186 -0
  356. evalkit/db/workspaces.py +232 -0
  357. evalkit/paths.py +33 -0
  358. evalkit/sdk/__init__.py +29 -0
  359. evalkit/sdk/binding.py +69 -0
  360. evalkit/sdk/evaluators.py +56 -0
  361. evalkit/sdk/runner.py +957 -0
  362. evalkit/sdk/tracing.py +166 -0
  363. evalkit/store/__init__.py +0 -0
  364. evalkit/store/base.py +354 -0
  365. evalkit/store/blob.py +69 -0
  366. evalkit/version.py +44 -0
  367. evalkit_py-0.2.0.dev12.dist-info/METADATA +205 -0
  368. evalkit_py-0.2.0.dev12.dist-info/RECORD +371 -0
  369. evalkit_py-0.2.0.dev12.dist-info/WHEEL +4 -0
  370. evalkit_py-0.2.0.dev12.dist-info/entry_points.txt +2 -0
  371. evalkit_py-0.2.0.dev12.dist-info/licenses/LICENSE +661 -0
@@ -0,0 +1,938 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "evalkit Harness API",
5
+ "version": "v1",
6
+ "description": "The HTTP contract a client's agent harness implements so evalkit can drive it. evalkit is the caller; the harness is the server. Trajectories are ATIF documents \u2014 accepted schema_version values ship in atif-accepted.json."
7
+ },
8
+ "security": [
9
+ {
10
+ "apiKeyAuth": []
11
+ }
12
+ ],
13
+ "paths": {
14
+ "/capabilities": {
15
+ "get": {
16
+ "summary": "Self-declared capabilities, snapshotted per experiment",
17
+ "responses": {
18
+ "200": {
19
+ "description": "Capabilities",
20
+ "content": {
21
+ "application/json": {
22
+ "schema": {
23
+ "$ref": "#/components/schemas/Capabilities"
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
+ },
31
+ "/runs": {
32
+ "post": {
33
+ "summary": "Start one agent run in a fresh session",
34
+ "requestBody": {
35
+ "required": true,
36
+ "content": {
37
+ "application/json": {
38
+ "schema": {
39
+ "$ref": "#/components/schemas/RunRequest"
40
+ }
41
+ },
42
+ "multipart/form-data": {
43
+ "schema": {
44
+ "type": "object",
45
+ "description": "Used when the case has fixture files and the harness accepts `files` but not `file_urls`: a `payload` JSON part plus one part per file. When `accepts.file_urls`, the JSON body carries `files: [{name, url}]` instead and no bytes are uploaded.",
46
+ "properties": {
47
+ "payload": {
48
+ "$ref": "#/components/schemas/RunRequest"
49
+ },
50
+ "files": {
51
+ "type": "array",
52
+ "items": {
53
+ "type": "string",
54
+ "format": "binary"
55
+ }
56
+ }
57
+ },
58
+ "required": [
59
+ "payload"
60
+ ]
61
+ }
62
+ }
63
+ }
64
+ },
65
+ "responses": {
66
+ "201": {
67
+ "description": "Run created",
68
+ "content": {
69
+ "application/json": {
70
+ "schema": {
71
+ "$ref": "#/components/schemas/RunCreated"
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ },
78
+ "get": {
79
+ "summary": "List runs/sessions (capability: run_listing)",
80
+ "parameters": [
81
+ {
82
+ "name": "query",
83
+ "in": "query",
84
+ "required": false,
85
+ "schema": {
86
+ "description": "Free-text filter over runs. Text that looks like an id (8 or more hex characters; dashes and case ignored) matches runs whose id starts with it. Any other text matches runs whose title contains it, case-insensitive.",
87
+ "type": "string"
88
+ }
89
+ },
90
+ {
91
+ "name": "user_id",
92
+ "in": "query",
93
+ "required": false,
94
+ "schema": {
95
+ "description": "Filter to one user's runs.",
96
+ "type": "string"
97
+ }
98
+ },
99
+ {
100
+ "name": "client_id",
101
+ "in": "query",
102
+ "required": false,
103
+ "schema": {
104
+ "description": "Filter to one client's runs.",
105
+ "type": "string"
106
+ }
107
+ },
108
+ {
109
+ "name": "limit",
110
+ "in": "query",
111
+ "required": false,
112
+ "schema": {
113
+ "default": 50,
114
+ "description": "Page size.",
115
+ "type": "integer"
116
+ }
117
+ },
118
+ {
119
+ "name": "offset",
120
+ "in": "query",
121
+ "required": false,
122
+ "schema": {
123
+ "default": 0,
124
+ "description": "Page start.",
125
+ "type": "integer"
126
+ }
127
+ },
128
+ {
129
+ "name": "since",
130
+ "in": "query",
131
+ "required": false,
132
+ "schema": {
133
+ "description": "Only runs created at or after this time (ISO 8601).",
134
+ "format": "date-time",
135
+ "type": "string"
136
+ }
137
+ },
138
+ {
139
+ "name": "until",
140
+ "in": "query",
141
+ "required": false,
142
+ "schema": {
143
+ "description": "Only runs created before this time (ISO 8601).",
144
+ "format": "date-time",
145
+ "type": "string"
146
+ }
147
+ }
148
+ ],
149
+ "responses": {
150
+ "200": {
151
+ "description": "Run listing",
152
+ "content": {
153
+ "application/json": {
154
+ "schema": {
155
+ "$ref": "#/components/schemas/RunList"
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ },
163
+ "/runs/{run_id}": {
164
+ "get": {
165
+ "summary": "Poll run status until terminal",
166
+ "parameters": [
167
+ {
168
+ "name": "run_id",
169
+ "in": "path",
170
+ "required": true,
171
+ "schema": {
172
+ "type": "string"
173
+ }
174
+ }
175
+ ],
176
+ "responses": {
177
+ "200": {
178
+ "description": "Run status",
179
+ "content": {
180
+ "application/json": {
181
+ "schema": {
182
+ "$ref": "#/components/schemas/RunStatus"
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ },
190
+ "/runs/{run_id}/stop": {
191
+ "post": {
192
+ "summary": "Cancel a run (capability: accepts.stop; called on timeout)",
193
+ "parameters": [
194
+ {
195
+ "name": "run_id",
196
+ "in": "path",
197
+ "required": true,
198
+ "schema": {
199
+ "type": "string"
200
+ }
201
+ }
202
+ ],
203
+ "responses": {
204
+ "200": {
205
+ "description": "Stop acknowledged"
206
+ }
207
+ }
208
+ }
209
+ },
210
+ "/runs/{run_id}/trajectory": {
211
+ "get": {
212
+ "summary": "The run's trajectory as an ATIF document",
213
+ "description": "Only meaningful after a terminal status. evalkit fetches it once, validates it against the ATIF required subset, and persists it. Schema: ATIF (Harbor framework); accepted versions in atif-accepted.json.",
214
+ "parameters": [
215
+ {
216
+ "name": "run_id",
217
+ "in": "path",
218
+ "required": true,
219
+ "schema": {
220
+ "type": "string"
221
+ }
222
+ }
223
+ ],
224
+ "responses": {
225
+ "200": {
226
+ "description": "ATIF trajectory document",
227
+ "content": {
228
+ "application/json": {
229
+ "schema": {
230
+ "type": "object"
231
+ }
232
+ }
233
+ }
234
+ }
235
+ }
236
+ }
237
+ },
238
+ "/runs/{run_id}/files": {
239
+ "get": {
240
+ "summary": "Workspace listing (capability: workspace)",
241
+ "parameters": [
242
+ {
243
+ "name": "run_id",
244
+ "in": "path",
245
+ "required": true,
246
+ "schema": {
247
+ "type": "string"
248
+ }
249
+ }
250
+ ],
251
+ "responses": {
252
+ "200": {
253
+ "description": "Workspace files",
254
+ "content": {
255
+ "application/json": {
256
+ "schema": {
257
+ "$ref": "#/components/schemas/FileList"
258
+ }
259
+ }
260
+ }
261
+ }
262
+ }
263
+ }
264
+ },
265
+ "/runs/{run_id}/files/{path}": {
266
+ "get": {
267
+ "summary": "Workspace file bytes (capability: workspace)",
268
+ "parameters": [
269
+ {
270
+ "name": "run_id",
271
+ "in": "path",
272
+ "required": true,
273
+ "schema": {
274
+ "type": "string"
275
+ }
276
+ },
277
+ {
278
+ "name": "path",
279
+ "in": "path",
280
+ "required": true,
281
+ "schema": {
282
+ "type": "string"
283
+ }
284
+ }
285
+ ],
286
+ "responses": {
287
+ "200": {
288
+ "description": "File bytes",
289
+ "content": {
290
+ "application/octet-stream": {
291
+ "schema": {
292
+ "type": "string",
293
+ "format": "binary"
294
+ }
295
+ }
296
+ }
297
+ }
298
+ }
299
+ }
300
+ }
301
+ },
302
+ "components": {
303
+ "schemas": {
304
+ "Accepts": {
305
+ "additionalProperties": true,
306
+ "properties": {
307
+ "files": {
308
+ "default": false,
309
+ "description": "POST /runs accepts multipart file attachments.",
310
+ "title": "Files",
311
+ "type": "boolean"
312
+ },
313
+ "file_urls": {
314
+ "default": false,
315
+ "description": "POST /runs (JSON body) accepts `files: [{name, url}]` and the harness fetches each url itself. Preferred over multipart when both are declared. The url is evalkit's blob store url plus the object key (e.g. s3://bucket/fixtures/<key>); the harness must have access to it.",
316
+ "title": "File Urls",
317
+ "type": "boolean"
318
+ },
319
+ "model_override": {
320
+ "default": false,
321
+ "description": "POST /runs honours the 'model' field.",
322
+ "title": "Model Override",
323
+ "type": "boolean"
324
+ },
325
+ "stop": {
326
+ "default": false,
327
+ "description": "POST /runs/{id}/stop is implemented.",
328
+ "title": "Stop",
329
+ "type": "boolean"
330
+ }
331
+ },
332
+ "title": "Accepts",
333
+ "type": "object"
334
+ },
335
+ "ArtifactRef": {
336
+ "additionalProperties": true,
337
+ "properties": {
338
+ "name": {
339
+ "description": "Artifact display name.",
340
+ "title": "Name",
341
+ "type": "string"
342
+ },
343
+ "path": {
344
+ "anyOf": [
345
+ {
346
+ "type": "string"
347
+ },
348
+ {
349
+ "type": "null"
350
+ }
351
+ ],
352
+ "default": null,
353
+ "description": "Workspace path, fetchable via the files endpoint.",
354
+ "title": "Path"
355
+ },
356
+ "content_type": {
357
+ "anyOf": [
358
+ {
359
+ "type": "string"
360
+ },
361
+ {
362
+ "type": "null"
363
+ }
364
+ ],
365
+ "default": null,
366
+ "description": "MIME type, if known.",
367
+ "title": "Content Type"
368
+ }
369
+ },
370
+ "required": [
371
+ "name"
372
+ ],
373
+ "title": "ArtifactRef",
374
+ "type": "object"
375
+ },
376
+ "Capabilities": {
377
+ "additionalProperties": true,
378
+ "properties": {
379
+ "contract_version": {
380
+ "default": "v1",
381
+ "description": "Harness API version this harness implements.",
382
+ "title": "Contract Version",
383
+ "type": "string"
384
+ },
385
+ "agent": {
386
+ "description": "Harness's own name for itself. Informational.",
387
+ "title": "Agent",
388
+ "type": "string"
389
+ },
390
+ "revision": {
391
+ "anyOf": [
392
+ {
393
+ "type": "string"
394
+ },
395
+ {
396
+ "type": "null"
397
+ }
398
+ ],
399
+ "default": null,
400
+ "description": "Optional. Git commit SHA of the deployed harness; evalkit records it on the experiment so results are traceable to a build.",
401
+ "title": "Revision"
402
+ },
403
+ "branch": {
404
+ "anyOf": [
405
+ {
406
+ "type": "string"
407
+ },
408
+ {
409
+ "type": "null"
410
+ }
411
+ ],
412
+ "default": null,
413
+ "description": "Optional. Git branch the deployed harness was built from.",
414
+ "title": "Branch"
415
+ },
416
+ "input_schema": {
417
+ "anyOf": [
418
+ {
419
+ "additionalProperties": true,
420
+ "type": "object"
421
+ },
422
+ {
423
+ "type": "null"
424
+ }
425
+ ],
426
+ "default": null,
427
+ "description": "Optional. JSON Schema (draft 2020-12 unless `$schema` says otherwise) of the run input this agent accepts. Excludes `files`, which evalkit sends separately. When absent, evalkit assumes the default question-and-answer schema: an object with a required string `question`. evalkit checks case inputs against the declared or default schema before running an experiment and in `evalkit lint --agent`.",
428
+ "title": "Input Schema"
429
+ },
430
+ "check_input": {
431
+ "anyOf": [
432
+ {
433
+ "additionalProperties": true,
434
+ "type": "object"
435
+ },
436
+ {
437
+ "type": "null"
438
+ }
439
+ ],
440
+ "default": null,
441
+ "description": "Optional. The run input `evalkit harness check` sends. Must pass input_schema, or the default question-and-answer schema when none is declared.",
442
+ "title": "Check Input"
443
+ },
444
+ "provides": {
445
+ "$ref": "#/components/schemas/Provides"
446
+ },
447
+ "accepts": {
448
+ "$ref": "#/components/schemas/Accepts"
449
+ },
450
+ "limits": {
451
+ "$ref": "#/components/schemas/Limits"
452
+ }
453
+ },
454
+ "required": [
455
+ "agent"
456
+ ],
457
+ "title": "Capabilities",
458
+ "type": "object"
459
+ },
460
+ "FileEntry": {
461
+ "additionalProperties": true,
462
+ "properties": {
463
+ "path": {
464
+ "description": "Workspace-relative path.",
465
+ "title": "Path",
466
+ "type": "string"
467
+ },
468
+ "size": {
469
+ "description": "Size in bytes.",
470
+ "title": "Size",
471
+ "type": "integer"
472
+ },
473
+ "content_type": {
474
+ "anyOf": [
475
+ {
476
+ "type": "string"
477
+ },
478
+ {
479
+ "type": "null"
480
+ }
481
+ ],
482
+ "default": null,
483
+ "description": "MIME type, if known.",
484
+ "title": "Content Type"
485
+ }
486
+ },
487
+ "required": [
488
+ "path",
489
+ "size"
490
+ ],
491
+ "title": "FileEntry",
492
+ "type": "object"
493
+ },
494
+ "FileList": {
495
+ "additionalProperties": true,
496
+ "properties": {
497
+ "files": {
498
+ "description": "Workspace listing.",
499
+ "items": {
500
+ "$ref": "#/components/schemas/FileEntry"
501
+ },
502
+ "title": "Files",
503
+ "type": "array"
504
+ }
505
+ },
506
+ "required": [
507
+ "files"
508
+ ],
509
+ "title": "FileList",
510
+ "type": "object"
511
+ },
512
+ "FileRef": {
513
+ "additionalProperties": true,
514
+ "properties": {
515
+ "name": {
516
+ "description": "File name to present to the agent \u2014 the fixture key.",
517
+ "title": "Name",
518
+ "type": "string"
519
+ },
520
+ "url": {
521
+ "anyOf": [
522
+ {
523
+ "type": "string"
524
+ },
525
+ {
526
+ "type": "null"
527
+ }
528
+ ],
529
+ "default": null,
530
+ "description": "Where the harness fetches the bytes from. Present on a JSON request (accepts.file_urls); absent on multipart, where the bytes arrive as the part with this name. Opaque to evalkit's experiment runner; the UI still serves the same fixture via GET /api/fixtures/{name}.",
531
+ "title": "Url"
532
+ },
533
+ "context": {
534
+ "anyOf": [
535
+ {
536
+ "type": "string"
537
+ },
538
+ {
539
+ "type": "null"
540
+ }
541
+ ],
542
+ "default": null,
543
+ "description": "What the file holds, from the suite's fixture registry. evalkit no longer prepends it to input.question; show it to the agent however suits it.",
544
+ "title": "Context"
545
+ }
546
+ },
547
+ "required": [
548
+ "name"
549
+ ],
550
+ "title": "FileRef",
551
+ "type": "object"
552
+ },
553
+ "Limits": {
554
+ "additionalProperties": true,
555
+ "properties": {
556
+ "max_concurrent_runs": {
557
+ "anyOf": [
558
+ {
559
+ "type": "integer"
560
+ },
561
+ {
562
+ "type": "null"
563
+ }
564
+ ],
565
+ "default": null,
566
+ "description": "Harness-side cap. evalkit uses min(this, its own config).",
567
+ "title": "Max Concurrent Runs"
568
+ }
569
+ },
570
+ "title": "Limits",
571
+ "type": "object"
572
+ },
573
+ "Provides": {
574
+ "additionalProperties": true,
575
+ "properties": {
576
+ "trajectory": {
577
+ "default": false,
578
+ "description": "Can serve GET runs/{id}/trajectory at all.",
579
+ "title": "Trajectory",
580
+ "type": "boolean"
581
+ },
582
+ "tool_calls": {
583
+ "default": false,
584
+ "description": "Trajectory reliably contains tool calls.",
585
+ "title": "Tool Calls",
586
+ "type": "boolean"
587
+ },
588
+ "thinking": {
589
+ "default": false,
590
+ "description": "Trajectory reliably contains reasoning content.",
591
+ "title": "Thinking",
592
+ "type": "boolean"
593
+ },
594
+ "token_usage": {
595
+ "default": false,
596
+ "description": "Trajectory carries per-step token usage.",
597
+ "title": "Token Usage",
598
+ "type": "boolean"
599
+ },
600
+ "artifacts": {
601
+ "default": false,
602
+ "description": "Run status reports artifacts the agent produced.",
603
+ "title": "Artifacts",
604
+ "type": "boolean"
605
+ },
606
+ "workspace": {
607
+ "default": false,
608
+ "description": "Files endpoints are implemented.",
609
+ "title": "Workspace",
610
+ "type": "boolean"
611
+ },
612
+ "run_listing": {
613
+ "default": false,
614
+ "description": "GET /runs (list) is implemented. Powers the sessions browser.",
615
+ "title": "Run Listing",
616
+ "type": "boolean"
617
+ }
618
+ },
619
+ "title": "Provides",
620
+ "type": "object"
621
+ },
622
+ "RunCreated": {
623
+ "additionalProperties": true,
624
+ "properties": {
625
+ "run_id": {
626
+ "description": "The harness's own identifier \u2014 typically its session id. Key for every other endpoint.",
627
+ "title": "Run Id",
628
+ "type": "string"
629
+ }
630
+ },
631
+ "required": [
632
+ "run_id"
633
+ ],
634
+ "title": "RunCreated",
635
+ "type": "object"
636
+ },
637
+ "RunList": {
638
+ "additionalProperties": true,
639
+ "properties": {
640
+ "runs": {
641
+ "description": "Page of runs, newest first.",
642
+ "items": {
643
+ "$ref": "#/components/schemas/RunListItem"
644
+ },
645
+ "title": "Runs",
646
+ "type": "array"
647
+ },
648
+ "total": {
649
+ "description": "Total runs matching the query.",
650
+ "title": "Total",
651
+ "type": "integer"
652
+ }
653
+ },
654
+ "required": [
655
+ "runs",
656
+ "total"
657
+ ],
658
+ "title": "RunList",
659
+ "type": "object"
660
+ },
661
+ "RunListItem": {
662
+ "additionalProperties": true,
663
+ "properties": {
664
+ "run_id": {
665
+ "description": "Usable with the other /runs/{id} endpoints.",
666
+ "title": "Run Id",
667
+ "type": "string"
668
+ },
669
+ "title": {
670
+ "anyOf": [
671
+ {
672
+ "type": "string"
673
+ },
674
+ {
675
+ "type": "null"
676
+ }
677
+ ],
678
+ "default": null,
679
+ "description": "Display title for the run/session.",
680
+ "title": "Title"
681
+ },
682
+ "user_id": {
683
+ "anyOf": [
684
+ {
685
+ "type": "string"
686
+ },
687
+ {
688
+ "type": "null"
689
+ }
690
+ ],
691
+ "default": null,
692
+ "description": "Optional filter value; fixed dummy if no multi-tenancy.",
693
+ "title": "User Id"
694
+ },
695
+ "client_id": {
696
+ "anyOf": [
697
+ {
698
+ "type": "string"
699
+ },
700
+ {
701
+ "type": "null"
702
+ }
703
+ ],
704
+ "default": null,
705
+ "description": "Optional filter value; fixed dummy if no multi-tenancy.",
706
+ "title": "Client Id"
707
+ },
708
+ "created_at": {
709
+ "anyOf": [
710
+ {
711
+ "format": "date-time",
712
+ "type": "string"
713
+ },
714
+ {
715
+ "type": "null"
716
+ }
717
+ ],
718
+ "default": null,
719
+ "description": "Run creation time.",
720
+ "title": "Created At"
721
+ },
722
+ "session_id": {
723
+ "anyOf": [
724
+ {
725
+ "type": "string"
726
+ },
727
+ {
728
+ "type": "null"
729
+ }
730
+ ],
731
+ "default": null,
732
+ "description": "The session this run belongs to, for a harness that keeps several of its own runs per session (for example one per chat message) and answers each of them with the whole session. evalkit's run is the session: items sharing a session_id are listed once, as the newest of them.",
733
+ "title": "Session Id"
734
+ }
735
+ },
736
+ "required": [
737
+ "run_id"
738
+ ],
739
+ "title": "RunListItem",
740
+ "type": "object"
741
+ },
742
+ "RunMetadata": {
743
+ "additionalProperties": true,
744
+ "properties": {
745
+ "experiment_id": {
746
+ "anyOf": [
747
+ {
748
+ "type": "string"
749
+ },
750
+ {
751
+ "type": "null"
752
+ }
753
+ ],
754
+ "default": null,
755
+ "description": "Experiment id, so eval traffic is distinguishable and traceable.",
756
+ "title": "Experiment Id"
757
+ },
758
+ "case_id": {
759
+ "anyOf": [
760
+ {
761
+ "type": "string"
762
+ },
763
+ {
764
+ "type": "null"
765
+ }
766
+ ],
767
+ "default": null,
768
+ "description": "Case id for the harness's records.",
769
+ "title": "Case Id"
770
+ },
771
+ "repetition": {
772
+ "anyOf": [
773
+ {
774
+ "type": "integer"
775
+ },
776
+ {
777
+ "type": "null"
778
+ }
779
+ ],
780
+ "default": null,
781
+ "description": "Repetition number, 1-based.",
782
+ "title": "Repetition"
783
+ }
784
+ },
785
+ "title": "RunMetadata",
786
+ "type": "object"
787
+ },
788
+ "RunRequest": {
789
+ "additionalProperties": true,
790
+ "properties": {
791
+ "input": {
792
+ "additionalProperties": true,
793
+ "description": "The case input, verbatim; evalkit never rewrites it. Free-form object (see capabilities.input_schema); the harness maps it onto its own invocation.",
794
+ "title": "Input",
795
+ "type": "object"
796
+ },
797
+ "model": {
798
+ "anyOf": [
799
+ {
800
+ "type": "string"
801
+ },
802
+ {
803
+ "type": "null"
804
+ }
805
+ ],
806
+ "default": null,
807
+ "description": "Optional. Only sent if accepts.model_override.",
808
+ "title": "Model"
809
+ },
810
+ "metadata": {
811
+ "anyOf": [
812
+ {
813
+ "$ref": "#/components/schemas/RunMetadata"
814
+ },
815
+ {
816
+ "type": "null"
817
+ }
818
+ ],
819
+ "default": null,
820
+ "description": "Optional, for the harness's own records. The harness may ignore it."
821
+ },
822
+ "files": {
823
+ "anyOf": [
824
+ {
825
+ "items": {
826
+ "$ref": "#/components/schemas/FileRef"
827
+ },
828
+ "type": "array"
829
+ },
830
+ {
831
+ "type": "null"
832
+ }
833
+ ],
834
+ "default": null,
835
+ "description": "Optional. The case's fixture files, each with its context. On a JSON request (accepts.file_urls) each carries the url to fetch; on multipart it is in the payload part without urls, next to one file part per entry.",
836
+ "title": "Files"
837
+ }
838
+ },
839
+ "required": [
840
+ "input"
841
+ ],
842
+ "title": "RunRequest",
843
+ "type": "object"
844
+ },
845
+ "RunStatus": {
846
+ "additionalProperties": true,
847
+ "properties": {
848
+ "status": {
849
+ "description": "Run state. evalkit polls until terminal or timeout.",
850
+ "enum": [
851
+ "queued",
852
+ "running",
853
+ "completed",
854
+ "failed",
855
+ "cancelled"
856
+ ],
857
+ "title": "Status",
858
+ "type": "string"
859
+ },
860
+ "answer": {
861
+ "anyOf": [
862
+ {
863
+ "type": "string"
864
+ },
865
+ {
866
+ "type": "null"
867
+ }
868
+ ],
869
+ "default": null,
870
+ "description": "Final user-visible answer. A completed run carries this, `output`, or both.",
871
+ "title": "Answer"
872
+ },
873
+ "output": {
874
+ "anyOf": [
875
+ {
876
+ "additionalProperties": true,
877
+ "type": "object"
878
+ },
879
+ {
880
+ "type": "null"
881
+ }
882
+ ],
883
+ "default": null,
884
+ "description": "Optional. The agent's structured result, for agents that return typed data. A completed run carries this, `answer`, or both.",
885
+ "title": "Output"
886
+ },
887
+ "model": {
888
+ "description": "Required. The model this run executes on \u2014 the requested model when honoured, otherwise the harness's own default. evalkit records it as the experiment's model and prefers it over the request.",
889
+ "title": "Model",
890
+ "type": "string"
891
+ },
892
+ "artifacts": {
893
+ "anyOf": [
894
+ {
895
+ "items": {
896
+ "$ref": "#/components/schemas/ArtifactRef"
897
+ },
898
+ "type": "array"
899
+ },
900
+ {
901
+ "type": "null"
902
+ }
903
+ ],
904
+ "default": null,
905
+ "description": "Optional. Files the agent produced as deliverables.",
906
+ "title": "Artifacts"
907
+ },
908
+ "error": {
909
+ "anyOf": [
910
+ {
911
+ "type": "string"
912
+ },
913
+ {
914
+ "type": "null"
915
+ }
916
+ ],
917
+ "default": null,
918
+ "description": "Message when status=failed. A completed run may also carry a non-fatal error (e.g. partial answer).",
919
+ "title": "Error"
920
+ }
921
+ },
922
+ "required": [
923
+ "status",
924
+ "model"
925
+ ],
926
+ "title": "RunStatus",
927
+ "type": "object"
928
+ }
929
+ },
930
+ "securitySchemes": {
931
+ "apiKeyAuth": {
932
+ "type": "apiKey",
933
+ "in": "header",
934
+ "name": "x-api-key"
935
+ }
936
+ }
937
+ }
938
+ }