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,426 @@
1
+ const campaignState = {
2
+ catalog: null,
3
+ profile: null,
4
+ preparation: null,
5
+ executions: [],
6
+ pollTimer: null,
7
+ };
8
+
9
+ const byId = (id) => document.getElementById(id);
10
+
11
+ function shortHash(value, width = 12) {
12
+ return typeof value === "string" && value.length > width
13
+ ? `${value.slice(0, width)}…`
14
+ : value || "—";
15
+ }
16
+
17
+ function showCampaignToast(message) {
18
+ const toast = byId("campaign-toast");
19
+ toast.textContent = message;
20
+ toast.classList.add("visible");
21
+ window.setTimeout(() => toast.classList.remove("visible"), 2600);
22
+ }
23
+
24
+ async function campaignRequest(path, options = {}) {
25
+ const response = await fetch(path, {
26
+ headers: options.body ? { "Content-Type": "application/json" } : {},
27
+ ...options,
28
+ });
29
+ const payload = await response.json();
30
+ if (!response.ok) {
31
+ const message = payload.error && payload.error.message
32
+ ? payload.error.message
33
+ : `Request failed (${response.status})`;
34
+ throw new Error(message);
35
+ }
36
+ return payload;
37
+ }
38
+
39
+ function profileButton(profile) {
40
+ const button = document.createElement("button");
41
+ button.type = "button";
42
+ button.className = "campaign-profile-option";
43
+ button.setAttribute("role", "option");
44
+ button.setAttribute(
45
+ "aria-selected",
46
+ String(campaignState.profile && campaignState.profile.id === profile.id),
47
+ );
48
+
49
+ const index = document.createElement("span");
50
+ index.textContent = String(
51
+ campaignState.catalog.profiles.indexOf(profile) + 1,
52
+ ).padStart(2, "0");
53
+ const copy = document.createElement("span");
54
+ const name = document.createElement("strong");
55
+ name.textContent = profile.label;
56
+ const mode = document.createElement("small");
57
+ mode.textContent = profile.execution_configured
58
+ ? "Preflight + confirmed execution"
59
+ : "Preflight / plan only";
60
+ copy.append(name, mode);
61
+ const arrow = document.createElement("b");
62
+ arrow.setAttribute("aria-hidden", "true");
63
+ arrow.textContent = "→";
64
+ button.append(index, copy, arrow);
65
+ button.addEventListener("click", () => selectCampaignProfile(profile));
66
+ return button;
67
+ }
68
+
69
+ function renderCampaignProfiles() {
70
+ const profiles = campaignState.catalog ? campaignState.catalog.profiles : [];
71
+ byId("campaign-profile-list").replaceChildren(
72
+ ...profiles.map(profileButton),
73
+ );
74
+ }
75
+
76
+ function resetCampaignPreparation() {
77
+ campaignState.preparation = null;
78
+ byId("campaign-preflight-state").textContent = "NOT RUN";
79
+ byId("campaign-preflight-state").className = "validation-state waiting";
80
+ byId("campaign-preflight-title").textContent = "No materialized plan";
81
+ byId("campaign-preflight-copy").textContent =
82
+ "Preflight checks assets and drivers without executing a benchmark cell.";
83
+ byId("campaign-stat-cells").textContent = "—";
84
+ byId("campaign-stat-targets").textContent = "—";
85
+ byId("campaign-stat-arms").textContent = "—";
86
+ byId("campaign-stat-grid").textContent = "—";
87
+ byId("campaign-blocker-count").textContent = "0 blockers";
88
+ const initial = document.createElement("li");
89
+ initial.className = "ok";
90
+ initial.textContent = "Materialize this profile to inspect readiness.";
91
+ byId("campaign-blockers").replaceChildren(initial);
92
+ const placeholder = document.createElement("p");
93
+ placeholder.className = "campaign-placeholder";
94
+ placeholder.textContent = "Arm identities appear after preflight.";
95
+ byId("campaign-arms").replaceChildren(placeholder);
96
+ byId("campaign-study-stage").textContent = "—";
97
+ byId("campaign-plan-identity").textContent = "No plan hash";
98
+ const row = document.createElement("tr");
99
+ const cell = document.createElement("td");
100
+ cell.colSpan = 6;
101
+ cell.className = "empty-row";
102
+ cell.textContent = "Preflight has not materialized cells.";
103
+ row.append(cell);
104
+ byId("campaign-cells-body").replaceChildren(row);
105
+ byId("campaign-confirm-checkbox").checked = false;
106
+ byId("campaign-confirm-checkbox").disabled = true;
107
+ byId("campaign-execute-button").disabled = true;
108
+ byId("campaign-execution-note").textContent =
109
+ "Execution stays locked until the profile, assets, output root, and plan are ready.";
110
+ }
111
+
112
+ function selectCampaignProfile(profile) {
113
+ campaignState.profile = profile;
114
+ renderCampaignProfiles();
115
+ resetCampaignPreparation();
116
+ byId("campaign-profile-name").textContent = profile.label;
117
+ byId("campaign-profile-description").textContent = profile.description;
118
+ byId("campaign-profile-identity").textContent = shortHash(
119
+ profile.profile_identity_sha256,
120
+ 18,
121
+ );
122
+ byId("campaign-blueprint-identity").textContent = shortHash(
123
+ profile.blueprint_sha256,
124
+ 18,
125
+ );
126
+ byId("campaign-arm-catalog-identity").textContent = shortHash(
127
+ profile.arm_catalog_sha256,
128
+ 18,
129
+ );
130
+ byId("campaign-preflight-button").disabled = false;
131
+ }
132
+
133
+ function issueNode(message, kind) {
134
+ const item = document.createElement("li");
135
+ item.className = kind;
136
+ item.textContent = message;
137
+ return item;
138
+ }
139
+
140
+ function armNode(arm) {
141
+ const row = document.createElement("div");
142
+ row.className = "campaign-arm-row";
143
+ const identity = document.createElement("span");
144
+ const armId = document.createElement("strong");
145
+ armId.textContent = arm.arm_id;
146
+ const release = document.createElement("small");
147
+ release.textContent = arm.release_id;
148
+ identity.append(armId, release);
149
+ const family = document.createElement("span");
150
+ family.className = "mono-tag";
151
+ family.textContent = arm.family;
152
+ row.append(identity, family);
153
+ return row;
154
+ }
155
+
156
+ function cellRow(cell) {
157
+ const row = document.createElement("tr");
158
+ const values = [
159
+ shortHash(cell.cell_id, 9),
160
+ `${cell.benchmark_id} / ${cell.split}`,
161
+ cell.unit_id,
162
+ cell.model_slot,
163
+ String(cell.seed),
164
+ cell.arm_ids.join(", "),
165
+ ];
166
+ values.forEach((value) => {
167
+ const column = document.createElement("td");
168
+ column.textContent = value;
169
+ row.append(column);
170
+ });
171
+ return row;
172
+ }
173
+
174
+ function renderCampaignPreparation(preparation) {
175
+ campaignState.preparation = preparation;
176
+ const ready = preparation.preflight.ready;
177
+ const plan = preparation.plan;
178
+ byId("campaign-preflight-state").textContent = ready ? "READY" : "BLOCKED";
179
+ byId("campaign-preflight-state").className = ready
180
+ ? "validation-state valid"
181
+ : "validation-state invalid";
182
+ byId("campaign-preflight-title").textContent = ready
183
+ ? "Exact plan materialized"
184
+ : "Preflight found blockers";
185
+ byId("campaign-preflight-copy").textContent = ready
186
+ ? "No benchmark cell has run. Review every identity before confirmation."
187
+ : "Resolve the server-side prerequisites, then preflight this profile again.";
188
+ byId("campaign-stat-cells").textContent = plan ? String(plan.cell_count) : "0";
189
+ byId("campaign-stat-targets").textContent = String(
190
+ preparation.manifest.benchmarks.length,
191
+ );
192
+ byId("campaign-stat-arms").textContent = String(
193
+ preparation.manifest.arms.length,
194
+ );
195
+ byId("campaign-stat-grid").textContent =
196
+ `${preparation.manifest.model_slots.length} × ${preparation.manifest.seeds.length}`;
197
+ byId("campaign-study-stage").textContent =
198
+ `${preparation.manifest.stage} · ${preparation.manifest.estimand_profile_kind}`;
199
+
200
+ const blockers = preparation.preflight.blockers;
201
+ const warnings = preparation.preflight.warnings;
202
+ byId("campaign-blocker-count").textContent =
203
+ `${blockers.length} blocker${blockers.length === 1 ? "" : "s"}`;
204
+ const issues = [];
205
+ blockers.forEach((message) => issues.push(issueNode(message, "")));
206
+ warnings.forEach((message) => issues.push(issueNode(message, "warning")));
207
+ if (!issues.length) {
208
+ issues.push(issueNode("All configured preflight gates passed.", "ok"));
209
+ }
210
+ byId("campaign-blockers").replaceChildren(...issues);
211
+ byId("campaign-arms").replaceChildren(
212
+ ...preparation.manifest.arms.map(armNode),
213
+ );
214
+
215
+ if (plan) {
216
+ byId("campaign-plan-identity").textContent =
217
+ `PLAN ${shortHash(plan.plan_hash, 18)}`;
218
+ const rows = plan.cells.map(cellRow);
219
+ if (plan.preview_truncated) {
220
+ const truncated = document.createElement("tr");
221
+ const note = document.createElement("td");
222
+ note.colSpan = 6;
223
+ note.className = "empty-row";
224
+ note.textContent =
225
+ `Showing ${plan.preview_count} of ${plan.cell_count} frozen cells.`;
226
+ truncated.append(note);
227
+ rows.push(truncated);
228
+ }
229
+ byId("campaign-cells-body").replaceChildren(...rows);
230
+ } else {
231
+ byId("campaign-plan-identity").textContent = "No plan hash";
232
+ const row = document.createElement("tr");
233
+ const note = document.createElement("td");
234
+ note.colSpan = 6;
235
+ note.className = "empty-row";
236
+ note.textContent = "Blocked preflight does not create an executable plan.";
237
+ row.append(note);
238
+ byId("campaign-cells-body").replaceChildren(row);
239
+ }
240
+
241
+ const canConfirm = preparation.execution.ready_for_confirmation;
242
+ byId("campaign-confirm-checkbox").checked = false;
243
+ byId("campaign-confirm-checkbox").disabled = !canConfirm;
244
+ byId("campaign-execute-button").disabled = true;
245
+ if (canConfirm) {
246
+ byId("campaign-execution-note").textContent =
247
+ "This profile is execution-enabled. Confirmation will queue only the exact displayed plan hash.";
248
+ } else if (!preparation.profile.execution_enabled) {
249
+ byId("campaign-execution-note").textContent =
250
+ "The server profile is intentionally preflight-only.";
251
+ } else if (!preparation.execution.output_configured) {
252
+ byId("campaign-execution-note").textContent =
253
+ "No server-side campaign output root is configured.";
254
+ } else if (preparation.execution.blockers.length) {
255
+ byId("campaign-execution-note").textContent =
256
+ `Execution safety blocker: ${preparation.execution.blockers.join("; ")}`;
257
+ } else {
258
+ byId("campaign-execution-note").textContent =
259
+ "Execution remains locked while preflight has blockers.";
260
+ }
261
+ }
262
+
263
+ async function preflightCampaign() {
264
+ if (!campaignState.profile) return;
265
+ const button = byId("campaign-preflight-button");
266
+ button.disabled = true;
267
+ button.classList.add("running");
268
+ byId("campaign-preflight-state").textContent = "CHECKING";
269
+ byId("campaign-preflight-state").className = "validation-state checking";
270
+ try {
271
+ const preparation = await campaignRequest("/api/campaigns/preflight", {
272
+ method: "POST",
273
+ body: JSON.stringify({ profile_id: campaignState.profile.id }),
274
+ });
275
+ renderCampaignPreparation(preparation);
276
+ showCampaignToast(
277
+ preparation.preflight.ready
278
+ ? "Exact plan materialized. No cells executed."
279
+ : "Preflight completed with blockers.",
280
+ );
281
+ } catch (error) {
282
+ resetCampaignPreparation();
283
+ byId("campaign-preflight-state").textContent = "FAILED";
284
+ byId("campaign-preflight-state").className = "validation-state invalid";
285
+ showCampaignToast(error.message);
286
+ } finally {
287
+ button.classList.remove("running");
288
+ button.disabled = false;
289
+ }
290
+ }
291
+
292
+ function executionRow(record) {
293
+ const row = document.createElement("tr");
294
+ const progress = record.progress;
295
+ const resultIdentity = record.result_identity
296
+ ? shortHash(record.result_identity.artifact_identity_sha256, 12)
297
+ : "—";
298
+ const values = [
299
+ shortHash(record.id, 9),
300
+ record.profile_id,
301
+ record.status,
302
+ `${progress.completed_cells}/${progress.total_cells}`,
303
+ shortHash(record.plan_hash, 10),
304
+ resultIdentity,
305
+ ];
306
+ values.forEach((value, index) => {
307
+ const cell = document.createElement("td");
308
+ cell.textContent = value;
309
+ if (index === 2) {
310
+ const status = document.createElement("span");
311
+ status.className = `run-table-status ${record.status}`;
312
+ status.textContent = value;
313
+ cell.replaceChildren(status);
314
+ }
315
+ row.append(cell);
316
+ });
317
+ return row;
318
+ }
319
+
320
+ function renderCampaignExecutions() {
321
+ const body = byId("campaign-executions-body");
322
+ if (!campaignState.executions.length) {
323
+ const row = document.createElement("tr");
324
+ const cell = document.createElement("td");
325
+ cell.colSpan = 6;
326
+ cell.className = "empty-row";
327
+ cell.textContent = "No campaign execution has been queued.";
328
+ row.append(cell);
329
+ body.replaceChildren(row);
330
+ return;
331
+ }
332
+ body.replaceChildren(...campaignState.executions.map(executionRow));
333
+ }
334
+
335
+ async function refreshCampaignExecutions() {
336
+ try {
337
+ const payload = await campaignRequest("/api/campaigns/executions");
338
+ campaignState.executions = payload.executions;
339
+ renderCampaignExecutions();
340
+ const active = payload.executions.some((record) =>
341
+ ["queued", "running"].includes(record.status)
342
+ );
343
+ if (active && !campaignState.pollTimer) {
344
+ campaignState.pollTimer = window.setInterval(
345
+ refreshCampaignExecutions,
346
+ 1600,
347
+ );
348
+ } else if (!active && campaignState.pollTimer) {
349
+ window.clearInterval(campaignState.pollTimer);
350
+ campaignState.pollTimer = null;
351
+ }
352
+ } catch (error) {
353
+ showCampaignToast(error.message);
354
+ }
355
+ }
356
+
357
+ async function executeCampaign() {
358
+ const preparation = campaignState.preparation;
359
+ if (!preparation || !preparation.plan) return;
360
+ const button = byId("campaign-execute-button");
361
+ button.disabled = true;
362
+ button.classList.add("running");
363
+ try {
364
+ await campaignRequest("/api/campaigns/executions", {
365
+ method: "POST",
366
+ body: JSON.stringify({
367
+ profile_id: preparation.profile.id,
368
+ plan_id: preparation.plan.id,
369
+ plan_hash: preparation.plan.plan_hash,
370
+ confirmation: preparation.execution.confirmation_phrase,
371
+ }),
372
+ });
373
+ byId("campaign-confirm-checkbox").checked = false;
374
+ byId("campaign-confirm-checkbox").disabled = true;
375
+ showCampaignToast("Confirmed frozen plan queued.");
376
+ await refreshCampaignExecutions();
377
+ } catch (error) {
378
+ button.disabled = false;
379
+ showCampaignToast(error.message);
380
+ } finally {
381
+ button.classList.remove("running");
382
+ }
383
+ }
384
+
385
+ async function bootCampaigns() {
386
+ try {
387
+ const catalog = await campaignRequest("/api/campaigns/profiles");
388
+ campaignState.catalog = catalog;
389
+ byId("campaign-profile-count").textContent =
390
+ `${catalog.profiles.length} allowlisted profile${catalog.profiles.length === 1 ? "" : "s"}`;
391
+ const executable = catalog.profiles.some(
392
+ (profile) => profile.execution_configured,
393
+ );
394
+ byId("campaign-mode-state").textContent = executable
395
+ ? "CONFIRMED EXECUTION"
396
+ : "PREFLIGHT ONLY";
397
+ byId("campaign-unconfigured").hidden = catalog.configured;
398
+ byId("campaign-profile-content").hidden = !catalog.configured;
399
+ byId("campaign-api-dot").classList.toggle("offline", !catalog.configured);
400
+ renderCampaignProfiles();
401
+ if (catalog.profiles.length) selectCampaignProfile(catalog.profiles[0]);
402
+ await refreshCampaignExecutions();
403
+ } catch (error) {
404
+ byId("campaign-unconfigured").hidden = false;
405
+ byId("campaign-profile-content").hidden = true;
406
+ byId("campaign-api-dot").classList.add("offline");
407
+ showCampaignToast(error.message);
408
+ }
409
+ }
410
+
411
+ byId("campaign-preflight-button").addEventListener("click", preflightCampaign);
412
+ byId("campaign-confirm-checkbox").addEventListener("change", (event) => {
413
+ const preparation = campaignState.preparation;
414
+ byId("campaign-execute-button").disabled = !(
415
+ event.target.checked
416
+ && preparation
417
+ && preparation.execution.ready_for_confirmation
418
+ );
419
+ });
420
+ byId("campaign-execute-button").addEventListener("click", executeCampaign);
421
+ byId("campaign-refresh-executions").addEventListener(
422
+ "click",
423
+ refreshCampaignExecutions,
424
+ );
425
+
426
+ bootCampaigns();
@@ -0,0 +1,192 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="color-scheme" content="dark">
7
+ <title>AgentInputLab Studio</title>
8
+ <link rel="stylesheet" href="/styles.css">
9
+ <script src="/app.js" defer></script>
10
+ </head>
11
+ <body>
12
+ <div class="app-shell">
13
+ <aside class="sidebar">
14
+ <a class="brand" href="/" aria-label="AgentInputLab Studio home">
15
+ <span class="brand-mark" aria-hidden="true">AI</span>
16
+ <span><strong>AgentInputLab</strong><small>Experiment Studio</small></span>
17
+ </a>
18
+ <nav class="primary-nav" aria-label="Studio navigation">
19
+ <a class="nav-link active" href="#configure"><span>01</span>Configure</a>
20
+ <a class="nav-link" href="/campaigns"><span>02</span>Campaigns</a>
21
+ <a class="nav-link" href="#runs"><span>03</span>Run queue</a>
22
+ <a class="nav-link" href="/result"><span>04</span>Results</a>
23
+ </nav>
24
+ <div class="sidebar-spacer"></div>
25
+ <div class="local-policy">
26
+ <div class="policy-heading"><span class="status-dot" id="api-dot"></span>Local runtime</div>
27
+ <p>Loopback only. No credentials, shell commands, or network runs are accepted.</p>
28
+ </div>
29
+ <div class="build-label">STUDIO / ALPHA 01</div>
30
+ </aside>
31
+
32
+ <main class="main-canvas">
33
+ <header class="topbar entrance">
34
+ <div>
35
+ <p class="eyebrow">CONTROLLED EXECUTION WORKSPACE</p>
36
+ <h1>Configure an experiment</h1>
37
+ </div>
38
+ <div class="topbar-meta">
39
+ <span id="catalog-count">Loading registry…</span>
40
+ <span class="local-chip">OFFLINE</span>
41
+ </div>
42
+ </header>
43
+
44
+ <section id="configure" class="workflow entrance entrance-delay-1" aria-labelledby="workflow-title">
45
+ <h2 id="workflow-title" class="sr-only">Experiment configuration workflow</h2>
46
+ <div class="step-rail" role="tablist" aria-label="Configuration sections">
47
+ <button class="step active" type="button" role="tab" aria-selected="true" data-step="method">
48
+ <span>01</span><strong>Method</strong><small>Algorithm + version</small>
49
+ </button>
50
+ <button class="step" type="button" role="tab" aria-selected="false" data-step="runtime">
51
+ <span>02</span><strong>Runtime</strong><small>Backend + limits</small>
52
+ </button>
53
+ <button class="step" type="button" role="tab" aria-selected="false" data-step="data">
54
+ <span>03</span><strong>Data</strong><small>Task + sample</small>
55
+ </button>
56
+ <button class="step" type="button" role="tab" aria-selected="false" data-step="controls">
57
+ <span>04</span><strong>Controls</strong><small>Fair comparison</small>
58
+ </button>
59
+ </div>
60
+
61
+ <form id="run-form" novalidate>
62
+ <div class="workspace-grid">
63
+ <div class="config-pane">
64
+ <section class="config-section active" data-panel="method" role="tabpanel">
65
+ <div class="section-heading">
66
+ <div><p class="section-index">01 / METHOD</p><h2>Select the intervention</h2></div>
67
+ <p>Every version comes from the frozen registry. Studio-ready is narrower than registry-ready.</p>
68
+ </div>
69
+ <div class="field-grid two">
70
+ <label class="field">
71
+ <span>Algorithm</span>
72
+ <select id="algorithm" name="algorithm_id" required></select>
73
+ <small id="algorithm-family">Semantic family</small>
74
+ </label>
75
+ <label class="field">
76
+ <span>Version profile</span>
77
+ <select id="release" name="release_id" required></select>
78
+ <small id="release-status">Runtime profile</small>
79
+ </label>
80
+ </div>
81
+ <div class="method-note" id="method-note">
82
+ <span class="mono-tag">PROFILE</span>
83
+ <p>Select a method to inspect its implementation boundary.</p>
84
+ </div>
85
+ </section>
86
+
87
+ <section class="config-section" data-panel="runtime" role="tabpanel" hidden>
88
+ <div class="section-heading">
89
+ <div><p class="section-index">02 / RUNTIME</p><h2>Pin the execution context</h2></div>
90
+ <p>Only deterministic replay is enabled in this local Studio build.</p>
91
+ </div>
92
+ <label class="field full-field">
93
+ <span>Model backend</span>
94
+ <select id="backend" name="backend_id" required></select>
95
+ <small id="backend-note">Backend capability</small>
96
+ </label>
97
+ <div class="parameter-grid">
98
+ <label class="field compact"><span>Seed</span><input id="seed" type="number" min="0" max="2147483647" step="1"></label>
99
+ <label class="field compact"><span>Samples</span><input id="sample-limit" type="number" min="1" max="4" step="1"></label>
100
+ <label class="field compact"><span>Top k</span><input id="top-k" type="number" min="1" max="10" step="1"></label>
101
+ <label class="field compact"><span>Temperature</span><input id="temperature" type="number" min="0" max="2" step="0.1"></label>
102
+ <label class="field compact"><span>Soft word budget</span><input id="soft-word-budget" type="number" min="1" max="4096" step="1"></label>
103
+ <label class="field compact"><span>Clarify threshold</span><input id="clarification-threshold" type="number" min="0" max="1" step="0.05"></label>
104
+ </div>
105
+ <p class="parameter-help">Parameters remain in the run manifest even when a selected algorithm does not consume them.</p>
106
+ </section>
107
+
108
+ <section class="config-section" data-panel="data" role="tabpanel" hidden>
109
+ <div class="section-heading">
110
+ <div><p class="section-index">03 / DATA</p><h2>Choose an evaluation cell</h2></div>
111
+ <p>Registered datasets are visible; only verified prepared assets may run.</p>
112
+ </div>
113
+ <label class="field full-field">
114
+ <span>Dataset / benchmark cell</span>
115
+ <select id="dataset" name="dataset_id" required></select>
116
+ <small id="dataset-readiness">Preparation status</small>
117
+ </label>
118
+ <div class="dataset-spec">
119
+ <dl>
120
+ <div><dt>Task</dt><dd id="dataset-task">—</dd></div>
121
+ <div><dt>Scale</dt><dd id="dataset-size">—</dd></div>
122
+ <div><dt>Metrics</dt><dd id="dataset-metrics">—</dd></div>
123
+ <div><dt>Families</dt><dd id="dataset-families">—</dd></div>
124
+ </dl>
125
+ <div class="sample-preview">
126
+ <span class="mono-tag">SAMPLE</span>
127
+ <p id="dataset-sample">A sample appears for locally prepared fixtures.</p>
128
+ </div>
129
+ </div>
130
+ </section>
131
+
132
+ <section class="config-section" data-panel="controls" role="tabpanel" hidden>
133
+ <div class="section-heading">
134
+ <div><p class="section-index">04 / CONTROLS</p><h2>Protect the comparison</h2></div>
135
+ <p>Disabling a control marks the run exploratory in the compatibility report.</p>
136
+ </div>
137
+ <div class="control-list">
138
+ <label class="toggle-row"><span><strong>Paired baseline</strong><small>Evaluate the same frozen examples before and after intervention.</small></span><input id="paired-baseline" type="checkbox"><i></i></label>
139
+ <label class="toggle-row"><span><strong>Fixed seed</strong><small>Derive every sample seed from one recorded run seed.</small></span><input id="fixed-seed" type="checkbox"><i></i></label>
140
+ <label class="toggle-row"><span><strong>Shared retriever</strong><small>Use exactly one corpus, tokenizer, BM25 k1, and b configuration.</small></span><input id="shared-retriever" type="checkbox"><i></i></label>
141
+ <label class="toggle-row"><span><strong>Freeze dependencies</strong><small>Record backend, corpus, and retriever identities in the result.</small></span><input id="freeze-dependencies" type="checkbox"><i></i></label>
142
+ <label class="toggle-row"><span><strong>Fail on fingerprint drift</strong><small>Stop if a dependency identity changes across the paired run.</small></span><input id="fail-on-drift" type="checkbox"><i></i></label>
143
+ </div>
144
+ </section>
145
+ </div>
146
+
147
+ <aside class="inspector" aria-live="polite">
148
+ <div class="inspector-heading">
149
+ <p class="section-index">COMPATIBILITY</p>
150
+ <span class="validation-state checking" id="validation-state">CHECKING</span>
151
+ </div>
152
+ <h3 id="compatibility-title">Validating configuration</h3>
153
+ <p id="compatibility-copy">The Studio is checking release, backend, data, and fairness constraints.</p>
154
+ <ul class="issue-list" id="issue-list"></ul>
155
+ <div class="manifest-preview">
156
+ <p class="section-index">RUN MANIFEST</p>
157
+ <dl>
158
+ <div><dt>Profile</dt><dd id="manifest-release">—</dd></div>
159
+ <div><dt>Backend</dt><dd id="manifest-backend">—</dd></div>
160
+ <div><dt>Dataset</dt><dd id="manifest-dataset">—</dd></div>
161
+ <div><dt>Mode</dt><dd id="manifest-mode">confirmatory</dd></div>
162
+ </dl>
163
+ </div>
164
+ </aside>
165
+ </div>
166
+
167
+ <div class="run-bar">
168
+ <div><span class="status-dot"></span><p><strong>Local queue</strong><small id="queue-summary">No active runs</small></p></div>
169
+ <button id="run-button" class="primary-action" type="submit" disabled>
170
+ <span>Queue experiment</span><b aria-hidden="true">↗</b>
171
+ </button>
172
+ </div>
173
+ </form>
174
+ </section>
175
+
176
+ <section id="runs" class="runs-section entrance entrance-delay-2" aria-labelledby="runs-title">
177
+ <div class="runs-heading">
178
+ <div><p class="eyebrow">EXECUTION LOG</p><h2 id="runs-title">Run queue</h2></div>
179
+ <button class="text-button" id="refresh-runs" type="button">Refresh</button>
180
+ </div>
181
+ <div class="runs-table-wrap">
182
+ <table class="runs-table">
183
+ <thead><tr><th>Run</th><th>Profile</th><th>Dataset</th><th>Status</th><th>Quality</th><th>Cost</th><th></th></tr></thead>
184
+ <tbody id="runs-body"><tr><td colspan="7" class="empty-row">No experiments queued in this session.</td></tr></tbody>
185
+ </table>
186
+ </div>
187
+ </section>
188
+ </main>
189
+ </div>
190
+ <div class="toast" id="toast" role="status" aria-live="polite"></div>
191
+ </body>
192
+ </html>