agentinputlab 0.1.0a1__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 (469) hide show
  1. agentinputlab/__init__.py +28 -0
  2. agentinputlab/algorithms/__init__.py +6 -0
  3. agentinputlab/algorithms/acquire/__init__.py +145 -0
  4. agentinputlab/algorithms/acquire/adaptive_rag/__init__.py +43 -0
  5. agentinputlab/algorithms/acquire/adaptive_rag/replay.py +367 -0
  6. agentinputlab/algorithms/acquire/adaptive_rag/runtime.py +1202 -0
  7. agentinputlab/algorithms/acquire/adaptive_rag_common_support.py +542 -0
  8. agentinputlab/algorithms/acquire/hyde.py +296 -0
  9. agentinputlab/algorithms/acquire/hyde_controlled.py +200 -0
  10. agentinputlab/algorithms/acquire/hyde_external.py +148 -0
  11. agentinputlab/algorithms/acquire/ircot.py +28 -0
  12. agentinputlab/algorithms/acquire/ircot_common_support.py +478 -0
  13. agentinputlab/algorithms/acquire/ircot_native.py +355 -0
  14. agentinputlab/algorithms/acquire/ircot_replay.py +327 -0
  15. agentinputlab/algorithms/acquire/qrag/__init__.py +79 -0
  16. agentinputlab/algorithms/acquire/qrag/bridge.py +828 -0
  17. agentinputlab/algorithms/acquire/qrag/common_support.py +891 -0
  18. agentinputlab/algorithms/acquire/qrag/native_axis.py +71 -0
  19. agentinputlab/algorithms/acquire/qrag/reader_adapter.py +139 -0
  20. agentinputlab/algorithms/acquire/r2ag/__init__.py +57 -0
  21. agentinputlab/algorithms/acquire/r2ag/bridge.py +1312 -0
  22. agentinputlab/algorithms/acquire/r2ag/common_support.py +1029 -0
  23. agentinputlab/algorithms/acquire/r2ag/socket_runtime.py +255 -0
  24. agentinputlab/algorithms/clarify/__init__.py +61 -0
  25. agentinputlab/algorithms/clarify/_structured.py +64 -0
  26. agentinputlab/algorithms/clarify/active_task_disambiguation.py +371 -0
  27. agentinputlab/algorithms/clarify/ask_or_assume/__init__.py +17 -0
  28. agentinputlab/algorithms/clarify/ask_or_assume/monitor.py +410 -0
  29. agentinputlab/algorithms/clarify/future_turns.py +379 -0
  30. agentinputlab/algorithms/clarify/udcs.py +255 -0
  31. agentinputlab/algorithms/clarify/udcs_deterministic.py +196 -0
  32. agentinputlab/algorithms/curate/__init__.py +65 -0
  33. agentinputlab/algorithms/curate/acon/__init__.py +27 -0
  34. agentinputlab/algorithms/curate/acon/common.py +284 -0
  35. agentinputlab/algorithms/curate/acon/common_support.py +136 -0
  36. agentinputlab/algorithms/curate/acon/history_bridge.py +309 -0
  37. agentinputlab/algorithms/curate/acon/observation_bridge.py +290 -0
  38. agentinputlab/algorithms/curate/llmlingua/__init__.py +30 -0
  39. agentinputlab/algorithms/curate/llmlingua/adapters.py +537 -0
  40. agentinputlab/algorithms/curate/llmlingua/budget.py +48 -0
  41. agentinputlab/algorithms/curate/llmlingua/controlled.py +175 -0
  42. agentinputlab/algorithms/curate/llmlingua/multilingual.py +105 -0
  43. agentinputlab/algorithms/curate/llmlingua/span_map.py +167 -0
  44. agentinputlab/algorithms/curate/recomp/__init__.py +47 -0
  45. agentinputlab/algorithms/curate/recomp/external.py +1129 -0
  46. agentinputlab/algorithms/curate/recomp/selective.py +304 -0
  47. agentinputlab/algorithms/decompose/__init__.py +107 -0
  48. agentinputlab/algorithms/decompose/decomp/__init__.py +53 -0
  49. agentinputlab/algorithms/decompose/decomp/common_support.py +478 -0
  50. agentinputlab/algorithms/decompose/decomp/planner_component.py +199 -0
  51. agentinputlab/algorithms/decompose/decomp/worker_bridge.py +416 -0
  52. agentinputlab/algorithms/decompose/llm_compiler/__init__.py +35 -0
  53. agentinputlab/algorithms/decompose/llm_compiler/bridge.py +520 -0
  54. agentinputlab/algorithms/decompose/llm_compiler/common_support.py +504 -0
  55. agentinputlab/algorithms/decompose/plan_and_budget/__init__.py +43 -0
  56. agentinputlab/algorithms/decompose/plan_and_budget/cached_soft_budget.py +362 -0
  57. agentinputlab/algorithms/decompose/plan_and_budget/decomposer_component.py +107 -0
  58. agentinputlab/algorithms/decompose/plan_and_budget/full.py +205 -0
  59. agentinputlab/algorithms/decompose/plan_and_budget/hard_cap.py +246 -0
  60. agentinputlab/algorithms/decompose/plan_and_budget/regenerated_soft_budget.py +448 -0
  61. agentinputlab/algorithms/decompose/plan_and_solve/__init__.py +33 -0
  62. agentinputlab/algorithms/decompose/plan_and_solve/plan_component.py +192 -0
  63. agentinputlab/algorithms/decompose/plan_and_solve/ps_prompt.py +127 -0
  64. agentinputlab/algorithms/decompose/self_ask/__init__.py +27 -0
  65. agentinputlab/algorithms/decompose/self_ask/loop.py +362 -0
  66. agentinputlab/algorithms/decompose/self_ask/planner_component.py +117 -0
  67. agentinputlab/algorithms/reformulate/__init__.py +85 -0
  68. agentinputlab/algorithms/reformulate/infocqr/__init__.py +40 -0
  69. agentinputlab/algorithms/reformulate/infocqr/cache_replay.py +362 -0
  70. agentinputlab/algorithms/reformulate/infocqr/external.py +675 -0
  71. agentinputlab/algorithms/reformulate/infocqr/student.py +189 -0
  72. agentinputlab/algorithms/reformulate/query2doc/__init__.py +42 -0
  73. agentinputlab/algorithms/reformulate/query2doc/controlled_live.py +190 -0
  74. agentinputlab/algorithms/reformulate/query2doc/models.py +95 -0
  75. agentinputlab/algorithms/reformulate/query2doc/official_cached.py +335 -0
  76. agentinputlab/algorithms/reformulate/query2doc/querygym_bridge.py +223 -0
  77. agentinputlab/algorithms/reformulate/query2doc/querygym_runtime.py +326 -0
  78. agentinputlab/algorithms/reformulate/reformer/__init__.py +23 -0
  79. agentinputlab/algorithms/reformulate/reformer/external.py +417 -0
  80. agentinputlab/algorithms/reformulate/rrr.py +696 -0
  81. agentinputlab/annotation/__init__.py +5 -0
  82. agentinputlab/annotation/independent.py +428 -0
  83. agentinputlab/annotation/server.py +233 -0
  84. agentinputlab/annotation/static/app.js +121 -0
  85. agentinputlab/annotation/static/index.html +60 -0
  86. agentinputlab/annotation/static/review.css +2 -0
  87. agentinputlab/annotation/static/review.html +10 -0
  88. agentinputlab/annotation/static/review.js +11 -0
  89. agentinputlab/annotation/static/styles.css +55 -0
  90. agentinputlab/annotation/store.py +444 -0
  91. agentinputlab/api.py +368 -0
  92. agentinputlab/artifacts/__init__.py +15 -0
  93. agentinputlab/artifacts/json_file.py +104 -0
  94. agentinputlab/artifacts/manifest.py +98 -0
  95. agentinputlab/artifacts/store.py +157 -0
  96. agentinputlab/backends/__init__.py +98 -0
  97. agentinputlab/backends/embedding/__init__.py +25 -0
  98. agentinputlab/backends/embedding/base.py +145 -0
  99. agentinputlab/backends/embedding/callable.py +75 -0
  100. agentinputlab/backends/embedding/replay.py +129 -0
  101. agentinputlab/backends/llm/__init__.py +31 -0
  102. agentinputlab/backends/llm/base.py +149 -0
  103. agentinputlab/backends/llm/callable.py +108 -0
  104. agentinputlab/backends/llm/decomp_completion.py +88 -0
  105. agentinputlab/backends/llm/final_content_stop.py +72 -0
  106. agentinputlab/backends/llm/gpt_oss_final_channel.py +84 -0
  107. agentinputlab/backends/llm/openai_compatible.py +332 -0
  108. agentinputlab/backends/llm/transformers.py +171 -0
  109. agentinputlab/backends/retrieval/__init__.py +35 -0
  110. agentinputlab/backends/retrieval/base.py +50 -0
  111. agentinputlab/backends/retrieval/dense.py +777 -0
  112. agentinputlab/backends/retrieval/memory.py +119 -0
  113. agentinputlab/backends/retrieval/sqlite_fts.py +155 -0
  114. agentinputlab/backends/user/__init__.py +15 -0
  115. agentinputlab/backends/user/base.py +66 -0
  116. agentinputlab/backends/user/callable.py +54 -0
  117. agentinputlab/backends/user/replay.py +89 -0
  118. agentinputlab/backends/vector.py +38 -0
  119. agentinputlab/benchmarks/__init__.py +246 -0
  120. agentinputlab/benchmarks/acquisition.py +106 -0
  121. agentinputlab/benchmarks/ale.py +540 -0
  122. agentinputlab/benchmarks/appworld_ul.py +669 -0
  123. agentinputlab/benchmarks/assets.py +226 -0
  124. agentinputlab/benchmarks/base.py +68 -0
  125. agentinputlab/benchmarks/beir_archive.py +235 -0
  126. agentinputlab/benchmarks/beir_sample.py +269 -0
  127. agentinputlab/benchmarks/bfcl_native.py +245 -0
  128. agentinputlab/benchmarks/bfcl_v3.py +607 -0
  129. agentinputlab/benchmarks/cache.py +218 -0
  130. agentinputlab/benchmarks/clariq.py +203 -0
  131. agentinputlab/benchmarks/data/registry.json +321 -0
  132. agentinputlab/benchmarks/data/smoke_assets.json +511 -0
  133. agentinputlab/benchmarks/data/statebench_v0_8_1_task_ids.json +475 -0
  134. agentinputlab/benchmarks/data/toolsandbox_165848b_scenario_names.json +1 -0
  135. agentinputlab/benchmarks/execution.py +1111 -0
  136. agentinputlab/benchmarks/interactive.py +257 -0
  137. agentinputlab/benchmarks/ir_query.py +204 -0
  138. agentinputlab/benchmarks/longbench.py +203 -0
  139. agentinputlab/benchmarks/paired_replay.py +479 -0
  140. agentinputlab/benchmarks/preprocess.py +2313 -0
  141. agentinputlab/benchmarks/production.py +236 -0
  142. agentinputlab/benchmarks/qa.py +963 -0
  143. agentinputlab/benchmarks/registry.py +110 -0
  144. agentinputlab/benchmarks/retrieval.py +459 -0
  145. agentinputlab/benchmarks/runtime.py +509 -0
  146. agentinputlab/benchmarks/statebench.py +938 -0
  147. agentinputlab/benchmarks/tau3.py +725 -0
  148. agentinputlab/benchmarks/toolsandbox.py +626 -0
  149. agentinputlab/benchmarks/trec_dl_sample.py +263 -0
  150. agentinputlab/campaign.py +654 -0
  151. agentinputlab/campaign_runner.py +953 -0
  152. agentinputlab/cli/__init__.py +6 -0
  153. agentinputlab/cli/main.py +933 -0
  154. agentinputlab/connectors/__init__.py +46 -0
  155. agentinputlab/connectors/knowledge/__init__.py +4 -0
  156. agentinputlab/connectors/tools/__init__.py +30 -0
  157. agentinputlab/connectors/tools/base.py +57 -0
  158. agentinputlab/connectors/tools/mcp.py +222 -0
  159. agentinputlab/connectors/tools/memory.py +41 -0
  160. agentinputlab/connectors/tools/openapi.py +695 -0
  161. agentinputlab/connectors/tools/schema.py +102 -0
  162. agentinputlab/contracts/__init__.py +91 -0
  163. agentinputlab/contracts/availability.py +24 -0
  164. agentinputlab/contracts/dependency.py +58 -0
  165. agentinputlab/contracts/enums.py +82 -0
  166. agentinputlab/contracts/errors.py +63 -0
  167. agentinputlab/contracts/evidence.py +43 -0
  168. agentinputlab/contracts/intent.py +110 -0
  169. agentinputlab/contracts/lifecycle.py +164 -0
  170. agentinputlab/contracts/patch.py +167 -0
  171. agentinputlab/contracts/serialization.py +93 -0
  172. agentinputlab/contracts/state.py +127 -0
  173. agentinputlab/contracts/trace.py +59 -0
  174. agentinputlab/contracts/worker.py +42 -0
  175. agentinputlab/core/__init__.py +7 -0
  176. agentinputlab/data/__init__.py +32 -0
  177. agentinputlab/data/checksums.py +9 -0
  178. agentinputlab/data/downloader.py +235 -0
  179. agentinputlab/data/http.py +171 -0
  180. agentinputlab/data/index.py +21 -0
  181. agentinputlab/data/overlap.py +28 -0
  182. agentinputlab/data/preprocess.py +32 -0
  183. agentinputlab/data/storage.py +57 -0
  184. agentinputlab/data/trec_sample.py +427 -0
  185. agentinputlab/evaluation/__init__.py +5 -0
  186. agentinputlab/evaluation/outcomes.py +32 -0
  187. agentinputlab/experiments/__init__.py +278 -0
  188. agentinputlab/experiments/analysis.py +981 -0
  189. agentinputlab/experiments/artifacts.py +687 -0
  190. agentinputlab/experiments/automatic_measurement.py +678 -0
  191. agentinputlab/experiments/auxiliary_matrix.py +203 -0
  192. agentinputlab/experiments/bindings.py +430 -0
  193. agentinputlab/experiments/blueprints.py +147 -0
  194. agentinputlab/experiments/builders/__init__.py +45 -0
  195. agentinputlab/experiments/builders/executable_external_payload.py +423 -0
  196. agentinputlab/experiments/builders/external_process_arena.py +1018 -0
  197. agentinputlab/experiments/builders/registry_intervention.py +463 -0
  198. agentinputlab/experiments/cli.py +158 -0
  199. agentinputlab/experiments/controls.py +340 -0
  200. agentinputlab/experiments/driver_guard.py +205 -0
  201. agentinputlab/experiments/drivers/__init__.py +89 -0
  202. agentinputlab/experiments/drivers/external_arena.py +2908 -0
  203. agentinputlab/experiments/drivers/method_process.py +662 -0
  204. agentinputlab/experiments/drivers/parity_process.py +1484 -0
  205. agentinputlab/experiments/drivers/static_production.py +1574 -0
  206. agentinputlab/experiments/executor.py +448 -0
  207. agentinputlab/experiments/loader.py +605 -0
  208. agentinputlab/experiments/measurement.py +675 -0
  209. agentinputlab/experiments/paper_analysis.py +1818 -0
  210. agentinputlab/experiments/parity_identity.py +605 -0
  211. agentinputlab/experiments/plan.py +277 -0
  212. agentinputlab/experiments/production_builders.py +3739 -0
  213. agentinputlab/experiments/readiness.py +432 -0
  214. agentinputlab/experiments/schema.py +514 -0
  215. agentinputlab/experiments/secrets.py +177 -0
  216. agentinputlab/experiments/stateful_analysis.py +1738 -0
  217. agentinputlab/experiments/transfer_analysis.py +1316 -0
  218. agentinputlab/experiments/unseen_analysis.py +1025 -0
  219. agentinputlab/integrations/__init__.py +1 -0
  220. agentinputlab/integrations/action_space/__init__.py +1 -0
  221. agentinputlab/integrations/external_workers/__init__.py +76 -0
  222. agentinputlab/integrations/external_workers/ace.py +431 -0
  223. agentinputlab/integrations/external_workers/base.py +181 -0
  224. agentinputlab/integrations/external_workers/decomp_live.py +249 -0
  225. agentinputlab/integrations/external_workers/decomp_planner.py +30 -0
  226. agentinputlab/integrations/external_workers/infocqr_student.py +280 -0
  227. agentinputlab/integrations/external_workers/ircot.py +576 -0
  228. agentinputlab/integrations/external_workers/llmcompiler_live.py +360 -0
  229. agentinputlab/integrations/external_workers/longllmlingua.py +162 -0
  230. agentinputlab/integrations/external_workers/method.py +314 -0
  231. agentinputlab/integrations/external_workers/process.py +678 -0
  232. agentinputlab/integrations/external_workers/supervisor.py +1071 -0
  233. agentinputlab/integrations/full_architecture/__init__.py +1 -0
  234. agentinputlab/integrations/full_architecture/hyde.py +212 -0
  235. agentinputlab/integrations/full_architecture/plan_and_budget.py +188 -0
  236. agentinputlab/integrations/live_history.py +222 -0
  237. agentinputlab/integrations/prompt_optimization/__init__.py +1 -0
  238. agentinputlab/integrations/training/__init__.py +1 -0
  239. agentinputlab/metrics/__init__.py +50 -0
  240. agentinputlab/metrics/catalog.py +313 -0
  241. agentinputlab/metrics/harm.py +95 -0
  242. agentinputlab/metrics/paired.py +40 -0
  243. agentinputlab/metrics/qa.py +76 -0
  244. agentinputlab/metrics/text.py +33 -0
  245. agentinputlab/metrics/third_party.py +161 -0
  246. agentinputlab/models/__init__.py +4 -0
  247. agentinputlab/observability/__init__.py +56 -0
  248. agentinputlab/observability/budget.py +316 -0
  249. agentinputlab/observability/instrumentation.py +754 -0
  250. agentinputlab/observability/models.py +403 -0
  251. agentinputlab/observability/monitor.py +380 -0
  252. agentinputlab/optimizers/__init__.py +1 -0
  253. agentinputlab/optimizers/clarify/__init__.py +12 -0
  254. agentinputlab/optimizers/context/__init__.py +22 -0
  255. agentinputlab/optimizers/decompose/__init__.py +64 -0
  256. agentinputlab/optimizers/evidence/__init__.py +22 -0
  257. agentinputlab/optimizers/rewrite/__init__.py +30 -0
  258. agentinputlab/parity/__init__.py +5 -0
  259. agentinputlab/parity/base.py +206 -0
  260. agentinputlab/production_campaign.py +763 -0
  261. agentinputlab/py.typed +1 -0
  262. agentinputlab/recipes/__init__.py +333 -0
  263. agentinputlab/recipes/ace.py +418 -0
  264. agentinputlab/recipes/ace_bfcl.py +273 -0
  265. agentinputlab/recipes/ace_common_support.py +169 -0
  266. agentinputlab/recipes/ace_native_plan.py +322 -0
  267. agentinputlab/recipes/ace_online.py +711 -0
  268. agentinputlab/recipes/ace_retrieval.py +330 -0
  269. agentinputlab/recipes/ace_statebench.py +382 -0
  270. agentinputlab/recipes/ace_tau.py +463 -0
  271. agentinputlab/recipes/ace_toolsandbox.py +432 -0
  272. agentinputlab/recipes/acon_guideline.py +22 -0
  273. agentinputlab/recipes/adaptive_rag.py +822 -0
  274. agentinputlab/recipes/llmlingua2_inference.py +146 -0
  275. agentinputlab/recipes/llmlingua2_training.py +796 -0
  276. agentinputlab/recipes/mce.py +1486 -0
  277. agentinputlab/recipes/mce_final.py +335 -0
  278. agentinputlab/recipes/mce_text_fit.py +499 -0
  279. agentinputlab/recipes/mce_text_only.py +298 -0
  280. agentinputlab/recipes/qrag.py +729 -0
  281. agentinputlab/recipes/qrag_inference.py +364 -0
  282. agentinputlab/recipes/r2ag_features.py +236 -0
  283. agentinputlab/recipes/r2ag_inference.py +503 -0
  284. agentinputlab/recipes/r2ag_training.py +948 -0
  285. agentinputlab/recipes/recomp_abstractive.py +592 -0
  286. agentinputlab/recipes/recomp_extractive.py +525 -0
  287. agentinputlab/recipes/reformer.py +17 -0
  288. agentinputlab/recipes/rqrag.py +1516 -0
  289. agentinputlab/recipes/rqrag_common_support.py +193 -0
  290. agentinputlab/recipes/rqrag_completion.py +147 -0
  291. agentinputlab/recipes/skillopt.py +462 -0
  292. agentinputlab/recipes/skillopt_common_support.py +154 -0
  293. agentinputlab/recipes/skillopt_environment.py +165 -0
  294. agentinputlab/recipes/skillopt_environment_cli.py +5 -0
  295. agentinputlab/recipes/skillopt_retrieval.py +188 -0
  296. agentinputlab/recipes/smartsearch.py +897 -0
  297. agentinputlab/recipes/smartsearch_curriculum.py +283 -0
  298. agentinputlab/recipes/smartsearch_grpo_contracts.py +58 -0
  299. agentinputlab/recipes/smartsearch_grpo_data.py +314 -0
  300. agentinputlab/recipes/smartsearch_grpo_meter.py +324 -0
  301. agentinputlab/recipes/smartsearch_grpo_prefix.py +144 -0
  302. agentinputlab/recipes/smartsearch_grpo_rollout.py +119 -0
  303. agentinputlab/recipes/smartsearch_grpo_tools.py +364 -0
  304. agentinputlab/recipes/smartsearch_grpo_training.py +305 -0
  305. agentinputlab/recipes/smartsearch_grpo_transport.py +248 -0
  306. agentinputlab/recipes/smartsearch_grpo_worker.py +364 -0
  307. agentinputlab/recipes/smartsearch_inference.py +524 -0
  308. agentinputlab/recipes/smartsearch_native_data.py +172 -0
  309. agentinputlab/recipes/smartsearch_policy.py +616 -0
  310. agentinputlab/recipes/smartsearch_policy_worker.py +9 -0
  311. agentinputlab/recipes/smartsearch_sampling.py +232 -0
  312. agentinputlab/recipes/smartsearch_teacher.py +203 -0
  313. agentinputlab/recipes/smartsearch_training.py +265 -0
  314. agentinputlab/registry/__init__.py +46 -0
  315. agentinputlab/registry/beta.py +727 -0
  316. agentinputlab/registry/data/algorithms.json +1959 -0
  317. agentinputlab/registry/data/auxiliary_method_profiles.json +34 -0
  318. agentinputlab/registry/loader.py +100 -0
  319. agentinputlab/registry/result_manifest.py +184 -0
  320. agentinputlab/registry/runtime.py +195 -0
  321. agentinputlab/registry/schema.py +449 -0
  322. agentinputlab/runner/__init__.py +30 -0
  323. agentinputlab/runner/balance.py +248 -0
  324. agentinputlab/runner/cache.py +135 -0
  325. agentinputlab/runner/composite.py +130 -0
  326. agentinputlab/runner/engine.py +285 -0
  327. agentinputlab/runner/runtime_guard.py +268 -0
  328. agentinputlab/runner/worker.py +80 -0
  329. agentinputlab/runtime_bootstrap.py +288 -0
  330. agentinputlab/selectors/__init__.py +196 -0
  331. agentinputlab/selectors/advanced.py +1514 -0
  332. agentinputlab/selectors/artifacts.py +1087 -0
  333. agentinputlab/selectors/base.py +112 -0
  334. agentinputlab/selectors/campaigns.py +1893 -0
  335. agentinputlab/selectors/catalog.py +86 -0
  336. agentinputlab/selectors/discovery.py +1860 -0
  337. agentinputlab/selectors/evaluation.py +1348 -0
  338. agentinputlab/selectors/features.py +383 -0
  339. agentinputlab/selectors/learned.py +502 -0
  340. agentinputlab/selectors/no_op.py +28 -0
  341. agentinputlab/selectors/outcome_table.py +475 -0
  342. agentinputlab/selectors/producer.py +853 -0
  343. agentinputlab/selectors/rules.py +109 -0
  344. agentinputlab/selectors/runtime.py +420 -0
  345. agentinputlab/studies/__init__.py +16 -0
  346. agentinputlab/studies/design.py +165 -0
  347. agentinputlab/studies/paired.py +322 -0
  348. agentinputlab/studio/__init__.py +6 -0
  349. agentinputlab/studio/campaigns.py +819 -0
  350. agentinputlab/studio/engine.py +1408 -0
  351. agentinputlab/studio/model_backends.py +425 -0
  352. agentinputlab/studio/prepared.py +410 -0
  353. agentinputlab/studio/server.py +613 -0
  354. agentinputlab/studio/static/app.js +397 -0
  355. agentinputlab/studio/static/campaigns.html +175 -0
  356. agentinputlab/studio/static/campaigns.js +426 -0
  357. agentinputlab/studio/static/index.html +192 -0
  358. agentinputlab/studio/static/result.html +103 -0
  359. agentinputlab/studio/static/result.js +273 -0
  360. agentinputlab/studio/static/styles.css +467 -0
  361. agentinputlab-0.1.0a1.data/data/share/agentinputlab/CITATION.cff +22 -0
  362. agentinputlab-0.1.0a1.dist-info/METADATA +392 -0
  363. agentinputlab-0.1.0a1.dist-info/RECORD +469 -0
  364. agentinputlab-0.1.0a1.dist-info/WHEEL +5 -0
  365. agentinputlab-0.1.0a1.dist-info/entry_points.txt +6 -0
  366. agentinputlab-0.1.0a1.dist-info/licenses/LICENSE +21 -0
  367. agentinputlab-0.1.0a1.dist-info/licenses/NOTICE +31 -0
  368. agentinputlab-0.1.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +94 -0
  369. agentinputlab-0.1.0a1.dist-info/top_level.txt +2 -0
  370. workers/README.md +94 -0
  371. workers/ace/README.md +261 -0
  372. workers/ace/__init__.py +1 -0
  373. workers/ace/compatibility_manifest.json +39 -0
  374. workers/ace/driver.py +1682 -0
  375. workers/acon/README.md +215 -0
  376. workers/acon/__init__.py +5 -0
  377. workers/acon/compatibility_manifest.json +93 -0
  378. workers/acon/driver.py +1859 -0
  379. workers/acon/fitted.py +395 -0
  380. workers/acon/guideline.py +470 -0
  381. workers/acon/guideline_source_manifest.json +20 -0
  382. workers/adaptive_rag/README.md +96 -0
  383. workers/adaptive_rag/__init__.py +15 -0
  384. workers/adaptive_rag/compatibility_manifest.json +61 -0
  385. workers/adaptive_rag/driver.py +1470 -0
  386. workers/adaptive_rag/fixture_runtime.py +163 -0
  387. workers/adaptive_rag/runtime.py +252 -0
  388. workers/ask_or_assume/README.md +124 -0
  389. workers/ask_or_assume/__init__.py +1 -0
  390. workers/ask_or_assume/compatibility_manifest.json +36 -0
  391. workers/ask_or_assume/driver.py +1227 -0
  392. workers/decomp/README.md +133 -0
  393. workers/decomp/UPSTREAM_LICENSE.Apache-2.0.txt +201 -0
  394. workers/decomp/__init__.py +5 -0
  395. workers/decomp/compatibility_manifest.json +205 -0
  396. workers/decomp/driver.py +1015 -0
  397. workers/decomp/live.py +137 -0
  398. workers/decomp/runtime.py +231 -0
  399. workers/infocqr/README.md +106 -0
  400. workers/infocqr/__init__.py +1 -0
  401. workers/infocqr/compatibility_manifest.json +84 -0
  402. workers/infocqr/driver.py +1766 -0
  403. workers/ircot/README.md +167 -0
  404. workers/ircot/__init__.py +7 -0
  405. workers/ircot/compatibility_manifest.json +121 -0
  406. workers/ircot/controlled.py +457 -0
  407. workers/ircot/driver.py +1373 -0
  408. workers/ircot/fixture_bindings.json +39 -0
  409. workers/ircot/fixture_config.json +48 -0
  410. workers/ircot/fixture_prompt.txt +2 -0
  411. workers/ircot/native_qa.py +398 -0
  412. workers/ircot/qa_compatibility_manifest.json +57 -0
  413. workers/ircot/runtime.py +97 -0
  414. workers/llmcompiler/README.md +160 -0
  415. workers/llmcompiler/__init__.py +1 -0
  416. workers/llmcompiler/compatibility_manifest.json +45 -0
  417. workers/llmcompiler/driver.py +1514 -0
  418. workers/llmcompiler/export_prompts.py +74 -0
  419. workers/llmcompiler/live.py +174 -0
  420. workers/llmcompiler/patch_manifest.json +147 -0
  421. workers/mce/README.md +198 -0
  422. workers/mce/__init__.py +29 -0
  423. workers/mce/compatibility_manifest.json +115 -0
  424. workers/mce/driver.py +2585 -0
  425. workers/mce/final_eval.py +173 -0
  426. workers/official_arenas/README.md +25 -0
  427. workers/official_arenas/__init__.py +1 -0
  428. workers/official_arenas/capture_records.py +110 -0
  429. workers/official_arenas/driver.py +619 -0
  430. workers/official_arenas/protocol.py +334 -0
  431. workers/official_arenas/providers/__init__.py +1 -0
  432. workers/official_arenas/providers/_live_history.py +228 -0
  433. workers/official_arenas/providers/_message_compat.py +77 -0
  434. workers/official_arenas/providers/appworld_ul.py +196 -0
  435. workers/official_arenas/providers/fixture.py +112 -0
  436. workers/official_arenas/providers/statebench.py +960 -0
  437. workers/official_arenas/providers/tau3.py +1672 -0
  438. workers/official_arenas/providers/tau_retail.py +586 -0
  439. workers/official_arenas/providers/toolsandbox.py +1321 -0
  440. workers/official_arenas/providers/tooltalk.py +699 -0
  441. workers/official_arenas/retail_capture.py +188 -0
  442. workers/official_arenas/retail_driver.py +275 -0
  443. workers/qrag/README.md +172 -0
  444. workers/qrag/__init__.py +1 -0
  445. workers/qrag/compatibility_manifest.json +64 -0
  446. workers/qrag/driver.py +673 -0
  447. workers/r2ag/README.md +154 -0
  448. workers/r2ag/__init__.py +5 -0
  449. workers/r2ag/compatibility_manifest.json +55 -0
  450. workers/r2ag/driver.py +1287 -0
  451. workers/r2ag/feature_schema.json +8 -0
  452. workers/r2ag/runtime.py +589 -0
  453. workers/recomp/README.md +120 -0
  454. workers/recomp/__init__.py +1 -0
  455. workers/recomp/compatibility_manifest.json +43 -0
  456. workers/recomp/driver.py +1653 -0
  457. workers/reformer/README.md +125 -0
  458. workers/reformer/__init__.py +1 -0
  459. workers/reformer/compatibility_manifest.json +68 -0
  460. workers/reformer/driver.py +1459 -0
  461. workers/reformer/induction.py +457 -0
  462. workers/rrr/README.md +126 -0
  463. workers/rrr/__init__.py +1 -0
  464. workers/rrr/compatibility_manifest.json +57 -0
  465. workers/rrr/driver.py +1133 -0
  466. workers/smartsearch/README.md +331 -0
  467. workers/smartsearch/__init__.py +1 -0
  468. workers/smartsearch/compatibility_manifest.json +41 -0
  469. workers/smartsearch/driver.py +1643 -0
@@ -0,0 +1,449 @@
1
+ """Typed, dependency-free schema for the algorithm registry.
2
+
3
+ The source registry is deliberately JSON-compatible YAML. Keeping the schema
4
+ in the standard library lets ``agentinputlab list`` and ``doctor`` work in the
5
+ minimal installation, before optional model or YAML dependencies are present.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import re
11
+ from collections.abc import Mapping
12
+ from dataclasses import dataclass
13
+ from typing import Any, TypeVar
14
+
15
+ from agentinputlab.contracts.enums import (
16
+ ExecutionKind,
17
+ ImplementationKind,
18
+ ProfileKind,
19
+ ReleaseTier,
20
+ SemanticFamily,
21
+ SupportStatus,
22
+ )
23
+ from agentinputlab.contracts.errors import RegistryError
24
+
25
+ _FULL_GIT_SHA = re.compile(r"^[0-9a-f]{40}$")
26
+ _IDENTIFIER = re.compile(r"^[a-z0-9][a-z0-9_.-]*$")
27
+ _DELIVERY_TIERS = frozenset({"must_ship", "stretch", "blocked_or_post_v1"})
28
+ _EnumT = TypeVar("_EnumT")
29
+
30
+
31
+ def _mapping(value: Any, path: str) -> Mapping[str, Any]:
32
+ if not isinstance(value, Mapping):
33
+ raise RegistryError(f"{path} must be an object")
34
+ return value
35
+
36
+
37
+ def _required_string(data: Mapping[str, Any], key: str, path: str) -> str:
38
+ value = data.get(key)
39
+ if not isinstance(value, str) or not value.strip():
40
+ raise RegistryError(f"{path}.{key} must be a non-empty string")
41
+ return value
42
+
43
+
44
+ def _optional_string(data: Mapping[str, Any], key: str, path: str) -> str | None:
45
+ value = data.get(key)
46
+ if value is None:
47
+ return None
48
+ if not isinstance(value, str) or not value.strip():
49
+ raise RegistryError(f"{path}.{key} must be null or a non-empty string")
50
+ return value
51
+
52
+
53
+ def _string_tuple(value: Any, path: str) -> tuple[str, ...]:
54
+ if not isinstance(value, list):
55
+ raise RegistryError(f"{path} must be an array")
56
+ result: list[str] = []
57
+ for index, item in enumerate(value):
58
+ if not isinstance(item, str) or not item.strip():
59
+ raise RegistryError(f"{path}[{index}] must be a non-empty string")
60
+ result.append(item)
61
+ return tuple(result)
62
+
63
+
64
+ def _enum(enum_type: type[_EnumT], value: Any, path: str) -> _EnumT:
65
+ if not isinstance(value, str):
66
+ raise RegistryError(f"{path} must be a string")
67
+ try:
68
+ return enum_type(value)
69
+ except ValueError as exc:
70
+ allowed = ", ".join(item.value for item in enum_type) # type: ignore[attr-defined]
71
+ raise RegistryError(f"{path} must be one of: {allowed}") from exc
72
+
73
+
74
+ def _enum_tuple(enum_type: type[_EnumT], value: Any, path: str) -> tuple[_EnumT, ...]:
75
+ if not isinstance(value, list):
76
+ raise RegistryError(f"{path} must be an array")
77
+ return tuple(_enum(enum_type, item, f"{path}[{index}]") for index, item in enumerate(value))
78
+
79
+
80
+ @dataclass(frozen=True, slots=True)
81
+ class Publication:
82
+ """Publication identity used for citation and roster audits."""
83
+
84
+ venue: str
85
+ year: int
86
+ paper_url: str
87
+
88
+ @classmethod
89
+ def from_mapping(cls, raw: Any, path: str) -> Publication:
90
+ data = _mapping(raw, path)
91
+ year = data.get("year")
92
+ if not isinstance(year, int) or isinstance(year, bool) or year < 2000:
93
+ raise RegistryError(f"{path}.year must be an integer publication year")
94
+ return cls(
95
+ venue=_required_string(data, "venue", path),
96
+ year=year,
97
+ paper_url=_required_string(data, "paper_url", path),
98
+ )
99
+
100
+ def to_dict(self) -> dict[str, Any]:
101
+ return {"venue": self.venue, "year": self.year, "paper_url": self.paper_url}
102
+
103
+
104
+ @dataclass(frozen=True, slots=True)
105
+ class UpstreamSource:
106
+ """Pinned public source identity and source-level redistribution policy."""
107
+
108
+ repo_url: str
109
+ commit: str
110
+ license_id: str
111
+ vendoring_allowed: bool
112
+ source_subdir: str | None = None
113
+ license_notes: str | None = None
114
+
115
+ @classmethod
116
+ def from_mapping(cls, raw: Any, path: str) -> UpstreamSource:
117
+ data = _mapping(raw, path)
118
+ commit = _required_string(data, "commit", path)
119
+ if not _FULL_GIT_SHA.fullmatch(commit):
120
+ raise RegistryError(f"{path}.commit must be a lowercase 40-character Git SHA")
121
+ vendoring_allowed = data.get("vendoring_allowed")
122
+ if not isinstance(vendoring_allowed, bool):
123
+ raise RegistryError(f"{path}.vendoring_allowed must be a boolean")
124
+ license_id = _required_string(data, "license_id", path)
125
+ if license_id == "NOASSERTION" and vendoring_allowed:
126
+ raise RegistryError(
127
+ f"{path}.vendoring_allowed must be false when license_id is NOASSERTION"
128
+ )
129
+ return cls(
130
+ repo_url=_required_string(data, "repo_url", path),
131
+ commit=commit,
132
+ license_id=license_id,
133
+ vendoring_allowed=vendoring_allowed,
134
+ source_subdir=_optional_string(data, "source_subdir", path),
135
+ license_notes=_optional_string(data, "license_notes", path),
136
+ )
137
+
138
+ def to_dict(self) -> dict[str, Any]:
139
+ result: dict[str, Any] = {
140
+ "repo_url": self.repo_url,
141
+ "commit": self.commit,
142
+ "license_id": self.license_id,
143
+ "vendoring_allowed": self.vendoring_allowed,
144
+ }
145
+ if self.source_subdir is not None:
146
+ result["source_subdir"] = self.source_subdir
147
+ if self.license_notes is not None:
148
+ result["license_notes"] = self.license_notes
149
+ return result
150
+
151
+
152
+ @dataclass(frozen=True, slots=True)
153
+ class ReleaseProfile:
154
+ """One runnable, replay, component, or training identity for a method."""
155
+
156
+ id: str
157
+ implementation_kind: ImplementationKind
158
+ execution_kind: ExecutionKind
159
+ status: SupportStatus
160
+ delivery_tier: str
161
+ profile_modes: tuple[ProfileKind, ...]
162
+ entrypoint: str | None
163
+ blocking_reasons: tuple[str, ...]
164
+
165
+ @property
166
+ def must_ship(self) -> bool:
167
+ return self.delivery_tier == "must_ship"
168
+
169
+ @property
170
+ def runnable(self) -> bool:
171
+ return self.entrypoint is not None and self.status in {
172
+ SupportStatus.EXPERIMENTAL,
173
+ SupportStatus.SUPPORTED,
174
+ }
175
+
176
+ @property
177
+ def entrypoint_available(self) -> bool:
178
+ """Whether this release exposes any importable integration entrypoint."""
179
+
180
+ return self.entrypoint is not None
181
+
182
+ @property
183
+ def availability(self) -> str:
184
+ """Canonical user-facing availability independent of maturity claims."""
185
+
186
+ if self.runnable:
187
+ return "runnable"
188
+ if self.entrypoint_available:
189
+ return "gated"
190
+ return "locked"
191
+
192
+ @property
193
+ def blocker(self) -> str:
194
+ """Concise reason why a release is not mechanically runnable."""
195
+
196
+ if self.runnable:
197
+ return ""
198
+ if self.blocking_reasons:
199
+ return "; ".join(self.blocking_reasons)
200
+ return f"release status is {self.status.value}"
201
+
202
+ @classmethod
203
+ def from_mapping(cls, raw: Any, path: str) -> ReleaseProfile:
204
+ data = _mapping(raw, path)
205
+ release_id = _required_string(data, "id", path)
206
+ if not _IDENTIFIER.fullmatch(release_id):
207
+ raise RegistryError(f"{path}.id contains unsupported characters")
208
+ delivery_tier = _required_string(data, "delivery_tier", path)
209
+ if delivery_tier not in _DELIVERY_TIERS:
210
+ allowed = ", ".join(sorted(_DELIVERY_TIERS))
211
+ raise RegistryError(f"{path}.delivery_tier must be one of: {allowed}")
212
+ entrypoint = _optional_string(data, "entrypoint", path)
213
+ if entrypoint is not None and ":" not in entrypoint:
214
+ raise RegistryError(f"{path}.entrypoint must use module:attribute syntax")
215
+ profile = cls(
216
+ id=release_id,
217
+ implementation_kind=_enum(
218
+ ImplementationKind,
219
+ data.get("implementation_kind"),
220
+ f"{path}.implementation_kind",
221
+ ),
222
+ execution_kind=_enum(
223
+ ExecutionKind, data.get("execution_kind"), f"{path}.execution_kind"
224
+ ),
225
+ status=_enum(SupportStatus, data.get("status"), f"{path}.status"),
226
+ delivery_tier=delivery_tier,
227
+ profile_modes=_enum_tuple(
228
+ ProfileKind, data.get("profile_modes", []), f"{path}.profile_modes"
229
+ ),
230
+ entrypoint=entrypoint,
231
+ blocking_reasons=_string_tuple(
232
+ data.get("blocking_reasons", []), f"{path}.blocking_reasons"
233
+ ),
234
+ )
235
+ if (
236
+ profile.status
237
+ in {
238
+ SupportStatus.EXPERIMENTAL,
239
+ SupportStatus.SUPPORTED,
240
+ }
241
+ and profile.entrypoint is None
242
+ ):
243
+ raise RegistryError(f"{path}: {profile.status.value} releases require an entrypoint")
244
+ if profile.entrypoint is None and not profile.blocking_reasons:
245
+ raise RegistryError(f"{path}: releases without an entrypoint require blocking_reasons")
246
+ if (
247
+ profile.status
248
+ in {
249
+ SupportStatus.BLOCKED,
250
+ SupportStatus.EXTERNAL_ONLY,
251
+ SupportStatus.NATIVE_ONLY,
252
+ SupportStatus.RETRAIN_REQUIRED,
253
+ }
254
+ and not profile.blocking_reasons
255
+ ):
256
+ raise RegistryError(f"{path}: status {profile.status.value} requires blocking_reasons")
257
+ return profile
258
+
259
+ def to_dict(self) -> dict[str, Any]:
260
+ return {
261
+ "id": self.id,
262
+ "implementation_kind": self.implementation_kind.value,
263
+ "execution_kind": self.execution_kind.value,
264
+ "status": self.status.value,
265
+ "delivery_tier": self.delivery_tier,
266
+ "profile_modes": [item.value for item in self.profile_modes],
267
+ "entrypoint": self.entrypoint,
268
+ "blocking_reasons": list(self.blocking_reasons),
269
+ }
270
+
271
+
272
+ @dataclass(frozen=True, slots=True)
273
+ class AlgorithmCard:
274
+ """Canonical paper-method identity with one or more release profiles."""
275
+
276
+ method_id: str
277
+ display_name: str
278
+ paper_title: str
279
+ semantic_family: SemanticFamily
280
+ release_tier: ReleaseTier
281
+ status: SupportStatus
282
+ publication: Publication
283
+ upstream: UpstreamSource
284
+ releases: tuple[ReleaseProfile, ...]
285
+ semantic_tags: tuple[str, ...] = ()
286
+ notes: str | None = None
287
+
288
+ @classmethod
289
+ def from_mapping(cls, raw: Any, path: str) -> AlgorithmCard:
290
+ data = _mapping(raw, path)
291
+ method_id = _required_string(data, "method_id", path)
292
+ if not _IDENTIFIER.fullmatch(method_id):
293
+ raise RegistryError(f"{path}.method_id contains unsupported characters")
294
+ raw_releases = data.get("releases")
295
+ if not isinstance(raw_releases, list) or not raw_releases:
296
+ raise RegistryError(f"{path}.releases must be a non-empty array")
297
+ releases = tuple(
298
+ ReleaseProfile.from_mapping(item, f"{path}.releases[{index}]")
299
+ for index, item in enumerate(raw_releases)
300
+ )
301
+ local_ids = [item.id for item in releases]
302
+ if len(local_ids) != len(set(local_ids)):
303
+ raise RegistryError(f"{path}.releases contains duplicate release IDs")
304
+ return cls(
305
+ method_id=method_id,
306
+ display_name=_required_string(data, "display_name", path),
307
+ paper_title=_required_string(data, "paper_title", path),
308
+ semantic_family=_enum(
309
+ SemanticFamily, data.get("semantic_family"), f"{path}.semantic_family"
310
+ ),
311
+ release_tier=_enum(ReleaseTier, data.get("release_tier"), f"{path}.release_tier"),
312
+ status=_enum(SupportStatus, data.get("status"), f"{path}.status"),
313
+ publication=Publication.from_mapping(data.get("publication"), f"{path}.publication"),
314
+ upstream=UpstreamSource.from_mapping(data.get("upstream"), f"{path}.upstream"),
315
+ releases=releases,
316
+ semantic_tags=_string_tuple(data.get("semantic_tags", []), f"{path}.semantic_tags"),
317
+ notes=_optional_string(data, "notes", path),
318
+ )
319
+
320
+ def to_dict(self) -> dict[str, Any]:
321
+ result: dict[str, Any] = {
322
+ "method_id": self.method_id,
323
+ "display_name": self.display_name,
324
+ "paper_title": self.paper_title,
325
+ "semantic_family": self.semantic_family.value,
326
+ "release_tier": self.release_tier.value,
327
+ "status": self.status.value,
328
+ "publication": self.publication.to_dict(),
329
+ "upstream": self.upstream.to_dict(),
330
+ "semantic_tags": list(self.semantic_tags),
331
+ "releases": [item.to_dict() for item in self.releases],
332
+ }
333
+ if self.notes is not None:
334
+ result["notes"] = self.notes
335
+ return result
336
+
337
+
338
+ @dataclass(frozen=True, slots=True)
339
+ class RegistryDocument:
340
+ """Validated immutable registry document."""
341
+
342
+ schema_version: int
343
+ registry_id: str
344
+ audit_date: str
345
+ reserve_pool_status: str
346
+ algorithms: tuple[AlgorithmCard, ...]
347
+
348
+ @property
349
+ def releases(self) -> tuple[ReleaseProfile, ...]:
350
+ return tuple(release for method in self.algorithms for release in method.releases)
351
+
352
+ @classmethod
353
+ def from_mapping(cls, raw: Any) -> RegistryDocument:
354
+ data = _mapping(raw, "registry")
355
+ schema_version = data.get("schema_version")
356
+ if schema_version != 1:
357
+ raise RegistryError("registry.schema_version must equal 1")
358
+ raw_algorithms = data.get("algorithms")
359
+ if not isinstance(raw_algorithms, list):
360
+ raise RegistryError("registry.algorithms must be an array")
361
+ algorithms = tuple(
362
+ AlgorithmCard.from_mapping(item, f"registry.algorithms[{index}]")
363
+ for index, item in enumerate(raw_algorithms)
364
+ )
365
+ document = cls(
366
+ schema_version=schema_version,
367
+ registry_id=_required_string(data, "registry_id", "registry"),
368
+ audit_date=_required_string(data, "audit_date", "registry"),
369
+ reserve_pool_status=_required_string(data, "reserve_pool_status", "registry"),
370
+ algorithms=algorithms,
371
+ )
372
+ document.validate_roster()
373
+ return document
374
+
375
+ def validate_roster(self) -> None:
376
+ """Enforce the frozen v0.2 roster and release-level identity rules."""
377
+
378
+ if len(self.algorithms) != 27:
379
+ raise RegistryError(f"registry must contain 27 methods, found {len(self.algorithms)}")
380
+ method_ids = [item.method_id for item in self.algorithms]
381
+ if len(method_ids) != len(set(method_ids)):
382
+ raise RegistryError("registry contains duplicate method IDs")
383
+ release_ids = [item.id for item in self.releases]
384
+ if len(release_ids) != len(set(release_ids)):
385
+ raise RegistryError("registry contains duplicate release IDs")
386
+
387
+ core = [item for item in self.algorithms if item.release_tier is ReleaseTier.CORE]
388
+ optional = [item for item in self.algorithms if item.release_tier is ReleaseTier.OPTIONAL]
389
+ if len(core) != 20 or len(optional) != 7:
390
+ raise RegistryError(
391
+ f"registry tier counts must be core=20 optional=7, "
392
+ f"found core={len(core)} optional={len(optional)}"
393
+ )
394
+ expected_family_counts = {
395
+ SemanticFamily.REFORMULATE: 4,
396
+ SemanticFamily.DECOMPOSE: 5,
397
+ SemanticFamily.ACQUIRE: 5,
398
+ SemanticFamily.CLARIFY: 2,
399
+ SemanticFamily.CURATE: 4,
400
+ }
401
+ actual_family_counts = {
402
+ family: sum(item.semantic_family is family for item in core)
403
+ for family in expected_family_counts
404
+ }
405
+ if actual_family_counts != expected_family_counts:
406
+ rendered = {key.value: value for key, value in actual_family_counts.items()}
407
+ raise RegistryError(
408
+ f"core semantic-family counts do not match frozen roster: {rendered}"
409
+ )
410
+
411
+ must_ship = {item.id for item in self.releases if item.must_ship}
412
+ expected_must_ship = {
413
+ "rewrite.query2doc.official_cached",
414
+ "rewrite.query2doc.querygym_live",
415
+ "plan.plan_and_solve.ps_prompt",
416
+ "plan.decomp.full",
417
+ "plan.self_ask.full_loop",
418
+ "plan.plan_and_budget.native_cached_soft_budget",
419
+ "acquire.hyde.paper_reimplementation",
420
+ "acquire.ircot.controlled",
421
+ "clarify.udcs.repo_native_prompt_route",
422
+ "curate.longllmlingua.official",
423
+ "curate.llmlingua2.xlm_roberta_official",
424
+ "recipe.ace.offline",
425
+ }
426
+ if must_ship != expected_must_ship:
427
+ missing = sorted(expected_must_ship - must_ship)
428
+ extra = sorted(must_ship - expected_must_ship)
429
+ raise RegistryError(
430
+ f"must-ship release set differs from the frozen plan; missing={missing}, extra={extra}"
431
+ )
432
+
433
+ def to_dict(self) -> dict[str, Any]:
434
+ return {
435
+ "schema_version": self.schema_version,
436
+ "registry_id": self.registry_id,
437
+ "audit_date": self.audit_date,
438
+ "reserve_pool_status": self.reserve_pool_status,
439
+ "algorithms": [item.to_dict() for item in self.algorithms],
440
+ }
441
+
442
+
443
+ __all__ = [
444
+ "AlgorithmCard",
445
+ "Publication",
446
+ "RegistryDocument",
447
+ "ReleaseProfile",
448
+ "UpstreamSource",
449
+ ]
@@ -0,0 +1,30 @@
1
+ """Execution, materialization, comparison balance, cache, and worker APIs."""
2
+
3
+ from .balance import (
4
+ BalanceAuditor,
5
+ BalanceReport,
6
+ ComparisonArm,
7
+ ComparisonProfile,
8
+ context_dependency_fingerprints,
9
+ )
10
+ from .cache import run_cache_key
11
+ from .composite import CompositeInterventionRunner, CompositeRunRecord
12
+ from .engine import InterventionRunner, RunRecord, RunStatus
13
+ from .worker import FunctionWorkerClient, JsonLineWorkerClient, WorkerClient
14
+
15
+ __all__ = [
16
+ "BalanceAuditor",
17
+ "BalanceReport",
18
+ "ComparisonArm",
19
+ "ComparisonProfile",
20
+ "CompositeInterventionRunner",
21
+ "CompositeRunRecord",
22
+ "FunctionWorkerClient",
23
+ "InterventionRunner",
24
+ "JsonLineWorkerClient",
25
+ "RunRecord",
26
+ "RunStatus",
27
+ "WorkerClient",
28
+ "context_dependency_fingerprints",
29
+ "run_cache_key",
30
+ ]