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,457 @@
1
+ """Startup-bound model transfer through the unchanged pinned IRCoT controller.
2
+
3
+ This is not the historical Codex/Elasticsearch deployment. The native builder,
4
+ participants, prompt selection/fitting, sentence parser and exit logic execute;
5
+ only the generator, retriever and GPT-2 tokenizer resolver are caller-bound.
6
+ Run this adapter in a dedicated worker process with its own HOME/cache root.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import contextlib
12
+ import copy
13
+ import hashlib
14
+ import importlib
15
+ import os
16
+ import threading
17
+ from collections.abc import Mapping
18
+ from dataclasses import replace
19
+ from pathlib import Path
20
+ from typing import Any
21
+
22
+ from agentinputlab.backends import GenerationRequest
23
+ from agentinputlab.contracts.serialization import content_hash, to_jsonable
24
+
25
+ from .driver import (
26
+ DEFAULT_MANIFEST,
27
+ PROTOCOL_VERSION,
28
+ UPSTREAM_COMMIT,
29
+ DriverError,
30
+ IRCoTDriver,
31
+ _BoundedCapture,
32
+ _canonical_mapping,
33
+ _FrozenResponse,
34
+ _load_config,
35
+ _parse_request,
36
+ _patch_config,
37
+ _project_trajectory,
38
+ _RetrievalCapture,
39
+ _TracingController,
40
+ _upstream_import_scope,
41
+ _working_directory,
42
+ )
43
+
44
+ PROFILE = "controlled.hotpotqa.reader_transfer.v1"
45
+ SOURCE_PROFILE = "upstream.hotpotqa.codex.v1"
46
+ _NATIVE_LOCK = threading.Lock()
47
+
48
+
49
+ class PinnedIRCoTControlledRuntime:
50
+ """WorkerClient for one fixed, externally served reader and corpus.
51
+
52
+ The caller supplies an actual GPT-2 tokenizer and its closed artifact
53
+ fingerprint, not a replacement sentence splitter or fixture controller.
54
+ Request payloads cannot select endpoints, imports, assets or startup limits.
55
+ Per-call stops belong to the backend contract: reasoning-model callers can
56
+ opt into FinalContentStopBackend, charging all generated tokens.
57
+ """
58
+
59
+ worker_id = "agentinputlab.ircot.controlled_native_loop.v1"
60
+
61
+ def __init__(
62
+ self,
63
+ *,
64
+ source_root: Path,
65
+ backend: Any,
66
+ retriever: Any,
67
+ tokenizer: Any,
68
+ tokenizer_fingerprint: Mapping[str, Any],
69
+ dependency_fingerprint: Mapping[str, Any],
70
+ corpus_revision: str,
71
+ index_revision: str,
72
+ cache_home: Path,
73
+ seed: int = 17,
74
+ max_model_calls: int = 8,
75
+ max_output_tokens: int = 4096,
76
+ per_call_output_tokens: int = 512,
77
+ max_retrieval_calls: int = 8,
78
+ ) -> None:
79
+ for name, value in (
80
+ ("seed", seed),
81
+ ("max_model_calls", max_model_calls),
82
+ ("max_output_tokens", max_output_tokens),
83
+ ("per_call_output_tokens", per_call_output_tokens),
84
+ ("max_retrieval_calls", max_retrieval_calls),
85
+ ):
86
+ if (
87
+ isinstance(value, bool)
88
+ or not isinstance(value, int)
89
+ or value < (0 if name == "seed" else 1)
90
+ ):
91
+ raise ValueError(f"{name} has an invalid integer value")
92
+ if not corpus_revision or not index_revision:
93
+ raise ValueError("explicit corpus and index revisions are required")
94
+ if not callable(getattr(backend, "generate", None)) or not callable(
95
+ getattr(retriever, "retrieve", None)
96
+ ):
97
+ raise TypeError("real backend and retriever interfaces are required")
98
+ if not callable(getattr(tokenizer, "tokenize", None)):
99
+ raise TypeError("the pinned GPT-2 tokenizer must expose tokenize()")
100
+ self.cache_home = Path(cache_home).resolve(strict=True)
101
+ if Path(os.path.expanduser("~")).resolve() != self.cache_home:
102
+ raise ValueError("launch a dedicated worker with HOME equal to cache_home")
103
+ if not tokenizer_fingerprint or not dependency_fingerprint:
104
+ raise ValueError("tokenizer and native dependency fingerprints are required")
105
+ self.source_root = Path(source_root)
106
+ self.backend, self.retriever, self.tokenizer = backend, retriever, tokenizer
107
+ self.generator_fingerprint = _canonical_mapping(
108
+ to_jsonable(backend.fingerprint()), "generator"
109
+ )
110
+ self.retriever_fingerprint = _canonical_mapping(
111
+ to_jsonable(retriever.fingerprint()), "retriever"
112
+ )
113
+ self.tokenizer_fingerprint = _canonical_mapping(
114
+ to_jsonable(tokenizer_fingerprint), "tokenizer"
115
+ )
116
+ self.dependency_fingerprint = _canonical_mapping(
117
+ to_jsonable(dependency_fingerprint), "dependencies"
118
+ )
119
+ self.corpus_revision, self.index_revision = corpus_revision, index_revision
120
+ self.seed, self.max_model_calls, self.max_output_tokens = (
121
+ seed,
122
+ max_model_calls,
123
+ max_output_tokens,
124
+ )
125
+ self.per_call_output_tokens, self.max_retrieval_calls = (
126
+ per_call_output_tokens,
127
+ max_retrieval_calls,
128
+ )
129
+ self.last_events: list[dict[str, Any]] = []
130
+ self.last_usage: dict[str, Any] = {}
131
+
132
+ def _checkout(self):
133
+ if Path(os.path.expanduser("~")).resolve() != self.cache_home:
134
+ raise DriverError("CACHE_SCOPE_CHANGED", "dedicated worker HOME changed")
135
+ original = IRCoTDriver(
136
+ manifest_path=DEFAULT_MANIFEST,
137
+ profile_id=SOURCE_PROFILE,
138
+ environment={"AGENTINPUTLAB_UPSTREAM_ROOT": str(self.source_root)},
139
+ )._checkout()
140
+ return replace(
141
+ original,
142
+ profile_id=PROFILE,
143
+ profile={
144
+ **original.profile,
145
+ "identity_kind": "controlled_model_transfer",
146
+ "corpus_revision": self.corpus_revision,
147
+ "index_revision": self.index_revision,
148
+ "binding_attestation": "startup_exact_backend_retriever_tokenizer_dependencies",
149
+ },
150
+ )
151
+
152
+ def fingerprint(self) -> Mapping[str, Any]:
153
+ checkout = self._checkout()
154
+ return {
155
+ "worker_id": self.worker_id,
156
+ "profile_id": PROFILE,
157
+ "identity_kind": "controlled_model_transfer",
158
+ "upstream_commit": UPSTREAM_COMMIT,
159
+ "source_profile": SOURCE_PROFILE,
160
+ "manifest_sha256": checkout.manifest_sha256,
161
+ "native_config_sha256": checkout.profile["config_sha256"],
162
+ "prompt_sha256": checkout.profile["prompt_sha256"],
163
+ "generator": copy.deepcopy(self.generator_fingerprint),
164
+ "retriever": copy.deepcopy(self.retriever_fingerprint),
165
+ "tokenizer": copy.deepcopy(self.tokenizer_fingerprint),
166
+ "native_dependencies": copy.deepcopy(self.dependency_fingerprint),
167
+ "corpus_revision": self.corpus_revision,
168
+ "index_revision": self.index_revision,
169
+ "seed": self.seed,
170
+ "max_model_calls": self.max_model_calls,
171
+ "max_output_tokens": self.max_output_tokens,
172
+ "per_call_output_tokens": self.per_call_output_tokens,
173
+ "max_retrieval_calls": self.max_retrieval_calls,
174
+ "implicit_retry": False,
175
+ "historical_corpus_or_Codex_parity": False,
176
+ "runtime_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
177
+ }
178
+
179
+ def call_controlled(self, request):
180
+ return self.call(request.as_dict())
181
+
182
+ def call(self, payload):
183
+ if not _NATIVE_LOCK.acquire(blocking=False):
184
+ raise RuntimeError(
185
+ "IRCoT native import/cwd state requires one call per dedicated worker"
186
+ )
187
+ bindings = None
188
+ self.last_events, self.last_usage = [], {}
189
+ try:
190
+ request = _parse_request(payload)
191
+ checkout = self._checkout()
192
+ if (
193
+ to_jsonable(request.generator_fingerprint) != self.generator_fingerprint
194
+ or to_jsonable(self.backend.fingerprint()) != self.generator_fingerprint
195
+ or to_jsonable(request.retriever_fingerprint) != self.retriever_fingerprint
196
+ or to_jsonable(self.retriever.fingerprint()) != self.retriever_fingerprint
197
+ or request.corpus_revision != self.corpus_revision
198
+ or request.index_revision != self.index_revision
199
+ or request.prompt_hash != checkout.profile["prompt_sha256"]
200
+ ):
201
+ raise DriverError(
202
+ "BINDING_MISMATCH", "request or startup component identity changed"
203
+ )
204
+ if (
205
+ request.controls.max_steps > self.max_model_calls
206
+ or request.controls.max_output_tokens > self.max_output_tokens
207
+ ):
208
+ raise DriverError("CONTROL_BUDGET_EXCEEDED", "request exceeds startup model limits")
209
+ bindings = _LiveBindings(self, request)
210
+ config = _patch_config(
211
+ _load_config(
212
+ checkout,
213
+ {
214
+ "AGENTINPUTLAB_IRCOT_RETRIEVER_HOST": "http://127.0.0.1",
215
+ "AGENTINPUTLAB_IRCOT_RETRIEVER_PORT": "0",
216
+ },
217
+ ),
218
+ checkout,
219
+ request.controls,
220
+ )
221
+ for model in config["models"].values():
222
+ if model["name"] == "retrieve_and_reset_paragraphs":
223
+ model["source_corpus_name"] = self.corpus_revision
224
+ capture = _BoundedCapture()
225
+ with (
226
+ _working_directory(checkout.root),
227
+ _upstream_import_scope(checkout.root, fixture_shims=False),
228
+ contextlib.redirect_stdout(capture),
229
+ ):
230
+ configurable = importlib.import_module("commaqa.inference.configurable_inference")
231
+ native = importlib.import_module("commaqa.inference.ircot")
232
+ prompt_reader = importlib.import_module("commaqa.inference.prompt_reader")
233
+ prompt_reader.get_tokenizer = bindings.get_tokenizer
234
+ bindings.fit_prompt = prompt_reader.fit_prompt_into_given_limit
235
+ native.GPT3Generator = bindings.generator_class()
236
+ retrieval = _RetrievalCapture(bindings.retrieve)
237
+ native.safe_post_request = retrieval
238
+ decomposer, model_map = configurable.build_decomposer_and_models(
239
+ copy.deepcopy(config)
240
+ )
241
+ tracing = _TracingController(
242
+ decomposer.controller,
243
+ {k: v["name"] for k, v in config["models"].items()},
244
+ retrieval,
245
+ )
246
+ decomposer.controller = tracing
247
+ example = {
248
+ "qid": request.task_id or request.request_id,
249
+ "query": request.question,
250
+ "question": request.question,
251
+ "metadata": {"pinned_title": None, "pinned_para": None, "pin_position": None},
252
+ "titles": [],
253
+ "paras": [],
254
+ }
255
+ final_state, _ = decomposer.find_answer_decomp(example, debug=False)
256
+ result = _project_trajectory(
257
+ request,
258
+ checkout,
259
+ config,
260
+ tracing.events,
261
+ final_state,
262
+ native,
263
+ model_map,
264
+ bindings,
265
+ )
266
+ participant_calls = result["usage"]["model_calls"]
267
+ result["usage"] = bindings.usage()
268
+ result["native_controller_events"] = to_jsonable(tracing.events)
269
+ result["native_participant_model_call_counter"] = participant_calls
270
+ result["controlled_runtime_events"] = copy.deepcopy(self.last_events)
271
+ result["unknown_token_usage_model_calls"] = bindings.unknown_usage_calls
272
+ result["usage_is_complete"] = bindings.unknown_usage_calls == 0
273
+ result["upstream_stdout_sha256"] = capture.hexdigest
274
+ return result
275
+ except (Exception, SystemExit) as exc:
276
+ response = {
277
+ "status": "error",
278
+ "protocol_version": PROTOCOL_VERSION,
279
+ "request_id": payload.get("request_id", "") if isinstance(payload, Mapping) else "",
280
+ "failure_code": exc.code
281
+ if isinstance(exc, DriverError)
282
+ else "CONTROLLED_NATIVE_EXECUTION_FAILED",
283
+ "message": exc.public_message
284
+ if isinstance(exc, DriverError)
285
+ else "controlled native IRCoT execution failed",
286
+ "error_type": type(exc).__name__,
287
+ }
288
+ if bindings is None or (not bindings.generations and not bindings.retrievals):
289
+ response["consumed"] = False
290
+ if bindings is not None:
291
+ response["usage"] = bindings.usage()
292
+ response["controlled_runtime_events"] = copy.deepcopy(self.last_events)
293
+ response["unknown_token_usage_model_calls"] = bindings.unknown_usage_calls
294
+ response["usage_is_complete"] = bindings.unknown_usage_calls == 0
295
+ response["reported_tokens_are_observed_lower_bounds"] = (
296
+ bindings.unknown_usage_calls > 0
297
+ )
298
+ return response
299
+ finally:
300
+ self.last_usage = bindings.usage() if bindings else {}
301
+ _NATIVE_LOCK.release()
302
+
303
+
304
+ class _LiveBindings:
305
+ def __init__(self, owner, request):
306
+ self.owner, self.request = owner, request
307
+ self.generations: list[dict[str, Any]] = []
308
+ self.retrievals = 0
309
+ self.input_tokens = self.output_tokens = 0
310
+ self.fit_prompt = None
311
+
312
+ def get_tokenizer(self, name):
313
+ if name != "gpt2":
314
+ raise DriverError("TOKENIZER_MISMATCH", "native prompt requested a different tokenizer")
315
+ return self.owner.tokenizer
316
+
317
+ def generator_class(self):
318
+ binding = self
319
+
320
+ class Generator:
321
+ def __init__(self, **kwargs):
322
+ self.options = dict(kwargs)
323
+ if kwargs.get("n", 1) != 1 or kwargs.get("best_of", 1) != 1:
324
+ raise DriverError(
325
+ "GENERATOR_CONFIGURATION_INVALID", "native branch count changed"
326
+ )
327
+
328
+ def generate_text_sequence(self, prompt):
329
+ owner = binding.owner
330
+ remaining = binding.request.controls.max_output_tokens - binding.output_tokens
331
+ if (
332
+ len(binding.generations)
333
+ >= min(owner.max_model_calls, binding.request.controls.max_steps)
334
+ or remaining < 1
335
+ ):
336
+ raise DriverError(
337
+ "MODEL_BUDGET_EXCEEDED", "generation budget exhausted before dispatch"
338
+ )
339
+ cap = min(
340
+ owner.per_call_output_tokens, self.options.get("max_tokens", 300), remaining
341
+ )
342
+ prompt = binding.fit_prompt(
343
+ original_prompt=prompt.rstrip(),
344
+ model_length_limit=8000,
345
+ estimated_generation_length=cap,
346
+ demonstration_delimiter="\n\n\n",
347
+ shuffle=False,
348
+ remove_method=self.options.get("remove_method", "first"),
349
+ tokenizer_model_name="gpt2",
350
+ last_is_test_example=True,
351
+ )
352
+ call = GenerationRequest(
353
+ prompt=prompt,
354
+ temperature=self.options.get("temperature", 0),
355
+ max_tokens=cap,
356
+ seed=owner.seed + len(binding.generations),
357
+ stop=tuple(self.options.get("stop", ["\n"])),
358
+ )
359
+ event = {
360
+ "operation": "native_generator",
361
+ "request_hash": call.request_hash,
362
+ "prompt_sha256": content_hash(prompt),
363
+ "max_tokens": cap,
364
+ "seed": call.seed,
365
+ "stop": list(call.stop),
366
+ "response_observed": False,
367
+ }
368
+ binding.generations.append(event)
369
+ owner.last_events.append(event)
370
+ response = owner.backend.generate(call)
371
+ event.update(
372
+ response_observed=True,
373
+ response_text=response.text,
374
+ finish_reason=response.finish_reason,
375
+ usage=to_jsonable(response.usage),
376
+ )
377
+ binding.input_tokens += response.usage.input_tokens
378
+ binding.output_tokens += response.usage.output_tokens
379
+ if response.usage.output_tokens > cap:
380
+ raise DriverError(
381
+ "OUTPUT_BUDGET_EXCEEDED",
382
+ "provider exceeded reserved output cap",
383
+ pre_execution=False,
384
+ )
385
+ return [(response.text, 0.0)]
386
+
387
+ return Generator
388
+
389
+ def retrieve(self, url, params):
390
+ if (
391
+ url != "http://127.0.0.1:0/retrieve"
392
+ or params.get("corpus_name") != self.owner.corpus_revision
393
+ or params.get("retrieval_method") != "retrieve_from_elasticsearch"
394
+ or params.get("document_type") != "title_paragraph_text"
395
+ or set(params)
396
+ != {"retrieval_method", "query_text", "max_hits_count", "corpus_name", "document_type"}
397
+ ):
398
+ raise DriverError("RETRIEVAL_CONFIGURATION_INVALID", "native retrieval binding changed")
399
+ if self.retrievals >= self.owner.max_retrieval_calls:
400
+ raise DriverError(
401
+ "RETRIEVAL_BUDGET_EXCEEDED", "retrieval budget exhausted before dispatch"
402
+ )
403
+ count = params["max_hits_count"]
404
+ if (
405
+ isinstance(count, bool)
406
+ or not isinstance(count, int)
407
+ or not 1 <= count <= self.request.controls.per_step_top_k
408
+ ):
409
+ raise DriverError("RETRIEVAL_CONFIGURATION_INVALID", "native retrieval count changed")
410
+ self.retrievals += 1
411
+ hits = self.owner.retriever.retrieve(params["query_text"], top_k=count)
412
+ documents = [
413
+ {
414
+ "id": h.document.doc_id,
415
+ "title": h.document.title,
416
+ "paragraph_text": h.document.text,
417
+ "score": h.score,
418
+ "corpus_name": self.owner.corpus_revision,
419
+ }
420
+ for h in hits
421
+ ]
422
+ self.owner.last_events.append(
423
+ {
424
+ "operation": "native_retrieval",
425
+ "query": params["query_text"],
426
+ "top_k": count,
427
+ "documents": copy.deepcopy(documents),
428
+ }
429
+ )
430
+ return _FrozenResponse({"retrieval": documents})
431
+
432
+ @property
433
+ def unknown_usage_calls(self):
434
+ return sum(not g["response_observed"] for g in self.generations)
435
+
436
+ def usage(self):
437
+ unknown = self.unknown_usage_calls
438
+ result = {
439
+ "model_calls": len(self.generations),
440
+ "retrieval_calls": self.retrievals,
441
+ "input_tokens": self.input_tokens,
442
+ "output_tokens": self.output_tokens,
443
+ }
444
+ costs = [g["usage"]["cost_usd"] for g in self.generations if g["response_observed"]]
445
+ if (
446
+ self.generations
447
+ and not unknown
448
+ and len(costs) == len(self.generations)
449
+ and all(c is not None for c in costs)
450
+ ):
451
+ result["cost_usd"] = sum(costs)
452
+ else:
453
+ result["unpriced_model_calls"] = len(self.generations)
454
+ return result
455
+
456
+
457
+ __all__ = ["PinnedIRCoTControlledRuntime"]