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,28 @@
1
+ """AgentInputLab: auditable pre-action input intervention for LLM agents."""
2
+
3
+ from .contracts import (
4
+ ContextBlock,
5
+ ExecutionBudget,
6
+ FrozenAgentState,
7
+ InputPatch,
8
+ InterventionContext,
9
+ Message,
10
+ PatchOp,
11
+ PatchOperation,
12
+ SemanticFamily,
13
+ )
14
+
15
+ __version__ = "0.1.0a1"
16
+
17
+ __all__ = [
18
+ "ContextBlock",
19
+ "ExecutionBudget",
20
+ "FrozenAgentState",
21
+ "InputPatch",
22
+ "InterventionContext",
23
+ "Message",
24
+ "PatchOp",
25
+ "PatchOperation",
26
+ "SemanticFamily",
27
+ "__version__",
28
+ ]
@@ -0,0 +1,6 @@
1
+ """Canonical runtime algorithm adapters.
2
+
3
+ Adapters in this package either implement a documented clean-room formula or
4
+ delegate to a pinned upstream runtime. They never treat an unavailable
5
+ dependency as an algorithmic ``NO_OP`` decision.
6
+ """
@@ -0,0 +1,145 @@
1
+ """Evidence-acquisition algorithms."""
2
+
3
+ from .adaptive_rag import (
4
+ ADAPTIVE_RAG_UPSTREAM_COMMIT,
5
+ AdaptiveRAGArtifactIdentity,
6
+ AdaptiveRAGControlledWorker,
7
+ AdaptiveRAGControls,
8
+ AdaptiveRAGDocument,
9
+ AdaptiveRAGEvaluationLabelAccess,
10
+ AdaptiveRAGInitialRetrieval,
11
+ AdaptiveRAGIRCoTStep,
12
+ AdaptiveRAGPredictionSource,
13
+ AdaptiveRAGPredictionType,
14
+ AdaptiveRAGRecord,
15
+ AdaptiveRAGRouterPrediction,
16
+ AdaptiveRAGSelectorReplay,
17
+ AdaptiveRAGStrategy,
18
+ )
19
+ from .adaptive_rag_common_support import (
20
+ AdaptiveRAGCommonSupport,
21
+ AdaptiveRAGCommonSupportConfig,
22
+ AdaptiveRAGRoute,
23
+ AdaptiveRAGRouter,
24
+ T5AdaptiveRAGRouter,
25
+ )
26
+ from .hyde import DenseEmbedder, HyDECleanRoom, HyDEConfig, VectorSearcher
27
+ from .hyde_controlled import HyDEControlled, HyDEControlledBindings
28
+ from .hyde_external import HYDE_EXTERNAL_RELEASE, HyDENativeConfig, HyDEOfficialExternalPatched
29
+ from .ircot import (
30
+ IRCoTCommonSupport,
31
+ IRCoTCommonSupportConfig,
32
+ IRCoTControlledWorker,
33
+ IRCoTControls,
34
+ )
35
+ from .ircot_native import (
36
+ IRCOT_NATIVE_QA_RELEASE,
37
+ IRCoTNativeLikeSubstituted,
38
+ write_ircot_substitution_manifest,
39
+ )
40
+ from .ircot_replay import (
41
+ IRCOT_REPLAY_RELEASE,
42
+ IRCoTPredictionArchive,
43
+ IRCoTPredictionReplay,
44
+ load_ircot_prediction_archive,
45
+ )
46
+ from .qrag import (
47
+ QRAG_UPSTREAM_COMMIT,
48
+ LocalQRAGFrozenPolicyRuntime,
49
+ QRAGCommonSupport,
50
+ QRAGCommonSupportConfig,
51
+ QRAGCommonSupportRuntime,
52
+ QRAGControls,
53
+ QRAGNativeWorker,
54
+ QRAGPolicyRequest,
55
+ QRAGReaderTransferWorker,
56
+ QRAGStep,
57
+ )
58
+ from .r2ag import (
59
+ R2AG_FEATURE_NAMES,
60
+ R2AG_PROTOCOL,
61
+ R2AG_UPSTREAM_COMMIT,
62
+ LocalR2AGCommonSupportReader,
63
+ LocalR2AGCommonSupportRuntime,
64
+ LocalSentenceTransformerR2AGFeatureEncoder,
65
+ R2AGArtifactIdentity,
66
+ R2AGCommonSupport,
67
+ R2AGCommonSupportConfig,
68
+ R2AGCommonSupportReader,
69
+ R2AGCommonSupportRuntime,
70
+ R2AGControlledWorker,
71
+ R2AGControls,
72
+ R2AGFeatureEncoder,
73
+ R2AGFeatureSource,
74
+ R2AGReaderResult,
75
+ R2AGRuntimeRequest,
76
+ )
77
+
78
+ __all__ = [
79
+ "ADAPTIVE_RAG_UPSTREAM_COMMIT",
80
+ "HYDE_EXTERNAL_RELEASE",
81
+ "IRCOT_NATIVE_QA_RELEASE",
82
+ "IRCOT_REPLAY_RELEASE",
83
+ "QRAG_UPSTREAM_COMMIT",
84
+ "R2AG_FEATURE_NAMES",
85
+ "R2AG_PROTOCOL",
86
+ "R2AG_UPSTREAM_COMMIT",
87
+ "AdaptiveRAGArtifactIdentity",
88
+ "AdaptiveRAGCommonSupport",
89
+ "AdaptiveRAGCommonSupportConfig",
90
+ "AdaptiveRAGControlledWorker",
91
+ "AdaptiveRAGControls",
92
+ "AdaptiveRAGDocument",
93
+ "AdaptiveRAGEvaluationLabelAccess",
94
+ "AdaptiveRAGIRCoTStep",
95
+ "AdaptiveRAGInitialRetrieval",
96
+ "AdaptiveRAGPredictionSource",
97
+ "AdaptiveRAGPredictionType",
98
+ "AdaptiveRAGRecord",
99
+ "AdaptiveRAGRoute",
100
+ "AdaptiveRAGRouter",
101
+ "AdaptiveRAGRouterPrediction",
102
+ "AdaptiveRAGSelectorReplay",
103
+ "AdaptiveRAGStrategy",
104
+ "DenseEmbedder",
105
+ "HyDECleanRoom",
106
+ "HyDEConfig",
107
+ "HyDEControlled",
108
+ "HyDEControlledBindings",
109
+ "HyDENativeConfig",
110
+ "HyDEOfficialExternalPatched",
111
+ "IRCoTCommonSupport",
112
+ "IRCoTCommonSupportConfig",
113
+ "IRCoTControlledWorker",
114
+ "IRCoTControls",
115
+ "IRCoTNativeLikeSubstituted",
116
+ "IRCoTPredictionArchive",
117
+ "IRCoTPredictionReplay",
118
+ "LocalQRAGFrozenPolicyRuntime",
119
+ "LocalR2AGCommonSupportReader",
120
+ "LocalR2AGCommonSupportRuntime",
121
+ "LocalSentenceTransformerR2AGFeatureEncoder",
122
+ "QRAGCommonSupport",
123
+ "QRAGCommonSupportConfig",
124
+ "QRAGCommonSupportRuntime",
125
+ "QRAGControls",
126
+ "QRAGNativeWorker",
127
+ "QRAGPolicyRequest",
128
+ "QRAGReaderTransferWorker",
129
+ "QRAGStep",
130
+ "R2AGArtifactIdentity",
131
+ "R2AGCommonSupport",
132
+ "R2AGCommonSupportConfig",
133
+ "R2AGCommonSupportReader",
134
+ "R2AGCommonSupportRuntime",
135
+ "R2AGControlledWorker",
136
+ "R2AGControls",
137
+ "R2AGFeatureEncoder",
138
+ "R2AGFeatureSource",
139
+ "R2AGReaderResult",
140
+ "R2AGRuntimeRequest",
141
+ "T5AdaptiveRAGRouter",
142
+ "VectorSearcher",
143
+ "load_ircot_prediction_archive",
144
+ "write_ircot_substitution_manifest",
145
+ ]
@@ -0,0 +1,43 @@
1
+ """Leakage-safe Adaptive-RAG replay and controlled router-parity reimplementation."""
2
+
3
+ from .replay import (
4
+ ADAPTIVE_RAG_UPSTREAM_COMMIT,
5
+ AdaptiveRAGEvaluationLabelAccess,
6
+ AdaptiveRAGPredictionSource,
7
+ AdaptiveRAGPredictionType,
8
+ AdaptiveRAGRecord,
9
+ AdaptiveRAGRouterPrediction,
10
+ AdaptiveRAGSelectorReplay,
11
+ AdaptiveRAGStrategy,
12
+ )
13
+ from .runtime import (
14
+ ADAPTIVE_RAG_COMPATIBILITY_MANIFEST_SHA256,
15
+ ADAPTIVE_RAG_SOURCE_CLOSURE_SHA256,
16
+ ADAPTIVE_RAG_UPSTREAM_TREE,
17
+ AdaptiveRAGArtifactIdentity,
18
+ AdaptiveRAGControlledWorker,
19
+ AdaptiveRAGControls,
20
+ AdaptiveRAGDocument,
21
+ AdaptiveRAGInitialRetrieval,
22
+ AdaptiveRAGIRCoTStep,
23
+ )
24
+
25
+ __all__ = [
26
+ "ADAPTIVE_RAG_COMPATIBILITY_MANIFEST_SHA256",
27
+ "ADAPTIVE_RAG_SOURCE_CLOSURE_SHA256",
28
+ "ADAPTIVE_RAG_UPSTREAM_COMMIT",
29
+ "ADAPTIVE_RAG_UPSTREAM_TREE",
30
+ "AdaptiveRAGArtifactIdentity",
31
+ "AdaptiveRAGControlledWorker",
32
+ "AdaptiveRAGControls",
33
+ "AdaptiveRAGDocument",
34
+ "AdaptiveRAGEvaluationLabelAccess",
35
+ "AdaptiveRAGIRCoTStep",
36
+ "AdaptiveRAGInitialRetrieval",
37
+ "AdaptiveRAGPredictionSource",
38
+ "AdaptiveRAGPredictionType",
39
+ "AdaptiveRAGRecord",
40
+ "AdaptiveRAGRouterPrediction",
41
+ "AdaptiveRAGSelectorReplay",
42
+ "AdaptiveRAGStrategy",
43
+ ]
@@ -0,0 +1,367 @@
1
+ """Replay the released Adaptive-RAG router choice and matched strategy output.
2
+
3
+ The upstream method selects among no retrieval, one-shot retrieval, and IRCoT
4
+ outputs generated under one locked dependency bundle. This adapter therefore
5
+ does not silently rerun those arms with different models or retrievers.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from collections.abc import Mapping, Sequence
11
+ from dataclasses import dataclass, field
12
+ from enum import Enum
13
+ from types import MappingProxyType
14
+ from typing import Any
15
+
16
+ from agentinputlab.contracts import (
17
+ ArtifactError,
18
+ ContextBlock,
19
+ ExecutionTrace,
20
+ FrozenAgentState,
21
+ InputPatch,
22
+ InterventionContext,
23
+ PatchOp,
24
+ PatchOperation,
25
+ SemanticFamily,
26
+ TraceEvent,
27
+ TracePhase,
28
+ ValidationError,
29
+ )
30
+ from agentinputlab.contracts.serialization import freeze_mapping
31
+
32
+ ADAPTIVE_RAG_UPSTREAM_COMMIT = "0c88670af8707667eb5c1163151bb5ce61b14acb"
33
+
34
+
35
+ class AdaptiveRAGStrategy(str, Enum):
36
+ NO_RETRIEVAL = "no_retrieval"
37
+ SINGLE_RETRIEVAL = "single_retrieval"
38
+ IRCOT = "ircot"
39
+
40
+ @property
41
+ def route_label(self) -> str:
42
+ return {
43
+ AdaptiveRAGStrategy.NO_RETRIEVAL: "A",
44
+ AdaptiveRAGStrategy.SINGLE_RETRIEVAL: "B",
45
+ AdaptiveRAGStrategy.IRCOT: "C",
46
+ }[self]
47
+
48
+
49
+ class AdaptiveRAGPredictionSource(str, Enum):
50
+ """Permitted origins for an evaluation-time router prediction."""
51
+
52
+ UPSTREAM_ROUTER = "upstream_router"
53
+ REPRODUCED_ROUTER = "reproduced_router"
54
+
55
+
56
+ class AdaptiveRAGPredictionType(str, Enum):
57
+ """How the router converted its model output into a route."""
58
+
59
+ GENERATIVE_CLASSIFICATION = "generative_classification"
60
+ LOGIT_ARGMAX = "logit_argmax"
61
+
62
+
63
+ class AdaptiveRAGEvaluationLabelAccess(str, Enum):
64
+ """Reference-label access used while producing an evaluation route."""
65
+
66
+ NONE = "none"
67
+ GOLD = "gold"
68
+ SILVER = "silver"
69
+ ORACLE = "oracle"
70
+
71
+
72
+ def _require_sha256(value: object, *, label: str) -> str:
73
+ if not isinstance(value, str) or len(value) != 64:
74
+ raise ArtifactError(f"Adaptive-RAG {label} must be a SHA-256 digest")
75
+ try:
76
+ int(value, 16)
77
+ except ValueError as exc:
78
+ raise ArtifactError(f"Adaptive-RAG {label} must be hexadecimal") from exc
79
+ return value.lower()
80
+
81
+
82
+ def _require_revision(value: object, *, label: str) -> str:
83
+ if not isinstance(value, str) or not value.strip():
84
+ raise ArtifactError(f"Adaptive-RAG {label} must be a non-empty revision")
85
+ revision = value.strip()
86
+ if revision.lower() in {"default", "head", "latest", "main", "master"}:
87
+ raise ArtifactError(f"Adaptive-RAG {label} cannot be a mutable revision")
88
+ return revision
89
+
90
+
91
+ @dataclass(frozen=True, slots=True)
92
+ class AdaptiveRAGRouterPrediction:
93
+ """Auditable provenance for one evaluation-time router decision.
94
+
95
+ Adaptive-RAG's training labels are derived by comparing the three strategy
96
+ arms. Those silver labels are valid training targets, but replaying them as
97
+ selector outputs on an evaluation split would turn the selector into an
98
+ oracle. Consequently, this contract only accepts routes produced by an
99
+ identified router inference and rejects any reference-label access.
100
+ """
101
+
102
+ predicted_strategy: AdaptiveRAGStrategy
103
+ router_checkpoint: str
104
+ router_revision: str
105
+ prediction_source: AdaptiveRAGPredictionSource
106
+ prediction_type: AdaptiveRAGPredictionType
107
+ prediction_output_hash: str
108
+ logits_hash: str
109
+ evaluation_label_access: AdaptiveRAGEvaluationLabelAccess
110
+
111
+ def __post_init__(self) -> None:
112
+ enum_fields = (
113
+ ("predicted_strategy", AdaptiveRAGStrategy),
114
+ ("prediction_source", AdaptiveRAGPredictionSource),
115
+ ("prediction_type", AdaptiveRAGPredictionType),
116
+ ("evaluation_label_access", AdaptiveRAGEvaluationLabelAccess),
117
+ )
118
+ for field_name, enum_type in enum_fields:
119
+ value = getattr(self, field_name)
120
+ if not isinstance(value, enum_type):
121
+ try:
122
+ value = enum_type(value)
123
+ except (TypeError, ValueError) as exc:
124
+ raise ArtifactError(
125
+ f"Adaptive-RAG router prediction has invalid {field_name}"
126
+ ) from exc
127
+ object.__setattr__(self, field_name, value)
128
+
129
+ if self.evaluation_label_access is not AdaptiveRAGEvaluationLabelAccess.NONE:
130
+ raise ArtifactError(
131
+ "Adaptive-RAG evaluation routes cannot use gold, silver, or oracle labels"
132
+ )
133
+ object.__setattr__(
134
+ self,
135
+ "router_checkpoint",
136
+ _require_revision(self.router_checkpoint, label="router_checkpoint"),
137
+ )
138
+ object.__setattr__(
139
+ self,
140
+ "router_revision",
141
+ _require_revision(self.router_revision, label="router_revision"),
142
+ )
143
+ object.__setattr__(
144
+ self,
145
+ "prediction_output_hash",
146
+ _require_sha256(
147
+ self.prediction_output_hash,
148
+ label="prediction_output_hash",
149
+ ),
150
+ )
151
+ object.__setattr__(
152
+ self,
153
+ "logits_hash",
154
+ _require_sha256(self.logits_hash, label="logits_hash"),
155
+ )
156
+
157
+
158
+ @dataclass(frozen=True, slots=True)
159
+ class AdaptiveRAGRecord:
160
+ record_id: str
161
+ split: str
162
+ query: str
163
+ strategy: AdaptiveRAGStrategy
164
+ router_prediction: AdaptiveRAGRouterPrediction
165
+ dependency_hash: str
166
+ strategy_output_hash: str
167
+ contexts: tuple[ContextBlock, ...] = ()
168
+ selected_answer: str = ""
169
+ metadata: Mapping[str, Any] = field(default_factory=dict)
170
+
171
+ def __post_init__(self) -> None:
172
+ if not self.record_id.strip() or not self.split.strip() or not self.query.strip():
173
+ raise ArtifactError("Adaptive-RAG records require ID, split, and query")
174
+ if not isinstance(self.strategy, AdaptiveRAGStrategy):
175
+ try:
176
+ object.__setattr__(self, "strategy", AdaptiveRAGStrategy(str(self.strategy)))
177
+ except ValueError as exc:
178
+ raise ArtifactError("Adaptive-RAG record has an unsupported strategy") from exc
179
+ if not isinstance(self.router_prediction, AdaptiveRAGRouterPrediction):
180
+ raise ArtifactError("Adaptive-RAG records require typed router_prediction provenance")
181
+ if self.router_prediction.predicted_strategy is not self.strategy:
182
+ raise ArtifactError("Adaptive-RAG replay strategy does not match the router prediction")
183
+ for name in ("dependency_hash", "strategy_output_hash"):
184
+ object.__setattr__(self, name, _require_sha256(getattr(self, name), label=name))
185
+ contexts = tuple(self.contexts)
186
+ if not all(isinstance(block, ContextBlock) for block in contexts):
187
+ raise ArtifactError("Adaptive-RAG contexts must be ContextBlock instances")
188
+ if self.strategy is AdaptiveRAGStrategy.NO_RETRIEVAL and contexts:
189
+ raise ArtifactError("Adaptive-RAG no-retrieval records cannot contain evidence")
190
+ if self.strategy is not AdaptiveRAGStrategy.NO_RETRIEVAL and not contexts:
191
+ raise ArtifactError("Adaptive-RAG retrieval records require frozen evidence")
192
+ object.__setattr__(self, "contexts", contexts)
193
+ object.__setattr__(self, "metadata", freeze_mapping(self.metadata))
194
+
195
+
196
+ @dataclass(slots=True)
197
+ class AdaptiveRAGSelectorReplay:
198
+ records: Sequence[AdaptiveRAGRecord]
199
+ split: str
200
+ dependency_hash: str
201
+ artifact_id: str
202
+ artifact_sha256: str
203
+ method_id: str = "adaptive_rag"
204
+ release_id: str = "acquire.adaptive_rag.selector_replay"
205
+ family: SemanticFamily = SemanticFamily.ACQUIRE
206
+ _records: Mapping[str, AdaptiveRAGRecord] = field(init=False, repr=False)
207
+
208
+ def __post_init__(self) -> None:
209
+ if not self.split.strip() or not self.artifact_id.strip():
210
+ raise ValidationError("Adaptive-RAG replay requires split and artifact_id")
211
+ try:
212
+ dependency_hash = _require_sha256(self.dependency_hash, label="dependency_hash")
213
+ artifact_sha256 = _require_sha256(self.artifact_sha256, label="artifact_sha256")
214
+ except ArtifactError as exc:
215
+ raise ValidationError(str(exc)) from exc
216
+ object.__setattr__(self, "dependency_hash", dependency_hash)
217
+ object.__setattr__(self, "artifact_sha256", artifact_sha256)
218
+ indexed: dict[str, AdaptiveRAGRecord] = {}
219
+ router_identity: tuple[object, ...] | None = None
220
+ for record in self.records:
221
+ if not isinstance(record, AdaptiveRAGRecord):
222
+ raise ValidationError("Adaptive-RAG records have an invalid type")
223
+ if record.split != self.split:
224
+ raise ValidationError("Adaptive-RAG replay contains a different split")
225
+ if record.dependency_hash != self.dependency_hash:
226
+ raise ValidationError("Adaptive-RAG replay mixes dependency bundles")
227
+ if record.record_id in indexed:
228
+ raise ValidationError("Adaptive-RAG replay contains duplicate IDs")
229
+ prediction = record.router_prediction
230
+ record_router_identity = (
231
+ prediction.router_checkpoint,
232
+ prediction.router_revision,
233
+ prediction.prediction_source,
234
+ prediction.prediction_type,
235
+ )
236
+ if router_identity is None:
237
+ router_identity = record_router_identity
238
+ elif record_router_identity != router_identity:
239
+ raise ValidationError("Adaptive-RAG replay mixes router identities")
240
+ indexed[record.record_id] = record
241
+ if not indexed:
242
+ raise ValidationError("Adaptive-RAG replay requires at least one record")
243
+ object.__setattr__(self, "records", tuple(self.records))
244
+ object.__setattr__(self, "_records", MappingProxyType(dict(indexed)))
245
+
246
+ def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
247
+ declared_hash = context.run_config.get("adaptive_rag_dependency_hash")
248
+ if declared_hash is not None and declared_hash != self.dependency_hash:
249
+ raise ArtifactError("Adaptive-RAG runtime dependency bundle does not match replay")
250
+ record_id = state.task_id or str(state.metadata.get("record_id", ""))
251
+ try:
252
+ record = self._records[record_id]
253
+ except KeyError as exc:
254
+ raise ArtifactError(f"Adaptive-RAG replay has no record for {record_id!r}") from exc
255
+ if record.query != state.query:
256
+ raise ArtifactError("Adaptive-RAG replay query mismatch")
257
+ prediction = record.router_prediction
258
+ if prediction.evaluation_label_access is not AdaptiveRAGEvaluationLabelAccess.NONE:
259
+ raise ArtifactError(
260
+ "Adaptive-RAG evaluation routes cannot use gold, silver, or oracle labels"
261
+ )
262
+ if prediction.predicted_strategy is not record.strategy:
263
+ raise ArtifactError("Adaptive-RAG replay strategy does not match the router prediction")
264
+ if record.strategy is AdaptiveRAGStrategy.NO_RETRIEVAL:
265
+ operation = PatchOperation(
266
+ PatchOp.NO_OP,
267
+ rationale="Adaptive-RAG classifier selected the no-retrieval arm",
268
+ )
269
+ else:
270
+ operation = PatchOperation(
271
+ PatchOp.ADD_CONTEXT,
272
+ record.contexts,
273
+ target="retrieved_evidence",
274
+ rationale=(
275
+ "frozen strategy output selected by the Adaptive-RAG complexity classifier"
276
+ ),
277
+ )
278
+ trace = ExecutionTrace(
279
+ method_id=self.method_id,
280
+ release_id=self.release_id,
281
+ events=(
282
+ TraceEvent(
283
+ TracePhase.PREPARE,
284
+ "selector_artifact",
285
+ {
286
+ "artifact_id": self.artifact_id,
287
+ "artifact_sha256": self.artifact_sha256,
288
+ "split": self.split,
289
+ "dependency_hash": self.dependency_hash,
290
+ "test_gold_visible": False,
291
+ "evaluation_label_access": (prediction.evaluation_label_access.value),
292
+ },
293
+ ),
294
+ TraceEvent(
295
+ TracePhase.PROPOSE,
296
+ "complexity_route",
297
+ {
298
+ "strategy": record.strategy.value,
299
+ "predicted_route_label": record.strategy.route_label,
300
+ "router_checkpoint": prediction.router_checkpoint,
301
+ "router_revision": prediction.router_revision,
302
+ "prediction_source": prediction.prediction_source.value,
303
+ "prediction_type": prediction.prediction_type.value,
304
+ "prediction_output_hash": prediction.prediction_output_hash,
305
+ "logits_hash": prediction.logits_hash,
306
+ "strategy_output_hash": record.strategy_output_hash,
307
+ },
308
+ ),
309
+ TraceEvent(
310
+ TracePhase.FINALIZE,
311
+ "selected_strategy_output",
312
+ {
313
+ "document_ids": tuple(block.block_id for block in record.contexts),
314
+ "selected_answer": record.selected_answer,
315
+ "answer_is_intervention_input": False,
316
+ },
317
+ ),
318
+ ),
319
+ counters={
320
+ "replay_records": 1,
321
+ "historical_strategy_calls": 1,
322
+ "selected_documents": len(record.contexts),
323
+ },
324
+ )
325
+ return InputPatch(
326
+ method_id=self.method_id,
327
+ release_id=self.release_id,
328
+ source_state_hash=state.state_hash,
329
+ operations=(operation,),
330
+ trace=trace,
331
+ implementation_identity=(
332
+ f"artifact_replay:starsuzi/Adaptive-RAG@{ADAPTIVE_RAG_UPSTREAM_COMMIT}:"
333
+ f"{self.artifact_sha256}"
334
+ ),
335
+ profile_kind="official_native",
336
+ metadata={
337
+ "implementation_origin": "artifact_replay",
338
+ "artifact_id": self.artifact_id,
339
+ "artifact_sha256": self.artifact_sha256,
340
+ "strategy": record.strategy.value,
341
+ "predicted_route_label": record.strategy.route_label,
342
+ "router_checkpoint": prediction.router_checkpoint,
343
+ "router_revision": prediction.router_revision,
344
+ "prediction_source": prediction.prediction_source.value,
345
+ "prediction_type": prediction.prediction_type.value,
346
+ "prediction_output_hash": prediction.prediction_output_hash,
347
+ "logits_hash": prediction.logits_hash,
348
+ "evaluation_label_access": prediction.evaluation_label_access.value,
349
+ "dependency_hash": self.dependency_hash,
350
+ "strategy_output_hash": record.strategy_output_hash,
351
+ "selected_answer": record.selected_answer,
352
+ "historical_generation_not_rebilled": True,
353
+ "record_metadata": dict(record.metadata),
354
+ },
355
+ )
356
+
357
+
358
+ __all__ = [
359
+ "ADAPTIVE_RAG_UPSTREAM_COMMIT",
360
+ "AdaptiveRAGEvaluationLabelAccess",
361
+ "AdaptiveRAGPredictionSource",
362
+ "AdaptiveRAGPredictionType",
363
+ "AdaptiveRAGRecord",
364
+ "AdaptiveRAGRouterPrediction",
365
+ "AdaptiveRAGSelectorReplay",
366
+ "AdaptiveRAGStrategy",
367
+ ]