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,136 @@
1
+ """Controlled ACON observation profile shared by the paper's main arenas.
2
+
3
+ The upstream ACON observation optimizer is unchanged. This wrapper freezes
4
+ only the mapping from an AgentInputLab capture to ACON's single
5
+ ``observation`` argument: context block zero is optimized and every other
6
+ captured block is retained verbatim.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from dataclasses import dataclass, field
12
+
13
+ from agentinputlab.contracts import (
14
+ AlgorithmOutputError,
15
+ ExecutionTrace,
16
+ FrozenAgentState,
17
+ InputPatch,
18
+ InterventionContext,
19
+ PatchOp,
20
+ SemanticFamily,
21
+ TraceEvent,
22
+ TracePhase,
23
+ ValidationError,
24
+ )
25
+ from agentinputlab.contracts.serialization import content_hash
26
+ from agentinputlab.integrations.external_workers import WorkerClient
27
+
28
+ from .common import ACONArtifactIdentity, ACONObservationControls
29
+ from .observation_bridge import ACONObservationRuntimeExternal
30
+
31
+ ACON_COMMON_SUPPORT_RELEASE = "curate.acon.common_support_observation"
32
+ ACON_COMMON_SUPPORT_CONTEXT_RULE = "captured_context_block_zero.v1"
33
+
34
+
35
+ @dataclass(slots=True)
36
+ class ACONObservationCommonSupport:
37
+ """Run the pinned ACON observation optimizer on a frozen context slot."""
38
+
39
+ client: WorkerClient | None = None
40
+ artifacts: ACONArtifactIdentity | None = None
41
+ controls: ACONObservationControls = field(
42
+ default_factory=lambda: ACONObservationControls(
43
+ summarization_threshold=-1,
44
+ context_index=0,
45
+ add_previous_history_summary=False,
46
+ observation_version=1,
47
+ )
48
+ )
49
+ method_id: str = "acon"
50
+ release_id: str = ACON_COMMON_SUPPORT_RELEASE
51
+ family: SemanticFamily = SemanticFamily.CURATE
52
+
53
+ def __post_init__(self) -> None:
54
+ if not isinstance(self.artifacts, ACONArtifactIdentity):
55
+ raise ValidationError("ACON common support requires frozen artifact identities")
56
+ if not isinstance(self.controls, ACONObservationControls):
57
+ raise ValidationError("ACON common-support controls have the wrong type")
58
+ if self.controls.context_index != 0:
59
+ raise ValidationError("ACON common support freezes context_index=0")
60
+ if self.controls.add_previous_history_summary:
61
+ raise ValidationError(
62
+ "ACON common support forbids hidden previous-history summaries at turn zero"
63
+ )
64
+
65
+ def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
66
+ if not state.context:
67
+ raise ValidationError("ACON common support requires captured visible context")
68
+ component = ACONObservationRuntimeExternal(
69
+ client=self.client,
70
+ artifacts=self.artifacts,
71
+ controls=self.controls,
72
+ ).propose(state, context)
73
+ if len(component.operations) != 1:
74
+ raise AlgorithmOutputError("ACON component emitted an unexpected operation count")
75
+ operation = component.operations[0]
76
+ if operation.op is not PatchOp.REPLACE_CONTEXT:
77
+ raise AlgorithmOutputError("ACON component did not replace captured context")
78
+ output_context = tuple(operation.value)
79
+ if len(output_context) != len(state.context):
80
+ raise AlgorithmOutputError("ACON common support changed the context block count")
81
+ for index, (before, after) in enumerate(zip(state.context, output_context, strict=True)):
82
+ if before.block_id != after.block_id:
83
+ raise AlgorithmOutputError("ACON common support changed a source block identity")
84
+ if index != 0 and before != after:
85
+ raise AlgorithmOutputError("ACON common support modified an unselected block")
86
+
87
+ trace = ExecutionTrace(
88
+ method_id=self.method_id,
89
+ release_id=self.release_id,
90
+ events=(
91
+ TraceEvent(
92
+ TracePhase.PREPARE,
93
+ "acon_common_support_context_selection",
94
+ {
95
+ "selection_rule": ACON_COMMON_SUPPORT_CONTEXT_RULE,
96
+ "selected_context_index": 0,
97
+ "selected_context_id": state.context[0].block_id,
98
+ "selected_context_hash": content_hash(state.context[0]),
99
+ "source_context_blocks": len(state.context),
100
+ },
101
+ ),
102
+ *component.trace.events,
103
+ ),
104
+ counters={
105
+ **dict(component.trace.counters),
106
+ "source_context_blocks": len(state.context),
107
+ "selected_context_blocks": 1,
108
+ },
109
+ warnings=(
110
+ *component.trace.warnings,
111
+ "controlled_common_support_context_mapping_not_paper_result_parity",
112
+ ),
113
+ )
114
+ return InputPatch(
115
+ method_id=self.method_id,
116
+ release_id=self.release_id,
117
+ source_state_hash=state.state_hash,
118
+ operations=component.operations,
119
+ trace=trace,
120
+ implementation_identity=("frozen_context_mapping+" + component.implementation_identity),
121
+ profile_kind="controlled_adapter",
122
+ metadata={
123
+ **dict(component.metadata),
124
+ "component_release_id": component.release_id,
125
+ "common_support_context_rule": ACON_COMMON_SUPPORT_CONTEXT_RULE,
126
+ "source_state_hash": state.state_hash,
127
+ "paper_result_parity_claimed": False,
128
+ },
129
+ )
130
+
131
+
132
+ __all__ = [
133
+ "ACON_COMMON_SUPPORT_CONTEXT_RULE",
134
+ "ACON_COMMON_SUPPORT_RELEASE",
135
+ "ACONObservationCommonSupport",
136
+ ]
@@ -0,0 +1,309 @@
1
+ """External bridge for ACON's history optimizer and MemoryManager assembly."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import asdict, dataclass, field
6
+
7
+ from agentinputlab.contracts import (
8
+ AlgorithmOutputError,
9
+ ExecutionTrace,
10
+ FrozenAgentState,
11
+ InputPatch,
12
+ InterventionContext,
13
+ Message,
14
+ PatchOp,
15
+ PatchOperation,
16
+ SemanticFamily,
17
+ TraceEvent,
18
+ TracePhase,
19
+ ValidationError,
20
+ )
21
+ from agentinputlab.contracts.serialization import content_hash
22
+ from agentinputlab.integrations.external_workers import WorkerClient
23
+ from agentinputlab.integrations.external_workers.method import (
24
+ MethodWorkerRequest,
25
+ call_worker,
26
+ optional_text,
27
+ required_text,
28
+ resolve_worker,
29
+ worker_fingerprint,
30
+ )
31
+ from agentinputlab.observability import external_usage_counters
32
+
33
+ from .common import (
34
+ ACON_HISTORY_PROTOCOL,
35
+ ACON_UPSTREAM_COMMIT,
36
+ ACONArtifactIdentity,
37
+ ACONHistoryControls,
38
+ history_text,
39
+ preserved_turn_indices,
40
+ target_backend_fingerprint,
41
+ validate_runtime_identity,
42
+ validate_threshold_response,
43
+ )
44
+
45
+
46
+ @dataclass(slots=True)
47
+ class ACONHistoryRuntimeExternal:
48
+ """Apply pinned ACON with a budget-safe preflight/execute protocol."""
49
+
50
+ client: WorkerClient | None = None
51
+ artifacts: ACONArtifactIdentity | None = None
52
+ controls: ACONHistoryControls = field(default_factory=ACONHistoryControls)
53
+ method_id: str = "acon"
54
+ release_id: str = "curate.acon.history_runtime"
55
+ family: SemanticFamily = SemanticFamily.CURATE
56
+
57
+ def __post_init__(self) -> None:
58
+ if not isinstance(self.artifacts, ACONArtifactIdentity):
59
+ raise ValidationError("ACON history runtime requires frozen artifact identities")
60
+
61
+ def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
62
+ messages = state.messages
63
+ if len(messages) < 2 or messages[0].role != "system" or messages[1].role != "user":
64
+ raise ValidationError(
65
+ "ACON history runtime requires a session beginning with system then user"
66
+ )
67
+ assert self.artifacts is not None
68
+ worker = resolve_worker(self.client, context, label="ACON history")
69
+ target_fingerprint = target_backend_fingerprint(context.backend, self.artifacts)
70
+ original_prompt = state.metadata.get("acon_original_first_user_prompt")
71
+ if original_prompt is None:
72
+ if "<HISTORY_SUMMARY>" in messages[1].content:
73
+ raise ValidationError(
74
+ "cannot recover ACON original prompt from an already summarized session"
75
+ )
76
+ original_prompt = messages[1].content
77
+ if not isinstance(original_prompt, str) or not original_prompt.strip():
78
+ raise ValidationError("acon_original_first_user_prompt metadata must be text")
79
+ preserved_indices = preserved_turn_indices(messages, self.controls.preserve_last_k_turns)
80
+ preserved = tuple(messages[index] for index in preserved_indices)
81
+
82
+ # The pinned MemoryManager searches by role/content for the first preserved
83
+ # item. Reproduce that behavior, including its duplicate-content edge case.
84
+ preserved_start = len(messages)
85
+ if preserved:
86
+ first = preserved[0]
87
+ for index, message in enumerate(messages):
88
+ if message.role == first.role and message.content == first.content:
89
+ preserved_start = index
90
+ break
91
+ summarization_messages = messages[:preserved_start] if preserved_start > 2 else ()
92
+ material = history_text(summarization_messages)
93
+ previous_summary = state.metadata.get("acon_previous_history_summary", "")
94
+ if not isinstance(previous_summary, str):
95
+ raise ValidationError("acon_previous_history_summary metadata must be text")
96
+ counted_material = f"{previous_summary}\n{material}" if previous_summary else material
97
+ task = state.instruction if state.instruction.strip() else state.query
98
+ base_payload = {
99
+ "task": task,
100
+ "raw_messages": messages,
101
+ "history_text": material,
102
+ "history_text_hash": content_hash(material),
103
+ "counted_material_hash": content_hash(counted_material),
104
+ "previous_history_summary": previous_summary,
105
+ "preserved_message_indices": preserved_indices,
106
+ "preserved_messages": preserved,
107
+ "controls": asdict(self.controls),
108
+ "artifacts": self.artifacts.as_payload(),
109
+ "seed": context.seed,
110
+ }
111
+ preflight_request = MethodWorkerRequest(
112
+ method_id=self.method_id,
113
+ release_id=self.release_id,
114
+ upstream_commit=ACON_UPSTREAM_COMMIT,
115
+ state_hash=state.state_hash,
116
+ payload={
117
+ **base_payload,
118
+ "phase": "preflight",
119
+ "decision_token": "",
120
+ },
121
+ dependency_fingerprints={"target_backend": target_fingerprint},
122
+ protocol_version=ACON_HISTORY_PROTOCOL,
123
+ )
124
+ preflight = call_worker(worker, preflight_request)
125
+ if preflight.usage.model_calls != 0:
126
+ raise AlgorithmOutputError("ACON preflight cannot bill a model call")
127
+ payload = preflight.payload
128
+ profile_id, manifest_hash, attestation = validate_runtime_identity(payload, self.artifacts)
129
+ if required_text(
130
+ payload, "counted_material_hash", label="ACON history response"
131
+ ) != content_hash(counted_material):
132
+ raise AlgorithmOutputError("ACON history worker counted different material")
133
+ token_count, threshold_triggered = validate_threshold_response(
134
+ payload,
135
+ threshold=self.controls.summarization_threshold,
136
+ )
137
+ interval_ready = (
138
+ self.controls.summary_interval == -1
139
+ or len(messages) // 2 >= self.controls.summary_interval
140
+ )
141
+ expected_applied = bool(material.strip()) and threshold_triggered and interval_ready
142
+ applied = payload.get("applied")
143
+ if not isinstance(applied, bool) or applied is not expected_applied:
144
+ raise AlgorithmOutputError(
145
+ "ACON history applied flag disagrees with history/threshold/interval branches"
146
+ )
147
+ decision_token = required_text(payload, "decision_token", label="ACON preflight")
148
+ response = preflight
149
+ if applied:
150
+ execute_request = MethodWorkerRequest(
151
+ method_id=self.method_id,
152
+ release_id=self.release_id,
153
+ upstream_commit=ACON_UPSTREAM_COMMIT,
154
+ state_hash=state.state_hash,
155
+ payload={
156
+ **base_payload,
157
+ "phase": "execute",
158
+ "decision_token": decision_token,
159
+ },
160
+ dependency_fingerprints={"target_backend": target_fingerprint},
161
+ minimum_reservation={"model_calls": 1},
162
+ protocol_version=ACON_HISTORY_PROTOCOL,
163
+ )
164
+ response = call_worker(worker, execute_request)
165
+ payload = response.payload
166
+ execute_identity = validate_runtime_identity(payload, self.artifacts)
167
+ if execute_identity != (profile_id, manifest_hash, attestation):
168
+ raise AlgorithmOutputError("ACON runtime identity changed after preflight")
169
+ if payload.get("decision_token") != decision_token:
170
+ raise AlgorithmOutputError("ACON execute decision token mismatch")
171
+ raw_response = optional_text(payload, "raw_response", label="ACON history response")
172
+ summary = optional_text(payload, "summary", label="ACON history response")
173
+ if applied:
174
+ if not summary.strip() or not raw_response.strip():
175
+ raise AlgorithmOutputError(
176
+ "applied ACON history compression requires parsed summary and raw response"
177
+ )
178
+ if response.usage.model_calls < 1:
179
+ raise AlgorithmOutputError(
180
+ "applied ACON history compression must report a model call"
181
+ )
182
+ optimized_messages = _assemble_optimized_messages(
183
+ messages,
184
+ preserved,
185
+ summary,
186
+ summary_rule=self.controls.summary_rule,
187
+ original_prompt=original_prompt,
188
+ )
189
+ else:
190
+ if summary or raw_response:
191
+ raise AlgorithmOutputError("skipped ACON history compression returned model output")
192
+ if response.usage.model_calls != 0:
193
+ raise AlgorithmOutputError(
194
+ "skipped ACON history compression cannot bill model calls"
195
+ )
196
+ optimized_messages = messages
197
+
198
+ trace = ExecutionTrace(
199
+ method_id=self.method_id,
200
+ release_id=self.release_id,
201
+ events=(
202
+ TraceEvent(
203
+ TracePhase.PREPARE,
204
+ "history_branch_inputs",
205
+ {
206
+ "controls": asdict(self.controls),
207
+ "history_text_hash": content_hash(material),
208
+ "previous_summary_hash": content_hash(previous_summary),
209
+ "preserved_message_indices": preserved_indices,
210
+ },
211
+ ),
212
+ TraceEvent(
213
+ TracePhase.OBSERVE,
214
+ "strict_threshold_decision",
215
+ {
216
+ "raw_input_tokens": token_count,
217
+ "threshold": self.controls.summarization_threshold,
218
+ "threshold_triggered": threshold_triggered,
219
+ "interval_ready": interval_ready,
220
+ "history_available": bool(material.strip()),
221
+ },
222
+ ),
223
+ TraceEvent(
224
+ TracePhase.FINALIZE,
225
+ "history_optimization_result",
226
+ {
227
+ "applied": applied,
228
+ "summary": summary,
229
+ "raw_response": raw_response,
230
+ "output_message_count": len(optimized_messages),
231
+ },
232
+ ),
233
+ ),
234
+ counters={
235
+ **external_usage_counters(response.usage),
236
+ "worker_calls": 2 if applied else 1,
237
+ "input_messages": len(messages),
238
+ "output_messages": len(optimized_messages),
239
+ },
240
+ warnings=("acon_runtime_code_predates_camera_ready",),
241
+ )
242
+ return InputPatch(
243
+ method_id=self.method_id,
244
+ release_id=self.release_id,
245
+ source_state_hash=state.state_hash,
246
+ operations=(
247
+ PatchOperation(
248
+ PatchOp.REPLACE_MESSAGES,
249
+ optimized_messages,
250
+ target="agent_session_history",
251
+ rationale=(
252
+ "pinned ACON MemoryManager history assembly"
253
+ if applied
254
+ else "upstream ACON history threshold/interval skip"
255
+ ),
256
+ ),
257
+ PatchOperation(
258
+ PatchOp.SET_METADATA,
259
+ {
260
+ "acon_original_first_user_prompt": original_prompt,
261
+ "acon_previous_history_summary": summary if applied else previous_summary,
262
+ "acon_runtime_attestation": dict(attestation),
263
+ "acon_profile_id": profile_id,
264
+ "acon_compatibility_manifest_sha256": manifest_hash,
265
+ },
266
+ target="acon_history_state",
267
+ rationale="persist ACON cross-round summary and frozen source identity",
268
+ ),
269
+ ),
270
+ trace=trace,
271
+ implementation_identity=(
272
+ f"thin_external_wrapper:microsoft/acon@{ACON_UPSTREAM_COMMIT}"
273
+ ),
274
+ profile_kind="controlled_adapter",
275
+ metadata={
276
+ "implementation_origin": "thin_external_wrapper",
277
+ "paper_version": "ICML_2026_camera_ready",
278
+ "code_artifact_date": "2025-10-14",
279
+ "applied": applied,
280
+ "artifacts": self.artifacts.as_payload(),
281
+ "preserved_message_indices": preserved_indices,
282
+ "raw_history_hash": content_hash(messages),
283
+ "raw_response": raw_response,
284
+ "profile_id": profile_id,
285
+ "compatibility_manifest_sha256": manifest_hash,
286
+ "runtime_attestation": dict(attestation),
287
+ "worker_fingerprint": worker_fingerprint(worker, label="ACON history"),
288
+ },
289
+ )
290
+
291
+
292
+ def _assemble_optimized_messages(
293
+ messages: tuple[Message, ...],
294
+ preserved: tuple[Message, ...],
295
+ summary: str,
296
+ *,
297
+ summary_rule: str,
298
+ original_prompt: str,
299
+ ) -> tuple[Message, ...]:
300
+ base = original_prompt if summary_rule == "reset" else messages[1].content
301
+ user_prompt = f"{base}\n\n<HISTORY_SUMMARY>\n{summary}\n</HISTORY_SUMMARY>"
302
+ return (
303
+ Message(role="system", content=messages[0].content),
304
+ Message(role="user", content=user_prompt),
305
+ *preserved,
306
+ )
307
+
308
+
309
+ __all__ = ["ACONHistoryRuntimeExternal"]