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,74 @@
1
+ """Export source-bound HotpotQA prompts without executing config-file code."""
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ import ast
6
+ import json
7
+ import subprocess
8
+ from pathlib import Path
9
+
10
+ from . import driver
11
+
12
+
13
+ def literal_string(node, constants):
14
+ if isinstance(node, ast.Constant) and isinstance(node.value, str):
15
+ return node.value
16
+ if isinstance(node, ast.Name) and node.id in constants:
17
+ return constants[node.id]
18
+ if isinstance(node, ast.BinOp) and isinstance(node.op, ast.Add):
19
+ return literal_string(node.left, constants) + literal_string(node.right, constants)
20
+ if isinstance(node, ast.JoinedStr):
21
+ parts = []
22
+ for part in node.values:
23
+ if isinstance(part, ast.FormattedValue):
24
+ if part.conversion != -1 or part.format_spec is not None:
25
+ raise ValueError("prompt formatting is outside the literal exporter")
26
+ part = part.value
27
+ parts.append(literal_string(part, constants))
28
+ return "".join(parts)
29
+ raise ValueError("prompt expression is not a literal string; code execution forbidden")
30
+
31
+
32
+ def export(checkout, output, template="gpt"):
33
+ if template not in {"gpt", "llama"}:
34
+ raise ValueError("template must be gpt or llama")
35
+ driver.verify_checkout(checkout)
36
+ relative = f"configs/hotpotqa/{template}_prompts.py"
37
+ source = driver._read_bytes(checkout / relative, label="pinned prompt source")
38
+ tracked = subprocess.run(("git", "-C", str(checkout), "show", f"HEAD:{relative}"),
39
+ capture_output=True, check=True, timeout=30).stdout
40
+ if tracked != source:
41
+ raise ValueError("prompt file differs from its pinned Git blob")
42
+ constants = {}
43
+ for node in ast.parse((checkout / "src/llm_compiler/constants.py").read_text()).body:
44
+ if isinstance(node, ast.Assign) and len(node.targets) == 1:
45
+ constants[node.targets[0].id] = ast.literal_eval(node.value)
46
+ values = {node.targets[0].id: literal_string(node.value, constants)
47
+ for node in ast.parse(source).body if isinstance(node, ast.Assign) and len(node.targets) == 1}
48
+ prompts = {"planner_example_prompt": values["PLANNER_PROMPT"],
49
+ "planner_example_prompt_replan": values["PLANNER_PROMPT"],
50
+ "planner_stop": [constants["END_OF_PLAN"]], "joinner_prompt": values["OUTPUT_PROMPT"],
51
+ "joinner_prompt_final": values["OUTPUT_PROMPT"]}
52
+ bundle = {"schema_version": "agentinputlab.llmcompiler.prompts.v1",
53
+ "upstream_commit": driver.UPSTREAM_COMMIT, "prompts": prompts}
54
+ raw = json.dumps(bundle, indent=2, sort_keys=True, ensure_ascii=False).encode()
55
+ if len(raw) > 64 * 1024:
56
+ raise ValueError("exported prompt bundle exceeds64KiB")
57
+ with output.open("xb") as handle:
58
+ handle.write(raw)
59
+ return {"status": "ok", "source_relative_path": relative,
60
+ "source_sha256": driver._sha256_bytes(source), "prompt_hash": driver._canonical_hash(prompts),
61
+ "upstream_commit": driver.UPSTREAM_COMMIT, "config_code_executed": False}
62
+
63
+
64
+ def main():
65
+ parser = argparse.ArgumentParser(description=__doc__)
66
+ parser.add_argument("--checkout", type=Path, required=True)
67
+ parser.add_argument("--output", type=Path, required=True)
68
+ parser.add_argument("--template", choices=("gpt", "llama"), default="gpt")
69
+ args = parser.parse_args()
70
+ print(json.dumps(export(args.checkout, args.output, args.template), sort_keys=True))
71
+
72
+
73
+ if __name__ == "__main__":
74
+ main()
@@ -0,0 +1,174 @@
1
+ """Explicit controlled live model/tool callback transport for pinned LLMCompiler.
2
+
3
+ Only a startup-bound authenticated numeric-loopback endpoint is reachable. No
4
+ provider key, request-selected URL, import, shell command, or network tool exists
5
+ inside this worker. Native upstream planning/scheduling/join/replan is retained.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import argparse
10
+ import asyncio
11
+ import importlib.metadata
12
+ import json
13
+ import os
14
+ import re
15
+ import sys
16
+ import urllib.parse
17
+ import urllib.request
18
+ from collections.abc import Mapping
19
+ from types import SimpleNamespace
20
+ from uuid import uuid4
21
+
22
+ from . import driver
23
+
24
+
25
+ def runtime_attestation():
26
+ from pathlib import Path
27
+ manifest = driver._verify_static_manifests()
28
+ return {"schema": "agentinputlab.llmcompiler.live-attestation.v1",
29
+ "driver_sha256": driver._sha256_bytes(Path(driver.__file__).read_bytes()),
30
+ "live_driver_sha256": driver._sha256_bytes(Path(__file__).read_bytes()),
31
+ "compatibility_manifest_sha256": driver.COMPATIBILITY_MANIFEST_SHA256,
32
+ "required_versions": {name: importlib.metadata.version(name)
33
+ for name in manifest["legacy_dependencies"]["required_versions"]},
34
+ "source_files_verified": True, "required_versions_verified": True, "import_origins_verified": True}
35
+
36
+
37
+ def load_prompts(path, request):
38
+ value, _ = driver._load_json(path, label="LLMCompiler live prompt bundle")
39
+ driver._expect_keys(value, {"schema_version", "upstream_commit", "prompts"}, label="prompt bundle")
40
+ prompts = value["prompts"]
41
+ keys = {"planner_example_prompt", "planner_example_prompt_replan", "planner_stop",
42
+ "joinner_prompt", "joinner_prompt_final"}
43
+ if (value["schema_version"] != "agentinputlab.llmcompiler.prompts.v1"
44
+ or value["upstream_commit"] != driver.UPSTREAM_COMMIT
45
+ or not isinstance(prompts, Mapping) or set(prompts) != keys
46
+ or driver._canonical_hash(prompts) != request.prompt_hash
47
+ or not all(isinstance(prompts[k], str) for k in keys - {"planner_stop"})
48
+ or not isinstance(prompts["planner_stop"], list)
49
+ or not all(isinstance(s, str) and s for s in prompts["planner_stop"])):
50
+ raise driver.WorkerFailure("DEPENDENCY_MISMATCH", "live prompt bundle identity differs")
51
+ return driver.ReplayBundle(prompts=dict(prompts), entries=())
52
+
53
+
54
+ class Callback:
55
+ def __init__(self, url, key_env, request):
56
+ parsed = urllib.parse.urlparse(url)
57
+ if (parsed.scheme != "http" or parsed.hostname != "127.0.0.1" or parsed.port is None
58
+ or parsed.path != "/callback" or parsed.username or parsed.password
59
+ or parsed.query or parsed.fragment):
60
+ raise driver.WorkerFailure("CONFIGURATION_INVALID", "callback URL must be numeric IPv4 loopback")
61
+ if not re.fullmatch(r"[A-Z_][A-Z0-9_]*", key_env) or not os.environ.get(key_env):
62
+ raise driver.WorkerFailure("CONFIGURATION_INVALID", "callback credential unavailable")
63
+ self.url, self.key, self.request = url, os.environ[key_env], request
64
+
65
+ async def call(self, kind, payload):
66
+ value = {"request_id": self.request.request_id, "call_id": uuid4().hex,
67
+ "kind": kind, "payload": payload}
68
+
69
+ def send():
70
+ request = urllib.request.Request(self.url, data=driver._canonical_json(value).encode(),
71
+ headers={"Authorization": "Bearer " + self.key, "Content-Type": "application/json"})
72
+ try:
73
+ with urllib.request.build_opener(urllib.request.ProxyHandler({})).open(
74
+ request, timeout=self.request.controls.timeout_seconds) as response:
75
+ raw = response.read(driver._MAX_MANIFEST_BYTES + 1)
76
+ if len(raw) > driver._MAX_MANIFEST_BYTES:
77
+ raise ValueError("callback response byte limit")
78
+ result = json.loads(raw)
79
+ if not isinstance(result, dict) or result.get("ok") is not True:
80
+ raise ValueError("callback failed")
81
+ return result["payload"]
82
+ except Exception:
83
+ raise driver.WorkerFailure("HOST_CALLBACK_FAILED", "bound host callback failed; no retry",
84
+ consumed=True) from None
85
+
86
+ return await asyncio.to_thread(send)
87
+
88
+
89
+ class LiveModel(driver._ReplayModel):
90
+ def __init__(self, callback):
91
+ super().__init__(())
92
+ self.callback = callback
93
+
94
+ async def complete(self, channel, prompt, stop):
95
+ index = len(self.consumed)
96
+ self.consumed.append(driver.ReplayEntry(channel, driver._sha256_text(prompt), "", 0, 0))
97
+ value = await self.callback.call("model", {"prompt": prompt, "channel": channel,
98
+ "stop": list(stop or ()), "seed": self.callback.request.seed})
99
+ if (not isinstance(value, dict) or set(value) != {"text", "input_tokens", "output_tokens", "finish_reason"}
100
+ or not isinstance(value["text"], str)):
101
+ raise driver.WorkerFailure("BACKEND_OUTPUT_INVALID", "invalid live model response", consumed=True)
102
+ entry = driver.ReplayEntry(channel, driver._sha256_text(prompt), value["text"],
103
+ driver._nonnegative_int(value["input_tokens"], label="input_tokens"),
104
+ driver._nonnegative_int(value["output_tokens"], label="output_tokens"))
105
+ self.consumed[index] = entry
106
+ if not entry.response.strip():
107
+ raise driver.WorkerFailure("BACKEND_OUTPUT_INVALID", "live model returned empty final text", consumed=True)
108
+ if channel == "planner":
109
+ self.planner_responses.append(entry.response)
110
+ return entry.response
111
+
112
+ async def apredict(self, prompt, *, callbacks=None, stop=None, **kwargs):
113
+ response = await self.complete("planner", prompt, stop)
114
+ # This is buffered completion delivery, never native streaming parity.
115
+ await self._notify(callbacks, response)
116
+ return response
117
+
118
+ async def agenerate_prompt(self, prompts, stop=None, callbacks=None, **kwargs):
119
+ if len(prompts) != 1:
120
+ raise driver.WorkerFailure("BACKEND_OUTPUT_INVALID", "one join prompt required")
121
+ value = prompts[0]
122
+ prompt = value.text if hasattr(value, "text") else value.to_string()
123
+ response = await self.complete("join", prompt, stop)
124
+ return SimpleNamespace(generations=[[SimpleNamespace(text=response)]])
125
+
126
+ def assert_exhausted(self):
127
+ # There is no frozen response count in an actual live execution.
128
+ pass
129
+
130
+
131
+ class LiveTools:
132
+ def __init__(self, callback):
133
+ self.callback, self.calls = callback, 0
134
+
135
+ async def invoke(self, name, arguments):
136
+ self.calls += 1
137
+ value = await self.callback.call("tool", {"name": name, "arguments": list(arguments)})
138
+ if not isinstance(value, dict) or set(value) != {"output"}:
139
+ raise driver.WorkerFailure("TOOL_EXECUTION_FAILURE", "invalid bound tool response", consumed=True)
140
+ return value["output"]
141
+
142
+
143
+ def main(argv=None):
144
+ parser = argparse.ArgumentParser(description=__doc__)
145
+ for key in ("checkout", "prompt-bundle", "callback-url", "callback-key-env"):
146
+ parser.add_argument("--" + key, required=True)
147
+ args = parser.parse_args(argv)
148
+ request_id = ""
149
+ try:
150
+ from pathlib import Path
151
+ driver.verify_checkout(Path(args.checkout))
152
+ raw = driver._read_request_line()
153
+ if isinstance(raw, Mapping):
154
+ request_id = raw.get("request_id", "")
155
+ request = driver.validate_request(raw)
156
+ bundle = load_prompts(Path(args.prompt_bundle), request)
157
+ callback = Callback(args.callback_url, args.callback_key_env, request)
158
+ upstream = driver.import_upstream(Path(args.checkout))
159
+ asyncio.run(callback.call("attest", runtime_attestation()))
160
+ response = asyncio.run(driver.execute_request(request, upstream, bundle, LiveTools(callback),
161
+ runtime_model=LiveModel(callback)))
162
+ except driver.WorkerFailure as exc:
163
+ response = driver._failure_response(exc, request_id=request_id)
164
+ except Exception as exc:
165
+ response = driver._failure_response(driver.WorkerFailure("WORKER_INTERNAL_FAILURE",
166
+ f"live worker failed closed: {type(exc).__name__}"), request_id=request_id)
167
+ sys.stdout.write(driver._canonical_json(response) + "\n")
168
+ sys.stdout.flush()
169
+ # Preserve typed errors and usage for the supervised host, not only stderr.
170
+ return 0
171
+
172
+
173
+ if __name__ == "__main__":
174
+ raise SystemExit(main())
@@ -0,0 +1,147 @@
1
+ {
2
+ "schema_version": "agentinputlab.llmcompiler.patch-manifest.v1",
3
+ "upstream_commit": "a00c9d35507507da70e8c637eee64efc8c1857ae",
4
+ "patches": [
5
+ {
6
+ "id": "request_local_completed_dependency_lookup_v1",
7
+ "kind": "runtime_compatibility_patch",
8
+ "upstream_symbols": [
9
+ "src.llm_compiler.task_fetching_unit.TaskFetchingUnit",
10
+ "src.llm_compiler.llm_compiler.LLMCompiler._acall"
11
+ ],
12
+ "changes": [
13
+ "retain completed task observations and completion events for dependency lookup across native replan TFU instances",
14
+ "preserve global upstream task IDs and dependency substitution without rewriting model responses or plans",
15
+ "keep each TFU iteration and scheduling set round-local so completed tasks are neither executed nor appended to scratchpad twice",
16
+ "scope the completed dependency cache to a single full invocation; never share observations between requests"
17
+ ],
18
+ "algorithm_logic_changed": false
19
+ },
20
+ {
21
+ "id": "explicit_host_live_callbacks_v1",
22
+ "kind": "transport_compatibility_patch",
23
+ "upstream_symbols": [
24
+ "src.llm_compiler.planner.Planner.run_llm",
25
+ "src.llm_compiler.llm_compiler.LLMCompilerAgent.arun",
26
+ "src.tools.base.Tool"
27
+ ],
28
+ "changes": [
29
+ "add an explicitly selected authenticated numeric-loopback callback seam to caller-bound model and read-only tools",
30
+ "retain upstream planning, dependency substitution, scheduling, join and replan",
31
+ "bind callback requests to the root request identity and state execution budget",
32
+ "require worker source/version/dependency attestation before model or tool callbacks",
33
+ "bind explicit positional argument order for multi-parameter tool dispatch and task traces",
34
+ "record host-observed usage and genuine model/tool failures without automatic retries",
35
+ "declare streamed callbacks buffered after completion, without native-streaming latency or checkpoint parity claims"
36
+ ],
37
+ "algorithm_logic_changed": false
38
+ },
39
+ {
40
+ "id": "controlled_replay_model_type_gate_v1",
41
+ "kind": "transport_compatibility_patch",
42
+ "upstream_symbols": [
43
+ "src.llm_compiler.planner.BaseLLM",
44
+ "src.llm_compiler.llm_compiler.BaseLLM"
45
+ ],
46
+ "changes": [
47
+ "bind the upstream BaseLLM isinstance gates to the worker-local replay adapter",
48
+ "preserve Planner.run_llm and LLMCompilerAgent.arun without importing a request-selected backend",
49
+ "match every planner and join prompt by SHA-256 before releasing its frozen response"
50
+ ],
51
+ "algorithm_logic_changed": false
52
+ },
53
+ {
54
+ "id": "bounded_task_fetching_trace_v1",
55
+ "kind": "safety_and_observability_patch",
56
+ "upstream_symbols": [
57
+ "src.llm_compiler.task_fetching_unit.TaskFetchingUnit",
58
+ "src.llm_compiler.llm_compiler.TaskFetchingUnit"
59
+ ],
60
+ "changes": [
61
+ "subclass the official TaskFetchingUnit while retaining its dependency scheduling and argument substitution",
62
+ "bound concurrent task bodies with the request concurrency control",
63
+ "reject excess, duplicate, malformed, or non-allowlisted tasks before their execution",
64
+ "record planned, ready, running, completed, and failed scheduler states",
65
+ "unblock and abort the scheduler after a tool failure so the upstream busy loop cannot deadlock"
66
+ ],
67
+ "algorithm_logic_changed": false
68
+ },
69
+ {
70
+ "id": "fail_closed_join_guard_v1",
71
+ "kind": "security_patch",
72
+ "upstream_symbols": [
73
+ "src.llm_compiler.llm_compiler.LLMCompiler.join"
74
+ ],
75
+ "changes": [
76
+ "refuse the join model call after any tool execution failure",
77
+ "never turn a missing or denied tool observation into a synthetic final answer"
78
+ ],
79
+ "algorithm_logic_changed": false
80
+ },
81
+ {
82
+ "id": "replan_control_translation_v1",
83
+ "kind": "configuration_compatibility_patch",
84
+ "upstream_symbols": [
85
+ "src.llm_compiler.llm_compiler.LLMCompiler._acall"
86
+ ],
87
+ "changes": [
88
+ "translate AgentInputLab max_replans=N to the upstream loop bound N+1",
89
+ "retain one initial planning iteration when max_replans is zero"
90
+ ],
91
+ "algorithm_logic_changed": false
92
+ },
93
+ {
94
+ "id": "jsonl_stdout_isolation_v1",
95
+ "kind": "transport_safety_patch",
96
+ "upstream_symbols": [
97
+ "src.utils.logger_utils.enable_logging",
98
+ "src.utils.logger_utils.log"
99
+ ],
100
+ "changes": [
101
+ "disable official verbose logging",
102
+ "discard incidental stdout during imports and execution so stdout remains exactly one JSON response line"
103
+ ],
104
+ "algorithm_logic_changed": false
105
+ },
106
+ {
107
+ "id": "whole_run_timeout_and_async_cleanup_v1",
108
+ "kind": "runtime_safety_patch",
109
+ "upstream_symbols": [
110
+ "src.llm_compiler.planner.Planner.aplan",
111
+ "src.llm_compiler.llm_compiler.LLMCompiler._acall",
112
+ "src.llm_compiler.task_fetching_unit.TaskFetchingUnit._run_task"
113
+ ],
114
+ "changes": [
115
+ "apply controls.timeout_seconds to the complete worker execution rather than an individual model call",
116
+ "always signal the streaming queue when its planner exits or fails",
117
+ "cancel and await planner and tool tasks on failure, cancellation, timeout, and successful shutdown",
118
+ "settle the upstream fire-and-forget planner task before permitting join"
119
+ ],
120
+ "algorithm_logic_changed": false
121
+ },
122
+ {
123
+ "id": "pre_schedule_dependency_validation_v1",
124
+ "kind": "runtime_safety_patch",
125
+ "upstream_symbols": [
126
+ "src.llm_compiler.task_fetching_unit.TaskFetchingUnit.set_tasks"
127
+ ],
128
+ "changes": [
129
+ "validate each incoming task batch atomically before passing it to the official scheduler",
130
+ "reject unknown, duplicate, self-referential, malformed, cyclic, or excess tasks before execution"
131
+ ],
132
+ "algorithm_logic_changed": false
133
+ },
134
+ {
135
+ "id": "complete_legacy_dependency_attestation_v1",
136
+ "kind": "compatibility_verification_patch",
137
+ "upstream_symbols": [
138
+ "requirements.txt"
139
+ ],
140
+ "changes": [
141
+ "verify every distribution version listed in compatibility_manifest.json",
142
+ "verify every imported top-level package originates inside its pinned distribution"
143
+ ],
144
+ "algorithm_logic_changed": false
145
+ }
146
+ ]
147
+ }
workers/mce/README.md ADDED
@@ -0,0 +1,198 @@
1
+ # MCE isolated worker
2
+
3
+ This sidecar integrates
4
+ `metaevo-ai/meta-context-engineering@c4b7a7c2ce3ffc4bf4a74c52d2dd8a9a8fb14c30`
5
+ without moving generated Python or context contents into the AgentInputLab
6
+ host.
7
+
8
+ ## Controlled semantic-patch path
9
+
10
+ `MCEOfficialRuntime` calls the upstream `mce.main.run_iteration` function for
11
+ baseline iteration zero and every configured evolution iteration. The function
12
+ must originate from the pinned `mce/main.py` SHA-256; preloaded `sys.modules`
13
+ substitutes are discarded.
14
+
15
+ This is deliberately **not** an `official_native` adapter. A hash-bound semantic
16
+ patch replaces exactly four globals already imported by `mce.main`:
17
+
18
+ - `run_meta_agent` and `run_base_agent` delegate to an isolated manager's
19
+ remote `run_agent`;
20
+ - `load_interfaces` performs remote static validation and returns an opaque
21
+ receipt, never a locally imported callable;
22
+ - `batch_evaluate` delegates to a separate trusted oracle supervisor.
23
+
24
+ The pinned `run_iteration` orchestration, baseline/sub-iteration loop, batching,
25
+ aggregation, and returned validation metric remain upstream code. The patch
26
+ manifest and digest are bound through worker identity, request, runtime
27
+ binding, artifact bundle, and response attestation.
28
+
29
+ The host freezes:
30
+
31
+ - train and validation example identities and input hashes;
32
+ - the interface and initial-context hashes;
33
+ - target, meta, and base model fingerprints;
34
+ - seed, iteration, batch, call, wall, and artifact limits;
35
+ - source commit and source-file hashes;
36
+ - sandbox image, policy, test report, and resource limits.
37
+
38
+ ## Security boundary
39
+
40
+ The driver must run inside the container or microVM named by the
41
+ `MCESandboxAttestation`. The source mount is read-only and the workspace is
42
+ new for every request. Generated code may execute only inside that worker.
43
+ The validation oracle is mounted only in a trusted, out-of-process supervisor;
44
+ the generated workspace cannot see it, and only the supervisor returns metric
45
+ values. Provider calls pass through the same trusted boundary, which reserves
46
+ model/tool budget before transport. A production runtime must supply the exact
47
+ isolated-manager fingerprint and implement `bind_run`, `run_agent`,
48
+ `validate_interfaces_static`, `batch_evaluate`, and `usage_receipt`; any
49
+ missing or altered field fails closed. This is an operator-attested deployment
50
+ boundary, not a claim that a Python object can cryptographically prove its own
51
+ container or microVM.
52
+ Only path, media type, byte size, SHA-256, iteration score, and normalized
53
+ usage leave the worker. Symlinks, paths outside the workspace, test-split
54
+ fields, and inline file contents are rejected.
55
+
56
+ The public upstream currently raises `NotImplementedError` for its own E2B
57
+ flag, so AgentInputLab does not describe that flag as a working sandbox.
58
+ Isolation is supplied by the external worker deployment.
59
+
60
+ Upstream does not expose complete model-call/token accounting. The isolated
61
+ manager therefore binds target/meta/base model identities to a trusted
62
+ pre-call supervisor and must return an exact usage receipt. Missing or
63
+ different accounting fails closed. The runtime seeds Python once per run.
64
+ At the three stochastic patched seams it assigns deterministic logical seeds as
65
+ `base_seed + logical_call_index`, in upstream invocation order and before each
66
+ await. A batch evaluator may fan out into multiple provider calls; the attested
67
+ manager contract therefore requires each actual provider call to derive a
68
+ non-negative 63-bit seed from SHA-256 over the canonical, versioned
69
+ `{logical_seed, stable_subcall_index}` identity in stable sample/call order.
70
+ This avoids the cross-call collisions caused by simple integer addition. The
71
+ manager passes that seed through `before_seeded_model_call`, which verifies the
72
+ derivation before reserving the provider call. These versioned seed modes are bound into the
73
+ semantic-patch manifest, manager fingerprint, run binding, sandbox attestation,
74
+ and response attestation. This remains an operator-attested boundary rather
75
+ than cryptographic proof of a remote provider's sampling implementation. The
76
+ configured wall deadline applies to the complete run.
77
+
78
+ ## Status boundary
79
+
80
+ The checked path is an `external_only`, controlled thin-wrapper L2 integration.
81
+ It is not an official E2B path or a paper-result reproduction: model
82
+ credentials/local weights, a production isolated-manager deployment, a
83
+ task-specific upstream environment, and generated artifacts remain operator
84
+ supplied. The fixture runtime is rejected unless explicitly enabled.
85
+
86
+ An operator constructs `MCEWorkerDriver` with the trusted runtime, artifact
87
+ store, and sandbox attestation, then exposes it with
88
+ `workers.mce.serve_jsonl(driver, input_stream, output_stream)`. The module CLI
89
+ intentionally refuses to invent those trust-boundary dependencies.
90
+
91
+ ## Text-artifact fitting API
92
+
93
+ The separate text-only profile produces Markdown context instead of executable
94
+ interfaces. Install `agentinputlab[mce-text]` and mount the pinned upstream
95
+ checkout. In a dedicated child process, set `PYTHON_DOTENV_DISABLED=1`, give the
96
+ unused upstream client a non-secret dummy `OPENAI_API_KEY`, and set its
97
+ `OPENAI_API_BASE=http://127.0.0.1:1/v1`. Actual inference uses the explicitly
98
+ supplied backend; configure its credentials under a different environment key.
99
+
100
+ ```python
101
+ from agentinputlab.recipes import (
102
+ MCETextFitControls, MCETextOfflineRecipe, MCETextArtifactCommonSupport,
103
+ )
104
+
105
+ # train and validation are disjoint sequences of MCEExample objects, with
106
+ # input={"question": ..., "context": ...}, a text expected_output, and the
107
+ # corresponding split. backend is a real, metered LLMBackend.
108
+ artifact = MCETextOfflineRecipe(MCETextFitControls(
109
+ iterations=1, train_batch_size=2, per_call_output_tokens=512,
110
+ max_model_calls=32, max_output_tokens=16384, seed=17,
111
+ )).fit(
112
+ checkout="/path/to/pinned/meta-context-engineering",
113
+ output_root="/path/to/new/fit-directory",
114
+ train=train, validation=validation, backend=backend,
115
+ )
116
+ method = MCETextArtifactCommonSupport(artifact)
117
+ ```
118
+
119
+ This API runs pinned `run_iteration` for the baseline and evolution iterations.
120
+ Validation references remain scorer-only; first-best validation selects the
121
+ artifact. Baseline selection yields an explicit NO_OP. Fit costs and seed
122
+ `base_seed + logical_call_index` are recorded separately from downstream use.
123
+ Record provider requests before transport and enforce a child-process/provider
124
+ deadline: the API's wall check is cooperative. Claude-agent and embedding SDK
125
+ imports use sentinels that raise if invoked; their execution and the full
126
+ generated-code sandbox are separate profiles, not covered by this text fit.
127
+
128
+ ## Frozen executable-artifact evaluation
129
+
130
+ `recipe.mce.final_artifact_eval` uses `MCEFinalArtifactEvaluator`, not the
131
+ text-only profile. Keep the `MCESplitAudit` computed from the original fitting
132
+ and validation examples together with the returned `MCEContextArtifact`:
133
+
134
+ ```python
135
+ from agentinputlab.recipes import (
136
+ MCEFinalArtifactEvaluator, MCEFinalControls, MCEFinalExample,
137
+ validate_mce_split_isolation,
138
+ )
139
+
140
+ # artifact is returned by MCEOfflineRecipe.fit; client is the same isolated
141
+ # sidecar with its original persistent artifact store and model identities.
142
+ fit_audit = validate_mce_split_isolation(train_examples, validation_examples)
143
+ evaluator = MCEFinalArtifactEvaluator(
144
+ artifact=artifact, split_audit=fit_audit,
145
+ interface_signature=interface_signature, client=client,
146
+ controls=MCEFinalControls(
147
+ max_model_calls=8, max_tool_calls=8,
148
+ max_output_tokens=4096, max_output_tokens_per_call=512,
149
+ ),
150
+ )
151
+ result = evaluator.evaluate(
152
+ (MCEFinalExample("heldout-id", {"question": "..."}, expected_output="..."),),
153
+ context=context,
154
+ )
155
+ ```
156
+
157
+ These budgets apply to the **whole evaluate call**. Use one example per call
158
+ when each benchmark position has its own 4096-token/8-call budget. Increasing
159
+ the collection size does not silently multiply a budget. Fitting costs remain
160
+ separate. Model/source/interface/environment/storage identities and the
161
+ original fit split audit are checked before dispatch. Test IDs and input
162
+ hashes must be disjoint from both fitting and validation.
163
+
164
+ The sidecar materializes the frozen regular-file closure into a fresh generated
165
+ workspace. Native task loading and the existing isolated-evaluation seam run
166
+ without meta/base-agent evolution; generated interfaces are never imported by
167
+ the sidecar or caller host. The manager must provide
168
+ `final_evaluation_fingerprint()` equal to
169
+ `workers.mce.driver.final_evaluation_manager_contract()`. Its actual provider
170
+ transport must pass the requested cap to `before_seeded_model_call`, retain the
171
+ returned reservation ID, and pass that ID to `after_model_call`. Concurrent
172
+ reservations cannot exceed the aggregate token/call budget. Use
173
+ `failed_model_call(reservation_id=...)` for unknown failed-response usage;
174
+ that reservation is quarantined, not reported as zero actual token usage.
175
+ This is an operator-attested boundary, not proof that a remote provider obeys
176
+ its requested generation cap. Measured provider overruns are retained and
177
+ rejected.
178
+
179
+ Configure a persistent, private `oracle_root` on `MCEWorkerDriver`. Each final
180
+ request gets a create-only `mce-final-<request_id>` evidence directory there,
181
+ outside the generated workspace, containing the claim, oracle, raw native
182
+ evaluation and terminal/cost record. A repeated identical request is rejected
183
+ before another model call; inspect the existing evidence instead of retrying.
184
+ The host receives per-position scored/failed rows, the unchanged native
185
+ summary, and a separately labeled all-position primary-metric mean that keeps
186
+ failed positions in its denominator. Neither fitting nor text-artifact smoke
187
+ tests certify this full generated-code runtime; production acceptance also
188
+ requires an available isolated manager and real model/task execution.
189
+
190
+ ## Checks
191
+
192
+ ```bash
193
+ PYTHONPATH=src:. pytest -q tests/workers/test_mce_worker_driver.py
194
+ PYTHONPATH=src:. pytest -q tests/unit/test_remaining_recipes.py -k mce
195
+ AGENTINPUTLAB_MCE_PINNED_SOURCE=/path/to/pinned/checkout \
196
+ PYTHONPATH=src:. pytest -q \
197
+ tests/workers/test_mce_worker_driver.py::MCEOfficialRuntimeTests::test_real_pinned_run_iteration_with_semantic_patch
198
+ ```
@@ -0,0 +1,29 @@
1
+ """Pinned external worker support for Meta Context Engineering."""
2
+
3
+ from .driver import (
4
+ PROVIDER_SUBCALL_SEED_MODE,
5
+ SEED_MODE,
6
+ MCEEvolutionIteration,
7
+ MCEEvolutionRun,
8
+ MCEOfficialRuntime,
9
+ MCEWorkerDriver,
10
+ PersistentArtifactStore,
11
+ TrustedEvaluationSupervisor,
12
+ TrustedProviderSupervisor,
13
+ derive_provider_subcall_seed,
14
+ serve_jsonl,
15
+ )
16
+
17
+ __all__ = [
18
+ "PROVIDER_SUBCALL_SEED_MODE",
19
+ "SEED_MODE",
20
+ "MCEEvolutionIteration",
21
+ "MCEEvolutionRun",
22
+ "MCEOfficialRuntime",
23
+ "MCEWorkerDriver",
24
+ "PersistentArtifactStore",
25
+ "TrustedEvaluationSupervisor",
26
+ "TrustedProviderSupervisor",
27
+ "derive_provider_subcall_seed",
28
+ "serve_jsonl",
29
+ ]