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,416 @@
1
+ """Typed bridge for the unmodified DecomP full-system control flow."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Mapping
6
+ from dataclasses import dataclass, field
7
+ from typing import Any, Protocol, runtime_checkable
8
+
9
+ from agentinputlab.contracts import (
10
+ AlgorithmOutputError,
11
+ BudgetExceededError,
12
+ CompositeResult,
13
+ ExecutionBudget,
14
+ ExecutionTrace,
15
+ ExternalDependencyError,
16
+ FrozenAgentState,
17
+ InterventionContext,
18
+ SemanticFamily,
19
+ TraceEvent,
20
+ TracePhase,
21
+ ValidationError,
22
+ )
23
+ from agentinputlab.contracts.serialization import content_hash, freeze_mapping
24
+ from agentinputlab.observability import external_usage_counters, normalize_external_usage
25
+
26
+ DECOMP_REVISION = "8b157f6fe9ff5676ae51bd054f1df7b015adf278"
27
+ DECOMP_PROFILE_ID = "plan.decomp.full"
28
+ DECOMP_WORKER_SCHEMA = "agentinputlab.decomp.worker.v2"
29
+
30
+
31
+ def decomp_context_hash(
32
+ paragraph_ids: tuple[str, ...],
33
+ paras: tuple[str, ...],
34
+ ) -> str:
35
+ """Hash the exact paragraph identity and text passed to upstream DecomP."""
36
+
37
+ return content_hash({"paragraph_ids": paragraph_ids, "paras": paras})
38
+
39
+
40
+ @dataclass(frozen=True, slots=True)
41
+ class DecompWorkerRequest:
42
+ case_id: str
43
+ question: str
44
+ paras: tuple[str, ...]
45
+ paragraph_ids: tuple[str, ...]
46
+ context_hash: str
47
+ config_artifact_id: str
48
+ backend_binding: Mapping[str, Any]
49
+ max_steps: int
50
+ upstream_revision: str = DECOMP_REVISION
51
+ schema_version: str = DECOMP_WORKER_SCHEMA
52
+ execution_budget: ExecutionBudget | None = None
53
+ seed: int = 0
54
+
55
+ def __post_init__(self) -> None:
56
+ if not self.case_id or not self.question:
57
+ raise ValidationError("DecomP worker request requires case_id and question")
58
+ if not self.config_artifact_id:
59
+ raise ValidationError("DecomP full requires a pinned config artifact")
60
+ if self.max_steps < 1:
61
+ raise ValidationError("DecomP max_steps must be positive")
62
+ if self.execution_budget is not None and not isinstance(self.execution_budget, ExecutionBudget):
63
+ raise ValidationError("DecomP execution_budget must be ExecutionBudget")
64
+ if isinstance(self.seed, bool) or not isinstance(self.seed, int) or self.seed < 0:
65
+ raise ValidationError("DecomP seed must be non-negative")
66
+ paras = tuple(self.paras)
67
+ paragraph_ids = tuple(self.paragraph_ids)
68
+ if len(paras) != len(paragraph_ids):
69
+ raise ValidationError("DecomP paras and paragraph_ids must have equal length")
70
+ if any(not isinstance(value, str) or not value for value in paras):
71
+ raise ValidationError("DecomP paras must contain non-empty text")
72
+ if any(not isinstance(value, str) or not value.strip() for value in paragraph_ids):
73
+ raise ValidationError("DecomP paragraph_ids must contain non-empty IDs")
74
+ if len(paragraph_ids) != len(set(paragraph_ids)):
75
+ raise ValidationError("DecomP paragraph_ids must be unique")
76
+ expected_context_hash = decomp_context_hash(paragraph_ids, paras)
77
+ if self.context_hash != expected_context_hash:
78
+ raise ValidationError("DecomP context_hash does not match paras and paragraph_ids")
79
+ object.__setattr__(self, "paras", paras)
80
+ object.__setattr__(self, "paragraph_ids", paragraph_ids)
81
+ object.__setattr__(self, "backend_binding", freeze_mapping(self.backend_binding))
82
+
83
+ def external_reservation(self) -> Mapping[str, int]:
84
+ """A successful full DecomP response must account for a model call."""
85
+
86
+ return {"model_calls": 1}
87
+
88
+ def raise_for_external_status(self, result: object) -> None:
89
+ """Let the monitored boundary settle actual usage before raising failure."""
90
+ if isinstance(result, Mapping) and result.get("status") == "error":
91
+ raise ExternalDependencyError("DecomP native worker failed with " + str(result.get("failure_code", "INVALID_RESPONSE")))
92
+
93
+
94
+ @dataclass(frozen=True, slots=True)
95
+ class DecompGraphNode:
96
+ node_id: str
97
+ question: str
98
+ answer: str = ""
99
+ handler: str = ""
100
+ depth: int = 0
101
+
102
+
103
+ @dataclass(frozen=True, slots=True)
104
+ class DecompParticipantCall:
105
+ index: int
106
+ participant: str
107
+ input_state_id: str
108
+ output_state_id: str
109
+ command: str
110
+
111
+
112
+ @dataclass(frozen=True, slots=True)
113
+ class DecompFrontierEvent:
114
+ index: int
115
+ state_id: str
116
+ score: float
117
+ next_command: str
118
+ action: str
119
+
120
+
121
+ @dataclass(frozen=True, slots=True)
122
+ class DecompWorkerResponse:
123
+ case_id: str
124
+ profile_id: str
125
+ upstream_revision: str
126
+ paragraph_ids: tuple[str, ...]
127
+ context_hash: str
128
+ nodes: tuple[DecompGraphNode, ...]
129
+ dependency_edges: tuple[tuple[str, str], ...]
130
+ participant_calls: tuple[DecompParticipantCall, ...]
131
+ frontier: tuple[DecompFrontierEvent, ...]
132
+ reasoning_chain: str
133
+ final_answer: str
134
+ termination: str
135
+ component_only: bool = False
136
+ usage: Mapping[str, int | float] = field(default_factory=dict)
137
+ schema_version: str = DECOMP_WORKER_SCHEMA
138
+ native_artifacts: Mapping[str, str] = field(default_factory=dict)
139
+
140
+ def __post_init__(self) -> None:
141
+ object.__setattr__(self, "nodes", tuple(self.nodes))
142
+ object.__setattr__(self, "paragraph_ids", tuple(self.paragraph_ids))
143
+ object.__setattr__(self, "dependency_edges", tuple(self.dependency_edges))
144
+ object.__setattr__(self, "participant_calls", tuple(self.participant_calls))
145
+ object.__setattr__(self, "frontier", tuple(self.frontier))
146
+ object.__setattr__(self, "usage", freeze_mapping(self.usage))
147
+
148
+
149
+ @runtime_checkable
150
+ class DecompWorkerRuntime(Protocol):
151
+ def run(self, request: DecompWorkerRequest) -> DecompWorkerResponse | Mapping[str, Any]: ...
152
+
153
+ def fingerprint(self) -> Mapping[str, Any]: ...
154
+
155
+
156
+ def _validate_acyclic(node_ids: set[str], edges: tuple[tuple[str, str], ...]) -> None:
157
+ children: dict[str, list[str]] = {node_id: [] for node_id in node_ids}
158
+ indegree = {node_id: 0 for node_id in node_ids}
159
+ for source, target in edges:
160
+ if source not in node_ids or target not in node_ids:
161
+ raise AlgorithmOutputError("DecomP dependency edge references an unknown node")
162
+ children[source].append(target)
163
+ indegree[target] += 1
164
+ ready = [node_id for node_id, degree in indegree.items() if degree == 0]
165
+ visited = 0
166
+ while ready:
167
+ current = ready.pop()
168
+ visited += 1
169
+ for child in children[current]:
170
+ indegree[child] -= 1
171
+ if indegree[child] == 0:
172
+ ready.append(child)
173
+ if visited != len(node_ids):
174
+ raise AlgorithmOutputError("DecomP typed dependency graph contains a cycle")
175
+
176
+
177
+ def validate_decomp_full_response(response: DecompWorkerResponse) -> None:
178
+ """Reject planner-only or lossy responses under the full-system release ID."""
179
+
180
+ if response.schema_version != DECOMP_WORKER_SCHEMA:
181
+ raise AlgorithmOutputError(f"DecomP worker schema mismatch: {response.schema_version!r}")
182
+ if response.profile_id != DECOMP_PROFILE_ID:
183
+ raise AlgorithmOutputError("DecomP worker returned the wrong profile identity")
184
+ if response.upstream_revision != DECOMP_REVISION:
185
+ raise AlgorithmOutputError("DecomP worker returned an unpinned upstream revision")
186
+ if len(response.paragraph_ids) != len(set(response.paragraph_ids)) or any(
187
+ not isinstance(value, str) or not value for value in response.paragraph_ids
188
+ ):
189
+ raise AlgorithmOutputError("DecomP worker returned invalid paragraph identities")
190
+ if (
191
+ not isinstance(response.context_hash, str)
192
+ or len(response.context_hash) != 64
193
+ or any(character not in "0123456789abcdef" for character in response.context_hash)
194
+ ):
195
+ raise AlgorithmOutputError("DecomP worker returned an invalid context_hash")
196
+ if response.component_only:
197
+ raise AlgorithmOutputError("planner-component output cannot satisfy plan.decomp.full")
198
+ if not response.nodes:
199
+ raise AlgorithmOutputError("DecomP full response lost native decomposition nodes")
200
+ if not response.participant_calls:
201
+ raise AlgorithmOutputError("DecomP full response lost participant routing")
202
+ if not response.frontier:
203
+ raise AlgorithmOutputError("DecomP full response lost best-first frontier events")
204
+ if not response.reasoning_chain:
205
+ raise AlgorithmOutputError("DecomP full response requires the native reasoning chain")
206
+ if not response.final_answer.strip():
207
+ raise AlgorithmOutputError("DecomP full response requires a terminal final answer")
208
+ if not response.termination:
209
+ raise AlgorithmOutputError("DecomP full response requires a termination reason")
210
+ node_ids = [node.node_id for node in response.nodes]
211
+ if len(node_ids) != len(set(node_ids)):
212
+ raise AlgorithmOutputError("DecomP response contains duplicate node IDs")
213
+ if any(node.depth < 0 for node in response.nodes):
214
+ raise AlgorithmOutputError("DecomP node depth cannot be negative")
215
+ if tuple(event.index for event in response.frontier) != tuple(range(len(response.frontier))):
216
+ raise AlgorithmOutputError("DecomP frontier event indices must be contiguous")
217
+ if tuple(call.index for call in response.participant_calls) != tuple(
218
+ range(len(response.participant_calls))
219
+ ):
220
+ raise AlgorithmOutputError("DecomP participant-call indices must be contiguous")
221
+ _validate_acyclic(set(node_ids), response.dependency_edges)
222
+ usage = normalize_external_usage(response.usage)
223
+ if usage.model_calls < 1:
224
+ raise AlgorithmOutputError("DecomP full response must account for its model calls")
225
+
226
+
227
+ class DecompFullBridge:
228
+ """Run pinned full DecomP and preserve its terminal answer as a composite result."""
229
+
230
+ method_id = "decomp"
231
+ release_id = DECOMP_PROFILE_ID
232
+ family = SemanticFamily.DECOMPOSE
233
+
234
+ def __init__(
235
+ self,
236
+ runtime: DecompWorkerRuntime | None = None,
237
+ *,
238
+ config_artifact_id: str,
239
+ max_steps: int = 20,
240
+ ) -> None:
241
+ self.runtime = runtime
242
+ self.config_artifact_id = config_artifact_id
243
+ self.max_steps = max_steps
244
+
245
+ def run(self, state: FrozenAgentState, context: InterventionContext) -> CompositeResult:
246
+ runtime = self._resolve_runtime(context)
247
+ if runtime is None:
248
+ raise ExternalDependencyError(
249
+ "plan.decomp.full requires the pinned external DecomP worker; "
250
+ "the core package intentionally has no simplified fallback"
251
+ )
252
+ runtime_identity = self._validate_runtime_identity(runtime)
253
+ controlled = runtime_identity.get("backend_binding_mode") == "controlled_native_completion_callbacks.v1"
254
+ if controlled and (state.instruction or state.messages):
255
+ raise ValidationError("native DecomP accepts query/context only; explicitly project instruction/history")
256
+ input_bound = runtime_identity.get("per_call_input_token_bound")
257
+ if controlled and (state.budget.max_cost_usd is not None or (
258
+ state.budget.max_context_tokens is not None and
259
+ (type(input_bound) is not int or input_bound < 1))):
260
+ raise ValidationError("native DecomP finite input-token/cost ceilings require pre-call estimators")
261
+ if (controlled and state.budget.max_context_tokens is not None
262
+ and input_bound > state.budget.max_context_tokens):
263
+ raise BudgetExceededError("DecomP input budget cannot reserve the native upper bound")
264
+ backend_binding = (
265
+ dict(context.backend.fingerprint())
266
+ if context.backend is not None and hasattr(context.backend, "fingerprint")
267
+ else {}
268
+ )
269
+ if controlled and "backend" in runtime_identity and content_hash(runtime_identity["backend"]) != content_hash(backend_binding):
270
+ raise ValidationError("native DecomP runtime backend differs from the context backend")
271
+ paras = tuple(block.text for block in state.context)
272
+ paragraph_ids = tuple(block.block_id for block in state.context)
273
+ if any(not paragraph_id.strip() for paragraph_id in paragraph_ids):
274
+ raise ValidationError(
275
+ "plan.decomp.full requires a non-empty block_id for every context paragraph"
276
+ )
277
+ context_hash = decomp_context_hash(paragraph_ids, paras)
278
+ request = DecompWorkerRequest(
279
+ case_id=state.task_id or state.state_hash,
280
+ question=state.query,
281
+ paras=paras,
282
+ paragraph_ids=paragraph_ids,
283
+ context_hash=context_hash,
284
+ config_artifact_id=self.config_artifact_id,
285
+ backend_binding=backend_binding,
286
+ max_steps=self.max_steps,
287
+ execution_budget=state.budget,
288
+ seed=context.seed,
289
+ )
290
+ try:
291
+ response = runtime.run(request)
292
+ except (ImportError, ModuleNotFoundError) as exc:
293
+ raise ExternalDependencyError(
294
+ "the pinned DecomP worker is missing an optional upstream dependency"
295
+ ) from exc
296
+ request.raise_for_external_status(response)
297
+ if not isinstance(response, DecompWorkerResponse):
298
+ raise AlgorithmOutputError("DecomP worker returned an invalid response envelope")
299
+ if response.case_id != request.case_id:
300
+ raise AlgorithmOutputError("DecomP worker response case_id mismatch")
301
+ if response.paragraph_ids != request.paragraph_ids:
302
+ raise AlgorithmOutputError("DecomP worker response paragraph_ids mismatch")
303
+ if response.context_hash != request.context_hash:
304
+ raise AlgorithmOutputError("DecomP worker response context_hash mismatch")
305
+ validate_decomp_full_response(response)
306
+ usage = normalize_external_usage(response.usage)
307
+ events = [
308
+ TraceEvent(
309
+ TracePhase.PREPARE,
310
+ "decomp_worker_request",
311
+ {
312
+ "config_artifact_id": self.config_artifact_id,
313
+ "max_steps": self.max_steps,
314
+ "upstream_revision": DECOMP_REVISION,
315
+ "backend_binding": backend_binding,
316
+ "paragraph_ids": paragraph_ids,
317
+ "context_hash": context_hash,
318
+ "runtime_identity_hash": content_hash(runtime_identity),
319
+ },
320
+ )
321
+ ]
322
+ events.extend(
323
+ TraceEvent(
324
+ TracePhase.OBSERVE,
325
+ "decomp_frontier",
326
+ {
327
+ "index": event.index,
328
+ "state_id": event.state_id,
329
+ "score": event.score,
330
+ "next_command": event.next_command,
331
+ "action": event.action,
332
+ },
333
+ )
334
+ for event in response.frontier
335
+ )
336
+ events.extend(
337
+ TraceEvent(
338
+ TracePhase.OBSERVE,
339
+ "decomp_participant_call",
340
+ {
341
+ "index": call.index,
342
+ "participant": call.participant,
343
+ "input_state_id": call.input_state_id,
344
+ "output_state_id": call.output_state_id,
345
+ "command": call.command,
346
+ },
347
+ )
348
+ for call in response.participant_calls
349
+ )
350
+ events.append(
351
+ TraceEvent(
352
+ TracePhase.FINALIZE,
353
+ "decomp_full_result",
354
+ {
355
+ "nodes": response.nodes,
356
+ "dependency_edges": response.dependency_edges,
357
+ "reasoning_chain": response.reasoning_chain,
358
+ "final_answer": response.final_answer,
359
+ "termination": response.termination,
360
+ "native_artifacts": dict(response.native_artifacts),
361
+ },
362
+ )
363
+ )
364
+ trace = ExecutionTrace(
365
+ method_id=self.method_id,
366
+ release_id=self.release_id,
367
+ events=tuple(events),
368
+ counters={
369
+ **external_usage_counters(usage),
370
+ "participant_calls": len(response.participant_calls),
371
+ "frontier_events": len(response.frontier),
372
+ "graph_nodes": len(response.nodes),
373
+ "input_paragraphs": len(paragraph_ids),
374
+ },
375
+ )
376
+ return CompositeResult(
377
+ method_id=self.method_id,
378
+ release_id=self.release_id,
379
+ source_state_hash=state.state_hash,
380
+ final_answer=response.final_answer,
381
+ evidence=state.context,
382
+ trace=trace,
383
+ implementation_identity=f"thin_external_wrapper:allenai/DecomP@{DECOMP_REVISION}",
384
+ profile_kind="controlled_adapter" if controlled else "official_native",
385
+ metadata={
386
+ "implementation_origin": "thin_external_wrapper",
387
+ "full_system": True,
388
+ "component_only": False,
389
+ "answer_is_intervention_input": False,
390
+ "reasoning_chain": response.reasoning_chain,
391
+ "termination": response.termination,
392
+ "paragraph_ids": paragraph_ids,
393
+ "context_hash": context_hash,
394
+ "native_artifacts": dict(response.native_artifacts),
395
+ "worker_fingerprint": dict(runtime_identity),
396
+ },
397
+ )
398
+
399
+ def _resolve_runtime(self, context: InterventionContext) -> DecompWorkerRuntime | None:
400
+ injected = context.external_runtime
401
+ if injected is not None and self.runtime is not None and injected is not self.runtime:
402
+ raise ValidationError(
403
+ "DecomP runtime is ambiguous; use either the constructor or "
404
+ "InterventionContext.external_runtime"
405
+ )
406
+ return injected if injected is not None else self.runtime
407
+
408
+ @staticmethod
409
+ def _validate_runtime_identity(runtime: DecompWorkerRuntime) -> Mapping[str, Any]:
410
+ fingerprint = getattr(runtime, "fingerprint", None)
411
+ if not callable(fingerprint):
412
+ raise ValidationError("DecomP runtime requires a stable fingerprint()")
413
+ identity = fingerprint()
414
+ if not isinstance(identity, Mapping) or not identity:
415
+ raise ValidationError("DecomP runtime fingerprint must be a non-empty mapping")
416
+ return freeze_mapping(identity)
@@ -0,0 +1,35 @@
1
+ """LLMCompiler planner and full-system worker bridges."""
2
+
3
+ from .bridge import (
4
+ LLMCOMPILER_UPSTREAM_COMMIT,
5
+ CompilerTask,
6
+ LLMCompilerControls,
7
+ LLMCompilerFullBridge,
8
+ LLMCompilerPlannerBridge,
9
+ SchedulerEvent,
10
+ )
11
+ from .common_support import (
12
+ LLMCOMPILER_COMMON_SUPPORT_RELEASE,
13
+ LLMCOMPILER_PARSER_SOURCE_SHA256,
14
+ LLMCOMPILER_PLANNER_SOURCE_SHA256,
15
+ LLMCompilerCommonSupportConfig,
16
+ LLMCompilerCommonSupportPlanner,
17
+ parse_llmcompiler_plan,
18
+ render_llmcompiler_planner_prompt,
19
+ )
20
+
21
+ __all__ = [
22
+ "LLMCOMPILER_COMMON_SUPPORT_RELEASE",
23
+ "LLMCOMPILER_PARSER_SOURCE_SHA256",
24
+ "LLMCOMPILER_PLANNER_SOURCE_SHA256",
25
+ "LLMCOMPILER_UPSTREAM_COMMIT",
26
+ "CompilerTask",
27
+ "LLMCompilerCommonSupportConfig",
28
+ "LLMCompilerCommonSupportPlanner",
29
+ "LLMCompilerControls",
30
+ "LLMCompilerFullBridge",
31
+ "LLMCompilerPlannerBridge",
32
+ "SchedulerEvent",
33
+ "parse_llmcompiler_plan",
34
+ "render_llmcompiler_planner_prompt",
35
+ ]