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,520 @@
1
+ """Faithful transport boundary for the pinned LLMCompiler runtime.
2
+
3
+ Planning, streaming scheduling, tool execution, join, and replan stay in the
4
+ official MIT worker. The bridge validates the task DAG and scheduler history
5
+ instead of replacing the system with a one-shot planning prompt.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import json
11
+ import math
12
+ from collections.abc import Mapping, Sequence
13
+ from dataclasses import asdict, dataclass
14
+ from typing import Any
15
+
16
+ from agentinputlab.connectors.tools import ToolConnector
17
+ from agentinputlab.contracts import (
18
+ AlgorithmOutputError,
19
+ CompositeResult,
20
+ ContextBlock,
21
+ ExecutionTrace,
22
+ ExternalDependencyError,
23
+ FrozenAgentState,
24
+ InputPatch,
25
+ InterventionContext,
26
+ PatchOp,
27
+ PatchOperation,
28
+ SemanticFamily,
29
+ TraceEvent,
30
+ TracePhase,
31
+ ValidationError,
32
+ )
33
+ from agentinputlab.contracts.serialization import content_hash, freeze_mapping, to_jsonable
34
+ from agentinputlab.integrations.external_workers import WorkerClient
35
+ from agentinputlab.integrations.external_workers.method import (
36
+ MethodWorkerRequest,
37
+ call_worker,
38
+ dependency_fingerprint,
39
+ mapping_sequence,
40
+ nonnegative_integer,
41
+ optional_text,
42
+ required_text,
43
+ resolve_worker,
44
+ worker_fingerprint,
45
+ )
46
+ from agentinputlab.observability import external_usage_counters
47
+
48
+ LLMCOMPILER_UPSTREAM_COMMIT = "a00c9d35507507da70e8c637eee64efc8c1857ae"
49
+ LLMCOMPILER_COMPATIBILITY_MANIFEST_SHA256 = (
50
+ "4b22356ddd587b0fac952511ab53dcf1ae0007b9645e02cd6375122a41ddedd6"
51
+ )
52
+ _OFFICIAL_NATIVE_WORKER_IDS = frozenset({"agentinputlab.llmcompiler.official-native.pinned.v1"})
53
+ _OFFICIAL_NATIVE_ATTESTATION = {
54
+ "schema_version": "agentinputlab.llmcompiler.official-native-attestation.v1",
55
+ "upstream_commit": LLMCOMPILER_UPSTREAM_COMMIT,
56
+ "compatibility_manifest_sha256": LLMCOMPILER_COMPATIBILITY_MANIFEST_SHA256,
57
+ "source_files_verified": True,
58
+ "required_versions_verified": True,
59
+ "import_origins_verified": True,
60
+ "model_transport": "upstream_native",
61
+ "tool_transport": "upstream_native",
62
+ }
63
+ _TASK_STATES = ("planned", "ready", "running", "completed", "failed")
64
+
65
+
66
+ def _profile_identity(
67
+ worker_identity: Mapping[str, Any],
68
+ *,
69
+ full_system: bool,
70
+ ) -> tuple[str, str, str]:
71
+ """Return a conservative profile label from a strict worker attestation."""
72
+
73
+ attestation = worker_identity.get("official_native_attestation")
74
+ official = (
75
+ full_system
76
+ and worker_identity.get("worker_id") in _OFFICIAL_NATIVE_WORKER_IDS
77
+ and worker_identity.get("upstream_commit") == LLMCOMPILER_UPSTREAM_COMMIT
78
+ and isinstance(attestation, Mapping)
79
+ and dict(attestation) == _OFFICIAL_NATIVE_ATTESTATION
80
+ )
81
+ if official:
82
+ return "official_native", "official_external_adapter", "official_native_allowlisted"
83
+ return "controlled_adapter", "controlled_external_adapter", "controlled_default"
84
+
85
+
86
+ @dataclass(frozen=True, slots=True)
87
+ class LLMCompilerControls:
88
+ max_tasks: int = 32
89
+ max_replans: int = 2
90
+ concurrency: int = 8
91
+ timeout_seconds: float = 300.0
92
+ streaming: bool = True
93
+
94
+ def __post_init__(self) -> None:
95
+ if any(
96
+ isinstance(value, bool) or not isinstance(value, int) or value < 1
97
+ for value in (self.max_tasks, self.concurrency)
98
+ ):
99
+ raise ValidationError("LLMCompiler task/concurrency limits must be positive")
100
+ if (
101
+ isinstance(self.max_replans, bool)
102
+ or not isinstance(self.max_replans, int)
103
+ or self.max_replans < 0
104
+ ):
105
+ raise ValidationError("LLMCompiler max_replans must be non-negative")
106
+ if (
107
+ isinstance(self.timeout_seconds, bool)
108
+ or not isinstance(self.timeout_seconds, (int, float))
109
+ or not math.isfinite(self.timeout_seconds)
110
+ or self.timeout_seconds <= 0
111
+ ):
112
+ raise ValidationError("LLMCompiler timeout_seconds must be positive")
113
+ if not isinstance(self.streaming, bool):
114
+ raise ValidationError("LLMCompiler streaming must be boolean")
115
+
116
+
117
+ @dataclass(frozen=True, slots=True)
118
+ class CompilerTask:
119
+ task_id: int
120
+ tool_name: str
121
+ arguments: Mapping[str, Any]
122
+ dependencies: tuple[int, ...]
123
+
124
+ def __post_init__(self) -> None:
125
+ if self.task_id < 1 or not self.tool_name.strip():
126
+ raise AlgorithmOutputError("LLMCompiler task ID/tool name is invalid")
127
+ object.__setattr__(self, "arguments", freeze_mapping(self.arguments))
128
+ object.__setattr__(self, "dependencies", tuple(self.dependencies))
129
+ if any(
130
+ isinstance(item, bool) or not isinstance(item, int) or item < 1
131
+ for item in self.dependencies
132
+ ):
133
+ raise AlgorithmOutputError("LLMCompiler dependencies must be positive task IDs")
134
+ if len(self.dependencies) != len(set(self.dependencies)):
135
+ raise AlgorithmOutputError("LLMCompiler task contains duplicate dependencies")
136
+
137
+ @classmethod
138
+ def from_mapping(cls, value: Mapping[str, Any]) -> CompilerTask:
139
+ task_id = nonnegative_integer(value.get("task_id"), label="LLMCompiler task_id")
140
+ tool_name = required_text(value, "tool_name", label="LLMCompiler task")
141
+ arguments = value.get("arguments", {})
142
+ if not isinstance(arguments, Mapping):
143
+ raise AlgorithmOutputError("LLMCompiler task arguments must be a mapping")
144
+ dependencies = value.get("dependencies", ())
145
+ if isinstance(dependencies, (str, bytes)) or not isinstance(dependencies, Sequence):
146
+ raise AlgorithmOutputError("LLMCompiler task dependencies must be a sequence")
147
+ return cls(
148
+ task_id=task_id,
149
+ tool_name=tool_name,
150
+ arguments=dict(arguments),
151
+ dependencies=tuple(dependencies),
152
+ )
153
+
154
+
155
+ @dataclass(frozen=True, slots=True)
156
+ class SchedulerEvent:
157
+ index: int
158
+ task_id: int
159
+ state: str
160
+
161
+ @classmethod
162
+ def from_mapping(cls, value: Mapping[str, Any]) -> SchedulerEvent:
163
+ index = nonnegative_integer(value.get("index"), label="scheduler event index")
164
+ task_id = nonnegative_integer(value.get("task_id"), label="scheduler event task_id")
165
+ state = required_text(value, "state", label="scheduler event")
166
+ if state not in _TASK_STATES:
167
+ raise AlgorithmOutputError("LLMCompiler scheduler event has an unsupported state")
168
+ return cls(index=index, task_id=task_id, state=state)
169
+
170
+
171
+ @dataclass(slots=True)
172
+ class _LLMCompilerBridge:
173
+ client: WorkerClient | None = None
174
+ controls: LLMCompilerControls = LLMCompilerControls()
175
+ prompt_hash: str = ""
176
+ full_system: bool = False
177
+ release_id: str = "plan.llm_compiler.planner_component"
178
+ method_id: str = "llm_compiler"
179
+ family: SemanticFamily = SemanticFamily.DECOMPOSE
180
+
181
+ def __post_init__(self) -> None:
182
+ if not self.prompt_hash.strip():
183
+ raise ValidationError("LLMCompiler requires a prompt_hash")
184
+
185
+ def _execute_patch(
186
+ self,
187
+ state: FrozenAgentState,
188
+ context: InterventionContext,
189
+ ) -> InputPatch:
190
+ if not state.query.strip():
191
+ raise ValidationError("LLMCompiler requires a non-empty query")
192
+ worker = resolve_worker(self.client, context, label="LLMCompiler")
193
+ worker_identity = worker_fingerprint(worker, label="LLMCompiler")
194
+ if not isinstance(context.tools, ToolConnector):
195
+ raise ExternalDependencyError("LLMCompiler requires an injected ToolConnector")
196
+ tool_specs = context.tools.list_tools()
197
+ allowed_tools = tuple(spec.name for spec in tool_specs)
198
+ if not allowed_tools:
199
+ raise ExternalDependencyError("LLMCompiler requires at least one available tool")
200
+ backend_fp = dependency_fingerprint(
201
+ context.backend,
202
+ label="LLMCompiler planner backend",
203
+ required=True,
204
+ )
205
+ tools_fp = dependency_fingerprint(
206
+ context.tools,
207
+ label="LLMCompiler tools",
208
+ required=True,
209
+ )
210
+ request = MethodWorkerRequest(
211
+ method_id=self.method_id,
212
+ release_id=self.release_id,
213
+ upstream_commit=LLMCOMPILER_UPSTREAM_COMMIT,
214
+ state_hash=state.state_hash,
215
+ payload={
216
+ "task_id": state.task_id,
217
+ "query": state.query,
218
+ "instruction": state.instruction,
219
+ "messages": state.messages,
220
+ "tool_specs": tool_specs,
221
+ "controls": asdict(self.controls),
222
+ "prompt_hash": self.prompt_hash,
223
+ "execution_mode": "full" if self.full_system else "planner_component",
224
+ "seed": context.seed,
225
+ "execution_budget": asdict(state.budget),
226
+ "tool_argument_order": worker_identity.get("positional_argument_order", {}),
227
+ },
228
+ dependency_fingerprints={"backend": backend_fp, "tools": tools_fp},
229
+ minimum_reservation={"model_calls": 1},
230
+ protocol_version="agentinputlab.llm-compiler.v1",
231
+ )
232
+ response = call_worker(worker, request)
233
+ payload = response.payload
234
+ tasks = tuple(
235
+ CompilerTask.from_mapping(row)
236
+ for row in mapping_sequence(payload.get("tasks"), label="LLMCompiler tasks")
237
+ )
238
+ _validate_dag(tasks, max_tasks=self.controls.max_tasks, allowed_tools=set(allowed_tools))
239
+ raw_events = mapping_sequence(
240
+ payload.get("scheduler_events", ()),
241
+ label="LLMCompiler scheduler_events",
242
+ )
243
+ events = tuple(SchedulerEvent.from_mapping(row) for row in raw_events)
244
+ _validate_scheduler(events, tasks, full_system=self.full_system)
245
+ replans = nonnegative_integer(payload.get("replans", 0), label="LLMCompiler replans")
246
+ if replans > self.controls.max_replans:
247
+ raise AlgorithmOutputError("LLMCompiler worker exceeded max_replans")
248
+ streaming = payload.get("streaming")
249
+ if not isinstance(streaming, bool) or streaming != self.controls.streaming:
250
+ raise AlgorithmOutputError("LLMCompiler worker streaming mode mismatch")
251
+ raw_plan_hash = required_text(payload, "raw_plan_hash", label="LLMCompiler response")
252
+ termination = required_text(payload, "termination", label="LLMCompiler response")
253
+ if termination not in {"planner_complete", "finish", "replan_limit", "tool_failure"}:
254
+ raise AlgorithmOutputError("LLMCompiler response has unsupported termination")
255
+ final_answer = optional_text(payload, "final_answer", label="LLMCompiler response")
256
+ if self.full_system and (termination != "finish" or not final_answer.strip()):
257
+ raise AlgorithmOutputError(
258
+ "LLMCompiler full profile requires successful finish and a final answer"
259
+ )
260
+ if not self.full_system and termination != "planner_complete":
261
+ raise AlgorithmOutputError(
262
+ "LLMCompiler planner component requires planner_complete termination"
263
+ )
264
+ if not self.full_system and events:
265
+ raise AlgorithmOutputError("LLMCompiler planner component must not execute tasks")
266
+
267
+ task_rows = tuple(to_jsonable(task) for task in tasks)
268
+ canonical_plan = json.dumps(
269
+ task_rows,
270
+ ensure_ascii=False,
271
+ sort_keys=True,
272
+ separators=(",", ":"),
273
+ )
274
+ operations: list[PatchOperation] = [
275
+ PatchOperation(
276
+ PatchOp.ADD_CONTEXT,
277
+ ContextBlock(
278
+ block_id=f"{state.task_id or state.state_hash}:llm-compiler-plan",
279
+ text=canonical_plan,
280
+ source="llm_compiler_task_dag",
281
+ metadata={
282
+ "raw_plan_hash": raw_plan_hash,
283
+ "task_count": len(tasks),
284
+ "full_system": self.full_system,
285
+ },
286
+ ),
287
+ target="execution_plan",
288
+ rationale="materialize the parsed LLMCompiler dependency DAG",
289
+ ),
290
+ PatchOperation(
291
+ PatchOp.SET_METADATA,
292
+ {
293
+ "llm_compiler_tasks": task_rows,
294
+ "llm_compiler_termination": termination,
295
+ "llm_compiler_replans": replans,
296
+ "llm_compiler_final_answer": final_answer,
297
+ },
298
+ target="metadata",
299
+ ),
300
+ ]
301
+ trace_events = [
302
+ TraceEvent(
303
+ TracePhase.PREPARE,
304
+ "compiler_controls",
305
+ {
306
+ **asdict(self.controls),
307
+ "prompt_hash": self.prompt_hash,
308
+ "tool_names": allowed_tools,
309
+ },
310
+ ),
311
+ TraceEvent(
312
+ TracePhase.PROPOSE,
313
+ "task_dag",
314
+ {"tasks": task_rows, "raw_plan_hash": raw_plan_hash},
315
+ ),
316
+ ]
317
+ trace_events.extend(
318
+ TraceEvent(
319
+ TracePhase.OBSERVE,
320
+ "scheduler_event",
321
+ {"index": event.index, "task_id": event.task_id, "state": event.state},
322
+ )
323
+ for event in events
324
+ )
325
+ trace_events.append(
326
+ TraceEvent(
327
+ TracePhase.FINALIZE,
328
+ "join_result",
329
+ {
330
+ "termination": termination,
331
+ "replans": replans,
332
+ "final_answer": final_answer,
333
+ "full_system": self.full_system,
334
+ },
335
+ )
336
+ )
337
+ trace = ExecutionTrace(
338
+ method_id=self.method_id,
339
+ release_id=self.release_id,
340
+ events=tuple(trace_events),
341
+ counters={
342
+ **external_usage_counters(response.usage),
343
+ "worker_calls": 1,
344
+ "planned_tasks": len(tasks),
345
+ "scheduler_events": len(events),
346
+ "replans": replans,
347
+ },
348
+ )
349
+ profile_kind, implementation_origin, profile_attestation = _profile_identity(
350
+ worker_identity,
351
+ full_system=self.full_system,
352
+ )
353
+ return InputPatch(
354
+ method_id=self.method_id,
355
+ release_id=self.release_id,
356
+ source_state_hash=state.state_hash,
357
+ operations=tuple(operations),
358
+ trace=trace,
359
+ implementation_identity=(
360
+ f"{implementation_origin}:SqueezeAILab/LLMCompiler@{LLMCOMPILER_UPSTREAM_COMMIT}"
361
+ ),
362
+ profile_kind=profile_kind,
363
+ metadata={
364
+ "implementation_origin": implementation_origin,
365
+ "profile_attestation": profile_attestation,
366
+ "full_system": self.full_system,
367
+ "requires_tools": True,
368
+ "terminal_answer_in_metadata": self.full_system,
369
+ "worker_fingerprint": worker_identity,
370
+ "backend_fingerprint": backend_fp,
371
+ "tools_fingerprint": tools_fp,
372
+ "tool_schema_hash": content_hash(tool_specs),
373
+ "final_answer": final_answer,
374
+ "task_dag": task_rows,
375
+ },
376
+ )
377
+
378
+
379
+ class LLMCompilerPlannerBridge(_LLMCompilerBridge):
380
+ def __init__(
381
+ self,
382
+ client: WorkerClient | None = None,
383
+ *,
384
+ prompt_hash: str = "",
385
+ controls: LLMCompilerControls | None = None,
386
+ ) -> None:
387
+ super().__init__(
388
+ client=client,
389
+ controls=controls if controls is not None else LLMCompilerControls(),
390
+ prompt_hash=prompt_hash,
391
+ full_system=False,
392
+ release_id="plan.llm_compiler.planner_component",
393
+ )
394
+
395
+ def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
396
+ return self._execute_patch(state, context)
397
+
398
+
399
+ class LLMCompilerFullBridge(_LLMCompilerBridge):
400
+ def __init__(
401
+ self,
402
+ client: WorkerClient | None = None,
403
+ *,
404
+ prompt_hash: str = "",
405
+ controls: LLMCompilerControls | None = None,
406
+ ) -> None:
407
+ super().__init__(
408
+ client=client,
409
+ controls=controls if controls is not None else LLMCompilerControls(),
410
+ prompt_hash=prompt_hash,
411
+ full_system=True,
412
+ release_id="plan.llm_compiler.full",
413
+ )
414
+
415
+ def run(self, state: FrozenAgentState, context: InterventionContext) -> CompositeResult:
416
+ patch = self._execute_patch(state, context)
417
+ return CompositeResult(
418
+ method_id=self.method_id,
419
+ release_id=self.release_id,
420
+ source_state_hash=state.state_hash,
421
+ final_answer=str(patch.metadata["final_answer"]),
422
+ evidence=(),
423
+ trace=patch.trace,
424
+ implementation_identity=patch.implementation_identity,
425
+ profile_kind=patch.profile_kind,
426
+ metadata={
427
+ **dict(patch.metadata),
428
+ "internal_validation_patch_hash": patch.patch_hash,
429
+ },
430
+ )
431
+
432
+
433
+ def _validate_dag(
434
+ tasks: tuple[CompilerTask, ...],
435
+ *,
436
+ max_tasks: int,
437
+ allowed_tools: set[str],
438
+ ) -> None:
439
+ if not tasks:
440
+ raise AlgorithmOutputError("LLMCompiler worker returned an empty task DAG")
441
+ if len(tasks) > max_tasks:
442
+ raise AlgorithmOutputError("LLMCompiler worker exceeded max_tasks")
443
+ ids = tuple(task.task_id for task in tasks)
444
+ if len(ids) != len(set(ids)):
445
+ raise AlgorithmOutputError("LLMCompiler task IDs must be unique")
446
+ if ids != tuple(sorted(ids)):
447
+ raise AlgorithmOutputError("LLMCompiler task IDs must be monotonically increasing")
448
+ known = set(ids)
449
+ for task in tasks:
450
+ if task.tool_name not in allowed_tools:
451
+ raise AlgorithmOutputError(f"LLMCompiler planned unknown tool {task.tool_name!r}")
452
+ if not set(task.dependencies) <= known:
453
+ raise AlgorithmOutputError("LLMCompiler task references an unknown dependency")
454
+ if task.task_id in task.dependencies:
455
+ raise AlgorithmOutputError("LLMCompiler task cannot depend on itself")
456
+ graph = {task.task_id: set(task.dependencies) for task in tasks}
457
+ visiting: set[int] = set()
458
+ visited: set[int] = set()
459
+
460
+ def visit(node: int) -> None:
461
+ if node in visiting:
462
+ raise AlgorithmOutputError("LLMCompiler task graph contains a cycle")
463
+ if node in visited:
464
+ return
465
+ visiting.add(node)
466
+ for dependency in graph[node]:
467
+ visit(dependency)
468
+ visiting.remove(node)
469
+ visited.add(node)
470
+
471
+ for task_id in ids:
472
+ visit(task_id)
473
+
474
+
475
+ def _validate_scheduler(
476
+ events: tuple[SchedulerEvent, ...],
477
+ tasks: tuple[CompilerTask, ...],
478
+ *,
479
+ full_system: bool,
480
+ ) -> None:
481
+ if not full_system:
482
+ return
483
+ if not events:
484
+ raise AlgorithmOutputError("LLMCompiler full worker requires scheduler events")
485
+ if tuple(event.index for event in events) != tuple(range(len(events))):
486
+ raise AlgorithmOutputError("LLMCompiler scheduler indices must be contiguous")
487
+ by_id = {task.task_id: task for task in tasks}
488
+ state_index = {state: index for index, state in enumerate(_TASK_STATES)}
489
+ current: dict[int, str] = {}
490
+ completed: set[int] = set()
491
+ for event in events:
492
+ if event.task_id not in by_id:
493
+ raise AlgorithmOutputError("LLMCompiler scheduler references an unknown task")
494
+ previous = current.get(event.task_id)
495
+ if previous is not None and state_index[event.state] < state_index[previous]:
496
+ raise AlgorithmOutputError("LLMCompiler scheduler state moved backwards")
497
+ if event.state == "running" and not set(by_id[event.task_id].dependencies) <= completed:
498
+ raise AlgorithmOutputError("LLMCompiler task started before all dependencies completed")
499
+ current[event.task_id] = event.state
500
+ if event.state == "completed":
501
+ completed.add(event.task_id)
502
+ missing = set(by_id) - set(current)
503
+ if missing:
504
+ raise AlgorithmOutputError(
505
+ "LLMCompiler full worker omitted scheduler histories for planned tasks"
506
+ )
507
+ if completed != set(by_id):
508
+ raise AlgorithmOutputError(
509
+ "LLMCompiler full worker finished before every planned task completed"
510
+ )
511
+
512
+
513
+ __all__ = [
514
+ "LLMCOMPILER_UPSTREAM_COMMIT",
515
+ "CompilerTask",
516
+ "LLMCompilerControls",
517
+ "LLMCompilerFullBridge",
518
+ "LLMCompilerPlannerBridge",
519
+ "SchedulerEvent",
520
+ ]