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,165 @@
1
+ """Explicit caller-owned EnvAdapter extension for the pinned SkillOpt trainer.
2
+
3
+ The factory is trusted Python code, not a sandbox. Source and configuration are
4
+ checked before import. Native training, reflection, selection and CLI controls
5
+ remain in the caller-mounted upstream checkout.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import argparse
10
+ import hashlib
11
+ import importlib.util
12
+ import json
13
+ import re
14
+ import sys
15
+ from dataclasses import dataclass
16
+ from pathlib import Path
17
+ from typing import Any
18
+
19
+ from agentinputlab.artifacts import load_pinned_json_mapping
20
+ from agentinputlab.contracts import ExternalDependencyError, ValidationError
21
+ from agentinputlab.contracts.serialization import content_hash, to_jsonable
22
+
23
+ ENVIRONMENT_RECEIPT = "agentinputlab_environment_binding.json"
24
+ _SHA = re.compile(r"[0-9a-f]{64}")
25
+
26
+
27
+ @dataclass(frozen=True, slots=True)
28
+ class SkillOptEnvironmentBinding:
29
+ factory_path: str | Path
30
+ factory_sha256: str
31
+ configuration_path: str | Path
32
+ configuration_sha256: str
33
+ factory_name: str = "create"
34
+
35
+ def __post_init__(self) -> None:
36
+ for name in ("factory_sha256", "configuration_sha256"):
37
+ if not isinstance(getattr(self, name), str) or not _SHA.fullmatch(getattr(self, name)):
38
+ raise ValidationError(f"SkillOpt environment {name} must be a SHA-256")
39
+ for name in ("factory_path", "configuration_path"):
40
+ if not isinstance(getattr(self, name), (str, Path)) or not str(getattr(self, name)).strip():
41
+ raise ValidationError(f"SkillOpt environment {name} must be a path")
42
+ if (not isinstance(self.factory_name, str) or not self.factory_name.isidentifier()
43
+ or self.factory_name.startswith("_")):
44
+ raise ValidationError("SkillOpt environment factory_name must be a public identifier")
45
+
46
+ def verify(self) -> dict[str, Any]:
47
+ factory = Path(self.factory_path).expanduser().absolute()
48
+ if (factory.is_symlink() or not factory.is_file() or factory.suffix != ".py"
49
+ or factory.stat().st_size > 1024 * 1024):
50
+ raise ExternalDependencyError("SkillOpt environment factory must be a bounded regular Python file")
51
+ if hashlib.sha256(factory.read_bytes()).hexdigest() != self.factory_sha256:
52
+ raise ExternalDependencyError("SkillOpt environment factory checksum changed")
53
+ config = Path(self.configuration_path).expanduser().absolute()
54
+ load_pinned_json_mapping(config, expected_sha256=self.configuration_sha256,
55
+ max_bytes=8 * 1024 * 1024)
56
+ return dict(factory_path=str(factory.resolve()), factory_sha256=self.factory_sha256,
57
+ configuration_path=str(config.resolve()),
58
+ configuration_sha256=self.configuration_sha256, factory_name=self.factory_name)
59
+
60
+ def command_options(self) -> tuple[str, ...]:
61
+ return ("--factory", str(Path(self.factory_path).expanduser().absolute()),
62
+ "--factory-sha256", self.factory_sha256,
63
+ "--factory-name", self.factory_name,
64
+ "--factory-config", str(Path(self.configuration_path).expanduser().absolute()),
65
+ "--factory-config-sha256", self.configuration_sha256)
66
+
67
+
68
+ def run_with_environment(*, checkout, binding: SkillOptEnvironmentBinding,
69
+ receipt_path, native_args: list[str]) -> None:
70
+ from .skillopt import validate_skillopt_checkout
71
+
72
+ root = validate_skillopt_checkout(checkout)
73
+ identity = binding.verify()
74
+ configuration = load_pinned_json_mapping(binding.configuration_path,
75
+ expected_sha256=binding.configuration_sha256, max_bytes=8 * 1024 * 1024)
76
+ receipt = Path(receipt_path)
77
+ if receipt.exists() or receipt.is_symlink() or not receipt.parent.is_dir():
78
+ raise ValidationError("SkillOpt environment receipt must be a new file in the fit output")
79
+ prior_path, prior_argv = list(sys.path), list(sys.argv)
80
+ native_name = "_agentinputlab_skillopt_cli_" + content_hash(str(root))[:16]
81
+ factory_name = "_agentinputlab_skillopt_factory_" + binding.factory_sha256[:16]
82
+ previous = {name: sys.modules.get(name) for name in (native_name, factory_name)}
83
+ try:
84
+ sys.path.insert(0, str(root))
85
+ spec = importlib.util.spec_from_file_location(native_name, root / "scripts/train.py")
86
+ if spec is None or spec.loader is None:
87
+ raise ExternalDependencyError("SkillOpt native CLI cannot be imported")
88
+ native = importlib.util.module_from_spec(spec)
89
+ sys.modules[native_name] = native
90
+ spec.loader.exec_module(native)
91
+ spec = importlib.util.spec_from_file_location(factory_name, identity["factory_path"])
92
+ if spec is None or spec.loader is None:
93
+ raise ExternalDependencyError("SkillOpt environment factory cannot be imported")
94
+ factory_module = importlib.util.module_from_spec(spec)
95
+ sys.modules[factory_name] = factory_module
96
+ spec.loader.exec_module(factory_module)
97
+ factory = getattr(factory_module, binding.factory_name, None)
98
+ if not callable(factory):
99
+ raise ValidationError("SkillOpt environment factory is not callable")
100
+ from skillopt.envs.base import EnvAdapter
101
+
102
+ bound = False
103
+
104
+ def get_adapter(cfg):
105
+ nonlocal bound
106
+ if bound:
107
+ raise ValidationError("SkillOpt native CLI requested a second environment binding")
108
+ binding.verify()
109
+ adapter = factory(cfg=dict(cfg), configuration=to_jsonable(configuration))
110
+ if not isinstance(adapter, EnvAdapter) or not callable(getattr(adapter, "fingerprint", None)):
111
+ raise ValidationError("SkillOpt factory must return a native EnvAdapter with a fingerprint")
112
+ fingerprint = to_jsonable(adapter.fingerprint())
113
+ if not isinstance(fingerprint, dict) or not fingerprint:
114
+ raise ValidationError("SkillOpt environment fingerprint must be a nonempty mapping")
115
+ content_hash(fingerprint)
116
+ binding.verify()
117
+ value = dict(schema="agentinputlab.skillopt.environment_binding.v1",
118
+ binding=identity, environment_fingerprint=fingerprint,
119
+ native_training_algorithm_unchanged=True,
120
+ profile_kind="caller_environment_adapter")
121
+ with receipt.open("x", encoding="utf-8") as stream:
122
+ json.dump(value, stream, sort_keys=True, indent=2, allow_nan=False)
123
+ bound = True
124
+ return adapter
125
+
126
+ native.get_adapter = get_adapter
127
+ sys.argv = [str(root / "scripts/train.py"), *native_args]
128
+ native.main()
129
+ if not bound:
130
+ raise ValidationError("SkillOpt native CLI did not instantiate the configured environment")
131
+ binding.verify()
132
+ validate_skillopt_checkout(root)
133
+ finally:
134
+ sys.path[:] = prior_path
135
+ sys.argv[:] = prior_argv
136
+ for name, value in previous.items():
137
+ if value is None:
138
+ sys.modules.pop(name, None)
139
+ else:
140
+ sys.modules[name] = value
141
+
142
+
143
+ def main(argv: list[str] | None = None) -> int:
144
+ args = list(sys.argv[1:] if argv is None else argv)
145
+ if "--" not in args:
146
+ raise ValidationError("SkillOpt environment wrapper requires explicit native arguments after --")
147
+ boundary = args.index("--")
148
+ parser = argparse.ArgumentParser(description=__doc__)
149
+ parser.add_argument("--checkout", required=True)
150
+ parser.add_argument("--factory", required=True)
151
+ parser.add_argument("--factory-sha256", required=True)
152
+ parser.add_argument("--factory-name", default="create")
153
+ parser.add_argument("--factory-config", required=True)
154
+ parser.add_argument("--factory-config-sha256", required=True)
155
+ parser.add_argument("--receipt", required=True)
156
+ a = parser.parse_args(args[:boundary])
157
+ binding = SkillOptEnvironmentBinding(a.factory, a.factory_sha256, a.factory_config,
158
+ a.factory_config_sha256, a.factory_name)
159
+ run_with_environment(checkout=a.checkout, binding=binding,
160
+ receipt_path=a.receipt, native_args=args[boundary + 1:])
161
+ return 0
162
+
163
+
164
+ if __name__ == "__main__":
165
+ raise SystemExit(main())
@@ -0,0 +1,5 @@
1
+ """Child-process entry point for an explicitly bound SkillOpt EnvAdapter."""
2
+ from .skillopt_environment import main
3
+
4
+ if __name__ == "__main__":
5
+ raise SystemExit(main())
@@ -0,0 +1,188 @@
1
+ """IR environment for SkillOpt's source-native text-space optimizer.
2
+
3
+ Create the adapter inside a trusted environment factory after mounting the
4
+ pinned SkillOpt checkout. The trainer keeps its native six-stage update loop;
5
+ this environment owns query generation, retrieval and scalar native feedback.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ import math
11
+ import random
12
+ from dataclasses import replace
13
+ from pathlib import Path
14
+
15
+ from agentinputlab.backends.llm import LLMBackend
16
+ from agentinputlab.backends.retrieval import Retriever
17
+ from agentinputlab.benchmarks.base import BenchmarkAdapter, BenchmarkExample
18
+ from agentinputlab.benchmarks.ir_query import ContextIRQueryPredictor, IRQueryOutputError
19
+ from agentinputlab.benchmarks.retrieval import RetrievalPrediction
20
+ from agentinputlab.contracts import AlgorithmOutputError, ContextBlock, ExternalDependencyError, ValidationError
21
+ from agentinputlab.contracts.serialization import content_hash, to_jsonable
22
+
23
+
24
+ def create_skillopt_retrieval_adapter(
25
+ *, adapter: BenchmarkAdapter, retriever: Retriever, target_backend: LLMBackend,
26
+ train, validation, cfg: dict, metric: str = "ndcg_at_10", top_k: int = 15,
27
+ per_call_output_tokens: int = 512, seed: int = 17, allow_json_fence: bool = False,
28
+ partition_label: str = "caller_declared_compatibility_partitions",
29
+ ):
30
+ """Return a native EnvAdapter with disjoint fit-only query groups.
31
+
32
+ The backend must share the fit's metered provider with the optimizer.
33
+ ``hard`` is native metric > 0 and ``soft`` is that unchanged metric. Invalid
34
+ query JSON receives zero training feedback with its paid output retained.
35
+ Held-out groups are evaluated separately and are never accepted here.
36
+ """
37
+ try:
38
+ from skillopt.envs.base import EnvAdapter
39
+ except ImportError as exc:
40
+ raise ExternalDependencyError("mount the pinned SkillOpt checkout before creating its IR environment") from exc
41
+ if not isinstance(adapter, BenchmarkAdapter) or not isinstance(retriever, Retriever):
42
+ raise ValidationError("SkillOpt IR requires an explicit dataset adapter and retriever")
43
+ if not isinstance(target_backend, LLMBackend):
44
+ raise ValidationError("SkillOpt IR requires an explicit metered target backend")
45
+ if not isinstance(cfg, dict) or not isinstance(metric, str) or not metric.strip():
46
+ raise ValidationError("SkillOpt IR requires native configuration and an explicit metric")
47
+ if not isinstance(partition_label, str) or not partition_label.strip():
48
+ raise ValidationError("SkillOpt IR partition label must be explicit")
49
+ groups = {"train":tuple(train), "validation":tuple(validation)}
50
+ examples = (*groups["train"], *groups["validation"])
51
+ if any(not group for group in groups.values()) or any(not isinstance(e, BenchmarkExample) for e in examples):
52
+ raise ValidationError("SkillOpt IR requires nonempty train and validation examples")
53
+ if len({e.example_id for e in examples}) != len(examples) or len({
54
+ content_hash(dict(query=e.query, instruction=e.instruction, context=e.visible_context,
55
+ messages=e.visible_messages)) for e in examples
56
+ }) != len(examples):
57
+ raise ValidationError("SkillOpt IR train/validation IDs and visible inputs must be disjoint")
58
+ if any(e.visible_tool_names for e in examples):
59
+ raise ValidationError("SkillOpt IR environment does not execute tools")
60
+ dataset = to_jsonable(adapter.fingerprint())
61
+ corpus = to_jsonable(retriever.fingerprint())
62
+ # Validate endpoint controls before the trainer can start a paid call.
63
+ ContextIRQueryPredictor(target_backend, retriever, max_tokens=per_call_output_tokens,
64
+ top_k=top_k, seed=seed, allow_json_fence=allow_json_fence)
65
+
66
+ def metric_value(metrics):
67
+ value = metrics.get(metric)
68
+ if type(value) not in (float,int) or not math.isfinite(value) or not 0 <= value <= 1:
69
+ raise ValidationError("SkillOpt IR native metric must be present and within [0,1]")
70
+ return float(value)
71
+
72
+ for e in examples:
73
+ metric_value(adapter.score(e, RetrievalPrediction({})))
74
+ owned = {content_hash(e.example_id): e for e in examples}
75
+
76
+ class RetrievalEnvAdapter(EnvAdapter):
77
+ def __init__(self):
78
+ self.analyst_workers = cfg.get("analyst_workers", 1)
79
+ self.failure_only = cfg.get("failure_only", False)
80
+ self.minibatch_size = cfg.get("minibatch_size", 2)
81
+ self.edit_budget = cfg.get("edit_budget", 4)
82
+ self._cfg = dict(cfg)
83
+
84
+ def fingerprint(self):
85
+ return dict(implementation="agentinputlab.skillopt.native_IR_environment.v1",
86
+ dataset=dataset, retriever=corpus, target_backend=to_jsonable(target_backend.fingerprint()),
87
+ metric=metric, hard_criterion="declared_native_metric_strictly_greater_than_zero",
88
+ top_k=top_k, per_call_output_tokens=per_call_output_tokens, seed=seed,
89
+ allow_json_fence=allow_json_fence, partition_label=partition_label,
90
+ groups={split:[dict(case_id=e.example_id, state_sha256=e.visible_state().state_hash,
91
+ gold_sha256=content_hash(e.evaluator_gold)) for e in cases]
92
+ for split,cases in groups.items()},
93
+ heldout_not_exposed=True, automatic_retry=False,
94
+ native_reflection_patch_merge_and_validation_gate=True)
95
+
96
+ def _batch(self, split, count, batch_seed):
97
+ if type(count) is not int or count < 1 or count > len(groups[split]):
98
+ raise ValidationError("SkillOpt IR batch exceeds the declared group")
99
+ cases = random.Random(batch_seed).sample(list(groups[split]), count)
100
+ return [dict(id=content_hash(e.example_id), question=e.query,
101
+ task_type=adapter.benchmark_id) for e in cases]
102
+
103
+ def build_train_env(self, batch_size, seed, **kwargs):
104
+ return self._batch("train", batch_size, seed)
105
+
106
+ def build_eval_env(self, env_num, split, seed, **kwargs):
107
+ if split not in {"val", "validation", "valid_seen"}:
108
+ raise ValidationError("SkillOpt IR fit environment exposes validation only; heldout evaluation is separate")
109
+ return self._batch("validation", env_num, seed)
110
+
111
+ def get_task_types(self):
112
+ return [adapter.benchmark_id]
113
+
114
+ def rollout(self, env_manager, skill_content, out_dir, **kwargs):
115
+ if not isinstance(skill_content, str) or not skill_content.strip():
116
+ raise ValidationError("SkillOpt IR candidate skill must be nonempty text")
117
+ if any(kwargs.get(name) for name in ("diagnostic_mode", "diagnostic_instruction", "diagnostic_trace_context_by_id")):
118
+ raise ValidationError("SkillOpt IR diagnostic extra attempts require a separate explicit protocol")
119
+ if (to_jsonable(adapter.fingerprint()) != dataset
120
+ or to_jsonable(retriever.fingerprint()) != corpus):
121
+ raise ValidationError("SkillOpt IR source dataset or corpus changed")
122
+ root = Path(out_dir)
123
+ root.mkdir(parents=True, exist_ok=True)
124
+ results = []
125
+ rows = list(env_manager)
126
+ if any(not isinstance(item, dict) or item.get("id") not in owned for item in rows):
127
+ raise ValidationError("SkillOpt IR rollout contains an undeclared fit case")
128
+ if len({item["id"] for item in rows}) != len(rows):
129
+ raise ValidationError("SkillOpt IR rollout contains duplicate cases")
130
+ for item in rows:
131
+ e = owned[item["id"]]
132
+ if item != dict(id=content_hash(e.example_id), question=e.query, task_type=adapter.benchmark_id):
133
+ raise ValidationError("SkillOpt IR visible fit item changed")
134
+ folder = root / "predictions" / item["id"]
135
+ folder.mkdir(parents=True, exist_ok=False)
136
+ state = e.visible_state()
137
+ candidate = ContextBlock(
138
+ text="SKILLOPT CURRENT FITTING SKILL\n" + skill_content,
139
+ block_id="skillopt-fit-skill:" + content_hash(skill_content),
140
+ source="SkillOpt native fitting candidate")
141
+ state = replace(state, context=(*state.context, candidate))
142
+ row = dict(id=item["id"], source_case_id=e.example_id, question=e.query,
143
+ task_type=adapter.benchmark_id, hard=0, soft=0.0, response="",
144
+ agent_ok=False, n_turns=1, fail_reason="", native_metrics=None)
145
+ predictor = ContextIRQueryPredictor(target_backend, retriever, max_tokens=per_call_output_tokens,
146
+ top_k=top_k, seed=seed, allow_json_fence=allow_json_fence)
147
+ try:
148
+ reply = predictor.predict(state)
149
+ metrics = dict(adapter.score(e, reply.prediction))
150
+ value = metric_value(metrics)
151
+ row.update(hard=int(value > 0), soft=value, agent_ok=True, native_metrics=metrics,
152
+ response=reply.metadata["generation_response"]["text"],
153
+ endpoint_metadata=to_jsonable(reply.metadata), usage=to_jsonable(reply.usage))
154
+ if value == 0:
155
+ row["fail_reason"] = f"native {metric}=0"
156
+ except IRQueryOutputError as exc:
157
+ if not isinstance(exc.__cause__, AlgorithmOutputError):
158
+ with (folder / "consumed-execution-error.json").open("x") as f:
159
+ json.dump(dict(error_type=type(exc).__name__, response=to_jsonable(exc.response),
160
+ request=to_jsonable(exc.request), usage=to_jsonable(exc.usage),
161
+ automatic_retry=False), f, sort_keys=True, allow_nan=False)
162
+ raise
163
+ row.update(response=exc.response.text, agent_ok=True, soft=0.0, hard=0,
164
+ fail_reason=str(exc), query_or_retrieval_failure=True,
165
+ generation_request=to_jsonable(exc.request), generation_response=to_jsonable(exc.response),
166
+ usage=to_jsonable(exc.usage))
167
+ except Exception as exc:
168
+ with (folder / "execution-error.json").open("x") as f:
169
+ json.dump(dict(error_type=type(exc).__name__, automatic_retry=False), f)
170
+ raise
171
+ conversation = [dict(type="message", turn=1, content=row["response"]),
172
+ dict(role="system", content="[NATIVE IR EVALUATION]\n" +
173
+ json.dumps(dict(metric=metric, score=row["soft"],
174
+ valid_native_metric=row["native_metrics"] is not None)))]
175
+ with (folder / "conversation.json").open("x") as f:
176
+ json.dump(conversation, f, sort_keys=True, indent=2, allow_nan=False)
177
+ with (folder / "result.json").open("x") as f:
178
+ json.dump(row, f, sort_keys=True, indent=2, allow_nan=False)
179
+ results.append(row)
180
+ with (root / "results.jsonl").open("x") as f:
181
+ for row in results:
182
+ f.write(json.dumps(row, sort_keys=True, allow_nan=False) + "\n")
183
+ return results
184
+
185
+ return RetrievalEnvAdapter()
186
+
187
+
188
+ __all__ = ["create_skillopt_retrieval_adapter"]