agentinputlab 0.1.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. agentinputlab/__init__.py +28 -0
  2. agentinputlab/algorithms/__init__.py +6 -0
  3. agentinputlab/algorithms/acquire/__init__.py +145 -0
  4. agentinputlab/algorithms/acquire/adaptive_rag/__init__.py +43 -0
  5. agentinputlab/algorithms/acquire/adaptive_rag/replay.py +367 -0
  6. agentinputlab/algorithms/acquire/adaptive_rag/runtime.py +1202 -0
  7. agentinputlab/algorithms/acquire/adaptive_rag_common_support.py +542 -0
  8. agentinputlab/algorithms/acquire/hyde.py +296 -0
  9. agentinputlab/algorithms/acquire/hyde_controlled.py +200 -0
  10. agentinputlab/algorithms/acquire/hyde_external.py +148 -0
  11. agentinputlab/algorithms/acquire/ircot.py +28 -0
  12. agentinputlab/algorithms/acquire/ircot_common_support.py +478 -0
  13. agentinputlab/algorithms/acquire/ircot_native.py +355 -0
  14. agentinputlab/algorithms/acquire/ircot_replay.py +327 -0
  15. agentinputlab/algorithms/acquire/qrag/__init__.py +79 -0
  16. agentinputlab/algorithms/acquire/qrag/bridge.py +828 -0
  17. agentinputlab/algorithms/acquire/qrag/common_support.py +891 -0
  18. agentinputlab/algorithms/acquire/qrag/native_axis.py +71 -0
  19. agentinputlab/algorithms/acquire/qrag/reader_adapter.py +139 -0
  20. agentinputlab/algorithms/acquire/r2ag/__init__.py +57 -0
  21. agentinputlab/algorithms/acquire/r2ag/bridge.py +1312 -0
  22. agentinputlab/algorithms/acquire/r2ag/common_support.py +1029 -0
  23. agentinputlab/algorithms/acquire/r2ag/socket_runtime.py +255 -0
  24. agentinputlab/algorithms/clarify/__init__.py +61 -0
  25. agentinputlab/algorithms/clarify/_structured.py +64 -0
  26. agentinputlab/algorithms/clarify/active_task_disambiguation.py +371 -0
  27. agentinputlab/algorithms/clarify/ask_or_assume/__init__.py +17 -0
  28. agentinputlab/algorithms/clarify/ask_or_assume/monitor.py +410 -0
  29. agentinputlab/algorithms/clarify/future_turns.py +379 -0
  30. agentinputlab/algorithms/clarify/udcs.py +255 -0
  31. agentinputlab/algorithms/clarify/udcs_deterministic.py +196 -0
  32. agentinputlab/algorithms/curate/__init__.py +65 -0
  33. agentinputlab/algorithms/curate/acon/__init__.py +27 -0
  34. agentinputlab/algorithms/curate/acon/common.py +284 -0
  35. agentinputlab/algorithms/curate/acon/common_support.py +136 -0
  36. agentinputlab/algorithms/curate/acon/history_bridge.py +309 -0
  37. agentinputlab/algorithms/curate/acon/observation_bridge.py +290 -0
  38. agentinputlab/algorithms/curate/llmlingua/__init__.py +30 -0
  39. agentinputlab/algorithms/curate/llmlingua/adapters.py +537 -0
  40. agentinputlab/algorithms/curate/llmlingua/budget.py +48 -0
  41. agentinputlab/algorithms/curate/llmlingua/controlled.py +175 -0
  42. agentinputlab/algorithms/curate/llmlingua/multilingual.py +105 -0
  43. agentinputlab/algorithms/curate/llmlingua/span_map.py +167 -0
  44. agentinputlab/algorithms/curate/recomp/__init__.py +47 -0
  45. agentinputlab/algorithms/curate/recomp/external.py +1129 -0
  46. agentinputlab/algorithms/curate/recomp/selective.py +304 -0
  47. agentinputlab/algorithms/decompose/__init__.py +107 -0
  48. agentinputlab/algorithms/decompose/decomp/__init__.py +53 -0
  49. agentinputlab/algorithms/decompose/decomp/common_support.py +478 -0
  50. agentinputlab/algorithms/decompose/decomp/planner_component.py +199 -0
  51. agentinputlab/algorithms/decompose/decomp/worker_bridge.py +416 -0
  52. agentinputlab/algorithms/decompose/llm_compiler/__init__.py +35 -0
  53. agentinputlab/algorithms/decompose/llm_compiler/bridge.py +520 -0
  54. agentinputlab/algorithms/decompose/llm_compiler/common_support.py +504 -0
  55. agentinputlab/algorithms/decompose/plan_and_budget/__init__.py +43 -0
  56. agentinputlab/algorithms/decompose/plan_and_budget/cached_soft_budget.py +362 -0
  57. agentinputlab/algorithms/decompose/plan_and_budget/decomposer_component.py +107 -0
  58. agentinputlab/algorithms/decompose/plan_and_budget/full.py +205 -0
  59. agentinputlab/algorithms/decompose/plan_and_budget/hard_cap.py +246 -0
  60. agentinputlab/algorithms/decompose/plan_and_budget/regenerated_soft_budget.py +448 -0
  61. agentinputlab/algorithms/decompose/plan_and_solve/__init__.py +33 -0
  62. agentinputlab/algorithms/decompose/plan_and_solve/plan_component.py +192 -0
  63. agentinputlab/algorithms/decompose/plan_and_solve/ps_prompt.py +127 -0
  64. agentinputlab/algorithms/decompose/self_ask/__init__.py +27 -0
  65. agentinputlab/algorithms/decompose/self_ask/loop.py +362 -0
  66. agentinputlab/algorithms/decompose/self_ask/planner_component.py +117 -0
  67. agentinputlab/algorithms/reformulate/__init__.py +85 -0
  68. agentinputlab/algorithms/reformulate/infocqr/__init__.py +40 -0
  69. agentinputlab/algorithms/reformulate/infocqr/cache_replay.py +362 -0
  70. agentinputlab/algorithms/reformulate/infocqr/external.py +675 -0
  71. agentinputlab/algorithms/reformulate/infocqr/student.py +189 -0
  72. agentinputlab/algorithms/reformulate/query2doc/__init__.py +42 -0
  73. agentinputlab/algorithms/reformulate/query2doc/controlled_live.py +190 -0
  74. agentinputlab/algorithms/reformulate/query2doc/models.py +95 -0
  75. agentinputlab/algorithms/reformulate/query2doc/official_cached.py +335 -0
  76. agentinputlab/algorithms/reformulate/query2doc/querygym_bridge.py +223 -0
  77. agentinputlab/algorithms/reformulate/query2doc/querygym_runtime.py +326 -0
  78. agentinputlab/algorithms/reformulate/reformer/__init__.py +23 -0
  79. agentinputlab/algorithms/reformulate/reformer/external.py +417 -0
  80. agentinputlab/algorithms/reformulate/rrr.py +696 -0
  81. agentinputlab/annotation/__init__.py +5 -0
  82. agentinputlab/annotation/independent.py +428 -0
  83. agentinputlab/annotation/server.py +233 -0
  84. agentinputlab/annotation/static/app.js +121 -0
  85. agentinputlab/annotation/static/index.html +60 -0
  86. agentinputlab/annotation/static/review.css +2 -0
  87. agentinputlab/annotation/static/review.html +10 -0
  88. agentinputlab/annotation/static/review.js +11 -0
  89. agentinputlab/annotation/static/styles.css +55 -0
  90. agentinputlab/annotation/store.py +444 -0
  91. agentinputlab/api.py +368 -0
  92. agentinputlab/artifacts/__init__.py +15 -0
  93. agentinputlab/artifacts/json_file.py +104 -0
  94. agentinputlab/artifacts/manifest.py +98 -0
  95. agentinputlab/artifacts/store.py +157 -0
  96. agentinputlab/backends/__init__.py +98 -0
  97. agentinputlab/backends/embedding/__init__.py +25 -0
  98. agentinputlab/backends/embedding/base.py +145 -0
  99. agentinputlab/backends/embedding/callable.py +75 -0
  100. agentinputlab/backends/embedding/replay.py +129 -0
  101. agentinputlab/backends/llm/__init__.py +31 -0
  102. agentinputlab/backends/llm/base.py +149 -0
  103. agentinputlab/backends/llm/callable.py +108 -0
  104. agentinputlab/backends/llm/decomp_completion.py +88 -0
  105. agentinputlab/backends/llm/final_content_stop.py +72 -0
  106. agentinputlab/backends/llm/gpt_oss_final_channel.py +84 -0
  107. agentinputlab/backends/llm/openai_compatible.py +332 -0
  108. agentinputlab/backends/llm/transformers.py +171 -0
  109. agentinputlab/backends/retrieval/__init__.py +35 -0
  110. agentinputlab/backends/retrieval/base.py +50 -0
  111. agentinputlab/backends/retrieval/dense.py +777 -0
  112. agentinputlab/backends/retrieval/memory.py +119 -0
  113. agentinputlab/backends/retrieval/sqlite_fts.py +155 -0
  114. agentinputlab/backends/user/__init__.py +15 -0
  115. agentinputlab/backends/user/base.py +66 -0
  116. agentinputlab/backends/user/callable.py +54 -0
  117. agentinputlab/backends/user/replay.py +89 -0
  118. agentinputlab/backends/vector.py +38 -0
  119. agentinputlab/benchmarks/__init__.py +246 -0
  120. agentinputlab/benchmarks/acquisition.py +106 -0
  121. agentinputlab/benchmarks/ale.py +540 -0
  122. agentinputlab/benchmarks/appworld_ul.py +669 -0
  123. agentinputlab/benchmarks/assets.py +226 -0
  124. agentinputlab/benchmarks/base.py +68 -0
  125. agentinputlab/benchmarks/beir_archive.py +235 -0
  126. agentinputlab/benchmarks/beir_sample.py +269 -0
  127. agentinputlab/benchmarks/bfcl_native.py +245 -0
  128. agentinputlab/benchmarks/bfcl_v3.py +607 -0
  129. agentinputlab/benchmarks/cache.py +218 -0
  130. agentinputlab/benchmarks/clariq.py +203 -0
  131. agentinputlab/benchmarks/data/registry.json +321 -0
  132. agentinputlab/benchmarks/data/smoke_assets.json +511 -0
  133. agentinputlab/benchmarks/data/statebench_v0_8_1_task_ids.json +475 -0
  134. agentinputlab/benchmarks/data/toolsandbox_165848b_scenario_names.json +1 -0
  135. agentinputlab/benchmarks/execution.py +1111 -0
  136. agentinputlab/benchmarks/interactive.py +257 -0
  137. agentinputlab/benchmarks/ir_query.py +204 -0
  138. agentinputlab/benchmarks/longbench.py +203 -0
  139. agentinputlab/benchmarks/paired_replay.py +479 -0
  140. agentinputlab/benchmarks/preprocess.py +2313 -0
  141. agentinputlab/benchmarks/production.py +236 -0
  142. agentinputlab/benchmarks/qa.py +963 -0
  143. agentinputlab/benchmarks/registry.py +110 -0
  144. agentinputlab/benchmarks/retrieval.py +459 -0
  145. agentinputlab/benchmarks/runtime.py +509 -0
  146. agentinputlab/benchmarks/statebench.py +938 -0
  147. agentinputlab/benchmarks/tau3.py +725 -0
  148. agentinputlab/benchmarks/toolsandbox.py +626 -0
  149. agentinputlab/benchmarks/trec_dl_sample.py +263 -0
  150. agentinputlab/campaign.py +654 -0
  151. agentinputlab/campaign_runner.py +953 -0
  152. agentinputlab/cli/__init__.py +6 -0
  153. agentinputlab/cli/main.py +933 -0
  154. agentinputlab/connectors/__init__.py +46 -0
  155. agentinputlab/connectors/knowledge/__init__.py +4 -0
  156. agentinputlab/connectors/tools/__init__.py +30 -0
  157. agentinputlab/connectors/tools/base.py +57 -0
  158. agentinputlab/connectors/tools/mcp.py +222 -0
  159. agentinputlab/connectors/tools/memory.py +41 -0
  160. agentinputlab/connectors/tools/openapi.py +695 -0
  161. agentinputlab/connectors/tools/schema.py +102 -0
  162. agentinputlab/contracts/__init__.py +91 -0
  163. agentinputlab/contracts/availability.py +24 -0
  164. agentinputlab/contracts/dependency.py +58 -0
  165. agentinputlab/contracts/enums.py +82 -0
  166. agentinputlab/contracts/errors.py +63 -0
  167. agentinputlab/contracts/evidence.py +43 -0
  168. agentinputlab/contracts/intent.py +110 -0
  169. agentinputlab/contracts/lifecycle.py +164 -0
  170. agentinputlab/contracts/patch.py +167 -0
  171. agentinputlab/contracts/serialization.py +93 -0
  172. agentinputlab/contracts/state.py +127 -0
  173. agentinputlab/contracts/trace.py +59 -0
  174. agentinputlab/contracts/worker.py +42 -0
  175. agentinputlab/core/__init__.py +7 -0
  176. agentinputlab/data/__init__.py +32 -0
  177. agentinputlab/data/checksums.py +9 -0
  178. agentinputlab/data/downloader.py +235 -0
  179. agentinputlab/data/http.py +171 -0
  180. agentinputlab/data/index.py +21 -0
  181. agentinputlab/data/overlap.py +28 -0
  182. agentinputlab/data/preprocess.py +32 -0
  183. agentinputlab/data/storage.py +57 -0
  184. agentinputlab/data/trec_sample.py +427 -0
  185. agentinputlab/evaluation/__init__.py +5 -0
  186. agentinputlab/evaluation/outcomes.py +32 -0
  187. agentinputlab/experiments/__init__.py +278 -0
  188. agentinputlab/experiments/analysis.py +981 -0
  189. agentinputlab/experiments/artifacts.py +687 -0
  190. agentinputlab/experiments/automatic_measurement.py +678 -0
  191. agentinputlab/experiments/auxiliary_matrix.py +203 -0
  192. agentinputlab/experiments/bindings.py +430 -0
  193. agentinputlab/experiments/blueprints.py +147 -0
  194. agentinputlab/experiments/builders/__init__.py +45 -0
  195. agentinputlab/experiments/builders/executable_external_payload.py +423 -0
  196. agentinputlab/experiments/builders/external_process_arena.py +1018 -0
  197. agentinputlab/experiments/builders/registry_intervention.py +463 -0
  198. agentinputlab/experiments/cli.py +158 -0
  199. agentinputlab/experiments/controls.py +340 -0
  200. agentinputlab/experiments/driver_guard.py +205 -0
  201. agentinputlab/experiments/drivers/__init__.py +89 -0
  202. agentinputlab/experiments/drivers/external_arena.py +2908 -0
  203. agentinputlab/experiments/drivers/method_process.py +662 -0
  204. agentinputlab/experiments/drivers/parity_process.py +1484 -0
  205. agentinputlab/experiments/drivers/static_production.py +1574 -0
  206. agentinputlab/experiments/executor.py +448 -0
  207. agentinputlab/experiments/loader.py +605 -0
  208. agentinputlab/experiments/measurement.py +675 -0
  209. agentinputlab/experiments/paper_analysis.py +1818 -0
  210. agentinputlab/experiments/parity_identity.py +605 -0
  211. agentinputlab/experiments/plan.py +277 -0
  212. agentinputlab/experiments/production_builders.py +3739 -0
  213. agentinputlab/experiments/readiness.py +432 -0
  214. agentinputlab/experiments/schema.py +514 -0
  215. agentinputlab/experiments/secrets.py +177 -0
  216. agentinputlab/experiments/stateful_analysis.py +1738 -0
  217. agentinputlab/experiments/transfer_analysis.py +1316 -0
  218. agentinputlab/experiments/unseen_analysis.py +1025 -0
  219. agentinputlab/integrations/__init__.py +1 -0
  220. agentinputlab/integrations/action_space/__init__.py +1 -0
  221. agentinputlab/integrations/external_workers/__init__.py +76 -0
  222. agentinputlab/integrations/external_workers/ace.py +431 -0
  223. agentinputlab/integrations/external_workers/base.py +181 -0
  224. agentinputlab/integrations/external_workers/decomp_live.py +249 -0
  225. agentinputlab/integrations/external_workers/decomp_planner.py +30 -0
  226. agentinputlab/integrations/external_workers/infocqr_student.py +280 -0
  227. agentinputlab/integrations/external_workers/ircot.py +576 -0
  228. agentinputlab/integrations/external_workers/llmcompiler_live.py +360 -0
  229. agentinputlab/integrations/external_workers/longllmlingua.py +162 -0
  230. agentinputlab/integrations/external_workers/method.py +314 -0
  231. agentinputlab/integrations/external_workers/process.py +678 -0
  232. agentinputlab/integrations/external_workers/supervisor.py +1071 -0
  233. agentinputlab/integrations/full_architecture/__init__.py +1 -0
  234. agentinputlab/integrations/full_architecture/hyde.py +212 -0
  235. agentinputlab/integrations/full_architecture/plan_and_budget.py +188 -0
  236. agentinputlab/integrations/live_history.py +222 -0
  237. agentinputlab/integrations/prompt_optimization/__init__.py +1 -0
  238. agentinputlab/integrations/training/__init__.py +1 -0
  239. agentinputlab/metrics/__init__.py +50 -0
  240. agentinputlab/metrics/catalog.py +313 -0
  241. agentinputlab/metrics/harm.py +95 -0
  242. agentinputlab/metrics/paired.py +40 -0
  243. agentinputlab/metrics/qa.py +76 -0
  244. agentinputlab/metrics/text.py +33 -0
  245. agentinputlab/metrics/third_party.py +161 -0
  246. agentinputlab/models/__init__.py +4 -0
  247. agentinputlab/observability/__init__.py +56 -0
  248. agentinputlab/observability/budget.py +316 -0
  249. agentinputlab/observability/instrumentation.py +754 -0
  250. agentinputlab/observability/models.py +403 -0
  251. agentinputlab/observability/monitor.py +380 -0
  252. agentinputlab/optimizers/__init__.py +1 -0
  253. agentinputlab/optimizers/clarify/__init__.py +12 -0
  254. agentinputlab/optimizers/context/__init__.py +22 -0
  255. agentinputlab/optimizers/decompose/__init__.py +64 -0
  256. agentinputlab/optimizers/evidence/__init__.py +22 -0
  257. agentinputlab/optimizers/rewrite/__init__.py +30 -0
  258. agentinputlab/parity/__init__.py +5 -0
  259. agentinputlab/parity/base.py +206 -0
  260. agentinputlab/production_campaign.py +763 -0
  261. agentinputlab/py.typed +1 -0
  262. agentinputlab/recipes/__init__.py +333 -0
  263. agentinputlab/recipes/ace.py +418 -0
  264. agentinputlab/recipes/ace_bfcl.py +273 -0
  265. agentinputlab/recipes/ace_common_support.py +169 -0
  266. agentinputlab/recipes/ace_native_plan.py +322 -0
  267. agentinputlab/recipes/ace_online.py +711 -0
  268. agentinputlab/recipes/ace_retrieval.py +330 -0
  269. agentinputlab/recipes/ace_statebench.py +382 -0
  270. agentinputlab/recipes/ace_tau.py +463 -0
  271. agentinputlab/recipes/ace_toolsandbox.py +432 -0
  272. agentinputlab/recipes/acon_guideline.py +22 -0
  273. agentinputlab/recipes/adaptive_rag.py +822 -0
  274. agentinputlab/recipes/llmlingua2_inference.py +146 -0
  275. agentinputlab/recipes/llmlingua2_training.py +796 -0
  276. agentinputlab/recipes/mce.py +1486 -0
  277. agentinputlab/recipes/mce_final.py +335 -0
  278. agentinputlab/recipes/mce_text_fit.py +499 -0
  279. agentinputlab/recipes/mce_text_only.py +298 -0
  280. agentinputlab/recipes/qrag.py +729 -0
  281. agentinputlab/recipes/qrag_inference.py +364 -0
  282. agentinputlab/recipes/r2ag_features.py +236 -0
  283. agentinputlab/recipes/r2ag_inference.py +503 -0
  284. agentinputlab/recipes/r2ag_training.py +948 -0
  285. agentinputlab/recipes/recomp_abstractive.py +592 -0
  286. agentinputlab/recipes/recomp_extractive.py +525 -0
  287. agentinputlab/recipes/reformer.py +17 -0
  288. agentinputlab/recipes/rqrag.py +1516 -0
  289. agentinputlab/recipes/rqrag_common_support.py +193 -0
  290. agentinputlab/recipes/rqrag_completion.py +147 -0
  291. agentinputlab/recipes/skillopt.py +462 -0
  292. agentinputlab/recipes/skillopt_common_support.py +154 -0
  293. agentinputlab/recipes/skillopt_environment.py +165 -0
  294. agentinputlab/recipes/skillopt_environment_cli.py +5 -0
  295. agentinputlab/recipes/skillopt_retrieval.py +188 -0
  296. agentinputlab/recipes/smartsearch.py +897 -0
  297. agentinputlab/recipes/smartsearch_curriculum.py +283 -0
  298. agentinputlab/recipes/smartsearch_grpo_contracts.py +58 -0
  299. agentinputlab/recipes/smartsearch_grpo_data.py +314 -0
  300. agentinputlab/recipes/smartsearch_grpo_meter.py +324 -0
  301. agentinputlab/recipes/smartsearch_grpo_prefix.py +144 -0
  302. agentinputlab/recipes/smartsearch_grpo_rollout.py +119 -0
  303. agentinputlab/recipes/smartsearch_grpo_tools.py +364 -0
  304. agentinputlab/recipes/smartsearch_grpo_training.py +305 -0
  305. agentinputlab/recipes/smartsearch_grpo_transport.py +248 -0
  306. agentinputlab/recipes/smartsearch_grpo_worker.py +364 -0
  307. agentinputlab/recipes/smartsearch_inference.py +524 -0
  308. agentinputlab/recipes/smartsearch_native_data.py +172 -0
  309. agentinputlab/recipes/smartsearch_policy.py +616 -0
  310. agentinputlab/recipes/smartsearch_policy_worker.py +9 -0
  311. agentinputlab/recipes/smartsearch_sampling.py +232 -0
  312. agentinputlab/recipes/smartsearch_teacher.py +203 -0
  313. agentinputlab/recipes/smartsearch_training.py +265 -0
  314. agentinputlab/registry/__init__.py +46 -0
  315. agentinputlab/registry/beta.py +727 -0
  316. agentinputlab/registry/data/algorithms.json +1959 -0
  317. agentinputlab/registry/data/auxiliary_method_profiles.json +34 -0
  318. agentinputlab/registry/loader.py +100 -0
  319. agentinputlab/registry/result_manifest.py +184 -0
  320. agentinputlab/registry/runtime.py +195 -0
  321. agentinputlab/registry/schema.py +449 -0
  322. agentinputlab/runner/__init__.py +30 -0
  323. agentinputlab/runner/balance.py +248 -0
  324. agentinputlab/runner/cache.py +135 -0
  325. agentinputlab/runner/composite.py +130 -0
  326. agentinputlab/runner/engine.py +285 -0
  327. agentinputlab/runner/runtime_guard.py +268 -0
  328. agentinputlab/runner/worker.py +80 -0
  329. agentinputlab/runtime_bootstrap.py +288 -0
  330. agentinputlab/selectors/__init__.py +196 -0
  331. agentinputlab/selectors/advanced.py +1514 -0
  332. agentinputlab/selectors/artifacts.py +1087 -0
  333. agentinputlab/selectors/base.py +112 -0
  334. agentinputlab/selectors/campaigns.py +1893 -0
  335. agentinputlab/selectors/catalog.py +86 -0
  336. agentinputlab/selectors/discovery.py +1860 -0
  337. agentinputlab/selectors/evaluation.py +1348 -0
  338. agentinputlab/selectors/features.py +383 -0
  339. agentinputlab/selectors/learned.py +502 -0
  340. agentinputlab/selectors/no_op.py +28 -0
  341. agentinputlab/selectors/outcome_table.py +475 -0
  342. agentinputlab/selectors/producer.py +853 -0
  343. agentinputlab/selectors/rules.py +109 -0
  344. agentinputlab/selectors/runtime.py +420 -0
  345. agentinputlab/studies/__init__.py +16 -0
  346. agentinputlab/studies/design.py +165 -0
  347. agentinputlab/studies/paired.py +322 -0
  348. agentinputlab/studio/__init__.py +6 -0
  349. agentinputlab/studio/campaigns.py +819 -0
  350. agentinputlab/studio/engine.py +1408 -0
  351. agentinputlab/studio/model_backends.py +425 -0
  352. agentinputlab/studio/prepared.py +410 -0
  353. agentinputlab/studio/server.py +613 -0
  354. agentinputlab/studio/static/app.js +397 -0
  355. agentinputlab/studio/static/campaigns.html +175 -0
  356. agentinputlab/studio/static/campaigns.js +426 -0
  357. agentinputlab/studio/static/index.html +192 -0
  358. agentinputlab/studio/static/result.html +103 -0
  359. agentinputlab/studio/static/result.js +273 -0
  360. agentinputlab/studio/static/styles.css +467 -0
  361. agentinputlab-0.1.0a1.data/data/share/agentinputlab/CITATION.cff +22 -0
  362. agentinputlab-0.1.0a1.dist-info/METADATA +392 -0
  363. agentinputlab-0.1.0a1.dist-info/RECORD +469 -0
  364. agentinputlab-0.1.0a1.dist-info/WHEEL +5 -0
  365. agentinputlab-0.1.0a1.dist-info/entry_points.txt +6 -0
  366. agentinputlab-0.1.0a1.dist-info/licenses/LICENSE +21 -0
  367. agentinputlab-0.1.0a1.dist-info/licenses/NOTICE +31 -0
  368. agentinputlab-0.1.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +94 -0
  369. agentinputlab-0.1.0a1.dist-info/top_level.txt +2 -0
  370. workers/README.md +94 -0
  371. workers/ace/README.md +261 -0
  372. workers/ace/__init__.py +1 -0
  373. workers/ace/compatibility_manifest.json +39 -0
  374. workers/ace/driver.py +1682 -0
  375. workers/acon/README.md +215 -0
  376. workers/acon/__init__.py +5 -0
  377. workers/acon/compatibility_manifest.json +93 -0
  378. workers/acon/driver.py +1859 -0
  379. workers/acon/fitted.py +395 -0
  380. workers/acon/guideline.py +470 -0
  381. workers/acon/guideline_source_manifest.json +20 -0
  382. workers/adaptive_rag/README.md +96 -0
  383. workers/adaptive_rag/__init__.py +15 -0
  384. workers/adaptive_rag/compatibility_manifest.json +61 -0
  385. workers/adaptive_rag/driver.py +1470 -0
  386. workers/adaptive_rag/fixture_runtime.py +163 -0
  387. workers/adaptive_rag/runtime.py +252 -0
  388. workers/ask_or_assume/README.md +124 -0
  389. workers/ask_or_assume/__init__.py +1 -0
  390. workers/ask_or_assume/compatibility_manifest.json +36 -0
  391. workers/ask_or_assume/driver.py +1227 -0
  392. workers/decomp/README.md +133 -0
  393. workers/decomp/UPSTREAM_LICENSE.Apache-2.0.txt +201 -0
  394. workers/decomp/__init__.py +5 -0
  395. workers/decomp/compatibility_manifest.json +205 -0
  396. workers/decomp/driver.py +1015 -0
  397. workers/decomp/live.py +137 -0
  398. workers/decomp/runtime.py +231 -0
  399. workers/infocqr/README.md +106 -0
  400. workers/infocqr/__init__.py +1 -0
  401. workers/infocqr/compatibility_manifest.json +84 -0
  402. workers/infocqr/driver.py +1766 -0
  403. workers/ircot/README.md +167 -0
  404. workers/ircot/__init__.py +7 -0
  405. workers/ircot/compatibility_manifest.json +121 -0
  406. workers/ircot/controlled.py +457 -0
  407. workers/ircot/driver.py +1373 -0
  408. workers/ircot/fixture_bindings.json +39 -0
  409. workers/ircot/fixture_config.json +48 -0
  410. workers/ircot/fixture_prompt.txt +2 -0
  411. workers/ircot/native_qa.py +398 -0
  412. workers/ircot/qa_compatibility_manifest.json +57 -0
  413. workers/ircot/runtime.py +97 -0
  414. workers/llmcompiler/README.md +160 -0
  415. workers/llmcompiler/__init__.py +1 -0
  416. workers/llmcompiler/compatibility_manifest.json +45 -0
  417. workers/llmcompiler/driver.py +1514 -0
  418. workers/llmcompiler/export_prompts.py +74 -0
  419. workers/llmcompiler/live.py +174 -0
  420. workers/llmcompiler/patch_manifest.json +147 -0
  421. workers/mce/README.md +198 -0
  422. workers/mce/__init__.py +29 -0
  423. workers/mce/compatibility_manifest.json +115 -0
  424. workers/mce/driver.py +2585 -0
  425. workers/mce/final_eval.py +173 -0
  426. workers/official_arenas/README.md +25 -0
  427. workers/official_arenas/__init__.py +1 -0
  428. workers/official_arenas/capture_records.py +110 -0
  429. workers/official_arenas/driver.py +619 -0
  430. workers/official_arenas/protocol.py +334 -0
  431. workers/official_arenas/providers/__init__.py +1 -0
  432. workers/official_arenas/providers/_live_history.py +228 -0
  433. workers/official_arenas/providers/_message_compat.py +77 -0
  434. workers/official_arenas/providers/appworld_ul.py +196 -0
  435. workers/official_arenas/providers/fixture.py +112 -0
  436. workers/official_arenas/providers/statebench.py +960 -0
  437. workers/official_arenas/providers/tau3.py +1672 -0
  438. workers/official_arenas/providers/tau_retail.py +586 -0
  439. workers/official_arenas/providers/toolsandbox.py +1321 -0
  440. workers/official_arenas/providers/tooltalk.py +699 -0
  441. workers/official_arenas/retail_capture.py +188 -0
  442. workers/official_arenas/retail_driver.py +275 -0
  443. workers/qrag/README.md +172 -0
  444. workers/qrag/__init__.py +1 -0
  445. workers/qrag/compatibility_manifest.json +64 -0
  446. workers/qrag/driver.py +673 -0
  447. workers/r2ag/README.md +154 -0
  448. workers/r2ag/__init__.py +5 -0
  449. workers/r2ag/compatibility_manifest.json +55 -0
  450. workers/r2ag/driver.py +1287 -0
  451. workers/r2ag/feature_schema.json +8 -0
  452. workers/r2ag/runtime.py +589 -0
  453. workers/recomp/README.md +120 -0
  454. workers/recomp/__init__.py +1 -0
  455. workers/recomp/compatibility_manifest.json +43 -0
  456. workers/recomp/driver.py +1653 -0
  457. workers/reformer/README.md +125 -0
  458. workers/reformer/__init__.py +1 -0
  459. workers/reformer/compatibility_manifest.json +68 -0
  460. workers/reformer/driver.py +1459 -0
  461. workers/reformer/induction.py +457 -0
  462. workers/rrr/README.md +126 -0
  463. workers/rrr/__init__.py +1 -0
  464. workers/rrr/compatibility_manifest.json +57 -0
  465. workers/rrr/driver.py +1133 -0
  466. workers/smartsearch/README.md +331 -0
  467. workers/smartsearch/__init__.py +1 -0
  468. workers/smartsearch/compatibility_manifest.json +41 -0
  469. workers/smartsearch/driver.py +1643 -0
workers/decomp/live.py ADDED
@@ -0,0 +1,137 @@
1
+ """Isolated pinned-native DecomP driver with an explicit host callback seam."""
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ import hashlib
6
+ import importlib
7
+ import importlib.metadata
8
+ import json
9
+ import os
10
+ import sys
11
+ import traceback
12
+ import urllib.parse
13
+ import urllib.request
14
+ from pathlib import Path
15
+ from uuid import uuid4
16
+
17
+ from agentinputlab.contracts.serialization import content_hash
18
+
19
+ from . import driver
20
+
21
+
22
+ def failure_response(exc, checkout):
23
+ """Expose source locations/types, never raw exception text or provider bodies."""
24
+ result = {"status":"error","failure_code":exc.code,"message":exc.public_message}
25
+ cause = exc.__cause__
26
+ if cause is not None:
27
+ result["upstream_error_type"] = type(cause).__name__
28
+ frames = []
29
+ for frame in traceback.extract_tb(cause.__traceback__)[-16:]:
30
+ try:
31
+ relative = Path(frame.filename).resolve().relative_to(Path(checkout).resolve())
32
+ except ValueError:
33
+ continue
34
+ if relative.as_posix().startswith("src/decomp/"):
35
+ frames.append({"file":relative.as_posix(),"line":frame.lineno,"function":frame.name})
36
+ result["upstream_source_frames"] = frames
37
+ return result
38
+
39
+
40
+ class Callback:
41
+ def __init__(self, url, key_env, request_id, checkout, policy):
42
+ parsed = urllib.parse.urlparse(url)
43
+ if (parsed.scheme != "http" or parsed.hostname != "127.0.0.1" or parsed.port is None
44
+ or parsed.path != "/callback" or parsed.username or parsed.password or parsed.query or parsed.fragment):
45
+ raise driver.DriverError("CONFIGURATION_INVALID", "callback must use numeric loopback")
46
+ if not key_env.isidentifier() or not os.environ.get(key_env):
47
+ raise driver.DriverError("CONFIGURATION_INVALID", "callback credential unavailable")
48
+ self.url, self.key = url, os.environ[key_env]
49
+ self.request_id, self.checkout, self.policy, self.attested = request_id, checkout, policy, False
50
+
51
+ def attest(self):
52
+ for name, module in tuple(sys.modules.items()):
53
+ if name.startswith("decomp."):
54
+ location = getattr(module, "__file__", None)
55
+ if location and not Path(location).resolve().is_relative_to(self.checkout.root / "src"):
56
+ raise driver.DriverError("IMPORT_STATE_UNSAFE", "native module escaped checkout")
57
+ versions = {}
58
+ for name, expected in self.policy["live_required_versions"].items():
59
+ distribution = importlib.metadata.distribution(name)
60
+ if distribution.version != expected:
61
+ raise driver.DriverError("DEPENDENCY_MISMATCH", "native worker dependency version differs")
62
+ import_name = {"jsonnet": "_jsonnet", "python-dateutil": "dateutil"}.get(name, name.replace("-", "_"))
63
+ dependency = importlib.import_module(import_name)
64
+ origin = getattr(dependency, "__file__", None)
65
+ if not origin or not any(Path(distribution.locate_file(file)).resolve() == Path(origin).resolve()
66
+ for file in (distribution.files or ())):
67
+ raise driver.DriverError("DEPENDENCY_ORIGIN_MISMATCH", "native dependency import escaped distribution")
68
+ versions[name] = distribution.version
69
+ def sha(path):
70
+ return hashlib.sha256(path.read_bytes()).hexdigest()
71
+ value = {"schema": "agentinputlab.decomp.live-attestation.v1", "driver_sha256": sha(Path(driver.__file__)),
72
+ "live_sha256": sha(Path(__file__)), "compatibility_manifest_sha256": self.checkout.manifest_sha256,
73
+ "required_versions": versions,
74
+ "english_stopwords_sha256": sha(Path(os.environ["NLTK_DATA"])/"corpora/stopwords/english"),
75
+ "source_files_verified": True, "import_origins_verified": True}
76
+ self.call("attest", value)
77
+ self.attested = True
78
+
79
+ def call(self, kind, payload):
80
+ raw = {"request_id": self.request_id, "call_id": uuid4().hex, "kind": kind, "payload": payload}
81
+ request = urllib.request.Request(self.url, data=json.dumps(raw, allow_nan=False).encode(),
82
+ headers={"Authorization": "Bearer " + self.key, "Content-Type": "application/json"})
83
+ result, failed = None, False
84
+ try:
85
+ with urllib.request.build_opener(urllib.request.ProxyHandler({})).open(request, timeout=240) as response:
86
+ body = response.read(4 * 1024 * 1024 + 1)
87
+ if len(body) > 4 * 1024 * 1024:
88
+ raise ValueError("callback response byte limit")
89
+ result = json.loads(body)
90
+ if result.get("ok") is not True:
91
+ raise ValueError("host callback rejected")
92
+ except Exception:
93
+ failed = True
94
+ if failed:
95
+ raise driver.DriverError("HOST_CALLBACK_FAILED", "bound native completion failed; no retry")
96
+ return result["payload"]
97
+
98
+ def complete(self, **parameters):
99
+ if not self.attested:
100
+ self.attest()
101
+ return self.call("model", parameters)
102
+
103
+
104
+ def main(argv=None):
105
+ parser = argparse.ArgumentParser(description=__doc__)
106
+ for key in ("checkout", "callback-url", "callback-key-env"):
107
+ parser.add_argument("--" + key, required=True)
108
+ parser.add_argument("--planner-component", action="store_true")
109
+ args = parser.parse_args(argv)
110
+ try:
111
+ raw = sys.stdin.buffer.readline(driver.MAX_REQUEST_BYTES + 1)
112
+ if len(raw) > driver.MAX_REQUEST_BYTES or not raw or sys.stdin.buffer.read(1):
113
+ raise driver.DriverError("INVALID_REQUEST", "one bounded JSON line required")
114
+ envelope = json.loads(raw)
115
+ if set(envelope) != {"request_id", "request"} or content_hash(envelope["request"]) != envelope["request_id"]:
116
+ raise driver.DriverError("INVALID_REQUEST", "native request identity differs")
117
+ request = dict(envelope["request"])
118
+ request.pop("execution_budget")
119
+ request.pop("seed")
120
+ native = driver.DecompDriver(environment={driver.UPSTREAM_ENV: args.checkout})
121
+ checkout = native._checkout()
122
+ callback = Callback(args.callback_url, args.callback_key_env, envelope["request_id"], checkout, checkout.manifest)
123
+ native.native_completion = callback.complete
124
+ result = native.run_planner(request) if args.planner_component else native.run(request)
125
+ if not callback.attested:
126
+ raise driver.DriverError("NATIVE_MODEL_NOT_CALLED", "no native model call was made")
127
+ response = {"status": "ok", "payload": result}
128
+ except driver.DriverError as exc:
129
+ response = failure_response(exc, args.checkout)
130
+ except Exception as exc:
131
+ response = {"status": "error", "failure_code": "WORKER_INTERNAL_FAILURE", "error_type": type(exc).__name__}
132
+ sys.stdout.write(json.dumps(response, sort_keys=True, allow_nan=False) + "\n")
133
+ return 0
134
+
135
+
136
+ if __name__ == "__main__":
137
+ raise SystemExit(main())
@@ -0,0 +1,231 @@
1
+ """Core bridge adapter for the pinned DecomP worker driver."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import hashlib
6
+ import threading
7
+ from collections.abc import Mapping, Sequence
8
+ from pathlib import Path
9
+ from typing import Any
10
+
11
+ from agentinputlab.algorithms.decompose.decomp.worker_bridge import (
12
+ DecompFrontierEvent,
13
+ DecompGraphNode,
14
+ DecompParticipantCall,
15
+ DecompWorkerRequest,
16
+ DecompWorkerResponse,
17
+ validate_decomp_full_response,
18
+ )
19
+ from agentinputlab.contracts import AlgorithmOutputError, ExternalDependencyError
20
+ from agentinputlab.contracts.serialization import to_jsonable
21
+
22
+ from .driver import DEFAULT_MANIFEST, UPSTREAM_COMMIT, DecompDriver, DriverError
23
+
24
+ _UPSTREAM_PROCESS_STATE_LOCK = threading.RLock()
25
+
26
+
27
+ class PinnedDecompRuntime:
28
+ """Adapt :class:`DecompDriver` to ``DecompWorkerRuntime`` without a fallback."""
29
+
30
+ def __init__(
31
+ self,
32
+ *,
33
+ manifest_path: Path = DEFAULT_MANIFEST,
34
+ environment: Mapping[str, str] | None = None,
35
+ ) -> None:
36
+ self.driver = DecompDriver(
37
+ manifest_path=manifest_path,
38
+ environment=environment,
39
+ )
40
+
41
+ def fingerprint(self) -> Mapping[str, Any]:
42
+ try:
43
+ with _UPSTREAM_PROCESS_STATE_LOCK:
44
+ upstream = self.driver.smoke_upstream_core()
45
+ driver_sha = _sha256_file(Path(__file__).with_name("driver.py"))
46
+ adapter_sha = _sha256_file(Path(__file__))
47
+ except DriverError as exc:
48
+ raise ExternalDependencyError(
49
+ f"pinned DecomP runtime identity failed with {exc.code}"
50
+ ) from exc
51
+ return {
52
+ "worker_id": "agentinputlab.decomp.pinned.in_process.v1",
53
+ "execution_mode": "in_process_external_environment",
54
+ "concurrency_mode": "process_global_serial_rlock",
55
+ "upstream_revision": UPSTREAM_COMMIT,
56
+ "upstream_symbol": upstream["symbol"],
57
+ "compatibility_manifest_sha256": upstream["manifest_sha256"],
58
+ "driver_sha256": driver_sha,
59
+ "runtime_adapter_sha256": adapter_sha,
60
+ }
61
+
62
+ def run(self, request: DecompWorkerRequest) -> DecompWorkerResponse:
63
+ if not isinstance(request, DecompWorkerRequest):
64
+ raise TypeError("PinnedDecompRuntime requires DecompWorkerRequest")
65
+ request_mapping = {
66
+ "case_id": request.case_id,
67
+ "question": request.question,
68
+ "paras": list(request.paras),
69
+ "paragraph_ids": list(request.paragraph_ids),
70
+ "context_hash": request.context_hash,
71
+ "config_artifact_id": request.config_artifact_id,
72
+ "backend_binding": to_jsonable(request.backend_binding),
73
+ "max_steps": request.max_steps,
74
+ "upstream_revision": request.upstream_revision,
75
+ "schema_version": request.schema_version,
76
+ }
77
+ try:
78
+ # Upstream mutates process-global CWD/sys.path while importing its
79
+ # pinned package, so all in-process identities share one serial lock.
80
+ with _UPSTREAM_PROCESS_STATE_LOCK:
81
+ raw = self.driver.run(request_mapping)
82
+ except DriverError as exc:
83
+ error_type = (
84
+ AlgorithmOutputError
85
+ if exc.code
86
+ in {
87
+ "UPSTREAM_OUTPUT_INVALID",
88
+ "USAGE_ACCOUNTING_UNAVAILABLE",
89
+ }
90
+ else ExternalDependencyError
91
+ )
92
+ raise error_type(f"pinned DecomP driver failed with {exc.code}") from exc
93
+ response = _parse_response(raw)
94
+ validate_decomp_full_response(response)
95
+ return response
96
+
97
+
98
+ def _parse_response(value: Mapping[str, Any]) -> DecompWorkerResponse:
99
+ if not isinstance(value, Mapping):
100
+ raise AlgorithmOutputError("DecomP driver response must be a mapping")
101
+ try:
102
+ nodes = tuple(
103
+ DecompGraphNode(
104
+ node_id=_text(item, "node_id", "node"),
105
+ question=_text(item, "question", "node", allow_empty=True),
106
+ answer=_text(item, "answer", "node", allow_empty=True),
107
+ handler=_text(item, "handler", "node", allow_empty=True),
108
+ depth=_nonnegative_integer(item.get("depth"), "node.depth"),
109
+ )
110
+ for item in _mapping_sequence(value.get("nodes"), "nodes")
111
+ )
112
+ edges = tuple(_edge(item) for item in _sequence(value.get("dependency_edges"), "edges"))
113
+ participant_calls = tuple(
114
+ DecompParticipantCall(
115
+ index=_nonnegative_integer(item.get("index"), "participant_call.index"),
116
+ participant=_text(item, "participant", "participant_call"),
117
+ input_state_id=_text(item, "input_state_id", "participant_call"),
118
+ output_state_id=_text(item, "output_state_id", "participant_call"),
119
+ command=_text(item, "command", "participant_call", allow_empty=True),
120
+ )
121
+ for item in _mapping_sequence(value.get("participant_calls"), "participant_calls")
122
+ )
123
+ frontier = tuple(
124
+ DecompFrontierEvent(
125
+ index=_nonnegative_integer(item.get("index"), "frontier.index"),
126
+ state_id=_text(item, "state_id", "frontier"),
127
+ score=_finite_number(item.get("score"), "frontier.score"),
128
+ next_command=_text(
129
+ item,
130
+ "next_command",
131
+ "frontier",
132
+ allow_empty=True,
133
+ ),
134
+ action=_text(item, "action", "frontier"),
135
+ )
136
+ for item in _mapping_sequence(value.get("frontier"), "frontier")
137
+ )
138
+ usage = value.get("usage")
139
+ artifacts = value.get("native_artifacts", {})
140
+ if not isinstance(usage, Mapping) or not isinstance(artifacts, Mapping):
141
+ raise AlgorithmOutputError("DecomP response usage/artifacts must be mappings")
142
+ response = DecompWorkerResponse(
143
+ case_id=_text(value, "case_id", "response"),
144
+ profile_id=_text(value, "profile_id", "response"),
145
+ upstream_revision=_text(value, "upstream_revision", "response"),
146
+ paragraph_ids=tuple(
147
+ _text_value(item, "response.paragraph_ids")
148
+ for item in _sequence(value.get("paragraph_ids"), "paragraph_ids")
149
+ ),
150
+ context_hash=_text(value, "context_hash", "response"),
151
+ nodes=nodes,
152
+ dependency_edges=edges,
153
+ participant_calls=participant_calls,
154
+ frontier=frontier,
155
+ reasoning_chain=_text(value, "reasoning_chain", "response"),
156
+ final_answer=_text(value, "final_answer", "response", allow_empty=True),
157
+ termination=_text(value, "termination", "response"),
158
+ component_only=value.get("component_only", False),
159
+ usage=dict(usage),
160
+ schema_version=_text(value, "schema_version", "response"),
161
+ native_artifacts={str(key): str(item) for key, item in artifacts.items()},
162
+ )
163
+ except (KeyError, TypeError, ValueError) as exc:
164
+ if isinstance(exc, AlgorithmOutputError):
165
+ raise
166
+ raise AlgorithmOutputError("DecomP driver response is malformed") from exc
167
+ return response
168
+
169
+
170
+ def _mapping_sequence(value: Any, label: str) -> tuple[Mapping[str, Any], ...]:
171
+ result = _sequence(value, label)
172
+ if not all(isinstance(item, Mapping) for item in result):
173
+ raise AlgorithmOutputError(f"DecomP {label} must contain mappings")
174
+ return result # type: ignore[return-value]
175
+
176
+
177
+ def _sequence(value: Any, label: str) -> tuple[Any, ...]:
178
+ if isinstance(value, (str, bytes)) or not isinstance(value, Sequence):
179
+ raise AlgorithmOutputError(f"DecomP {label} must be a sequence")
180
+ return tuple(value)
181
+
182
+
183
+ def _edge(value: Any) -> tuple[str, str]:
184
+ edge = _sequence(value, "edge")
185
+ if len(edge) != 2 or not all(isinstance(item, str) and item for item in edge):
186
+ raise AlgorithmOutputError("DecomP edge must contain two state IDs")
187
+ return edge[0], edge[1]
188
+
189
+
190
+ def _text(
191
+ value: Mapping[str, Any],
192
+ key: str,
193
+ label: str,
194
+ *,
195
+ allow_empty: bool = False,
196
+ ) -> str:
197
+ item = value.get(key)
198
+ if not isinstance(item, str) or (not allow_empty and not item.strip()):
199
+ raise AlgorithmOutputError(f"DecomP {label}.{key} must be text")
200
+ return item
201
+
202
+
203
+ def _text_value(value: Any, label: str) -> str:
204
+ if not isinstance(value, str) or not value.strip():
205
+ raise AlgorithmOutputError(f"DecomP {label} must contain text")
206
+ return value
207
+
208
+
209
+ def _nonnegative_integer(value: Any, label: str) -> int:
210
+ if isinstance(value, bool) or not isinstance(value, int) or value < 0:
211
+ raise AlgorithmOutputError(f"DecomP {label} must be a non-negative integer")
212
+ return value
213
+
214
+
215
+ def _finite_number(value: Any, label: str) -> float:
216
+ if isinstance(value, bool) or not isinstance(value, (int, float)):
217
+ raise AlgorithmOutputError(f"DecomP {label} must be numeric")
218
+ result = float(value)
219
+ if result != result or result in {float("inf"), float("-inf")}:
220
+ raise AlgorithmOutputError(f"DecomP {label} must be finite")
221
+ return result
222
+
223
+
224
+ def _sha256_file(path: Path) -> str:
225
+ try:
226
+ return hashlib.sha256(path.read_bytes()).hexdigest()
227
+ except OSError as exc:
228
+ raise DriverError("RUNTIME_SOURCE_MISSING", "runtime source file is unavailable") from exc
229
+
230
+
231
+ __all__ = ["PinnedDecompRuntime"]
@@ -0,0 +1,106 @@
1
+ # InfoCQR pinned teacher/cache worker
2
+
3
+ This worker integrates the inference-time material in
4
+ [`smartyfh/InfoCQR@2953c461`](https://github.com/smartyfh/InfoCQR/tree/2953c461aa0c6817b1b7656dbd5168050227b31d)
5
+ without copying upstream source into AgentInputLab.
6
+
7
+ It supports two bounded paths:
8
+
9
+ 1. checksum-locked replay of the author's QReCC JSONL caches (`rw_zsl`,
10
+ `rw_fsl`, and the T5-candidate teacher editor cache);
11
+ 2. live teacher inference by dynamically loading and directly calling the
12
+ pinned official `generate_rewrite()` function for zero-shot, four-shot,
13
+ self-edit, or editor-only prompts.
14
+
15
+ `self_edit` follows the repository trajectory: official four-shot generation,
16
+ pinned post-processing, then official self-editor generation. `t5_edit` only
17
+ accepts an explicitly supplied initial candidate whose artifact SHA is bound in
18
+ the request; the worker does not claim that candidate came from released
19
+ InfoCQR weights.
20
+
21
+ ## License and source gates
22
+
23
+ The audited checkout has no `LICENSE`, `COPYING`, or `NOTICE` file. Its source
24
+ and included generation caches therefore remain `NOASSERTION` and are never
25
+ vendored. Execution requires both:
26
+
27
+ - worker startup with `--acknowledge-noassertion-license`;
28
+ - `source_license_acknowledged=true` in every hashed request.
29
+
30
+ The worker verifies the exact commit when Git metadata is present, every
31
+ relevant source-file hash in all cases, the README evidence hash, and the
32
+ continued absence of a license file. A GitHub source tarball is identified by
33
+ the complete audited source-hash set.
34
+
35
+ ## Bound experimental identity
36
+
37
+ Every request binds the QReCC revision/split, conversation source/number/turn,
38
+ ordered `NewContext`, current query, prompt source SHA, teacher deployment
39
+ fingerprint, retriever/corpus fingerprint, corpus ID, cache byte SHA when
40
+ replaying, seed, and model-call/token/cost ceilings. Endpoint and credentials
41
+ are startup-only and cannot be injected through JSONL.
42
+
43
+ The upstream first-turn scripts copy `Truth_rewrite` when `NewContext` is empty.
44
+ Cached first turns therefore fail closed unless the caller deliberately enables
45
+ `allow_first_turn_truth_rewrite`; live teacher mode calls the official prompt
46
+ function instead and never receives `Truth_rewrite`.
47
+
48
+ ## Verify and run
49
+
50
+ Verify source plus a manifest-known author cache without importing provider
51
+ SDKs or making a model call:
52
+
53
+ ```bash
54
+ python workers/infocqr/driver.py \
55
+ --checkout /opt/upstreams/InfoCQR \
56
+ --known-cache test_rw_fsl \
57
+ --verify-only
58
+ ```
59
+
60
+ Run live generation against either a hosted OpenAI-compatible API or local
61
+ vLLM endpoint:
62
+
63
+ ```bash
64
+ python workers/infocqr/driver.py \
65
+ --checkout /opt/upstreams/InfoCQR \
66
+ --acknowledge-noassertion-license \
67
+ --backend-config-json "$INFOCQR_BACKEND_CONFIG"
68
+ ```
69
+
70
+ Example configuration:
71
+
72
+ ```json
73
+ {
74
+ "base_url": "http://127.0.0.1:8000/v1",
75
+ "api_key_env": "INFOCQR_API_KEY",
76
+ "model": "Qwen/Qwen2.5-7B-Instruct",
77
+ "fingerprint": {
78
+ "provider": "vllm",
79
+ "model": "Qwen/Qwen2.5-7B-Instruct",
80
+ "revision": "deployment-or-weight-revision"
81
+ },
82
+ "timeout_seconds": 60,
83
+ "max_output_tokens": 2560,
84
+ "temperature": 0,
85
+ "input_cost_per_million": 0,
86
+ "output_cost_per_million": 0
87
+ }
88
+ ```
89
+
90
+ A custom cache requires all of `--cache-path`, `--cache-artifact-id`,
91
+ `--cache-sha256`, `--cache-profile`, and `--cache-split`.
92
+
93
+ ## Deliberate limits
94
+
95
+ - The repository publishes T5 training/test scripts but no student checkpoint.
96
+ This legacy teacher/cache worker keeps its `T5_CHECKPOINT_UNAVAILABLE` gate.
97
+ The separate [trained student adapter](../../docs/infocqr-student.md) now
98
+ accepts a caller-mounted, checksum-pinned trained checkpoint and provenance
99
+ receipt. It executes native source serialization/collation and local T5
100
+ inference; no generic t5-base, teacher or author cache is substituted.
101
+ - The legacy OpenAI SDK call is replaced only at the provider transport seam.
102
+ Prompt construction still executes the exact pinned official function.
103
+ - `post_processing.py` exposes only a file-oriented `main`; its exact pinned
104
+ branch order is transparently reproduced and hash-labeled in the response.
105
+ - Cache/live plumbing and source prompt parity are tested. Paper-result parity
106
+ is not claimed.
@@ -0,0 +1 @@
1
+ """Pinned external worker for the InfoCQR teacher and author caches."""
@@ -0,0 +1,84 @@
1
+ {
2
+ "schema_version": "agentinputlab.infocqr.compatibility.v1",
3
+ "upstream": {
4
+ "repository": "https://github.com/smartyfh/InfoCQR.git",
5
+ "commit": "2953c461aa0c6817b1b7656dbd5168050227b31d",
6
+ "license_spdx": "NOASSERTION",
7
+ "license_file_present": false,
8
+ "license_evidence_path": "README.md",
9
+ "license_evidence_sha256": "56a86f36169028602eda0fdf2a0ebd893eb3aaf10cfe790d90eabddb0f73d757",
10
+ "require_clean_checkout": true
11
+ },
12
+ "source_files": {
13
+ "README.md": "56a86f36169028602eda0fdf2a0ebd893eb3aaf10cfe790d90eabddb0f73d757",
14
+ "requirements.txt": "1e2b9e614b3ac85cbebabc1c94bc1fd92d04fc5817af2af0cf26fadf4ba864dc",
15
+ "rewrite_chatgpt_zsl.py": "93d6ba61da042f15ed6d506b3d69bac1a16d3e33453b84ec8f6b7317d018defc",
16
+ "rewrite_chatgpt_inctx.py": "9c447f5292a6c936160ab847d3eb18db4704ea62f3d46a896ef5613aac2ce6a6",
17
+ "rewrite_chatgpt_editor.py": "5c71071d213ac562651d5577e623f73d0b98ffc3279f2dc1727127e8475d1bba",
18
+ "rewrite_chatgpt_self_editor.py": "2fba6bb3b24a7b332c7896b89c7ae6480c2d21272f42bad893ee5151c7739373",
19
+ "post_processing.py": "7201ceaeb16beaaf3af874faf083ce4f64dd630636a2e302edf398cc4da8d3dd",
20
+ "fuse_rewrite.py": "81f521240d53b8e34de3a806d7f09223b9c8ea39bf9394bbafae9dff957c01f9",
21
+ "dataset_cleaning.py": "9d4bdd7f8c20b05a1baafce35f725fcffd319a40442a16d2526cd4fd05be968b",
22
+ "T5QR/T5test.py": "c9c1b78d8147035ea3c300e7b29c791fb171ce399f8c1269a6e1a11b9bc05eb8",
23
+ "T5QR/T5train.py": "d40bc17e365d9f626fd5bf1fd14fffd3073c0b6772434a78eac6412d6fd2f4de"
24
+ },
25
+ "prompt_profiles": {
26
+ "rw_zsl": {
27
+ "source_path": "rewrite_chatgpt_zsl.py",
28
+ "source_sha256": "93d6ba61da042f15ed6d506b3d69bac1a16d3e33453b84ec8f6b7317d018defc",
29
+ "official_function": "generate_rewrite"
30
+ },
31
+ "rw_fsl": {
32
+ "source_path": "rewrite_chatgpt_inctx.py",
33
+ "source_sha256": "9c447f5292a6c936160ab847d3eb18db4704ea62f3d46a896ef5613aac2ce6a6",
34
+ "official_function": "generate_rewrite"
35
+ },
36
+ "t5_edit": {
37
+ "source_path": "rewrite_chatgpt_editor.py",
38
+ "source_sha256": "5c71071d213ac562651d5577e623f73d0b98ffc3279f2dc1727127e8475d1bba",
39
+ "official_function": "generate_rewrite"
40
+ },
41
+ "self_edit": {
42
+ "source_path": "rewrite_chatgpt_self_editor.py",
43
+ "source_sha256": "2fba6bb3b24a7b332c7896b89c7ae6480c2d21272f42bad893ee5151c7739373",
44
+ "official_function": "generate_rewrite"
45
+ }
46
+ },
47
+ "known_author_caches": {
48
+ "test_rw_zsl": {
49
+ "path": "datasets/qrecc/test_chatgpt_ZSL.jsonl",
50
+ "sha256": "c5304470e0f0399d8f432d9f4701015ca3aad40e56bcb06fcdb8a350efdf7134",
51
+ "profile": "rw_zsl",
52
+ "split": "test"
53
+ },
54
+ "test_rw_fsl": {
55
+ "path": "datasets/qrecc/test_chatgpt_ICL.jsonl",
56
+ "sha256": "9007463f7d6af418ee933d476abb4c449f39f0aa06d2c46662178b0050c777ce",
57
+ "profile": "rw_fsl",
58
+ "split": "test"
59
+ },
60
+ "test_t5_edit": {
61
+ "path": "datasets/qrecc/test_chatgpt_editor.jsonl",
62
+ "sha256": "115993dd58b5307fd411329ccfd3fc4e6ccd10d33116db718e3824cc7d728150",
63
+ "profile": "t5_edit",
64
+ "split": "test"
65
+ },
66
+ "test_self_edit": {
67
+ "path": "datasets/qrecc/test_chatgpt_ICL_editor.jsonl",
68
+ "sha256": "da2778285f9d616bcfb5dff0ca2d0079d5bed54aca8086352135e698b9373f5f",
69
+ "profile": "self_edit",
70
+ "split": "test"
71
+ }
72
+ },
73
+ "execution": {
74
+ "vendored_upstream_source": false,
75
+ "license_acknowledgement_required_at_startup": true,
76
+ "license_acknowledgement_required_per_request": true,
77
+ "official_teacher_function_called": true,
78
+ "common_support_profile": "controlled_adapter_visible_dialogue_only",
79
+ "post_processing_compatibility_hash": "7201ceaeb16beaaf3af874faf083ce4f64dd630636a2e302edf398cc4da8d3dd",
80
+ "t5_student_runtime_enabled": false,
81
+ "released_t5_checkpoint_present": false,
82
+ "paper_result_parity_claimed": false
83
+ }
84
+ }