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,457 @@
1
+ """Bounded pattern induction using a caller-mounted, pinned ReFormeR checkout.
2
+
3
+ The native extractor's prompt, parser and iterative replacement rule execute
4
+ unchanged. Only its Ollama transport and two broken import paths are bridged.
5
+ Use a dedicated process: upstream imports and logging are process-global.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import argparse
11
+ import hashlib
12
+ import math
13
+ import sys
14
+ import threading
15
+ import types
16
+ from collections.abc import Mapping, Sequence
17
+ from contextlib import contextmanager, redirect_stdout
18
+ from dataclasses import asdict, dataclass
19
+ from pathlib import Path
20
+ from typing import Any
21
+
22
+ from agentinputlab.contracts import ValidationError
23
+
24
+ from .driver import (
25
+ INDUCTION_PATH,
26
+ PROMPT_MANAGER_PATH,
27
+ PROMPT_PATH,
28
+ UPSTREAM_COMMIT,
29
+ BackendConfig,
30
+ CompatibilityPolicy,
31
+ CompletionBackend,
32
+ Controls,
33
+ DriverError,
34
+ OpenAICompatibleBackend,
35
+ UsageTracker,
36
+ _canonical_hash,
37
+ _canonical_json,
38
+ _load_module,
39
+ _load_patterns,
40
+ _loads_strict_json,
41
+ _sha256_file,
42
+ load_compatibility_policy,
43
+ verify_checkout,
44
+ )
45
+
46
+ RELEASE_ID = "training.reformer.pattern_induction"
47
+ PROMPT_BUILDER_PATH = "reformer/patterns/query_reformulation_prompts.py"
48
+ ADAPTER_REVISION = "native-induction-import-transport-bridge.v1"
49
+ _IMPORT_LOCK = threading.RLock()
50
+
51
+
52
+ def _save(path: Path, value: Any) -> None:
53
+ with path.open("x", encoding="utf-8") as handle:
54
+ handle.write(_canonical_json(value) + "\n")
55
+
56
+
57
+ @dataclass(frozen=True, slots=True)
58
+ class ReFormeRQueryPair:
59
+ query_id: str
60
+ original_query: str
61
+ reformulated_query: str | None = None
62
+ split: str = "train"
63
+
64
+ def __post_init__(self) -> None:
65
+ if not isinstance(self.split, str) or self.split not in {"train", "validation", "test"}:
66
+ raise ValidationError("ReFormeR pair split must be train, validation or test")
67
+ for name in ("query_id", "original_query"):
68
+ value = getattr(self, name)
69
+ if not isinstance(value, str) or not value.strip() or len(value) > 48_000:
70
+ raise ValidationError(f"ReFormeR {name} must be non-empty bounded text")
71
+ if "\x00" in value:
72
+ raise ValidationError(f"ReFormeR {name} must not contain NUL")
73
+ # Held-out queries are used for split isolation, never for induction.
74
+ # Their callers need not invent unused target rewrites to declare them.
75
+ if self.split != "train" and self.reformulated_query is None:
76
+ return
77
+ value = self.reformulated_query
78
+ if not isinstance(value, str) or not value.strip() or len(value) > 48_000:
79
+ raise ValidationError("ReFormeR reformulated_query must be non-empty bounded text")
80
+ if "\x00" in value:
81
+ raise ValidationError("ReFormeR reformulated_query must not contain NUL")
82
+
83
+
84
+ @dataclass(frozen=True, slots=True)
85
+ class ReFormeRInductionControls:
86
+ batch_size: int = 2
87
+ max_patterns: int = 25
88
+ max_model_calls: int = 8
89
+ max_tokens: int = 4096
90
+ max_cost_usd: float = 10.0
91
+ seed: int = 17
92
+
93
+ def __post_init__(self) -> None:
94
+ for name in ("batch_size", "max_patterns", "max_model_calls", "max_tokens", "seed"):
95
+ value = getattr(self, name)
96
+ if (
97
+ isinstance(value, bool)
98
+ or not isinstance(value, int)
99
+ or value < (0 if name == "seed" else 1)
100
+ ):
101
+ raise ValidationError(f"ReFormeR induction {name} is invalid")
102
+ if (
103
+ isinstance(self.max_cost_usd, bool)
104
+ or not isinstance(self.max_cost_usd, (int, float))
105
+ or not math.isfinite(self.max_cost_usd)
106
+ or self.max_cost_usd < 0
107
+ ):
108
+ raise ValidationError("ReFormeR induction max_cost_usd is invalid")
109
+
110
+
111
+ def validate_induction_splits(
112
+ training_pairs: Sequence[ReFormeRQueryPair],
113
+ held_out_pairs: Sequence[ReFormeRQueryPair],
114
+ ) -> dict[str, Any]:
115
+ """Audit caller-declared splits; does not infer unseen dataset membership."""
116
+ if not training_pairs or not held_out_pairs:
117
+ raise ValidationError("ReFormeR fit requires train pairs and declared held-out pairs")
118
+ seen_ids: set[str] = set()
119
+ seen_queries: set[str] = set()
120
+ for pairs, train in ((training_pairs, True), (held_out_pairs, False)):
121
+ for pair in pairs:
122
+ if not isinstance(pair, ReFormeRQueryPair):
123
+ raise ValidationError("ReFormeR fit requires ReFormeRQueryPair records")
124
+ if (pair.split == "train") is not train:
125
+ raise ValidationError("ReFormeR training/held-out split assignment is invalid")
126
+ query = " ".join(pair.original_query.casefold().split())
127
+ if pair.query_id in seen_ids or query in seen_queries:
128
+ raise ValidationError("ReFormeR duplicate ID/query or train/held-out overlap")
129
+ seen_ids.add(pair.query_id)
130
+ seen_queries.add(query)
131
+ return {
132
+ "training_ids": [pair.query_id for pair in training_pairs],
133
+ "held_out_ids": [pair.query_id for pair in held_out_pairs],
134
+ "training_sha256": _canonical_hash([asdict(pair) for pair in training_pairs]),
135
+ "held_out_sha256": _canonical_hash([asdict(pair) for pair in held_out_pairs]),
136
+ "scope": "caller_declared_records_only",
137
+ "held_out_used_in_model_prompts": False,
138
+ }
139
+
140
+
141
+ def _blocked_ollama(*args, **kwargs):
142
+ raise DriverError("UNDECLARED_MODEL_TRANSPORT", "native Ollama transport is not enabled")
143
+
144
+
145
+ @contextmanager
146
+ def _native_induction(root: Path):
147
+ """Bind the pinned source's missing relative/absolute imports, then restore."""
148
+ with _IMPORT_LOCK:
149
+ prefix = "_ail_reformer_induction_" + hashlib.sha256(str(root).encode()).hexdigest()[:16]
150
+ package = prefix + ".reformer"
151
+ patterns = package + ".patterns"
152
+ names = (
153
+ prefix,
154
+ package,
155
+ patterns,
156
+ package + ".prompt_manager",
157
+ patterns + ".prompt_manager",
158
+ patterns + ".query_reformulation_prompts",
159
+ patterns + ".iterative_pattern_extraction",
160
+ "query_reformulation_prompts",
161
+ "ollama",
162
+ )
163
+ previous = {name: sys.modules.get(name) for name in names}
164
+ bytecode = sys.dont_write_bytecode
165
+ sys.dont_write_bytecode = True
166
+ try:
167
+ for name, path in (
168
+ (prefix, root),
169
+ (package, root / "reformer"),
170
+ (patterns, root / "reformer/patterns"),
171
+ ):
172
+ module = types.ModuleType(name)
173
+ module.__package__ = name
174
+ module.__path__ = [str(path)]
175
+ sys.modules[name] = module
176
+ stub = types.ModuleType("ollama")
177
+ stub.Client = _blocked_ollama
178
+ sys.modules["ollama"] = stub
179
+ manager = _load_module(package + ".prompt_manager", root / PROMPT_MANAGER_PATH)
180
+ sys.modules[patterns + ".prompt_manager"] = manager
181
+ prompts = _load_module(
182
+ patterns + ".query_reformulation_prompts", root / PROMPT_BUILDER_PATH
183
+ )
184
+ sys.modules["query_reformulation_prompts"] = prompts
185
+ native = _load_module(patterns + ".iterative_pattern_extraction", root / INDUCTION_PATH)
186
+ yield native.IterativePatternExtractor, prompts.QueryPair
187
+ finally:
188
+ sys.dont_write_bytecode = bytecode
189
+ for name, value in previous.items():
190
+ if value is None:
191
+ sys.modules.pop(name, None)
192
+ else:
193
+ sys.modules[name] = value
194
+
195
+
196
+ @dataclass(frozen=True, slots=True)
197
+ class ReFormeRPatternArtifact:
198
+ root: Path
199
+ artifact_id: str
200
+ pattern_sha256: str
201
+ patterns: tuple[Mapping[str, Any], ...]
202
+
203
+ @property
204
+ def pattern_path(self) -> Path:
205
+ return self.root / "patterns.json"
206
+
207
+ @classmethod
208
+ def load(cls, root: str | Path) -> ReFormeRPatternArtifact:
209
+ supplied = Path(root).expanduser()
210
+ if supplied.is_symlink():
211
+ raise ValidationError("ReFormeR artifact root must not be a symlink")
212
+ folder = supplied.resolve(strict=True)
213
+ for name in ("artifact.json", "fit-terminal.json", "patterns.json"):
214
+ if (folder / name).is_symlink() or not (folder / name).is_file():
215
+ raise ValidationError("ReFormeR fitted artifact file is unavailable")
216
+ terminal = _loads_strict_json((folder / "fit-terminal.json").read_text(encoding="utf-8"))
217
+ meta = _loads_strict_json((folder / "artifact.json").read_text(encoding="utf-8"))
218
+ if (
219
+ not isinstance(terminal, dict)
220
+ or terminal.get("status") != "candidate_generated"
221
+ or not isinstance(meta, dict)
222
+ or meta.get("release_id") != RELEASE_ID
223
+ or meta.get("schema_version") != "agentinputlab.reformer.pattern_artifact.v1"
224
+ or meta.get("upstream_commit") != UPSTREAM_COMMIT
225
+ or meta.get("artifact_id")
226
+ != _canonical_hash({key: value for key, value in meta.items() if key != "artifact_id"})
227
+ or terminal.get("artifact_id") != meta.get("artifact_id")
228
+ or _sha256_file(folder / "patterns.json") != meta.get("pattern_sha256")
229
+ ):
230
+ raise ValidationError("ReFormeR fitted artifact identity/status mismatch")
231
+ patterns = _load_patterns(folder / "patterns.json")
232
+ if not meta.get("usage", {}).get("model_calls") or not meta.get("split_audit"):
233
+ raise ValidationError("ReFormeR fitted artifact lacks fit provenance")
234
+ return cls(folder, meta["artifact_id"], meta["pattern_sha256"], patterns)
235
+
236
+
237
+ class ReFormeRPatternInduction:
238
+ """Fit a pattern library; candidate generation is not held-out acceptance."""
239
+
240
+ def __init__(self, controls: ReFormeRInductionControls | None = None):
241
+ self.controls = controls or ReFormeRInductionControls()
242
+
243
+ def fit(
244
+ self,
245
+ *,
246
+ checkout: str | Path,
247
+ training_pairs: Sequence[ReFormeRQueryPair],
248
+ held_out_pairs: Sequence[ReFormeRQueryPair],
249
+ output_root: str | Path,
250
+ backend_config: BackendConfig,
251
+ backend: CompletionBackend,
252
+ source_license_acknowledged: bool = False,
253
+ policy: CompatibilityPolicy | None = None,
254
+ ) -> ReFormeRPatternArtifact:
255
+ if source_license_acknowledged is not True:
256
+ raise ValidationError("ReFormeR requires acknowledgement of caller-mounted source")
257
+ training_pairs, held_out_pairs = tuple(training_pairs), tuple(held_out_pairs)
258
+ audit = validate_induction_splits(training_pairs, held_out_pairs)
259
+ c = self.controls
260
+ batches = (len(training_pairs) + c.batch_size - 1) // c.batch_size
261
+ if batches > c.max_model_calls:
262
+ raise ValidationError("ReFormeR declared training batches exceed model-call budget")
263
+ policy = policy or load_compatibility_policy()
264
+ source = verify_checkout(Path(checkout), policy)
265
+ if not {INDUCTION_PATH, PROMPT_PATH, PROMPT_BUILDER_PATH} <= set(policy.source_hashes):
266
+ raise ValidationError("ReFormeR induction source closure is incomplete")
267
+ if _canonical_json(backend.fingerprint()) != _canonical_json(backend_config.fingerprint):
268
+ raise ValidationError("ReFormeR induction backend identity differs from config")
269
+ supplied = Path(output_root).expanduser()
270
+ if supplied.is_symlink():
271
+ raise ValidationError("ReFormeR fit output must not be a symlink")
272
+ root = supplied.resolve()
273
+ if root.is_relative_to(source) or source.is_relative_to(root):
274
+ raise ValidationError("ReFormeR fit output must be separate from upstream source")
275
+ root.mkdir(parents=True, exist_ok=False)
276
+ tracker = UsageTracker(
277
+ Controls(c.max_model_calls, c.max_tokens, c.max_cost_usd), backend_config
278
+ )
279
+ _save(
280
+ root / "fit-start.json",
281
+ {
282
+ "release_id": RELEASE_ID,
283
+ "adapter_revision": ADAPTER_REVISION,
284
+ "controls": asdict(c),
285
+ "backend": dict(backend_config.fingerprint),
286
+ "backend_settings": {
287
+ "per_call_output_tokens": backend_config.max_output_tokens,
288
+ "temperature": backend_config.temperature,
289
+ },
290
+ "source_hashes": dict(policy.source_hashes),
291
+ "split_audit": audit,
292
+ "automatic_retry": False,
293
+ "upstream_transport": "replaced_ollama_with_bounded_backend",
294
+ "import_path_repairs": ["patterns.prompt_manager", "query_reformulation_prompts"],
295
+ },
296
+ )
297
+ try:
298
+ with _native_induction(source) as (extractor_class, pair_class):
299
+ extractor = extractor_class.__new__(extractor_class)
300
+ extractor.max_patterns = c.max_patterns
301
+ extractor.consolidated_patterns = []
302
+ extractor.individual_patterns = []
303
+ for index in range(batches):
304
+ if _canonical_json(backend.fingerprint()) != _canonical_json(
305
+ backend_config.fingerprint
306
+ ):
307
+ raise ValidationError("ReFormeR training backend changed identity")
308
+ pairs = training_pairs[index * c.batch_size : (index + 1) * c.batch_size]
309
+ native_pairs = [
310
+ pair_class(pair.original_query, pair.reformulated_query, pair.query_id)
311
+ for pair in pairs
312
+ ]
313
+ journal = root / f"batch-{index + 1:04d}"
314
+ journal.mkdir()
315
+
316
+ def call_llm(messages, *, _journal=journal, _index=index):
317
+ _save(
318
+ _journal / "request.json",
319
+ {
320
+ "messages": messages,
321
+ "seed": c.seed + _index,
322
+ "max_output_tokens": backend_config.max_output_tokens,
323
+ "temperature": backend_config.temperature,
324
+ "backend": dict(backend_config.fingerprint),
325
+ },
326
+ )
327
+ text = tracker.complete(
328
+ backend,
329
+ stage="pattern_induction",
330
+ messages=messages,
331
+ seed=c.seed + _index,
332
+ )
333
+ _save(
334
+ _journal / "response.json",
335
+ {
336
+ "text": text,
337
+ "usage_cumulative": tracker.as_dict(),
338
+ "model_trace": tracker.stages,
339
+ },
340
+ )
341
+ return {"choices": [{"message": {"content": text}}]}
342
+
343
+ extractor.call_llm = call_llm
344
+ # Native parser and consolidation semantics, not a local replacement.
345
+ with redirect_stdout(sys.stderr):
346
+ result = extractor.extract_patterns_from_batch(native_pairs, index + 1)
347
+ extractor.consolidated_patterns = result
348
+ _save(
349
+ journal / "native-result.json",
350
+ {
351
+ "patterns": [asdict(pattern) for pattern in result],
352
+ "individual_patterns": extractor.individual_patterns,
353
+ "empty_native_result": not bool(result),
354
+ },
355
+ )
356
+ _save(root / "patterns.json", [asdict(p) for p in extractor.consolidated_patterns])
357
+ verify_checkout(source, policy)
358
+ if _canonical_json(backend.fingerprint()) != _canonical_json(
359
+ backend_config.fingerprint
360
+ ):
361
+ raise ValidationError("ReFormeR training backend changed identity")
362
+ patterns = _load_patterns(root / "patterns.json")
363
+ meta = {
364
+ "schema_version": "agentinputlab.reformer.pattern_artifact.v1",
365
+ "release_id": RELEASE_ID,
366
+ "upstream_commit": UPSTREAM_COMMIT,
367
+ "source_hashes": dict(policy.source_hashes),
368
+ "split_audit": audit,
369
+ "backend": dict(backend_config.fingerprint),
370
+ "controls": asdict(c),
371
+ "usage": tracker.as_dict(),
372
+ "pattern_count": len(patterns),
373
+ "pattern_sha256": _sha256_file(root / "patterns.json"),
374
+ "held_out_acceptance_complete": False,
375
+ "paper_result_parity_claimed": False,
376
+ }
377
+ meta["artifact_id"] = _canonical_hash(meta)
378
+ _save(root / "artifact.json", meta)
379
+ _save(
380
+ root / "fit-terminal.json",
381
+ {
382
+ "status": "candidate_generated",
383
+ "artifact_id": meta["artifact_id"],
384
+ "usage": tracker.as_dict(),
385
+ "model_trace": tracker.stages,
386
+ "automatic_retry": False,
387
+ "held_out_acceptance_complete": False,
388
+ },
389
+ )
390
+ return ReFormeRPatternArtifact.load(root)
391
+ except Exception as exc:
392
+ terminal = {
393
+ "status": "failed_fit" if tracker.model_calls else "entry_failure",
394
+ "error_type": type(exc).__name__,
395
+ "error_code": exc.code if isinstance(exc, DriverError) else None,
396
+ "usage": tracker.as_dict(),
397
+ "model_trace": tracker.stages,
398
+ "provider_usage_unknown": tracker.model_calls > len(tracker.stages)
399
+ or any(
400
+ "failure_code" in stage and stage.get("provider_usage") is None
401
+ for stage in tracker.stages
402
+ ),
403
+ "automatic_retry": False,
404
+ "held_out_acceptance_complete": False,
405
+ }
406
+ if not (root / "fit-terminal.json").exists():
407
+ _save(root / "fit-terminal.json", terminal)
408
+ raise
409
+
410
+
411
+ def main(argv: Sequence[str] | None = None) -> int:
412
+ parser = argparse.ArgumentParser(description=__doc__)
413
+ parser.add_argument("--checkout", required=True)
414
+ parser.add_argument(
415
+ "--pairs", required=True, type=Path, help="JSON list of declared split pairs"
416
+ )
417
+ parser.add_argument("--backend-config", required=True, type=Path)
418
+ parser.add_argument("--output", required=True, type=Path)
419
+ parser.add_argument("--acknowledge-external-source", action="store_true")
420
+ parser.add_argument("--batch-size", type=int, default=2)
421
+ parser.add_argument("--max-patterns", type=int, default=25)
422
+ parser.add_argument("--max-model-calls", type=int, default=8)
423
+ parser.add_argument("--max-tokens", type=int, default=4096)
424
+ parser.add_argument("--seed", type=int, default=17)
425
+ args = parser.parse_args(argv)
426
+ pairs = [ReFormeRQueryPair(**row) for row in _loads_strict_json(args.pairs.read_text())]
427
+ config = BackendConfig.from_json(args.backend_config.read_text(encoding="utf-8"))
428
+ controls = ReFormeRInductionControls(
429
+ batch_size=args.batch_size,
430
+ max_patterns=args.max_patterns,
431
+ max_model_calls=args.max_model_calls,
432
+ max_tokens=args.max_tokens,
433
+ seed=args.seed,
434
+ )
435
+ artifact = ReFormeRPatternInduction(controls).fit(
436
+ checkout=args.checkout,
437
+ training_pairs=[p for p in pairs if p.split == "train"],
438
+ held_out_pairs=[p for p in pairs if p.split != "train"],
439
+ output_root=args.output,
440
+ backend_config=config,
441
+ backend=OpenAICompatibleBackend(config),
442
+ source_license_acknowledged=args.acknowledge_external_source,
443
+ )
444
+ print(
445
+ _canonical_json(
446
+ {
447
+ "status": "candidate_generated",
448
+ "artifact_id": artifact.artifact_id,
449
+ "pattern_sha256": artifact.pattern_sha256,
450
+ }
451
+ )
452
+ )
453
+ return 0
454
+
455
+
456
+ if __name__ == "__main__":
457
+ raise SystemExit(main())
workers/rrr/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # Rewrite-Retrieve-Read quarantined inference worker
2
+
3
+ The toolkit's recommended RRR entrypoint is
4
+ [`rewrite.rrr.common_support_prompt`](../../docs/rrr-controlled.md), which uses
5
+ the configured backbone and shared retriever. It runs through the Python core
6
+ without this external worker or an author warm-up/PPO checkpoint. This document
7
+ covers the separately selected external-worker profiles.
8
+
9
+ This worker supports the separable inference chain from
10
+ [`xbmxb/RAG-query-rewriting`](https://github.com/xbmxb/RAG-query-rewriting) at
11
+ commit `6bab6243e60c7f3e526b6ee44f95381b1024d471`:
12
+
13
+ `rewrite prompt/model -> parsed query -> fixed search artifact -> snippets -> frozen reader`
14
+
15
+ It remains `external_only`. The repository has no root license file, its
16
+ published `complete()` function is an empty stub, and a redacted security scan
17
+ of the pinned tarball reports credential-risk assignments in seven source
18
+ paths. AgentInputLab therefore never vendors, extracts, imports, or echoes the
19
+ upstream source or any suspected value. The tarball is used only for commit,
20
+ byte-hash, absent-license, AST-symbol, and risk-count evidence. Output evidence
21
+ is `pinned_tarball_compatible_chain`, not native execution or paper parity.
22
+
23
+ ## Mandatory gates
24
+
25
+ Execution requires all of the following:
26
+
27
+ 1. the adapter sets `source_license_acknowledged=True`;
28
+ 2. the adapter sets `checkpoint_license_acknowledged=True`;
29
+ 3. the worker receives `--acknowledge-noassertion-source`;
30
+ 4. the worker receives `--acknowledge-noassertion-checkpoints`;
31
+ 5. the operator explicitly keeps the risky tarball quarantined with
32
+ `--acknowledge-credential-quarantine`.
33
+
34
+ Source, rewriter, reader, prompt, search cache, and dataset licenses are
35
+ independent. Both checkpoint manifests must retain `license: "NOASSERTION"`.
36
+ No upstream data, cache, source, or weights are included in wheels/sdists.
37
+
38
+ ## Frozen comparison identity
39
+
40
+ Every request binds the two prompt byte hashes; prompt/warm-up/PPO rewriter
41
+ checkpoint revision; frozen-reader revision; model-deployment fingerprints;
42
+ search-cache or controlled-retriever artifact; corpus/index revisions; top-k;
43
+ search time window; seed; input character limits; generation token limits; and
44
+ the complete input hash. Successful requests report two model calls and one
45
+ search; failures retain only the calls and usage actually consumed. Local
46
+ encoder-decoder output accounting excludes the supplied decoder-start prefix,
47
+ while decoded output and generation limits stay unchanged.
48
+ Requests cannot choose paths, modules, URLs, environment variables, or
49
+ credentials.
50
+
51
+ The official single-query parser boundary is preserved: generation ends at
52
+ `**`, queries use `;`, and this release accepts exactly one query. Search uses
53
+ the rewritten query; the frozen reader receives the original task query plus
54
+ the joined snippets, matching the upstream `rewrite -> rewrite2` data flow.
55
+
56
+ `bing_cache` is a `controlled_adapter` with `search_profile=bing_cache`. It
57
+ replays a frozen Bing result artifact; the worker never calls the
58
+ credential-bearing Bing code.
59
+ `controlled_static` requires a matching retriever fingerprint and is always
60
+ labelled `controlled_adapter`, never native.
61
+
62
+ ## Checkpoint inference only
63
+
64
+ The rewriter checkpoint manifest supports `prompt`, `warmup_checkpoint`, and
65
+ `ppo_checkpoint`; these are inference profiles. The reader uses
66
+ `frozen_reader`. Local loading uses Hugging Face with
67
+ `local_files_only=True`, `trust_remote_code=False`, and deterministic greedy
68
+ generation. There is no PPO training command or code path.
69
+
70
+ ```json
71
+ {
72
+ "schema_version": "agentinputlab.rrr.checkpoint.v1",
73
+ "role": "rewriter",
74
+ "profile": "ppo_checkpoint",
75
+ "revision": "immutable-checkpoint-revision",
76
+ "model_type": "seq2seq",
77
+ "license": "NOASSERTION",
78
+ "files": {
79
+ "config.json": "<sha256>",
80
+ "model.safetensors": "<sha256>"
81
+ }
82
+ }
83
+ ```
84
+
85
+ ## Search cache and commands
86
+
87
+ The JSON search artifact uses schema `agentinputlab.rrr.search-cache.v1` and
88
+ records `mode`, corpus/index revisions, ISO date window, and exact query-to-row
89
+ entries. Its raw SHA-256 is `search_artifact_hash`.
90
+
91
+ Source/symbol/security smoke test (never imports source):
92
+
93
+ ```bash
94
+ python workers/rrr/driver.py \
95
+ --source-tarball /mounted/6bab6243.tar.gz \
96
+ --smoke-source
97
+ ```
98
+
99
+ Inference:
100
+
101
+ ```bash
102
+ python workers/rrr/driver.py \
103
+ --source-tarball /mounted/6bab6243.tar.gz \
104
+ --prompt /mounted/rewrite-prompt.txt \
105
+ --reader-prompt /mounted/reader-prompt.txt \
106
+ --search-cache /mounted/search-cache.json \
107
+ --rewriter-checkpoint /mounted/rewriter \
108
+ --rewriter-manifest /mounted/rewriter-manifest.json \
109
+ --reader-checkpoint /mounted/reader \
110
+ --reader-manifest /mounted/reader-manifest.json \
111
+ --acknowledge-noassertion-source \
112
+ --acknowledge-noassertion-checkpoints \
113
+ --acknowledge-credential-quarantine
114
+ ```
115
+
116
+ Fake-tarball tests prove transport, trajectory, redaction, identity, fairness,
117
+ budgets, and license gates only. The opt-in real-tarball test proves byte and
118
+ source-symbol evidence. Neither is a benchmark-result parity claim.
119
+
120
+ An existing pinned Git checkout can replace the archive for the same inference
121
+ chain. Use `--source-checkout /mounted/RAG-query-rewriting` instead of
122
+ `--source-tarball`. This verifies the exact commit/root, the manifest's required
123
+ file SHA-256 locks, tracked Python Git blobs, AST symbols and credential-risk
124
+ inventory without reading bundled datasets or downloading the archive. It never
125
+ imports the checkout. Evidence is `pinned_checkout_compatible_chain`; the complete
126
+ archive checksum and historical Bing/checkpoint parity are not claimed.
@@ -0,0 +1 @@
1
+ """Pinned Rewrite-Retrieve-Read worker package."""
@@ -0,0 +1,57 @@
1
+ {
2
+ "schema_version": "agentinputlab.rrr.compatibility.v1",
3
+ "evidence_level": "pinned_tarball_compatible_chain",
4
+ "upstream": {
5
+ "repository": "https://github.com/xbmxb/RAG-query-rewriting",
6
+ "commit": "6bab6243e60c7f3e526b6ee44f95381b1024d471",
7
+ "archive_root": "RAG-query-rewriting-6bab6243e60c7f3e526b6ee44f95381b1024d471",
8
+ "tarball_sha256": "1fc4e570e00cb6be98914ec8e59f575864d5808db1cca463d9de1d1f7929b2fb",
9
+ "license_spdx": "NOASSERTION",
10
+ "license_file_present": false
11
+ },
12
+ "source_files": {
13
+ "README.md": "09c104d796416cdf24089cae5fbfaf2d348cccb39f525b5e1a3cb85f0eff2cb9",
14
+ "generate/inference.py": "9ef3486c2abf7091dd7173a0f3fe3f35aebecd4679eae47ef8c447bddcfea95d",
15
+ "generate/main-0514.py": "aad3c565e5fcf7185c4cb0cc66ee4a14661e634a715aaca8f31ed2e0b7f09aad",
16
+ "generate/bingenv.py": "7a7e61f3111c06db61e9e67b30f85b30cb164b2f6ad5631aee08fb4d496d50ec",
17
+ "generate/bing.py": "d1b1cb3c9c0041adb31163d714e95f5525137957e057be2ffc841e56cb81e045",
18
+ "generate/interllama.py": "9f78e03af4f7258b20d3429055cce6aaf2a63e8fd9107ca30e02fc74e0ae9fd6",
19
+ "generate/inprompts/myprompt.jsonl": "1483b80e5b81a26b97641cc2a5c4535c045eb39394d2b88651aade0d4afa5fb4",
20
+ "result_models/README.md": "f207247939fd65d359a5c3821047ec4db1df5757d2b7aac0bc22a6726c0f9dfd",
21
+ "rl/RL4LMs/rl4lms/envs/text_generation/warm_start.py": "0ee13eebfe1cc17cfad6c3d343cd06771e445db33a3c7014884b02381cd3c920"
22
+ },
23
+ "required_symbols": {
24
+ "generate/inference.py": ["add_prompt", "run_main", "run_searchre"],
25
+ "generate/main-0514.py": ["rewrite", "rewrite2"],
26
+ "generate/bingenv.py": ["BingEnv"],
27
+ "rl/RL4LMs/rl4lms/envs/text_generation/warm_start.py": ["ActorOnlyWarmStartMixin"]
28
+ },
29
+ "credential_risk_paths": [
30
+ "datasets/tasks/mmlu/evaluate.py",
31
+ "generate/bing.py",
32
+ "generate/bing_utils/bing.py",
33
+ "rl/RL4LMs/rl4lms/envs/text_generation/bing.py",
34
+ "rl/RL4LMs/rl4lms/envs/text_generation/bing_utils/bing.py",
35
+ "rl/RL4LMs/rl4lms/envs/text_generation/llm_utils.py",
36
+ "rl/RL4LMs/rl4lms/envs/text_generation/vicuna_utils.py"
37
+ ],
38
+ "runtime_contract": {
39
+ "stage_order": ["rewrite", "retrieve", "snippet", "reader"],
40
+ "query_separator": ";",
41
+ "generation_terminator": "**",
42
+ "search_wrapper": "search[{query}]",
43
+ "snippet_joiner": " ",
44
+ "supported_rewriter_profiles": ["prompt", "warmup_checkpoint", "ppo_checkpoint"],
45
+ "supported_search_modes": ["bing_cache", "controlled_static"],
46
+ "imports_upstream_runtime": false,
47
+ "trains_ppo": false
48
+ },
49
+ "artifact_policy": {
50
+ "checkpoint_license": "NOASSERTION",
51
+ "bundle_source": false,
52
+ "bundle_checkpoints": false,
53
+ "bundle_search_cache": false,
54
+ "local_files_only": true,
55
+ "trust_remote_code": false
56
+ }
57
+ }