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
workers/acon/fitted.py ADDED
@@ -0,0 +1,395 @@
1
+ """Content-addressed, model-bound deployment of fitted native ACON guidelines.
2
+
3
+ Generated templates are accepted as literal text plus source-declared variable
4
+ placeholders, never as general Jinja programs. The original HistoryOptimizer
5
+ still builds the prompt, calls the explicit metered backend and parses output.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import hashlib
11
+ import importlib
12
+ import json
13
+ from collections.abc import Mapping
14
+ from dataclasses import dataclass
15
+ from pathlib import Path, PurePosixPath
16
+ from typing import Any
17
+
18
+ from agentinputlab.backends import LLMBackend
19
+ from agentinputlab.contracts import ExternalDependencyError, ValidationError
20
+ from agentinputlab.contracts.serialization import content_hash, freeze_mapping, to_jsonable
21
+
22
+ from .driver import _construct_optimizer, _load_manifest, _upstream_import_scope
23
+ from .guideline import (
24
+ _LOCK,
25
+ ACONGuidelineControls,
26
+ _MeteredLLM,
27
+ _save,
28
+ validate_guideline_checkout,
29
+ validate_training_bundle,
30
+ )
31
+
32
+ _PROTOCOL = "agentinputlab.acon.fitted-history.literal-placeholders.v1"
33
+ _VARIABLES = frozenset({"task", "history", "prev_summary"})
34
+ _SIGNALS = frozenset(
35
+ {
36
+ "remediation_recommendations",
37
+ "inefficiency_patterns",
38
+ "inefficiency_evidence",
39
+ "missing_or_distorted_facts",
40
+ "summary_inaccuracies",
41
+ "summary_or_session_contributors",
42
+ "lost_state_variables",
43
+ "lost_or_recreated_state",
44
+ "root_cause_categories",
45
+ "primary_inflation_causes",
46
+ }
47
+ )
48
+
49
+
50
+ def validate_training_signals(rows):
51
+ """Do not promote an updater's raw-output fallback as completed training."""
52
+ if (
53
+ not isinstance(rows, list)
54
+ or not rows
55
+ or any(
56
+ not isinstance(row, dict)
57
+ or "raw_output" in row
58
+ or not any(isinstance(row.get(key), list) and row[key] for key in _SIGNALS)
59
+ for row in rows
60
+ )
61
+ ):
62
+ raise ValidationError(
63
+ "native ACON analysis lacks complete parsed training signals; candidate remains diagnostic"
64
+ )
65
+
66
+
67
+ def validate_fitted_template(text: str, expected_variables=_VARIABLES) -> tuple[str, ...]:
68
+ """Parse without evaluation. Reject executable/indirect Jinja constructs."""
69
+ if not isinstance(text, str) or not text.strip() or len(text.encode()) > 65536:
70
+ raise ValidationError("fitted ACON template must be non-empty bounded UTF-8 text")
71
+ try:
72
+ from jinja2 import Environment, meta, nodes
73
+ except ModuleNotFoundError as exc:
74
+ raise ExternalDependencyError(
75
+ "install agentinputlab[acon-fit] for fitted templates"
76
+ ) from exc
77
+ try:
78
+ tree = Environment().parse(text)
79
+ except Exception as exc:
80
+ raise ValidationError("fitted ACON template syntax is invalid") from exc
81
+ allowed = {nodes.Output, nodes.TemplateData, nodes.Name}
82
+ if any(type(node) not in allowed for node in tree.find_all(nodes.Node)):
83
+ raise ValidationError(
84
+ "fitted ACON templates allow literal text and variable placeholders only"
85
+ )
86
+ if any(node.name not in _VARIABLES or node.ctx != "load" for node in tree.find_all(nodes.Name)):
87
+ raise ValidationError("fitted ACON may reference only explicit source variable names")
88
+ variables = meta.find_undeclared_variables(tree)
89
+ if variables != set(expected_variables) or not variables <= _VARIABLES:
90
+ raise ValidationError("fitted ACON placeholders differ from the pinned source template")
91
+ return tuple(sorted(variables))
92
+
93
+
94
+ def _pinned_file(root: Path, relative: str, expected: str, limit=2 * 1024**2) -> bytes:
95
+ p = PurePosixPath(relative)
96
+ path = root / p
97
+ if (
98
+ p.is_absolute()
99
+ or ".." in p.parts
100
+ or root.is_symlink()
101
+ or path.is_symlink()
102
+ or not path.is_file()
103
+ ):
104
+ raise ValidationError("invalid fitted ACON provenance file")
105
+ if not path.resolve().is_relative_to(root.resolve()) or path.stat().st_size > limit:
106
+ raise ValidationError("fitted ACON provenance path or size differs")
107
+ raw = path.read_bytes()
108
+ if hashlib.sha256(raw).hexdigest() != expected:
109
+ raise ValidationError("fitted ACON provenance checksum differs")
110
+ return raw
111
+
112
+
113
+ @dataclass(frozen=True, slots=True)
114
+ class ACONGuidelineArtifact:
115
+ artifact_id: str
116
+ template: str
117
+ template_sha256: str
118
+ base_profile: str
119
+ source_hashes: Mapping[str, str]
120
+ backend_fingerprint: Mapping[str, Any]
121
+ training_manifest_sha256: str
122
+ train_ids: tuple[str, ...]
123
+ excluded_evaluation_ids: tuple[str, ...]
124
+ fit_artifact_identity: str
125
+ provenance: Mapping[str, str]
126
+ protocol: str = _PROTOCOL
127
+
128
+ def __post_init__(self):
129
+ if (
130
+ self.protocol != _PROTOCOL
131
+ or hashlib.sha256(self.template.encode()).hexdigest() != self.template_sha256
132
+ ):
133
+ raise ValidationError("fitted ACON protocol or template identity differs")
134
+ validate_fitted_template(self.template)
135
+ for name in ("source_hashes", "backend_fingerprint", "provenance"):
136
+ object.__setattr__(self, name, freeze_mapping(getattr(self, name)))
137
+ required = {"fit_start_sha256", "fit_terminal_sha256", "analysis_sha256", "candidate_path"}
138
+ if set(self.provenance) != required:
139
+ raise ValidationError(
140
+ "fitted ACON artifact must retain its complete fit/analysis provenance"
141
+ )
142
+ for name in ("train_ids", "excluded_evaluation_ids"):
143
+ values = tuple(getattr(self, name))
144
+ if any(not isinstance(x, str) or not x for x in values) or len(set(values)) != len(
145
+ values
146
+ ):
147
+ raise ValidationError("fitted ACON split IDs must be unique non-empty strings")
148
+ object.__setattr__(self, name, values)
149
+ if not self.train_ids or set(self.train_ids) & set(self.excluded_evaluation_ids):
150
+ raise ValidationError("fitted ACON train/evaluation IDs overlap or train is empty")
151
+ if self.artifact_id != content_hash(self.identity_payload()):
152
+ raise ValidationError("fitted ACON artifact payload differs from its identity")
153
+
154
+ def identity_payload(self):
155
+ return {k: getattr(self, k) for k in self.__dataclass_fields__ if k != "artifact_id"}
156
+
157
+ def as_dict(self):
158
+ return to_jsonable({"artifact_id": self.artifact_id, **self.identity_payload()})
159
+
160
+ def save(self, path: str | Path):
161
+ _save(Path(path), self.as_dict())
162
+
163
+ @classmethod
164
+ def load(cls, path: str | Path, *, sha256: str):
165
+ path = Path(path)
166
+ raw = _pinned_file(path.parent, path.name, sha256)
167
+ return cls(**json.loads(raw))
168
+
169
+ @classmethod
170
+ def from_fit(
171
+ cls,
172
+ *,
173
+ checkout,
174
+ fit_root,
175
+ training_root,
176
+ backend: LLMBackend,
177
+ fit_start_sha256: str,
178
+ fit_terminal_sha256: str,
179
+ analysis_sha256: str,
180
+ candidate_path: str,
181
+ ):
182
+ """Freeze one explicitly selected candidate, never select by heldout scores."""
183
+ root = Path(fit_root)
184
+ start = json.loads(_pinned_file(root, "fit-start.json", fit_start_sha256))
185
+ terminal = json.loads(_pinned_file(root, "fit-terminal.json", fit_terminal_sha256))
186
+ analysis = json.loads(
187
+ _pinned_file(root, "aggregated_history_regressions.json", analysis_sha256)
188
+ )
189
+ validate_training_signals(analysis)
190
+ source, hashes = validate_guideline_checkout(checkout)
191
+ if start["source_hashes"] != hashes or terminal["source_hashes"] != hashes:
192
+ raise ValidationError("fitted ACON upstream source identity differs")
193
+ if content_hash(start["backend"]) != content_hash(backend.fingerprint()):
194
+ raise ValidationError("fitted ACON artifact cannot change its model/backend binding")
195
+ if (
196
+ terminal["status"] != "candidates_generated"
197
+ or candidate_path not in terminal["candidates"]
198
+ ):
199
+ raise ValidationError("fitted ACON candidate was not produced by the pinned fit")
200
+ if start["training_manifest_sha256"] != terminal["training_manifest_sha256"]:
201
+ raise ValidationError("fitted ACON training provenance differs")
202
+ inputs = validate_training_bundle(training_root, start["training_manifest_sha256"])
203
+ core, _ = _load_manifest(Path(__file__).with_name("compatibility_manifest.json"))
204
+ profile = core["prompt_profiles"].get(start["base_profile"])
205
+ if not profile or profile["mode"] != "history":
206
+ raise ValidationError("fitted ACON base prompt is not a pinned history profile")
207
+ from jinja2 import Environment, meta
208
+
209
+ base = source / profile["prompt_dir"] / (profile["user_template"] + ".jinja")
210
+ expected_vars = meta.find_undeclared_variables(Environment().parse(base.read_text()))
211
+ candidates = terminal["candidates"]
212
+ if len({PurePosixPath(p).name for p in candidates}) != len(candidates):
213
+ raise ValidationError("fitted ACON candidate names collide")
214
+ identity = content_hash(
215
+ {
216
+ "candidates": {PurePosixPath(k).name: v for k, v in candidates.items()},
217
+ "source": hashes,
218
+ "training": start["training_manifest_sha256"],
219
+ "backend": start["backend"],
220
+ "controls": start["controls"],
221
+ "base_profile": start["base_profile"],
222
+ }
223
+ )
224
+ if identity != terminal["artifact_identity"]:
225
+ raise ValidationError("native ACON fit artifact identity differs")
226
+ raw = _pinned_file(root, candidate_path, candidates[candidate_path], limit=65536)
227
+ text = raw.decode("utf-8")
228
+ validate_fitted_template(text, expected_vars)
229
+ values = dict(
230
+ template=text,
231
+ template_sha256=candidates[candidate_path],
232
+ base_profile=start["base_profile"],
233
+ source_hashes=hashes,
234
+ backend_fingerprint=start["backend"],
235
+ training_manifest_sha256=start["training_manifest_sha256"],
236
+ train_ids=tuple(inputs["train_ids"]),
237
+ excluded_evaluation_ids=tuple(inputs["excluded_evaluation_ids"]),
238
+ fit_artifact_identity=identity,
239
+ provenance={
240
+ "fit_start_sha256": fit_start_sha256,
241
+ "fit_terminal_sha256": fit_terminal_sha256,
242
+ "analysis_sha256": analysis_sha256,
243
+ "candidate_path": candidate_path,
244
+ },
245
+ protocol=_PROTOCOL,
246
+ )
247
+ return cls(artifact_id=content_hash(values), **values)
248
+
249
+ def compress_history(
250
+ self,
251
+ *,
252
+ checkout,
253
+ backend: LLMBackend,
254
+ task: str,
255
+ history: str,
256
+ output_root,
257
+ previous_summary: str | None = None,
258
+ evaluation_id: str | None = None,
259
+ controls: ACONGuidelineControls | None = None,
260
+ ):
261
+ """Run pinned native compression with one frozen artifact and metered usage.
262
+
263
+ Use a dedicated child process for the upstream's process-global imports.
264
+ A supplied evaluation ID must have been explicitly excluded before fit.
265
+ This is caller-bound ID separation, not independent dataset/group attestation.
266
+ Omit the ID for general inference; no heldout-evaluation claim is then made.
267
+ """
268
+ if content_hash(backend.fingerprint()) != content_hash(self.backend_fingerprint):
269
+ raise ValidationError("fitted ACON backend/model differs before inference")
270
+ if evaluation_id is not None and evaluation_id not in self.excluded_evaluation_ids:
271
+ raise ValidationError("fitted ACON evaluation ID was not excluded before training")
272
+ if (
273
+ not isinstance(task, str)
274
+ or not task.strip()
275
+ or not isinstance(history, str)
276
+ or not history.strip()
277
+ ):
278
+ raise ValidationError("fitted ACON requires non-empty task and real history text")
279
+ if previous_summary is not None and not isinstance(previous_summary, str):
280
+ raise ValidationError("fitted ACON previous summary must be text")
281
+ if len((task + history + (previous_summary or "")).encode()) > 4 * 1024**2:
282
+ raise ValidationError("fitted ACON input exceeds limit")
283
+ source, hashes = validate_guideline_checkout(checkout)
284
+ if dict(self.source_hashes) != hashes:
285
+ raise ValidationError("fitted ACON source differs before inference")
286
+ core, _ = _load_manifest(Path(__file__).with_name("compatibility_manifest.json"))
287
+ profile = core["prompt_profiles"].get(self.base_profile)
288
+ if not profile or profile["mode"] != "history":
289
+ raise ValidationError("fitted ACON prompt profile differs")
290
+ validate_fitted_template(self.template)
291
+ controls = controls or ACONGuidelineControls(
292
+ max_model_calls=1, max_output_tokens=512, timeout_seconds=180
293
+ )
294
+ root = Path(output_root)
295
+ if root.is_symlink():
296
+ raise ValidationError("fitted ACON output root must not be a symlink")
297
+ root.mkdir(parents=True, exist_ok=False)
298
+ _save(
299
+ root / "runtime-start.json",
300
+ {
301
+ "artifact_id": self.artifact_id,
302
+ "controls": controls,
303
+ "evaluation_id": evaluation_id,
304
+ "input_hash": content_hash(
305
+ {"task": task, "history": history, "previous_summary": previous_summary}
306
+ ),
307
+ "automatic_retry": False,
308
+ },
309
+ )
310
+ meter = None
311
+ try:
312
+ prompts = root / "prompts"
313
+ prompts.mkdir()
314
+ system = (
315
+ source / profile["prompt_dir"] / (profile["system_template"] + ".jinja")
316
+ ).read_text()
317
+ for name, text in (
318
+ ("source_system.jinja", system),
319
+ ("fitted_history.jinja", self.template),
320
+ ):
321
+ with (prompts / name).open("x", encoding="utf-8") as f:
322
+ f.write(text)
323
+ journal = root / "provider-attempts"
324
+ journal.mkdir()
325
+ meter = _NativeHistoryMeter(backend, controls, journal)
326
+ with _LOCK, _upstream_import_scope(source):
327
+ native = importlib.import_module(
328
+ "productive_agents.ctxopt.history_optimizer"
329
+ ).HistoryOptimizer
330
+ optimizer = _construct_optimizer(
331
+ native,
332
+ {
333
+ "history_prompt_dir": str(prompts.resolve()),
334
+ "prompts": {
335
+ "prompt_system": "source_system",
336
+ "prompt_history_user": "fitted_history",
337
+ },
338
+ "history_summarization_threshold": -1,
339
+ "model": backend.model_id,
340
+ "temperature": 0.0,
341
+ "use_llmlingua": False,
342
+ },
343
+ meter,
344
+ "HistoryOptimizer",
345
+ )
346
+ if optimizer.tokenizer is None:
347
+ raise ValidationError("exact native tokenizer unavailable")
348
+ summary = optimizer.process(
349
+ task=task,
350
+ history=history,
351
+ prev_history_summary=previous_summary,
352
+ raw_history=[],
353
+ opt_args=None,
354
+ )
355
+ if not isinstance(summary, str) or not summary.strip():
356
+ raise ValidationError("fitted native ACON returned an empty summary")
357
+ result = {
358
+ "status": "native_summary_terminal",
359
+ "summary": summary,
360
+ "artifact_id": self.artifact_id,
361
+ "model_calls": meter.attempts,
362
+ "input_tokens": meter.input_tokens,
363
+ "output_tokens": meter.output_tokens,
364
+ "native_class": native.__module__ + "." + native.__name__,
365
+ "native_interactions": optimizer.history,
366
+ "native_system_sha256": hashlib.sha256(
367
+ meter.system_message.encode()
368
+ ).hexdigest(),
369
+ "evaluation_id_verified_against_prefit_exclusions": evaluation_id is not None,
370
+ "automatic_retry": False,
371
+ "profile_kind": "controlled_adapter",
372
+ }
373
+ _save(root / "runtime-terminal.json", result)
374
+ return result
375
+ except Exception as exc:
376
+ _save(
377
+ root / "runtime-terminal.json",
378
+ {
379
+ "status": "failed_runtime" if meter else "entry_failure",
380
+ "error_type": type(exc).__name__,
381
+ "model_calls": meter.attempts if meter else 0,
382
+ "known_input_tokens": meter.input_tokens if meter else 0,
383
+ "known_output_tokens": meter.output_tokens if meter else 0,
384
+ "usage_unknown": meter.usage_unknown if meter else False,
385
+ "automatic_retry": False,
386
+ },
387
+ )
388
+ raise
389
+
390
+
391
+ class _NativeHistoryMeter(_MeteredLLM):
392
+ def generate(self, prompt, temperature=0.0):
393
+ if temperature != 0.0:
394
+ raise ValidationError("fitted native ACON temperature must remain zero")
395
+ return super().generate(prompt)