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,189 @@
1
+ """InfoCQR's trained T5 student, separate from its teacher and saved rewrites."""
2
+ from __future__ import annotations
3
+
4
+ from collections.abc import Mapping
5
+ from dataclasses import dataclass, replace
6
+
7
+ from agentinputlab.contracts import (
8
+ AlgorithmOutputError,
9
+ ArtifactError,
10
+ BudgetExceededError,
11
+ ExecutionTrace,
12
+ ExternalDependencyError,
13
+ FrozenAgentState,
14
+ InputPatch,
15
+ InterventionContext,
16
+ PatchOp,
17
+ PatchOperation,
18
+ SemanticFamily,
19
+ TraceEvent,
20
+ TracePhase,
21
+ ValidationError,
22
+ )
23
+ from agentinputlab.contracts.serialization import content_hash
24
+ from agentinputlab.observability import external_usage_counters, normalize_external_usage
25
+
26
+ from .cache_replay import INFOCQR_UPSTREAM_COMMIT
27
+ from .external import _qrecc_conversation
28
+
29
+ INFOCQR_STUDENT_RELEASE = "rewrite.infocqr.t5_student_external"
30
+ INFOCQR_STUDENT_MODE = "source_pinned_t5_student.v1"
31
+ INFOCQR_STUDENT_SCHEMA = "agentinputlab.infocqr.student-request.v1"
32
+ INFOCQR_STUDENT_SOURCE_HASHES = {
33
+ "T5QR/T5test.py": "c9c1b78d8147035ea3c300e7b29c791fb171ce399f8c1269a6e1a11b9bc05eb8",
34
+ "T5QR/T5train.py": "d40bc17e365d9f626fd5bf1fd14fffd3073c0b6772434a78eac6412d6fd2f4de",
35
+ "T5QR/utils/dataCollator.py": "3e4a466b1f729cba306b4953f1e825efde14316e83586c0952dc0e404a974d5d",
36
+ "T5QR/data_preprocessing.ipynb": "6a7dd60ed6f84d89d1313850732599b94e55889cdb694b00f7d2c42df97f0695",
37
+ }
38
+
39
+
40
+ @dataclass(frozen=True, slots=True)
41
+ class InfoCQRStudentRequest:
42
+ state_hash: str
43
+ task_id: str
44
+ query: str
45
+ conversation_source: str
46
+ conversation_no: int
47
+ turn_no: int
48
+ new_context: tuple[str, ...]
49
+ dataset_revision: str
50
+ checkpoint_manifest_sha256: str
51
+ seed: int
52
+ phase: str = "prepare"
53
+ schema_version: str = INFOCQR_STUDENT_SCHEMA
54
+
55
+ def __post_init__(self):
56
+ object.__setattr__(self, "new_context", tuple(self.new_context))
57
+ if self.schema_version != INFOCQR_STUDENT_SCHEMA:
58
+ raise ValidationError("InfoCQR student request schema differs")
59
+ if self.phase not in {"prepare", "generate", "discard"}:
60
+ raise ValidationError("InfoCQR student request phase differs")
61
+ for value in (self.state_hash, self.checkpoint_manifest_sha256):
62
+ if not _sha256(value):
63
+ raise ValidationError("InfoCQR student requires SHA-256 bindings")
64
+ if not all(isinstance(v, str) and v.strip() for v in
65
+ (self.query, self.conversation_source, self.dataset_revision)):
66
+ raise ValidationError("InfoCQR student requires visible query/conversation/dataset")
67
+ if any(type(v) is not int or v < 1 for v in (self.conversation_no, self.turn_no)):
68
+ raise ValidationError("InfoCQR student conversation/turn IDs must be positive")
69
+ if (len(self.new_context) % 2 or any(not isinstance(v, str) for v in self.new_context)
70
+ or (self.turn_no == 1 and self.new_context)):
71
+ raise ValidationError("InfoCQR student requires complete visible Q/A history")
72
+ if type(self.seed) is not int or self.seed < 0:
73
+ raise ValidationError("InfoCQR student seed must be non-negative")
74
+
75
+ @property
76
+ def request_id(self):
77
+ return content_hash(self)
78
+
79
+ def external_reservation(self):
80
+ return {"model_calls": 1 if self.phase == "generate" else 0}
81
+
82
+ def raise_for_external_status(self, result):
83
+ if isinstance(result, Mapping) and result.get("status") == "empty_output":
84
+ raise AlgorithmOutputError("InfoCQR T5 student produced an empty rewrite; no retry")
85
+ if isinstance(result, Mapping) and result.get("status") == "decode_failed":
86
+ raise AlgorithmOutputError("InfoCQR T5 student decoding failed after generation; usage retained")
87
+
88
+
89
+ def _sha256(value):
90
+ return isinstance(value, str) and len(value) == 64 and all(c in "0123456789abcdef" for c in value)
91
+
92
+
93
+ class InfoCQRStudentExternal:
94
+ """Rewrite the native QReCC conversational view using an explicit T5 artifact.
95
+
96
+ The rewriter is a fixed auxiliary student, not the downstream backbone. Its
97
+ generation is independently accounted through context.external_runtime.
98
+ Neither author caches, teacher calls nor a generic t5-base can substitute.
99
+ """
100
+
101
+ method_id = "infocqr"
102
+ release_id = INFOCQR_STUDENT_RELEASE
103
+ family = SemanticFamily.REFORMULATE
104
+
105
+ def __init__(self, *, checkpoint_manifest_sha256: str, dataset_revision: str,
106
+ profile_kind: str = "controlled_adapter", source_license_acknowledged: bool = False):
107
+ if not _sha256(checkpoint_manifest_sha256):
108
+ raise ValidationError("InfoCQR student requires a trusted checkpoint manifest SHA-256")
109
+ if not isinstance(dataset_revision, str) or not dataset_revision.strip():
110
+ raise ValidationError("InfoCQR student requires the QReCC dataset revision")
111
+ if profile_kind not in {"official_native", "controlled_adapter"}:
112
+ raise ValidationError("InfoCQR student profile kind differs")
113
+ if source_license_acknowledged is not True:
114
+ raise ValidationError("InfoCQR student requires explicit external-source acknowledgement")
115
+ self.checkpoint_manifest_sha256 = checkpoint_manifest_sha256
116
+ self.dataset_revision, self.profile_kind = dataset_revision, profile_kind
117
+ self.source_license_acknowledged = True
118
+
119
+ def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
120
+ conversation = _qrecc_conversation(state)
121
+ if state.metadata.get("benchmark_id", "qrecc") not in {"qrecc", "qrecc.main", "qrecc.retrieval"}:
122
+ raise ValidationError("InfoCQR student native release requires QReCC, not a renamed QA dataset")
123
+ if state.budget.max_model_calls < 1 or state.budget.max_output_tokens < 63:
124
+ raise BudgetExceededError("InfoCQR student requires one call and its native 63-new-token ceiling")
125
+ runtime = context.external_runtime
126
+ if runtime is None or not callable(getattr(runtime, "run", None)) or not callable(getattr(runtime, "fingerprint", None)):
127
+ raise ExternalDependencyError("InfoCQR student requires InfoCQRStudentRuntime with trained weights")
128
+ identity = runtime.fingerprint()
129
+ if (identity.get("mode") != INFOCQR_STUDENT_MODE
130
+ or identity.get("upstream_revision") != INFOCQR_UPSTREAM_COMMIT
131
+ or identity.get("checkpoint_manifest_sha256") != self.checkpoint_manifest_sha256
132
+ or identity.get("dataset_revision") != self.dataset_revision):
133
+ raise ArtifactError("InfoCQR student runtime/source/checkpoint/dataset binding differs")
134
+ if self.profile_kind == "official_native" and identity.get("provenance_kind") != "author_student":
135
+ raise ArtifactError("a user-trained student must not be labeled as the author's checkpoint")
136
+ request = InfoCQRStudentRequest(
137
+ state_hash=state.state_hash, task_id=state.task_id, query=state.query,
138
+ dataset_revision=self.dataset_revision,
139
+ checkpoint_manifest_sha256=self.checkpoint_manifest_sha256,
140
+ seed=context.seed, **conversation,
141
+ )
142
+ # Loading weights/tokenization is a zero-generation execution preflight,
143
+ # never a failed scientific attempt charged as one model invocation.
144
+ prepared = runtime.run(request)
145
+ if (not isinstance(prepared, Mapping) or prepared.get("status") != "ready"
146
+ or prepared.get("request_id") != request.request_id
147
+ or prepared.get("identity") != identity
148
+ or type(prepared.get("input_tokens")) is not int
149
+ or not 1 <= prepared["input_tokens"] <= 384
150
+ or normalize_external_usage(prepared.get("usage")).model_calls != 0):
151
+ raise AlgorithmOutputError("InfoCQR student execution preflight differs")
152
+ if (state.budget.max_context_tokens is not None
153
+ and prepared["input_tokens"] > state.budget.max_context_tokens):
154
+ runtime.run(replace(request, phase="discard"))
155
+ raise BudgetExceededError("InfoCQR student exceeds the input-token budget before generation")
156
+ request = replace(request, phase="generate")
157
+ response = runtime.run(request)
158
+ if (not isinstance(response, Mapping) or response.get("request_id") != request.request_id
159
+ or response.get("identity") != identity or response.get("status") != "ok"):
160
+ raise AlgorithmOutputError("InfoCQR student returned another request/runtime or failed status")
161
+ rewrite = response.get("rewrite")
162
+ if not isinstance(rewrite, str) or not rewrite.strip():
163
+ raise AlgorithmOutputError("InfoCQR student returned an empty rewrite; no fallback")
164
+ usage = normalize_external_usage(response.get("usage"))
165
+ if usage.model_calls != 1 or usage.retrieval_calls or usage.output_tokens > 63:
166
+ raise AlgorithmOutputError("InfoCQR student native generation usage differs")
167
+ return InputPatch(
168
+ method_id=self.method_id, release_id=self.release_id,
169
+ source_state_hash=state.state_hash,
170
+ operations=(PatchOperation(PatchOp.REPLACE_QUERY, rewrite, target="query",
171
+ rationale="source-pinned trained InfoCQR T5 student"),),
172
+ trace=ExecutionTrace(method_id=self.method_id, release_id=self.release_id,
173
+ events=(TraceEvent(TracePhase.OBSERVE, "native_t5_student", {
174
+ "request_id": request.request_id, "source_text_hash": response["source_text_hash"],
175
+ "checkpoint_manifest_sha256": self.checkpoint_manifest_sha256,
176
+ "max_source_length": 384, "generation_max_length_including_start": 64,
177
+ "target_labels_visible_to_generator": False,
178
+ }),), counters=external_usage_counters(usage)),
179
+ implementation_identity=f"external_student:InfoCQR@{INFOCQR_UPSTREAM_COMMIT}",
180
+ profile_kind=self.profile_kind,
181
+ metadata={"student_runtime": identity, "fixed_auxiliary_not_downstream_backbone": True,
182
+ "native_source_logic": True, "native_environment_parity_claimed": False,
183
+ "teacher_or_cache_fallback": False, "implicit_retry": False,
184
+ "checkpoint_provenance_verification": "caller_receipt_not_authorship_certificate",
185
+ "paper_result_parity_claimed": False},
186
+ )
187
+
188
+
189
+ __all__ = ["InfoCQRStudentExternal", "InfoCQRStudentRequest"]
@@ -0,0 +1,42 @@
1
+ """Query2doc official-cache and QueryGym community-live profiles."""
2
+
3
+ from .controlled_live import Query2DocControlledLive, Query2DocLiveBindings, Query2DocLiveConfig
4
+ from .models import OfficialQuery2DocRow, QueryGymMode, QueryGymRawResult, QueryGymRequest
5
+ from .official_cached import (
6
+ OFFICIAL_ARTIFACT_SHA256,
7
+ OFFICIAL_DATASET_REVISION,
8
+ OFFICIAL_TREC_ARTIFACTS,
9
+ Query2DocCache,
10
+ Query2DocFixtureCached,
11
+ Query2DocOfficialCached,
12
+ compose_sparse_expansion,
13
+ )
14
+ from .querygym_bridge import (
15
+ QUERYGYM_REVISION,
16
+ QueryGymLiveBridge,
17
+ QueryGymRuntime,
18
+ select_demonstration_ids,
19
+ )
20
+ from .querygym_runtime import PinnedQueryGymRuntime
21
+
22
+ __all__ = [
23
+ "OFFICIAL_ARTIFACT_SHA256",
24
+ "OFFICIAL_DATASET_REVISION",
25
+ "OFFICIAL_TREC_ARTIFACTS",
26
+ "QUERYGYM_REVISION",
27
+ "OfficialQuery2DocRow",
28
+ "PinnedQueryGymRuntime",
29
+ "Query2DocCache",
30
+ "Query2DocControlledLive",
31
+ "Query2DocFixtureCached",
32
+ "Query2DocLiveBindings",
33
+ "Query2DocLiveConfig",
34
+ "Query2DocOfficialCached",
35
+ "QueryGymLiveBridge",
36
+ "QueryGymMode",
37
+ "QueryGymRawResult",
38
+ "QueryGymRequest",
39
+ "QueryGymRuntime",
40
+ "compose_sparse_expansion",
41
+ "select_demonstration_ids",
42
+ ]
@@ -0,0 +1,190 @@
1
+ """Dependency-locked QueryGym live Query2doc; native generation logic is unchanged."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from collections.abc import Mapping
7
+ from dataclasses import dataclass, replace
8
+ from typing import Any
9
+
10
+ from agentinputlab.backends.llm import GenerationRequest
11
+ from agentinputlab.contracts import (
12
+ ExecutionBudget,
13
+ ExternalDependencyError,
14
+ FrozenAgentState,
15
+ InputPatch,
16
+ InterventionContext,
17
+ SemanticFamily,
18
+ TraceEvent,
19
+ TracePhase,
20
+ ValidationError,
21
+ )
22
+ from agentinputlab.contracts.serialization import content_hash, freeze_mapping
23
+
24
+ from .models import QueryGymMode
25
+ from .querygym_bridge import QUERYGYM_REVISION, QueryGymLiveBridge
26
+
27
+
28
+ @dataclass(frozen=True, slots=True)
29
+ class Query2DocLiveConfig:
30
+ mode: QueryGymMode | str = QueryGymMode.ZERO_SHOT
31
+ demonstration_ids: tuple[str, ...] = ()
32
+ temperature: float = 0.7
33
+ max_tokens: int = 256
34
+
35
+ def __post_init__(self) -> None:
36
+ if not isinstance(self.mode, (str, QueryGymMode)):
37
+ raise ValidationError("controlled Query2doc mode must be text")
38
+ object.__setattr__(self, "mode", QueryGymMode.parse(self.mode))
39
+ if isinstance(self.demonstration_ids, (str, bytes)):
40
+ raise ValidationError("controlled Query2doc demonstrations must be an ID sequence")
41
+ ids = tuple(self.demonstration_ids)
42
+ if any(not isinstance(i, str) or not i.strip() for i in ids) or len(set(ids)) != len(ids):
43
+ raise ValidationError("controlled Query2doc demonstration IDs must be unique nonempty text")
44
+ object.__setattr__(self, "demonstration_ids", ids)
45
+ if self.mode is QueryGymMode.FEW_SHOT and not ids:
46
+ raise ValidationError("controlled Query2doc few-shot mode requires frozen demonstration IDs")
47
+ if self.mode is not QueryGymMode.FEW_SHOT and ids:
48
+ raise ValidationError("controlled Query2doc demonstrations require few-shot mode")
49
+ # Reuse the public request's finite numeric/token validation without a
50
+ # model call. Prompt rendering still belongs to the pinned native worker.
51
+ GenerationRequest(prompt="configuration validation", temperature=self.temperature,
52
+ max_tokens=self.max_tokens)
53
+
54
+
55
+ _DEFAULT_CONFIG = Query2DocLiveConfig()
56
+
57
+
58
+ def _identity(value: Any, label: str) -> Mapping[str, Any]:
59
+ if not isinstance(value, Mapping) or not value:
60
+ raise ValidationError(f"controlled Query2doc {label} fingerprint must be nonempty")
61
+ try:
62
+ frozen = freeze_mapping(value)
63
+ content_hash(frozen)
64
+ except (TypeError, ValueError, OverflowError) as exc:
65
+ raise ValidationError(f"controlled Query2doc {label} fingerprint must be canonical JSON") from exc
66
+ return frozen
67
+
68
+
69
+ def _runtime_identities(context: InterventionContext) -> dict[str, Mapping[str, Any]]:
70
+ values = {}
71
+ for label, dependency, operation in (
72
+ ("generator", context.backend, "generate"),
73
+ ("retriever", context.retriever, "retrieve"),
74
+ ("runtime", context.external_runtime, "reformulate"),
75
+ ):
76
+ fingerprint = getattr(dependency, "fingerprint", None)
77
+ if not callable(fingerprint) or not callable(getattr(dependency, operation, None)):
78
+ raise ExternalDependencyError(
79
+ f"controlled Query2doc context requires {label} with {operation}() and fingerprint()"
80
+ )
81
+ values[label] = _identity(fingerprint(), label)
82
+ return values
83
+
84
+
85
+ @dataclass(frozen=True, slots=True)
86
+ class Query2DocLiveBindings:
87
+ """Immutable identities/settings; executable dependencies stay in the context."""
88
+
89
+ generator: Mapping[str, Any]
90
+ retriever: Mapping[str, Any]
91
+ runtime: Mapping[str, Any]
92
+ budget: ExecutionBudget
93
+ config: Query2DocLiveConfig = _DEFAULT_CONFIG
94
+
95
+ def __post_init__(self) -> None:
96
+ if not isinstance(self.budget, ExecutionBudget) or not isinstance(self.config, Query2DocLiveConfig):
97
+ raise ValidationError("controlled Query2doc bindings require typed budget/config")
98
+ for label in ("generator", "retriever", "runtime"):
99
+ object.__setattr__(self, label, _identity(getattr(self, label), label))
100
+ if self.runtime.get("revision") != QUERYGYM_REVISION:
101
+ raise ValidationError("controlled Query2doc runtime differs from the pinned QueryGym revision")
102
+ closure = self.runtime.get("source_closure_sha256")
103
+ if not isinstance(closure, str) or re.fullmatch(r"[0-9a-f]{64}", closure) is None:
104
+ raise ValidationError("controlled Query2doc requires a runtime source-closure SHA-256")
105
+ if content_hash(self.runtime.get("backend")) != content_hash(self.generator):
106
+ raise ValidationError("controlled Query2doc runtime uses a different generator identity")
107
+
108
+ @classmethod
109
+ def from_context(
110
+ cls, context: InterventionContext, *, budget: ExecutionBudget,
111
+ config: Query2DocLiveConfig = _DEFAULT_CONFIG,
112
+ ) -> Query2DocLiveBindings:
113
+ if not isinstance(context, InterventionContext):
114
+ raise ValidationError("controlled Query2doc requires an InterventionContext")
115
+ return cls(**_runtime_identities(context), budget=budget, config=config)
116
+
117
+ @classmethod
118
+ def from_mapping(cls, value: Mapping[str, Any]) -> Query2DocLiveBindings:
119
+ required = {"generator", "retriever", "runtime", "budget"}
120
+ if not isinstance(value, Mapping) or not required.issubset(value):
121
+ raise ValidationError("controlled Query2doc binding recipe is missing required fields")
122
+ if set(value) - required - {"config"}:
123
+ raise ValidationError("controlled Query2doc binding recipe contains unknown fields")
124
+ if not isinstance(value["budget"], Mapping) or not isinstance(value.get("config", {}), Mapping):
125
+ raise ValidationError("controlled Query2doc budget/config recipes must be mappings")
126
+ try:
127
+ return cls(generator=value["generator"], retriever=value["retriever"], runtime=value["runtime"],
128
+ budget=ExecutionBudget(**value["budget"]),
129
+ config=Query2DocLiveConfig(**value.get("config", {})))
130
+ except TypeError as exc:
131
+ raise ValidationError("controlled Query2doc recipe contains invalid settings") from exc
132
+
133
+ @property
134
+ def binding_hash(self) -> str:
135
+ return content_hash(self)
136
+
137
+ def require_match(self, context: InterventionContext) -> None:
138
+ for label, actual in _runtime_identities(context).items():
139
+ if content_hash(actual) != content_hash(getattr(self, label)):
140
+ raise ValidationError(f"controlled Query2doc {label} fingerprint differs from binding")
141
+
142
+
143
+ @dataclass(frozen=True, slots=True)
144
+ class Query2DocControlledLive:
145
+ """Native QueryGym reformulation with locked shared-comparison dependencies.
146
+
147
+ Retrieval is not performed by a query rewriter. Binding the shared retriever
148
+ prevents a dispatch-time swap; the downstream benchmark driver must use it
149
+ with its own declared retrieval depth and remaining budget.
150
+ """
151
+
152
+ bindings: Query2DocLiveBindings | Mapping[str, Any]
153
+ profile_kind: str = "controlled_adapter"
154
+ method_id: str = "query2doc"
155
+ release_id: str = "rewrite.query2doc.controlled_live"
156
+ family: SemanticFamily = SemanticFamily.REFORMULATE
157
+
158
+ def __post_init__(self) -> None:
159
+ if isinstance(self.bindings, Mapping):
160
+ object.__setattr__(self, "bindings", Query2DocLiveBindings.from_mapping(self.bindings))
161
+ if not isinstance(self.bindings, Query2DocLiveBindings):
162
+ raise ValidationError("controlled Query2doc requires Query2DocLiveBindings")
163
+ if self.profile_kind not in {"controlled_adapter", "factorial_adapter"}:
164
+ raise ValidationError("controlled Query2doc profile_kind must be controlled or factorial")
165
+ if (self.method_id != "query2doc" or self.release_id != "rewrite.query2doc.controlled_live"
166
+ or self.family is not SemanticFamily.REFORMULATE):
167
+ raise ValidationError("controlled Query2doc identity differs from its registered profile")
168
+
169
+ def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
170
+ if state.budget != self.bindings.budget:
171
+ raise ValidationError("controlled Query2doc state budget differs from binding")
172
+ self.bindings.require_match(context)
173
+ settings = self.bindings.config
174
+ native = QueryGymLiveBridge(mode=settings.mode, demonstration_ids=settings.demonstration_ids,
175
+ temperature=settings.temperature, max_tokens=settings.max_tokens).propose(state, context)
176
+ self.bindings.require_match(context)
177
+ return replace(native, release_id=self.release_id, profile_kind=self.profile_kind,
178
+ trace=replace(native.trace, release_id=self.release_id, events=(
179
+ TraceEvent(TracePhase.PREPARE, "controlled_dependency_binding", {
180
+ "binding_sha256": self.bindings.binding_hash, "budget": self.bindings.budget,
181
+ "config": settings, "shared_retriever_bound_not_invoked": True}),
182
+ *native.trace.events)),
183
+ metadata={**native.metadata, "native_source_release": native.release_id,
184
+ "controlled_binding_sha256": self.bindings.binding_hash,
185
+ "dependency_identity_verification": "operator_fingerprint_equality",
186
+ "downstream_retrieval_performed": False, "weight_files_verified_by_binding": False,
187
+ "original_paper_result_parity_claimed": False})
188
+
189
+
190
+ __all__ = ["Query2DocControlledLive", "Query2DocLiveBindings", "Query2DocLiveConfig"]
@@ -0,0 +1,95 @@
1
+ """Dependency-free Query2doc bridge models."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Mapping
6
+ from dataclasses import dataclass, field
7
+ from typing import Any
8
+
9
+ from agentinputlab.contracts.enums import StrEnum
10
+ from agentinputlab.contracts.errors import ValidationError
11
+ from agentinputlab.contracts.serialization import freeze_mapping
12
+
13
+
14
+ class QueryGymMode(StrEnum):
15
+ ZERO_SHOT = "zs"
16
+ COT = "cot"
17
+ FEW_SHOT = "few_shot"
18
+
19
+ @classmethod
20
+ def parse(cls, value: str | QueryGymMode) -> QueryGymMode:
21
+ if isinstance(value, cls):
22
+ return value
23
+ normalized = value.strip().lower().replace("-", "_")
24
+ aliases = {
25
+ "zero_shot": cls.ZERO_SHOT,
26
+ "zero": cls.ZERO_SHOT,
27
+ "zs": cls.ZERO_SHOT,
28
+ "cot": cls.COT,
29
+ "fs": cls.FEW_SHOT,
30
+ "fewshot": cls.FEW_SHOT,
31
+ "few_shot": cls.FEW_SHOT,
32
+ }
33
+ try:
34
+ return aliases[normalized]
35
+ except KeyError as exc:
36
+ raise ValidationError(f"unsupported QueryGym Query2doc mode: {value!r}") from exc
37
+
38
+
39
+ @dataclass(frozen=True, slots=True)
40
+ class OfficialQuery2DocRow:
41
+ query_id: str
42
+ query: str
43
+ pseudo_doc: str
44
+ split: str = ""
45
+
46
+ def __post_init__(self) -> None:
47
+ if not self.query_id:
48
+ raise ValidationError("Query2doc cache row requires query_id")
49
+ if not self.query:
50
+ raise ValidationError("Query2doc cache row requires query")
51
+ if not self.pseudo_doc:
52
+ raise ValidationError("Query2doc cache row requires pseudo_doc")
53
+
54
+
55
+ @dataclass(frozen=True, slots=True)
56
+ class QueryGymRequest:
57
+ query_id: str
58
+ query: str
59
+ mode: QueryGymMode
60
+ demonstration_ids: tuple[str, ...] = ()
61
+ temperature: float = 0.7
62
+ max_tokens: int = 256
63
+ seed: int = 0
64
+ backend_fingerprint: Mapping[str, Any] = field(default_factory=dict)
65
+
66
+ def __post_init__(self) -> None:
67
+ object.__setattr__(self, "demonstration_ids", tuple(self.demonstration_ids))
68
+ object.__setattr__(self, "backend_fingerprint", freeze_mapping(self.backend_fingerprint))
69
+ if not self.query:
70
+ raise ValidationError("QueryGym request requires a non-empty query")
71
+ if self.max_tokens < 1:
72
+ raise ValidationError("QueryGym max_tokens must be positive")
73
+ if self.temperature < 0:
74
+ raise ValidationError("QueryGym temperature must be non-negative")
75
+ if self.mode is QueryGymMode.FEW_SHOT and not self.demonstration_ids:
76
+ raise ValidationError("QueryGym few-shot mode requires fixed demonstration IDs")
77
+
78
+ def external_reservation(self) -> Mapping[str, int]:
79
+ """One Query2doc reformulation always attempts exactly one model call."""
80
+
81
+ return {"model_calls": 1}
82
+
83
+
84
+ @dataclass(frozen=True, slots=True)
85
+ class QueryGymRawResult:
86
+ reformulated: str
87
+ generated_text: str = ""
88
+ prompt_hash: str = ""
89
+ fallback: bool = False
90
+ usage: Mapping[str, int | float] = field(default_factory=dict)
91
+ metadata: Mapping[str, Any] = field(default_factory=dict)
92
+
93
+ def __post_init__(self) -> None:
94
+ object.__setattr__(self, "usage", freeze_mapping(self.usage))
95
+ object.__setattr__(self, "metadata", freeze_mapping(self.metadata))