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,410 @@
1
+ """Verified prepared-benchmark loading for the local Studio.
2
+
3
+ This module never downloads data and never accepts paths from a browser
4
+ request. The server process supplies one prepared-data root, the benchmark
5
+ layer re-verifies the pinned cache, and only then is a bounded deterministic
6
+ slice projected into Studio execution objects.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import hashlib
12
+ import json
13
+ from collections.abc import Mapping
14
+ from dataclasses import dataclass
15
+ from pathlib import Path
16
+ from types import MappingProxyType
17
+ from typing import Any
18
+
19
+ from agentinputlab.backends.retrieval import Document
20
+ from agentinputlab.benchmarks import (
21
+ BenchmarkSmokeAsset,
22
+ BenchmarkSmokeAssetRegistry,
23
+ PreparedBenchmark,
24
+ load_prepared_benchmark,
25
+ production_benchmark_specs,
26
+ )
27
+ from agentinputlab.contracts.errors import ArtifactError
28
+ from agentinputlab.contracts.serialization import canonical_json
29
+
30
+ SUPPORTED_PREPARED_CELLS = frozenset({"beir.arguana"})
31
+ _PRODUCTION_DATA_SPECS = {
32
+ spec.cell_id: spec
33
+ for spec in production_benchmark_specs()
34
+ if spec.adapter_kind in {"qa", "retrieval"}
35
+ }
36
+ PRODUCTION_DATA_CELLS = frozenset(_PRODUCTION_DATA_SPECS)
37
+ MAX_PREPARED_SAMPLE_LIMIT = 4
38
+
39
+
40
+ @dataclass(frozen=True, slots=True)
41
+ class PreparedStudioExample:
42
+ """Optimizer-visible input paired with evaluator-only relevance labels."""
43
+
44
+ example_id: str
45
+ query: str
46
+ instruction: str
47
+ visible_metadata: Mapping[str, Any]
48
+ relevant_document_ids: tuple[str, ...]
49
+
50
+ def __post_init__(self) -> None:
51
+ object.__setattr__(self, "visible_metadata", MappingProxyType(dict(self.visible_metadata)))
52
+
53
+ @property
54
+ def primary_relevant_document_id(self) -> str | None:
55
+ return self.relevant_document_ids[0] if self.relevant_document_ids else None
56
+
57
+
58
+ @dataclass(frozen=True, slots=True)
59
+ class PreparedStudioDataset:
60
+ cell_id: str
61
+ asset_id: str
62
+ source_sha256: str
63
+ processor: str
64
+ processor_revision: str
65
+ counts: Mapping[str, int]
66
+ file_sha256: Mapping[str, str]
67
+ examples: tuple[PreparedStudioExample, ...]
68
+ documents: tuple[Document, ...]
69
+ selection_rule: str
70
+ selection_fingerprint: str
71
+
72
+ def __post_init__(self) -> None:
73
+ object.__setattr__(self, "counts", MappingProxyType(dict(self.counts)))
74
+ object.__setattr__(self, "file_sha256", MappingProxyType(dict(self.file_sha256)))
75
+
76
+ def audit_payload(self) -> dict[str, Any]:
77
+ """Return cache identity without disclosing the server filesystem path."""
78
+
79
+ return {
80
+ "cell_id": self.cell_id,
81
+ "asset_id": self.asset_id,
82
+ "source_sha256": self.source_sha256,
83
+ "processor": self.processor,
84
+ "processor_revision": self.processor_revision,
85
+ "counts": dict(self.counts),
86
+ "file_sha256": dict(self.file_sha256),
87
+ "gold_separated": True,
88
+ "selection_rule": self.selection_rule,
89
+ "selection_fingerprint": self.selection_fingerprint,
90
+ "selected_examples": len(self.examples),
91
+ }
92
+
93
+
94
+ @dataclass(frozen=True, slots=True)
95
+ class PreparedProductionCell:
96
+ """Metadata-only proof that every locked source component is prepared."""
97
+
98
+ cell_id: str
99
+ split: str
100
+ adapter_kind: str
101
+ assets: Mapping[str, PreparedBenchmark]
102
+
103
+ def __post_init__(self) -> None:
104
+ if self.cell_id not in PRODUCTION_DATA_CELLS:
105
+ raise ValueError("prepared production cell is not a stateless production cell")
106
+ if self.adapter_kind not in {"qa", "retrieval"}:
107
+ raise ValueError("prepared production cell adapter_kind must be qa or retrieval")
108
+ spec = _PRODUCTION_DATA_SPECS[self.cell_id]
109
+ if self.split != spec.split or self.adapter_kind != spec.adapter_kind:
110
+ raise ValueError("prepared production cell identity differs from its locked spec")
111
+ assets = dict(self.assets)
112
+ if not assets:
113
+ raise ValueError("prepared production cell requires at least one asset")
114
+ expected_asset_ids = {spec.query_asset_id}
115
+ if spec.corpus_asset_id is not None:
116
+ expected_asset_ids.add(spec.corpus_asset_id)
117
+ if set(assets) != expected_asset_ids:
118
+ raise ValueError("prepared production cell does not contain its complete asset set")
119
+ if any(prepared.cell_id != self.cell_id for prepared in assets.values()):
120
+ raise ValueError("prepared production asset cell identity differs from its cell")
121
+ if any(asset_id != prepared.asset_id for asset_id, prepared in assets.items()):
122
+ raise ValueError("prepared production asset key differs from its asset identity")
123
+ object.__setattr__(self, "assets", MappingProxyType(assets))
124
+
125
+ def audit_payload(self) -> dict[str, Any]:
126
+ """Expose hashes and counts without loading rows or disclosing paths."""
127
+
128
+ return {
129
+ "cell_id": self.cell_id,
130
+ "split": self.split,
131
+ "adapter_kind": self.adapter_kind,
132
+ "complete_asset_set": True,
133
+ "gold_separated": True,
134
+ "assets": {
135
+ asset_id: {
136
+ "source_sha256": prepared.source_sha256,
137
+ "processor": prepared.processor,
138
+ "processor_revision": prepared.processor_revision,
139
+ "counts": dict(prepared.counts),
140
+ "file_sha256": dict(prepared.file_sha256),
141
+ }
142
+ for asset_id, prepared in sorted(self.assets.items())
143
+ },
144
+ }
145
+
146
+
147
+ def discover_prepared_production_cells(
148
+ prepared_root: str | Path | None,
149
+ ) -> dict[str, PreparedProductionCell]:
150
+ """Verify complete asset sets for the seven stateless production cells.
151
+
152
+ This performs cache integrity checks only. It deliberately does not
153
+ construct adapters, load full QA rows, build a BRIGHT index, or claim that
154
+ Studio has a downstream predictor for the cell.
155
+ """
156
+
157
+ if prepared_root is None:
158
+ return {}
159
+ root = Path(prepared_root).expanduser().resolve()
160
+ registry = BenchmarkSmokeAssetRegistry.default()
161
+ discovered: dict[str, PreparedProductionCell] = {}
162
+ for spec in production_benchmark_specs():
163
+ if spec.cell_id not in PRODUCTION_DATA_CELLS:
164
+ continue
165
+ asset_ids = (
166
+ (spec.query_asset_id,)
167
+ if spec.corpus_asset_id is None
168
+ else (spec.query_asset_id, spec.corpus_asset_id)
169
+ )
170
+ try:
171
+ prepared_assets = {
172
+ asset_id: load_prepared_benchmark(registry.get(asset_id), root)
173
+ for asset_id in asset_ids
174
+ }
175
+ except (ArtifactError, OSError):
176
+ continue
177
+ discovered[spec.cell_id] = PreparedProductionCell(
178
+ cell_id=spec.cell_id,
179
+ split=spec.split,
180
+ adapter_kind=spec.adapter_kind,
181
+ assets=prepared_assets,
182
+ )
183
+ return discovered
184
+
185
+
186
+ def discover_prepared_benchmarks(
187
+ prepared_root: str | Path | None,
188
+ ) -> dict[str, PreparedBenchmark]:
189
+ """Discover only checksum-verified, license-cleared smoke assets.
190
+
191
+ Missing or tampered caches are intentionally treated as unavailable. The
192
+ detailed filesystem error is not put in the browser catalog because it can
193
+ reveal local paths.
194
+ """
195
+
196
+ if prepared_root is None:
197
+ return {}
198
+ root = Path(prepared_root).expanduser().resolve()
199
+ discovered: dict[str, PreparedBenchmark] = {}
200
+ for asset in BenchmarkSmokeAssetRegistry.default().list():
201
+ if asset.cell_id not in SUPPORTED_PREPARED_CELLS:
202
+ continue
203
+ try:
204
+ discovered[asset.cell_id] = load_prepared_benchmark(asset, root)
205
+ except (ArtifactError, OSError):
206
+ continue
207
+ return discovered
208
+
209
+
210
+ def load_verified_studio_dataset(
211
+ *,
212
+ cell_id: str,
213
+ prepared_root: str | Path,
214
+ sample_limit: int,
215
+ ) -> PreparedStudioDataset:
216
+ """Re-verify a known cache and load a deterministic bounded sample."""
217
+
218
+ if cell_id not in SUPPORTED_PREPARED_CELLS:
219
+ raise ArtifactError(f"Studio has no prepared execution adapter for {cell_id}")
220
+ asset = _asset_for_cell(cell_id)
221
+ prepared = load_prepared_benchmark(asset, prepared_root)
222
+ return project_prepared_benchmark(asset, prepared, sample_limit=sample_limit)
223
+
224
+
225
+ def project_prepared_benchmark(
226
+ asset: BenchmarkSmokeAsset,
227
+ prepared: PreparedBenchmark,
228
+ *,
229
+ sample_limit: int,
230
+ ) -> PreparedStudioDataset:
231
+ """Project an already verified cache into gold-separated runtime objects."""
232
+
233
+ if asset.cell_id not in SUPPORTED_PREPARED_CELLS:
234
+ raise ArtifactError(f"Studio has no prepared execution adapter for {asset.cell_id}")
235
+ if prepared.asset_id != asset.asset_id or prepared.source_sha256 != asset.sha256:
236
+ raise ArtifactError("prepared benchmark identity does not match its audited asset")
237
+ if not 1 <= sample_limit <= MAX_PREPARED_SAMPLE_LIMIT:
238
+ raise ValueError(
239
+ f"prepared Studio sample_limit must be in [1, {MAX_PREPARED_SAMPLE_LIMIT}]"
240
+ )
241
+ corpus_path = prepared.corpus_path
242
+ if corpus_path is None:
243
+ raise ArtifactError(f"prepared benchmark has no retrieval corpus: {asset.asset_id}")
244
+
245
+ inputs = _records_by_id(prepared.inputs_path, label="prepared inputs")
246
+ gold = _records_by_id(prepared.gold_path, label="prepared gold")
247
+ if set(inputs) != set(gold):
248
+ raise ArtifactError("prepared input and gold example IDs do not match")
249
+
250
+ selected_ids = tuple(sorted(inputs)[:sample_limit])
251
+ examples: list[PreparedStudioExample] = []
252
+ for example_id in selected_ids:
253
+ input_row = inputs[example_id]
254
+ gold_row = gold[example_id]
255
+ query = _required_text(input_row, "query", label="prepared input")
256
+ instruction = _required_text(input_row, "instruction", label="prepared input")
257
+ visible_metadata = input_row.get("visible_metadata", {})
258
+ if not isinstance(visible_metadata, dict):
259
+ raise ArtifactError("prepared input visible_metadata must be an object")
260
+ relevance = gold_row.get("relevance")
261
+ if not isinstance(relevance, dict):
262
+ raise ArtifactError("prepared retrieval gold must contain a relevance object")
263
+ relevant_ids = tuple(
264
+ sorted(
265
+ document_id
266
+ for document_id, score in relevance.items()
267
+ if isinstance(document_id, str)
268
+ and document_id
269
+ and isinstance(score, int)
270
+ and not isinstance(score, bool)
271
+ and score > 0
272
+ )
273
+ )
274
+ if not relevant_ids:
275
+ raise ArtifactError(f"prepared example {example_id!r} has no positive relevance label")
276
+ examples.append(
277
+ PreparedStudioExample(
278
+ example_id=example_id,
279
+ query=query,
280
+ instruction=instruction,
281
+ visible_metadata=visible_metadata,
282
+ relevant_document_ids=relevant_ids,
283
+ )
284
+ )
285
+
286
+ revision = f"{asset.asset_id}:{prepared.source_sha256}"
287
+ documents: list[Document] = []
288
+ for row in _read_jsonl(corpus_path, label="prepared corpus"):
289
+ document_id = _required_text(row, "id", label="prepared corpus")
290
+ documents.append(
291
+ Document(
292
+ doc_id=document_id,
293
+ title=_optional_text(row, "title", label="prepared corpus"),
294
+ text=_required_text(row, "text", label="prepared corpus"),
295
+ corpus_revision=revision,
296
+ )
297
+ )
298
+ if len(documents) != prepared.counts.get("corpus"):
299
+ raise ArtifactError("prepared corpus count changed after cache verification")
300
+
301
+ selection_rule = "lexicographic_example_id_first_n"
302
+ selection_fingerprint = hashlib.sha256(
303
+ canonical_json(
304
+ {
305
+ "asset_id": asset.asset_id,
306
+ "sample_limit": sample_limit,
307
+ "selection_rule": selection_rule,
308
+ "selected_ids": selected_ids,
309
+ }
310
+ ).encode("utf-8")
311
+ ).hexdigest()
312
+ return PreparedStudioDataset(
313
+ cell_id=asset.cell_id,
314
+ asset_id=asset.asset_id,
315
+ source_sha256=prepared.source_sha256,
316
+ processor=prepared.processor,
317
+ processor_revision=prepared.processor_revision,
318
+ counts=prepared.counts,
319
+ file_sha256=prepared.file_sha256,
320
+ examples=tuple(examples),
321
+ documents=tuple(documents),
322
+ selection_rule=selection_rule,
323
+ selection_fingerprint=selection_fingerprint,
324
+ )
325
+
326
+
327
+ def prepared_catalog_payload(
328
+ asset: BenchmarkSmokeAsset,
329
+ prepared: PreparedBenchmark,
330
+ ) -> dict[str, Any]:
331
+ """Summarize a verified cache for the UI without local path disclosure."""
332
+
333
+ return {
334
+ "asset_id": asset.asset_id,
335
+ "source_sha256": prepared.source_sha256,
336
+ "processor": prepared.processor,
337
+ "processor_revision": prepared.processor_revision,
338
+ "counts": dict(prepared.counts),
339
+ "file_sha256": dict(prepared.file_sha256),
340
+ "gold_separated": True,
341
+ "sample_limit": MAX_PREPARED_SAMPLE_LIMIT,
342
+ }
343
+
344
+
345
+ def _asset_for_cell(cell_id: str) -> BenchmarkSmokeAsset:
346
+ matches = [
347
+ asset for asset in BenchmarkSmokeAssetRegistry.default().list() if asset.cell_id == cell_id
348
+ ]
349
+ if len(matches) != 1:
350
+ raise ArtifactError(
351
+ f"expected one verified smoke asset for {cell_id}, found {len(matches)}"
352
+ )
353
+ return matches[0]
354
+
355
+
356
+ def _records_by_id(path: Path, *, label: str) -> dict[str, dict[str, Any]]:
357
+ records: dict[str, dict[str, Any]] = {}
358
+ for row in _read_jsonl(path, label=label):
359
+ row_id = _required_text(row, "id", label=label)
360
+ if row_id in records:
361
+ raise ArtifactError(f"{label} contains duplicate ID {row_id!r}")
362
+ records[row_id] = row
363
+ return records
364
+
365
+
366
+ def _read_jsonl(path: Path, *, label: str) -> tuple[dict[str, Any], ...]:
367
+ records: list[dict[str, Any]] = []
368
+ try:
369
+ with path.open(encoding="utf-8") as handle:
370
+ for line_number, raw in enumerate(handle, start=1):
371
+ if not raw.strip():
372
+ raise ArtifactError(f"{label} contains a blank line at {line_number}")
373
+ value = json.loads(raw)
374
+ if not isinstance(value, dict):
375
+ raise ArtifactError(f"{label} record {line_number} must be an object")
376
+ records.append(value)
377
+ except (OSError, UnicodeError, json.JSONDecodeError) as exc:
378
+ raise ArtifactError(f"{label} is not valid UTF-8 JSONL") from exc
379
+ if not records:
380
+ raise ArtifactError(f"{label} contains no records")
381
+ return tuple(records)
382
+
383
+
384
+ def _required_text(record: Mapping[str, Any], key: str, *, label: str) -> str:
385
+ value = record.get(key)
386
+ if not isinstance(value, str) or not value.strip():
387
+ raise ArtifactError(f"{label} field {key!r} must be a non-empty string")
388
+ return value
389
+
390
+
391
+ def _optional_text(record: Mapping[str, Any], key: str, *, label: str) -> str:
392
+ value = record.get(key, "")
393
+ if not isinstance(value, str):
394
+ raise ArtifactError(f"{label} field {key!r} must be a string")
395
+ return value
396
+
397
+
398
+ __all__ = [
399
+ "MAX_PREPARED_SAMPLE_LIMIT",
400
+ "PRODUCTION_DATA_CELLS",
401
+ "SUPPORTED_PREPARED_CELLS",
402
+ "PreparedProductionCell",
403
+ "PreparedStudioDataset",
404
+ "PreparedStudioExample",
405
+ "discover_prepared_benchmarks",
406
+ "discover_prepared_production_cells",
407
+ "load_verified_studio_dataset",
408
+ "prepared_catalog_payload",
409
+ "project_prepared_benchmark",
410
+ ]