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,1002 @@
1
+ """baseline schema
2
+
3
+ Revision ID: 0011
4
+ Revises:
5
+ Create Date: 2026-10-24
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ revision = "0011"
14
+ down_revision = None
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade() -> None:
20
+ """Upgrade schema."""
21
+ # ### commands auto generated by Alembic - please adjust! ###
22
+ op.create_table(
23
+ "cases",
24
+ sa.Column("id", sa.Integer(), nullable=False),
25
+ sa.Column("case_id", sa.String(length=255), nullable=False),
26
+ sa.Column(
27
+ "created_at",
28
+ sa.DateTime(timezone=True),
29
+ server_default=sa.text("now()"),
30
+ nullable=False,
31
+ ),
32
+ sa.Column(
33
+ "updated_at",
34
+ sa.DateTime(timezone=True),
35
+ server_default=sa.text("now()"),
36
+ nullable=False,
37
+ ),
38
+ sa.PrimaryKeyConstraint("id"),
39
+ sa.UniqueConstraint("case_id", name="uq_cases_case_id"),
40
+ )
41
+ op.create_table(
42
+ "trace_sources",
43
+ sa.Column("id", sa.Integer(), nullable=False),
44
+ sa.Column("name", sa.String(length=150), nullable=False),
45
+ sa.Column("provider", sa.String(length=16), nullable=False),
46
+ sa.Column("config", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
47
+ sa.Column("api_key_encrypted", sa.LargeBinary(), nullable=True),
48
+ sa.Column("archived_at", sa.DateTime(timezone=True), nullable=True),
49
+ sa.Column(
50
+ "created_at",
51
+ sa.DateTime(timezone=True),
52
+ server_default=sa.text("now()"),
53
+ nullable=False,
54
+ ),
55
+ sa.Column(
56
+ "updated_at",
57
+ sa.DateTime(timezone=True),
58
+ server_default=sa.text("now()"),
59
+ nullable=False,
60
+ ),
61
+ sa.CheckConstraint("provider IN ('phoenix')", name="ck_trace_sources_provider"),
62
+ sa.PrimaryKeyConstraint("id"),
63
+ sa.UniqueConstraint("name", name="uq_trace_sources_name"),
64
+ )
65
+ op.create_table(
66
+ "users",
67
+ sa.Column("id", sa.Integer(), nullable=False),
68
+ sa.Column("username", sa.String(length=150), nullable=False),
69
+ sa.Column("password_hash", sa.String(length=200), nullable=False),
70
+ sa.Column("is_admin", sa.Boolean(), server_default=sa.text("false"), nullable=False),
71
+ sa.Column("archived_at", sa.DateTime(timezone=True), nullable=True),
72
+ sa.Column(
73
+ "created_at",
74
+ sa.DateTime(timezone=True),
75
+ server_default=sa.text("now()"),
76
+ nullable=False,
77
+ ),
78
+ sa.Column(
79
+ "updated_at",
80
+ sa.DateTime(timezone=True),
81
+ server_default=sa.text("now()"),
82
+ nullable=False,
83
+ ),
84
+ sa.PrimaryKeyConstraint("id"),
85
+ )
86
+ op.create_index(op.f("ix_users_username"), "users", ["username"], unique=True)
87
+ op.create_table(
88
+ "case_versions",
89
+ sa.Column("case_ref", sa.Integer(), nullable=False),
90
+ sa.Column("content_hash", sa.String(length=16), nullable=False),
91
+ sa.Column("input", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
92
+ sa.Column("expected", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
93
+ sa.Column("evaluators", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
94
+ sa.Column("tags", postgresql.ARRAY(sa.Text()), nullable=False),
95
+ sa.Column(
96
+ "created_at",
97
+ sa.DateTime(timezone=True),
98
+ server_default=sa.text("now()"),
99
+ nullable=False,
100
+ ),
101
+ sa.Column(
102
+ "updated_at",
103
+ sa.DateTime(timezone=True),
104
+ server_default=sa.text("now()"),
105
+ nullable=False,
106
+ ),
107
+ sa.ForeignKeyConstraint(
108
+ ["case_ref"],
109
+ ["cases.id"],
110
+ ),
111
+ sa.PrimaryKeyConstraint("case_ref", "content_hash"),
112
+ )
113
+ op.create_index(
114
+ "ix_case_versions_tags", "case_versions", ["tags"], unique=False, postgresql_using="gin"
115
+ )
116
+ op.create_table(
117
+ "fixture_blobs",
118
+ sa.Column("sha256", sa.String(length=64), nullable=False),
119
+ sa.Column("size", sa.BigInteger(), nullable=False),
120
+ sa.Column("uploaded_by", sa.Integer(), nullable=True),
121
+ sa.Column(
122
+ "created_at",
123
+ sa.DateTime(timezone=True),
124
+ server_default=sa.text("now()"),
125
+ nullable=False,
126
+ ),
127
+ sa.Column(
128
+ "updated_at",
129
+ sa.DateTime(timezone=True),
130
+ server_default=sa.text("now()"),
131
+ nullable=False,
132
+ ),
133
+ sa.ForeignKeyConstraint(
134
+ ["uploaded_by"],
135
+ ["users.id"],
136
+ ),
137
+ sa.PrimaryKeyConstraint("sha256"),
138
+ )
139
+ op.create_table(
140
+ "workspaces",
141
+ sa.Column("id", sa.Integer(), nullable=False),
142
+ sa.Column("name", sa.String(length=150), nullable=False),
143
+ sa.Column("owner_user_id", sa.Integer(), nullable=True),
144
+ sa.Column("archived_at", sa.DateTime(timezone=True), nullable=True),
145
+ sa.Column(
146
+ "created_at",
147
+ sa.DateTime(timezone=True),
148
+ server_default=sa.text("now()"),
149
+ nullable=False,
150
+ ),
151
+ sa.Column(
152
+ "updated_at",
153
+ sa.DateTime(timezone=True),
154
+ server_default=sa.text("now()"),
155
+ nullable=False,
156
+ ),
157
+ sa.ForeignKeyConstraint(
158
+ ["owner_user_id"],
159
+ ["users.id"],
160
+ ),
161
+ sa.PrimaryKeyConstraint("id"),
162
+ sa.UniqueConstraint("name", name="uq_workspaces_name"),
163
+ )
164
+ op.create_table(
165
+ "agents",
166
+ sa.Column("id", sa.Integer(), nullable=False),
167
+ sa.Column("workspace_id", sa.Integer(), nullable=False),
168
+ sa.Column("name", sa.String(length=150), nullable=False),
169
+ sa.Column("harness_url", sa.String(length=500), nullable=True),
170
+ sa.Column("trajectory_source", sa.String(length=8), server_default="atif", nullable=False),
171
+ sa.Column("repo_url", sa.String(length=500), nullable=True),
172
+ sa.Column(
173
+ "config",
174
+ postgresql.JSONB(astext_type=sa.Text()),
175
+ server_default=sa.text("'{}'"),
176
+ nullable=False,
177
+ ),
178
+ sa.Column("created_by", sa.Integer(), nullable=True),
179
+ sa.Column("archived_at", sa.DateTime(timezone=True), nullable=True),
180
+ sa.Column(
181
+ "created_at",
182
+ sa.DateTime(timezone=True),
183
+ server_default=sa.text("now()"),
184
+ nullable=False,
185
+ ),
186
+ sa.Column(
187
+ "updated_at",
188
+ sa.DateTime(timezone=True),
189
+ server_default=sa.text("now()"),
190
+ nullable=False,
191
+ ),
192
+ sa.CheckConstraint(
193
+ "trajectory_source IN ('atif', 'otel')", name="ck_agents_trajectory_source"
194
+ ),
195
+ sa.ForeignKeyConstraint(
196
+ ["created_by"],
197
+ ["users.id"],
198
+ ),
199
+ sa.ForeignKeyConstraint(
200
+ ["workspace_id"],
201
+ ["workspaces.id"],
202
+ ),
203
+ sa.PrimaryKeyConstraint("id"),
204
+ sa.UniqueConstraint("workspace_id", "name", name="uq_agents_workspace_name"),
205
+ )
206
+ op.create_table(
207
+ "case_version_files",
208
+ sa.Column("case_ref", sa.Integer(), nullable=False),
209
+ sa.Column("content_hash", sa.String(length=16), nullable=False),
210
+ sa.Column("key", sa.String(length=255), nullable=False),
211
+ sa.Column("sha256", sa.String(length=64), nullable=False),
212
+ sa.Column("context", sa.Text(), nullable=False),
213
+ sa.Column("position", sa.Integer(), nullable=False),
214
+ sa.Column(
215
+ "created_at",
216
+ sa.DateTime(timezone=True),
217
+ server_default=sa.text("now()"),
218
+ nullable=False,
219
+ ),
220
+ sa.Column(
221
+ "updated_at",
222
+ sa.DateTime(timezone=True),
223
+ server_default=sa.text("now()"),
224
+ nullable=False,
225
+ ),
226
+ sa.ForeignKeyConstraint(
227
+ ["case_ref", "content_hash"],
228
+ ["case_versions.case_ref", "case_versions.content_hash"],
229
+ ),
230
+ sa.ForeignKeyConstraint(
231
+ ["sha256"],
232
+ ["fixture_blobs.sha256"],
233
+ ),
234
+ sa.PrimaryKeyConstraint("case_ref", "content_hash", "key"),
235
+ )
236
+ op.create_table(
237
+ "datasets",
238
+ sa.Column("id", sa.Integer(), nullable=False),
239
+ sa.Column("workspace_id", sa.Integer(), nullable=False),
240
+ sa.Column("name", sa.String(length=150), nullable=False),
241
+ sa.Column("kind", sa.String(length=16), nullable=False),
242
+ sa.Column("archived_at", sa.DateTime(timezone=True), nullable=True),
243
+ sa.Column(
244
+ "created_at",
245
+ sa.DateTime(timezone=True),
246
+ server_default=sa.text("now()"),
247
+ nullable=False,
248
+ ),
249
+ sa.Column(
250
+ "updated_at",
251
+ sa.DateTime(timezone=True),
252
+ server_default=sa.text("now()"),
253
+ nullable=False,
254
+ ),
255
+ sa.CheckConstraint("kind IN ('suite')", name="ck_datasets_kind"),
256
+ sa.ForeignKeyConstraint(
257
+ ["workspace_id"],
258
+ ["workspaces.id"],
259
+ ),
260
+ sa.PrimaryKeyConstraint("id"),
261
+ sa.UniqueConstraint("workspace_id", "name", name="uq_datasets_workspace_name"),
262
+ )
263
+ op.create_table(
264
+ "remote_evaluators",
265
+ sa.Column("id", sa.Integer(), nullable=False),
266
+ sa.Column("workspace_id", sa.Integer(), nullable=False),
267
+ sa.Column("name", sa.String(length=150), nullable=False),
268
+ sa.Column("kind", sa.String(length=8), nullable=False),
269
+ sa.Column("config", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
270
+ sa.Column("archived_at", sa.DateTime(timezone=True), nullable=True),
271
+ sa.Column(
272
+ "created_at",
273
+ sa.DateTime(timezone=True),
274
+ server_default=sa.text("now()"),
275
+ nullable=False,
276
+ ),
277
+ sa.Column(
278
+ "updated_at",
279
+ sa.DateTime(timezone=True),
280
+ server_default=sa.text("now()"),
281
+ nullable=False,
282
+ ),
283
+ sa.CheckConstraint("kind IN ('score', 'gauge')", name="ck_remote_evaluators_kind"),
284
+ sa.ForeignKeyConstraint(
285
+ ["workspace_id"],
286
+ ["workspaces.id"],
287
+ ),
288
+ sa.PrimaryKeyConstraint("id"),
289
+ sa.UniqueConstraint("workspace_id", "name", name="uq_remote_evaluators_workspace_name"),
290
+ )
291
+ op.create_table(
292
+ "workspace_members",
293
+ sa.Column("workspace_id", sa.Integer(), nullable=False),
294
+ sa.Column("user_id", sa.Integer(), nullable=False),
295
+ sa.Column("role", sa.String(length=16), nullable=False),
296
+ sa.Column("granted_by", sa.Integer(), nullable=False),
297
+ sa.Column(
298
+ "created_at",
299
+ sa.DateTime(timezone=True),
300
+ server_default=sa.text("now()"),
301
+ nullable=False,
302
+ ),
303
+ sa.Column(
304
+ "updated_at",
305
+ sa.DateTime(timezone=True),
306
+ server_default=sa.text("now()"),
307
+ nullable=False,
308
+ ),
309
+ sa.CheckConstraint("role IN ('writer', 'reviewer')", name="ck_workspace_members_role"),
310
+ sa.ForeignKeyConstraint(
311
+ ["granted_by"],
312
+ ["users.id"],
313
+ ),
314
+ sa.ForeignKeyConstraint(
315
+ ["user_id"],
316
+ ["users.id"],
317
+ ),
318
+ sa.ForeignKeyConstraint(
319
+ ["workspace_id"],
320
+ ["workspaces.id"],
321
+ ),
322
+ sa.PrimaryKeyConstraint("workspace_id", "user_id", "role"),
323
+ )
324
+ op.create_table(
325
+ "workspace_promotions",
326
+ sa.Column("source_id", sa.Integer(), nullable=False),
327
+ sa.Column("target_id", sa.Integer(), nullable=False),
328
+ sa.Column(
329
+ "created_at",
330
+ sa.DateTime(timezone=True),
331
+ server_default=sa.text("now()"),
332
+ nullable=False,
333
+ ),
334
+ sa.Column(
335
+ "updated_at",
336
+ sa.DateTime(timezone=True),
337
+ server_default=sa.text("now()"),
338
+ nullable=False,
339
+ ),
340
+ sa.ForeignKeyConstraint(
341
+ ["source_id"],
342
+ ["workspaces.id"],
343
+ ),
344
+ sa.ForeignKeyConstraint(
345
+ ["target_id"],
346
+ ["workspaces.id"],
347
+ ),
348
+ sa.PrimaryKeyConstraint("source_id"),
349
+ sa.UniqueConstraint("target_id", name="uq_workspace_promotions_target"),
350
+ )
351
+ op.create_table(
352
+ "agent_runs",
353
+ sa.Column("id", sa.Integer(), nullable=False),
354
+ sa.Column("agent_id", sa.Integer(), nullable=False),
355
+ sa.Column("harness_run_id", sa.String(length=255), nullable=False),
356
+ sa.Column("status", sa.String(length=16), nullable=False),
357
+ sa.Column("answer", sa.Text(), nullable=True),
358
+ sa.Column("output", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
359
+ sa.Column("error", sa.Text(), nullable=True),
360
+ sa.Column("started_at", sa.DateTime(timezone=True), nullable=False),
361
+ sa.Column("ended_at", sa.DateTime(timezone=True), nullable=True),
362
+ sa.Column("trajectory_key", sa.String(length=500), nullable=True),
363
+ sa.Column("trajectory_status", sa.String(length=16), nullable=True),
364
+ sa.Column("metrics", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
365
+ sa.Column("title", sa.String(length=200), nullable=True),
366
+ sa.Column("created_by", sa.Integer(), nullable=True),
367
+ sa.Column(
368
+ "created_at",
369
+ sa.DateTime(timezone=True),
370
+ server_default=sa.text("now()"),
371
+ nullable=False,
372
+ ),
373
+ sa.Column(
374
+ "updated_at",
375
+ sa.DateTime(timezone=True),
376
+ server_default=sa.text("now()"),
377
+ nullable=False,
378
+ ),
379
+ sa.CheckConstraint(
380
+ "status IN ('queued', 'running', 'completed', 'failed', 'cancelled', 'timeout')",
381
+ name="ck_agent_runs_status",
382
+ ),
383
+ sa.CheckConstraint(
384
+ "trajectory_status IS NULL OR "
385
+ "trajectory_status IN ('valid', 'partial', 'invalid', 'unavailable')",
386
+ name="ck_agent_runs_trajectory_status",
387
+ ),
388
+ sa.ForeignKeyConstraint(
389
+ ["agent_id"],
390
+ ["agents.id"],
391
+ ),
392
+ sa.ForeignKeyConstraint(
393
+ ["created_by"],
394
+ ["users.id"],
395
+ ),
396
+ sa.PrimaryKeyConstraint("id"),
397
+ sa.UniqueConstraint("agent_id", "harness_run_id", name="uq_agent_runs_agent_harness_run"),
398
+ )
399
+ op.create_index(
400
+ "ix_agent_runs_agent_started", "agent_runs", ["agent_id", "started_at"], unique=False
401
+ )
402
+ op.create_table(
403
+ "auth_tokens",
404
+ sa.Column("id", sa.Integer(), nullable=False),
405
+ sa.Column("user_id", sa.Integer(), nullable=False),
406
+ sa.Column("token_hash", sa.String(length=64), nullable=False),
407
+ sa.Column("expires_at", sa.DateTime(timezone=True), nullable=True),
408
+ sa.Column("kind", sa.String(length=8), server_default="user", nullable=False),
409
+ sa.Column("agent_id", sa.Integer(), nullable=True),
410
+ sa.Column("last_used_at", sa.DateTime(timezone=True), nullable=True),
411
+ sa.Column(
412
+ "created_at",
413
+ sa.DateTime(timezone=True),
414
+ server_default=sa.text("now()"),
415
+ nullable=False,
416
+ ),
417
+ sa.Column(
418
+ "updated_at",
419
+ sa.DateTime(timezone=True),
420
+ server_default=sa.text("now()"),
421
+ nullable=False,
422
+ ),
423
+ sa.CheckConstraint("kind <> 'agent' OR agent_id IS NOT NULL", name="ck_auth_tokens_agent"),
424
+ sa.CheckConstraint("kind IN ('user', 'agent')", name="ck_auth_tokens_kind"),
425
+ sa.ForeignKeyConstraint(
426
+ ["agent_id"], ["agents.id"], ondelete="CASCADE", name="fk_auth_tokens_agent_id_agents"
427
+ ),
428
+ sa.ForeignKeyConstraint(["user_id"], ["users.id"], ondelete="CASCADE"),
429
+ sa.PrimaryKeyConstraint("id"),
430
+ )
431
+ op.create_index(op.f("ix_auth_tokens_token_hash"), "auth_tokens", ["token_hash"], unique=True)
432
+ op.create_index(op.f("ix_auth_tokens_user_id"), "auth_tokens", ["user_id"], unique=False)
433
+ op.create_table(
434
+ "dataset_cases",
435
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
436
+ sa.Column("case_ref", sa.Integer(), nullable=False),
437
+ sa.Column("content_hash", sa.String(length=16), nullable=False),
438
+ sa.Column(
439
+ "path_tags",
440
+ postgresql.ARRAY(sa.Text()),
441
+ server_default=sa.text("'{}'::text[]"),
442
+ nullable=False,
443
+ ),
444
+ sa.Column("source", sa.String(length=500), nullable=True),
445
+ sa.Column("removed_at", sa.DateTime(timezone=True), nullable=True),
446
+ sa.Column(
447
+ "created_at",
448
+ sa.DateTime(timezone=True),
449
+ server_default=sa.text("now()"),
450
+ nullable=False,
451
+ ),
452
+ sa.Column(
453
+ "updated_at",
454
+ sa.DateTime(timezone=True),
455
+ server_default=sa.text("now()"),
456
+ nullable=False,
457
+ ),
458
+ sa.ForeignKeyConstraint(
459
+ ["case_ref", "content_hash"],
460
+ ["case_versions.case_ref", "case_versions.content_hash"],
461
+ ),
462
+ sa.ForeignKeyConstraint(
463
+ ["case_ref"],
464
+ ["cases.id"],
465
+ ),
466
+ sa.ForeignKeyConstraint(
467
+ ["dataset_id"],
468
+ ["datasets.id"],
469
+ ),
470
+ sa.PrimaryKeyConstraint("dataset_id", "case_ref"),
471
+ )
472
+ op.create_table(
473
+ "dataset_syncs",
474
+ sa.Column("id", sa.Integer(), nullable=False),
475
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
476
+ sa.Column("actor_id", sa.Integer(), nullable=False),
477
+ sa.Column("source", sa.String(length=16), nullable=False),
478
+ sa.Column("detail", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
479
+ sa.Column(
480
+ "created_at",
481
+ sa.DateTime(timezone=True),
482
+ server_default=sa.text("now()"),
483
+ nullable=False,
484
+ ),
485
+ sa.Column(
486
+ "updated_at",
487
+ sa.DateTime(timezone=True),
488
+ server_default=sa.text("now()"),
489
+ nullable=False,
490
+ ),
491
+ sa.CheckConstraint("source IN ('git', 'promotion')", name="ck_dataset_syncs_source"),
492
+ sa.ForeignKeyConstraint(
493
+ ["actor_id"],
494
+ ["users.id"],
495
+ ),
496
+ sa.ForeignKeyConstraint(
497
+ ["dataset_id"],
498
+ ["datasets.id"],
499
+ ),
500
+ sa.PrimaryKeyConstraint("id"),
501
+ )
502
+ op.create_index(
503
+ op.f("ix_dataset_syncs_dataset_id"), "dataset_syncs", ["dataset_id"], unique=False
504
+ )
505
+ op.create_table(
506
+ "experiments",
507
+ sa.Column("id", sa.Integer(), nullable=False),
508
+ sa.Column("workspace_id", sa.Integer(), nullable=False),
509
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
510
+ sa.Column("number", sa.Integer(), nullable=False),
511
+ sa.Column("agent_id", sa.Integer(), nullable=False),
512
+ sa.Column("created_by", sa.Integer(), nullable=False),
513
+ sa.Column("status", sa.String(length=16), nullable=False),
514
+ sa.Column("status_error", sa.Text(), nullable=True),
515
+ sa.Column("lease_holder", sa.String(length=255), nullable=True),
516
+ sa.Column("lease_expires_at", sa.DateTime(timezone=True), nullable=True),
517
+ sa.Column("repetitions", sa.Integer(), nullable=False),
518
+ sa.Column("config", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
519
+ sa.Column(
520
+ "started_at",
521
+ sa.DateTime(timezone=True),
522
+ server_default=sa.text("now()"),
523
+ nullable=False,
524
+ ),
525
+ sa.Column("ended_at", sa.DateTime(timezone=True), nullable=True),
526
+ sa.Column(
527
+ "created_at",
528
+ sa.DateTime(timezone=True),
529
+ server_default=sa.text("now()"),
530
+ nullable=False,
531
+ ),
532
+ sa.Column(
533
+ "updated_at",
534
+ sa.DateTime(timezone=True),
535
+ server_default=sa.text("now()"),
536
+ nullable=False,
537
+ ),
538
+ sa.CheckConstraint(
539
+ "status IN ('running', 'evaluating', 'completed', 'failed')",
540
+ name="ck_experiments_status",
541
+ ),
542
+ sa.ForeignKeyConstraint(
543
+ ["agent_id"],
544
+ ["agents.id"],
545
+ ),
546
+ sa.ForeignKeyConstraint(
547
+ ["created_by"],
548
+ ["users.id"],
549
+ ),
550
+ sa.ForeignKeyConstraint(
551
+ ["dataset_id"],
552
+ ["datasets.id"],
553
+ ),
554
+ sa.ForeignKeyConstraint(
555
+ ["workspace_id"],
556
+ ["workspaces.id"],
557
+ ),
558
+ sa.PrimaryKeyConstraint("id"),
559
+ sa.UniqueConstraint("dataset_id", "number", name="uq_experiments_dataset_number"),
560
+ )
561
+ op.create_index(
562
+ "ix_experiments_active", "experiments", ["status", "lease_expires_at"], unique=False
563
+ )
564
+ op.create_index(op.f("ix_experiments_agent_id"), "experiments", ["agent_id"], unique=False)
565
+ op.create_index(op.f("ix_experiments_dataset_id"), "experiments", ["dataset_id"], unique=False)
566
+ op.create_index(
567
+ op.f("ix_experiments_workspace_id"), "experiments", ["workspace_id"], unique=False
568
+ )
569
+ op.create_table(
570
+ "overlays",
571
+ sa.Column("id", sa.Integer(), nullable=False),
572
+ sa.Column("source_dataset_id", sa.Integer(), nullable=False),
573
+ sa.Column("target_case", sa.Integer(), nullable=False),
574
+ sa.Column("agents", postgresql.ARRAY(sa.Text()), nullable=False),
575
+ sa.Column("tags", postgresql.ARRAY(sa.Text()), nullable=False),
576
+ sa.Column("evaluators", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
577
+ sa.Column("source_file", sa.String(length=500), nullable=True),
578
+ sa.Column(
579
+ "created_at",
580
+ sa.DateTime(timezone=True),
581
+ server_default=sa.text("now()"),
582
+ nullable=False,
583
+ ),
584
+ sa.Column(
585
+ "updated_at",
586
+ sa.DateTime(timezone=True),
587
+ server_default=sa.text("now()"),
588
+ nullable=False,
589
+ ),
590
+ sa.ForeignKeyConstraint(
591
+ ["source_dataset_id"],
592
+ ["datasets.id"],
593
+ ),
594
+ sa.ForeignKeyConstraint(
595
+ ["target_case"],
596
+ ["cases.id"],
597
+ ),
598
+ sa.PrimaryKeyConstraint("id"),
599
+ sa.UniqueConstraint("source_dataset_id", "target_case", name="uq_overlays_source_target"),
600
+ )
601
+ op.create_table(
602
+ "span_mappings",
603
+ sa.Column("id", sa.Integer(), nullable=False),
604
+ sa.Column("agent_id", sa.Integer(), nullable=False),
605
+ sa.Column("version", sa.Integer(), nullable=False),
606
+ sa.Column("status", sa.String(length=8), nullable=False),
607
+ sa.Column("mapping", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
608
+ sa.Column("created_by_id", sa.Integer(), nullable=True),
609
+ sa.Column("activated_at", sa.DateTime(timezone=True), nullable=True),
610
+ sa.Column(
611
+ "created_at",
612
+ sa.DateTime(timezone=True),
613
+ server_default=sa.text("now()"),
614
+ nullable=False,
615
+ ),
616
+ sa.Column(
617
+ "updated_at",
618
+ sa.DateTime(timezone=True),
619
+ server_default=sa.text("now()"),
620
+ nullable=False,
621
+ ),
622
+ sa.CheckConstraint(
623
+ "status IN ('draft', 'active', 'retired')", name="ck_span_mappings_status"
624
+ ),
625
+ sa.ForeignKeyConstraint(["agent_id"], ["agents.id"], ondelete="CASCADE"),
626
+ sa.ForeignKeyConstraint(
627
+ ["created_by_id"],
628
+ ["users.id"],
629
+ ),
630
+ sa.PrimaryKeyConstraint("id"),
631
+ sa.UniqueConstraint("agent_id", "version", name="uq_span_mappings_agent_version"),
632
+ )
633
+ op.create_index(
634
+ "uq_span_mappings_active",
635
+ "span_mappings",
636
+ ["agent_id"],
637
+ unique=True,
638
+ postgresql_where=sa.text("status = 'active'"),
639
+ )
640
+ op.create_index(
641
+ "uq_span_mappings_draft",
642
+ "span_mappings",
643
+ ["agent_id"],
644
+ unique=True,
645
+ postgresql_where=sa.text("status = 'draft'"),
646
+ )
647
+ op.create_table(
648
+ "spans",
649
+ sa.Column("id", sa.BigInteger(), nullable=False),
650
+ sa.Column("agent_id", sa.Integer(), nullable=False),
651
+ sa.Column("trace_id", sa.String(length=32), nullable=False),
652
+ sa.Column("span_id", sa.String(length=16), nullable=False),
653
+ sa.Column("parent_span_id", sa.String(length=16), nullable=True),
654
+ sa.Column("session_id", sa.String(length=255), nullable=True),
655
+ sa.Column("name", sa.Text(), nullable=False),
656
+ sa.Column("kind", sa.String(length=32), nullable=False),
657
+ sa.Column("start_time", sa.DateTime(timezone=True), nullable=False),
658
+ sa.Column("end_time", sa.DateTime(timezone=True), nullable=True),
659
+ sa.Column("status_code", sa.String(length=8), nullable=False),
660
+ sa.Column("status_message", sa.Text(), nullable=True),
661
+ sa.Column("attributes", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
662
+ sa.Column("events", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
663
+ sa.Column("resource", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
664
+ sa.Column(
665
+ "received_at",
666
+ sa.DateTime(timezone=True),
667
+ server_default=sa.text("now()"),
668
+ nullable=False,
669
+ ),
670
+ sa.Column("external_trace_source_id", sa.Integer(), nullable=True),
671
+ sa.ForeignKeyConstraint(["agent_id"], ["agents.id"], ondelete="CASCADE"),
672
+ sa.ForeignKeyConstraint(
673
+ ["external_trace_source_id"],
674
+ ["trace_sources.id"],
675
+ ),
676
+ sa.PrimaryKeyConstraint("id"),
677
+ sa.UniqueConstraint("agent_id", "trace_id", "span_id", name="uq_spans_agent_trace_span"),
678
+ )
679
+ op.create_index("ix_spans_agent_session", "spans", ["agent_id", "session_id"], unique=False)
680
+ op.create_index("ix_spans_agent_trace", "spans", ["agent_id", "trace_id"], unique=False)
681
+ op.create_table(
682
+ "trace_imports",
683
+ sa.Column("id", sa.Integer(), nullable=False),
684
+ sa.Column("agent_id", sa.Integer(), nullable=False),
685
+ sa.Column("trace_source_id", sa.Integer(), nullable=False),
686
+ sa.Column("project", sa.Text(), nullable=False),
687
+ sa.Column("since", sa.DateTime(timezone=True), nullable=False),
688
+ sa.Column("until", sa.DateTime(timezone=True), nullable=False),
689
+ sa.Column("resume_from", sa.DateTime(timezone=True), nullable=False),
690
+ sa.Column("resume_trace_ids", postgresql.ARRAY(sa.Text()), nullable=False),
691
+ sa.Column("status", sa.String(length=16), nullable=False),
692
+ sa.Column("traces", sa.Integer(), nullable=False),
693
+ sa.Column("spans", sa.BigInteger(), nullable=False),
694
+ sa.Column("sample_session", sa.String(length=255), nullable=True),
695
+ sa.Column("error", sa.Text(), nullable=True),
696
+ sa.Column("lease_holder", sa.String(length=255), nullable=True),
697
+ sa.Column("lease_expires_at", sa.DateTime(timezone=True), nullable=True),
698
+ sa.Column("created_by", sa.Integer(), nullable=False),
699
+ sa.Column("finished_at", sa.DateTime(timezone=True), nullable=True),
700
+ sa.Column(
701
+ "created_at",
702
+ sa.DateTime(timezone=True),
703
+ server_default=sa.text("now()"),
704
+ nullable=False,
705
+ ),
706
+ sa.Column(
707
+ "updated_at",
708
+ sa.DateTime(timezone=True),
709
+ server_default=sa.text("now()"),
710
+ nullable=False,
711
+ ),
712
+ sa.CheckConstraint(
713
+ "status IN ('running', 'stopping', 'stopped', 'done', 'failed')",
714
+ name="ck_trace_imports_status",
715
+ ),
716
+ sa.CheckConstraint("since < until", name="ck_trace_imports_range"),
717
+ sa.ForeignKeyConstraint(["agent_id"], ["agents.id"], ondelete="CASCADE"),
718
+ sa.ForeignKeyConstraint(
719
+ ["created_by"],
720
+ ["users.id"],
721
+ ),
722
+ sa.ForeignKeyConstraint(
723
+ ["trace_source_id"],
724
+ ["trace_sources.id"],
725
+ ),
726
+ sa.PrimaryKeyConstraint("id"),
727
+ )
728
+ op.create_index(
729
+ "ix_trace_imports_active", "trace_imports", ["status", "lease_expires_at"], unique=False
730
+ )
731
+ op.create_index(
732
+ "uq_trace_imports_active",
733
+ "trace_imports",
734
+ ["agent_id"],
735
+ unique=True,
736
+ postgresql_where=sa.text("status IN ('running', 'stopping')"),
737
+ )
738
+ op.create_table(
739
+ "case_comments",
740
+ sa.Column("id", sa.Integer(), nullable=False),
741
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
742
+ sa.Column("case_ref", sa.Integer(), nullable=False),
743
+ sa.Column("content_hash", sa.String(length=16), nullable=False),
744
+ sa.Column("parent_id", sa.Integer(), nullable=True),
745
+ sa.Column("author_id", sa.Integer(), nullable=False),
746
+ sa.Column("body", sa.Text(), nullable=False),
747
+ sa.Column("resolved", sa.Boolean(), server_default=sa.text("false"), nullable=False),
748
+ sa.Column(
749
+ "created_at",
750
+ sa.DateTime(timezone=True),
751
+ server_default=sa.text("now()"),
752
+ nullable=False,
753
+ ),
754
+ sa.Column(
755
+ "updated_at",
756
+ sa.DateTime(timezone=True),
757
+ server_default=sa.text("now()"),
758
+ nullable=False,
759
+ ),
760
+ sa.ForeignKeyConstraint(
761
+ ["author_id"],
762
+ ["users.id"],
763
+ ),
764
+ sa.ForeignKeyConstraint(
765
+ ["case_ref", "content_hash"],
766
+ ["case_versions.case_ref", "case_versions.content_hash"],
767
+ ),
768
+ sa.ForeignKeyConstraint(
769
+ ["dataset_id", "case_ref"],
770
+ ["dataset_cases.dataset_id", "dataset_cases.case_ref"],
771
+ ),
772
+ sa.ForeignKeyConstraint(["parent_id"], ["case_comments.id"], ondelete="CASCADE"),
773
+ sa.PrimaryKeyConstraint("id"),
774
+ )
775
+ op.create_index(
776
+ "ix_case_comments_dataset_case", "case_comments", ["dataset_id", "case_ref"], unique=False
777
+ )
778
+ op.create_table(
779
+ "case_events",
780
+ sa.Column("id", sa.Integer(), nullable=False),
781
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
782
+ sa.Column("case_ref", sa.Integer(), nullable=False),
783
+ sa.Column("content_hash", sa.String(length=16), nullable=False),
784
+ sa.Column("kind", sa.String(length=32), nullable=False),
785
+ sa.Column("sync_id", sa.Integer(), nullable=True),
786
+ sa.Column("actor_id", sa.Integer(), nullable=False),
787
+ sa.Column("target_id", sa.Integer(), nullable=True),
788
+ sa.Column(
789
+ "created_at",
790
+ sa.DateTime(timezone=True),
791
+ server_default=sa.text("now()"),
792
+ nullable=False,
793
+ ),
794
+ sa.Column(
795
+ "updated_at",
796
+ sa.DateTime(timezone=True),
797
+ server_default=sa.text("now()"),
798
+ nullable=False,
799
+ ),
800
+ sa.CheckConstraint(
801
+ "kind IN ('synced', 'review_requested', 'approved', 'changes_requested')",
802
+ name="ck_case_events_kind",
803
+ ),
804
+ sa.ForeignKeyConstraint(
805
+ ["actor_id"],
806
+ ["users.id"],
807
+ ),
808
+ sa.ForeignKeyConstraint(
809
+ ["case_ref", "content_hash"],
810
+ ["case_versions.case_ref", "case_versions.content_hash"],
811
+ ),
812
+ sa.ForeignKeyConstraint(
813
+ ["dataset_id", "case_ref"],
814
+ ["dataset_cases.dataset_id", "dataset_cases.case_ref"],
815
+ ),
816
+ sa.ForeignKeyConstraint(
817
+ ["sync_id"],
818
+ ["dataset_syncs.id"],
819
+ ),
820
+ sa.ForeignKeyConstraint(
821
+ ["target_id"],
822
+ ["users.id"],
823
+ ),
824
+ sa.PrimaryKeyConstraint("id"),
825
+ )
826
+ op.create_index(
827
+ "ix_case_events_dataset_case",
828
+ "case_events",
829
+ ["dataset_id", "case_ref", "content_hash"],
830
+ unique=False,
831
+ )
832
+ op.create_table(
833
+ "experiment_cases",
834
+ sa.Column("experiment_id", sa.Integer(), nullable=False),
835
+ sa.Column("case_ref", sa.Integer(), nullable=False),
836
+ sa.Column("content_hash", sa.String(length=16), nullable=False),
837
+ sa.Column("effective_evaluators", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
838
+ sa.Column(
839
+ "created_at",
840
+ sa.DateTime(timezone=True),
841
+ server_default=sa.text("now()"),
842
+ nullable=False,
843
+ ),
844
+ sa.Column(
845
+ "updated_at",
846
+ sa.DateTime(timezone=True),
847
+ server_default=sa.text("now()"),
848
+ nullable=False,
849
+ ),
850
+ sa.ForeignKeyConstraint(
851
+ ["case_ref", "content_hash"],
852
+ ["case_versions.case_ref", "case_versions.content_hash"],
853
+ ),
854
+ sa.ForeignKeyConstraint(
855
+ ["case_ref"],
856
+ ["cases.id"],
857
+ ),
858
+ sa.ForeignKeyConstraint(
859
+ ["experiment_id"],
860
+ ["experiments.id"],
861
+ ),
862
+ sa.PrimaryKeyConstraint("experiment_id", "case_ref"),
863
+ )
864
+ op.create_table(
865
+ "experiment_runs",
866
+ sa.Column("id", sa.Integer(), nullable=False),
867
+ sa.Column("experiment_id", sa.Integer(), nullable=False),
868
+ sa.Column("case_ref", sa.Integer(), nullable=False),
869
+ sa.Column("repetition", sa.Integer(), nullable=False),
870
+ sa.Column("agent_run_id", sa.Integer(), nullable=False),
871
+ sa.Column(
872
+ "created_at",
873
+ sa.DateTime(timezone=True),
874
+ server_default=sa.text("now()"),
875
+ nullable=False,
876
+ ),
877
+ sa.Column(
878
+ "updated_at",
879
+ sa.DateTime(timezone=True),
880
+ server_default=sa.text("now()"),
881
+ nullable=False,
882
+ ),
883
+ sa.ForeignKeyConstraint(
884
+ ["agent_run_id"],
885
+ ["agent_runs.id"],
886
+ ),
887
+ sa.ForeignKeyConstraint(
888
+ ["experiment_id", "case_ref"],
889
+ ["experiment_cases.experiment_id", "experiment_cases.case_ref"],
890
+ ),
891
+ sa.PrimaryKeyConstraint("id"),
892
+ sa.UniqueConstraint("agent_run_id", name="uq_experiment_runs_agent_run"),
893
+ sa.UniqueConstraint(
894
+ "experiment_id", "case_ref", "repetition", name="uq_experiment_runs_case_repetition"
895
+ ),
896
+ )
897
+ op.create_table(
898
+ "evaluations",
899
+ sa.Column("id", sa.Integer(), nullable=False),
900
+ sa.Column("experiment_run_id", sa.Integer(), nullable=False),
901
+ sa.Column("producer", sa.String(length=150), nullable=False),
902
+ sa.Column("name", sa.String(length=150), nullable=False),
903
+ sa.Column("kind", sa.String(length=8), nullable=False),
904
+ sa.Column("source", sa.String(length=8), nullable=False),
905
+ sa.Column("bucket", sa.String(length=32), nullable=True),
906
+ sa.Column("value", sa.Float(), nullable=True),
907
+ sa.Column("label", sa.String(length=150), nullable=True),
908
+ sa.Column("explanation", sa.Text(), nullable=True),
909
+ sa.Column("error", sa.Text(), nullable=True),
910
+ sa.Column(
911
+ "created_at",
912
+ sa.DateTime(timezone=True),
913
+ server_default=sa.text("now()"),
914
+ nullable=False,
915
+ ),
916
+ sa.Column(
917
+ "updated_at",
918
+ sa.DateTime(timezone=True),
919
+ server_default=sa.text("now()"),
920
+ nullable=False,
921
+ ),
922
+ sa.CheckConstraint(
923
+ "bucket IS NULL OR "
924
+ "bucket IN ('content', 'trajectory', 'presentation', 'efficiency', 'custom')",
925
+ name="ck_evaluations_bucket",
926
+ ),
927
+ sa.CheckConstraint("kind IN ('score', 'gauge')", name="ck_evaluations_kind"),
928
+ sa.CheckConstraint("source IN ('builtin', 'remote', 'code')", name="ck_evaluations_source"),
929
+ sa.ForeignKeyConstraint(
930
+ ["experiment_run_id"],
931
+ ["experiment_runs.id"],
932
+ ),
933
+ sa.PrimaryKeyConstraint("id"),
934
+ sa.UniqueConstraint("experiment_run_id", "name", name="uq_evaluations_run_name"),
935
+ )
936
+ op.create_index(
937
+ op.f("ix_evaluations_experiment_run_id"), "evaluations", ["experiment_run_id"], unique=False
938
+ )
939
+ # ### end Alembic commands ###
940
+
941
+
942
+ def downgrade() -> None:
943
+ """Downgrade schema."""
944
+ # ### commands auto generated by Alembic - please adjust! ###
945
+ op.drop_index(op.f("ix_evaluations_experiment_run_id"), table_name="evaluations")
946
+ op.drop_table("evaluations")
947
+ op.drop_table("experiment_runs")
948
+ op.drop_table("experiment_cases")
949
+ op.drop_index("ix_case_events_dataset_case", table_name="case_events")
950
+ op.drop_table("case_events")
951
+ op.drop_index("ix_case_comments_dataset_case", table_name="case_comments")
952
+ op.drop_table("case_comments")
953
+ op.drop_index(
954
+ "uq_trace_imports_active",
955
+ table_name="trace_imports",
956
+ postgresql_where=sa.text("status IN ('running', 'stopping')"),
957
+ )
958
+ op.drop_index("ix_trace_imports_active", table_name="trace_imports")
959
+ op.drop_table("trace_imports")
960
+ op.drop_index("ix_spans_agent_trace", table_name="spans")
961
+ op.drop_index("ix_spans_agent_session", table_name="spans")
962
+ op.drop_table("spans")
963
+ op.drop_index(
964
+ "uq_span_mappings_draft",
965
+ table_name="span_mappings",
966
+ postgresql_where=sa.text("status = 'draft'"),
967
+ )
968
+ op.drop_index(
969
+ "uq_span_mappings_active",
970
+ table_name="span_mappings",
971
+ postgresql_where=sa.text("status = 'active'"),
972
+ )
973
+ op.drop_table("span_mappings")
974
+ op.drop_table("overlays")
975
+ op.drop_index(op.f("ix_experiments_workspace_id"), table_name="experiments")
976
+ op.drop_index(op.f("ix_experiments_dataset_id"), table_name="experiments")
977
+ op.drop_index(op.f("ix_experiments_agent_id"), table_name="experiments")
978
+ op.drop_index("ix_experiments_active", table_name="experiments")
979
+ op.drop_table("experiments")
980
+ op.drop_index(op.f("ix_dataset_syncs_dataset_id"), table_name="dataset_syncs")
981
+ op.drop_table("dataset_syncs")
982
+ op.drop_table("dataset_cases")
983
+ op.drop_index(op.f("ix_auth_tokens_user_id"), table_name="auth_tokens")
984
+ op.drop_index(op.f("ix_auth_tokens_token_hash"), table_name="auth_tokens")
985
+ op.drop_table("auth_tokens")
986
+ op.drop_index("ix_agent_runs_agent_started", table_name="agent_runs")
987
+ op.drop_table("agent_runs")
988
+ op.drop_table("workspace_promotions")
989
+ op.drop_table("workspace_members")
990
+ op.drop_table("remote_evaluators")
991
+ op.drop_table("datasets")
992
+ op.drop_table("case_version_files")
993
+ op.drop_table("agents")
994
+ op.drop_table("workspaces")
995
+ op.drop_table("fixture_blobs")
996
+ op.drop_index("ix_case_versions_tags", table_name="case_versions", postgresql_using="gin")
997
+ op.drop_table("case_versions")
998
+ op.drop_index(op.f("ix_users_username"), table_name="users")
999
+ op.drop_table("users")
1000
+ op.drop_table("trace_sources")
1001
+ op.drop_table("cases")
1002
+ # ### end Alembic commands ###