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.
- agentinputlab/__init__.py +28 -0
- agentinputlab/algorithms/__init__.py +6 -0
- agentinputlab/algorithms/acquire/__init__.py +145 -0
- agentinputlab/algorithms/acquire/adaptive_rag/__init__.py +43 -0
- agentinputlab/algorithms/acquire/adaptive_rag/replay.py +367 -0
- agentinputlab/algorithms/acquire/adaptive_rag/runtime.py +1202 -0
- agentinputlab/algorithms/acquire/adaptive_rag_common_support.py +542 -0
- agentinputlab/algorithms/acquire/hyde.py +296 -0
- agentinputlab/algorithms/acquire/hyde_controlled.py +200 -0
- agentinputlab/algorithms/acquire/hyde_external.py +148 -0
- agentinputlab/algorithms/acquire/ircot.py +28 -0
- agentinputlab/algorithms/acquire/ircot_common_support.py +478 -0
- agentinputlab/algorithms/acquire/ircot_native.py +355 -0
- agentinputlab/algorithms/acquire/ircot_replay.py +327 -0
- agentinputlab/algorithms/acquire/qrag/__init__.py +79 -0
- agentinputlab/algorithms/acquire/qrag/bridge.py +828 -0
- agentinputlab/algorithms/acquire/qrag/common_support.py +891 -0
- agentinputlab/algorithms/acquire/qrag/native_axis.py +71 -0
- agentinputlab/algorithms/acquire/qrag/reader_adapter.py +139 -0
- agentinputlab/algorithms/acquire/r2ag/__init__.py +57 -0
- agentinputlab/algorithms/acquire/r2ag/bridge.py +1312 -0
- agentinputlab/algorithms/acquire/r2ag/common_support.py +1029 -0
- agentinputlab/algorithms/acquire/r2ag/socket_runtime.py +255 -0
- agentinputlab/algorithms/clarify/__init__.py +61 -0
- agentinputlab/algorithms/clarify/_structured.py +64 -0
- agentinputlab/algorithms/clarify/active_task_disambiguation.py +371 -0
- agentinputlab/algorithms/clarify/ask_or_assume/__init__.py +17 -0
- agentinputlab/algorithms/clarify/ask_or_assume/monitor.py +410 -0
- agentinputlab/algorithms/clarify/future_turns.py +379 -0
- agentinputlab/algorithms/clarify/udcs.py +255 -0
- agentinputlab/algorithms/clarify/udcs_deterministic.py +196 -0
- agentinputlab/algorithms/curate/__init__.py +65 -0
- agentinputlab/algorithms/curate/acon/__init__.py +27 -0
- agentinputlab/algorithms/curate/acon/common.py +284 -0
- agentinputlab/algorithms/curate/acon/common_support.py +136 -0
- agentinputlab/algorithms/curate/acon/history_bridge.py +309 -0
- agentinputlab/algorithms/curate/acon/observation_bridge.py +290 -0
- agentinputlab/algorithms/curate/llmlingua/__init__.py +30 -0
- agentinputlab/algorithms/curate/llmlingua/adapters.py +537 -0
- agentinputlab/algorithms/curate/llmlingua/budget.py +48 -0
- agentinputlab/algorithms/curate/llmlingua/controlled.py +175 -0
- agentinputlab/algorithms/curate/llmlingua/multilingual.py +105 -0
- agentinputlab/algorithms/curate/llmlingua/span_map.py +167 -0
- agentinputlab/algorithms/curate/recomp/__init__.py +47 -0
- agentinputlab/algorithms/curate/recomp/external.py +1129 -0
- agentinputlab/algorithms/curate/recomp/selective.py +304 -0
- agentinputlab/algorithms/decompose/__init__.py +107 -0
- agentinputlab/algorithms/decompose/decomp/__init__.py +53 -0
- agentinputlab/algorithms/decompose/decomp/common_support.py +478 -0
- agentinputlab/algorithms/decompose/decomp/planner_component.py +199 -0
- agentinputlab/algorithms/decompose/decomp/worker_bridge.py +416 -0
- agentinputlab/algorithms/decompose/llm_compiler/__init__.py +35 -0
- agentinputlab/algorithms/decompose/llm_compiler/bridge.py +520 -0
- agentinputlab/algorithms/decompose/llm_compiler/common_support.py +504 -0
- agentinputlab/algorithms/decompose/plan_and_budget/__init__.py +43 -0
- agentinputlab/algorithms/decompose/plan_and_budget/cached_soft_budget.py +362 -0
- agentinputlab/algorithms/decompose/plan_and_budget/decomposer_component.py +107 -0
- agentinputlab/algorithms/decompose/plan_and_budget/full.py +205 -0
- agentinputlab/algorithms/decompose/plan_and_budget/hard_cap.py +246 -0
- agentinputlab/algorithms/decompose/plan_and_budget/regenerated_soft_budget.py +448 -0
- agentinputlab/algorithms/decompose/plan_and_solve/__init__.py +33 -0
- agentinputlab/algorithms/decompose/plan_and_solve/plan_component.py +192 -0
- agentinputlab/algorithms/decompose/plan_and_solve/ps_prompt.py +127 -0
- agentinputlab/algorithms/decompose/self_ask/__init__.py +27 -0
- agentinputlab/algorithms/decompose/self_ask/loop.py +362 -0
- agentinputlab/algorithms/decompose/self_ask/planner_component.py +117 -0
- agentinputlab/algorithms/reformulate/__init__.py +85 -0
- agentinputlab/algorithms/reformulate/infocqr/__init__.py +40 -0
- agentinputlab/algorithms/reformulate/infocqr/cache_replay.py +362 -0
- agentinputlab/algorithms/reformulate/infocqr/external.py +675 -0
- agentinputlab/algorithms/reformulate/infocqr/student.py +189 -0
- agentinputlab/algorithms/reformulate/query2doc/__init__.py +42 -0
- agentinputlab/algorithms/reformulate/query2doc/controlled_live.py +190 -0
- agentinputlab/algorithms/reformulate/query2doc/models.py +95 -0
- agentinputlab/algorithms/reformulate/query2doc/official_cached.py +335 -0
- agentinputlab/algorithms/reformulate/query2doc/querygym_bridge.py +223 -0
- agentinputlab/algorithms/reformulate/query2doc/querygym_runtime.py +326 -0
- agentinputlab/algorithms/reformulate/reformer/__init__.py +23 -0
- agentinputlab/algorithms/reformulate/reformer/external.py +417 -0
- agentinputlab/algorithms/reformulate/rrr.py +696 -0
- agentinputlab/annotation/__init__.py +5 -0
- agentinputlab/annotation/independent.py +428 -0
- agentinputlab/annotation/server.py +233 -0
- agentinputlab/annotation/static/app.js +121 -0
- agentinputlab/annotation/static/index.html +60 -0
- agentinputlab/annotation/static/review.css +2 -0
- agentinputlab/annotation/static/review.html +10 -0
- agentinputlab/annotation/static/review.js +11 -0
- agentinputlab/annotation/static/styles.css +55 -0
- agentinputlab/annotation/store.py +444 -0
- agentinputlab/api.py +368 -0
- agentinputlab/artifacts/__init__.py +15 -0
- agentinputlab/artifacts/json_file.py +104 -0
- agentinputlab/artifacts/manifest.py +98 -0
- agentinputlab/artifacts/store.py +157 -0
- agentinputlab/backends/__init__.py +98 -0
- agentinputlab/backends/embedding/__init__.py +25 -0
- agentinputlab/backends/embedding/base.py +145 -0
- agentinputlab/backends/embedding/callable.py +75 -0
- agentinputlab/backends/embedding/replay.py +129 -0
- agentinputlab/backends/llm/__init__.py +31 -0
- agentinputlab/backends/llm/base.py +149 -0
- agentinputlab/backends/llm/callable.py +108 -0
- agentinputlab/backends/llm/decomp_completion.py +88 -0
- agentinputlab/backends/llm/final_content_stop.py +72 -0
- agentinputlab/backends/llm/gpt_oss_final_channel.py +84 -0
- agentinputlab/backends/llm/openai_compatible.py +332 -0
- agentinputlab/backends/llm/transformers.py +171 -0
- agentinputlab/backends/retrieval/__init__.py +35 -0
- agentinputlab/backends/retrieval/base.py +50 -0
- agentinputlab/backends/retrieval/dense.py +777 -0
- agentinputlab/backends/retrieval/memory.py +119 -0
- agentinputlab/backends/retrieval/sqlite_fts.py +155 -0
- agentinputlab/backends/user/__init__.py +15 -0
- agentinputlab/backends/user/base.py +66 -0
- agentinputlab/backends/user/callable.py +54 -0
- agentinputlab/backends/user/replay.py +89 -0
- agentinputlab/backends/vector.py +38 -0
- agentinputlab/benchmarks/__init__.py +246 -0
- agentinputlab/benchmarks/acquisition.py +106 -0
- agentinputlab/benchmarks/ale.py +540 -0
- agentinputlab/benchmarks/appworld_ul.py +669 -0
- agentinputlab/benchmarks/assets.py +226 -0
- agentinputlab/benchmarks/base.py +68 -0
- agentinputlab/benchmarks/beir_archive.py +235 -0
- agentinputlab/benchmarks/beir_sample.py +269 -0
- agentinputlab/benchmarks/bfcl_native.py +245 -0
- agentinputlab/benchmarks/bfcl_v3.py +607 -0
- agentinputlab/benchmarks/cache.py +218 -0
- agentinputlab/benchmarks/clariq.py +203 -0
- agentinputlab/benchmarks/data/registry.json +321 -0
- agentinputlab/benchmarks/data/smoke_assets.json +511 -0
- agentinputlab/benchmarks/data/statebench_v0_8_1_task_ids.json +475 -0
- agentinputlab/benchmarks/data/toolsandbox_165848b_scenario_names.json +1 -0
- agentinputlab/benchmarks/execution.py +1111 -0
- agentinputlab/benchmarks/interactive.py +257 -0
- agentinputlab/benchmarks/ir_query.py +204 -0
- agentinputlab/benchmarks/longbench.py +203 -0
- agentinputlab/benchmarks/paired_replay.py +479 -0
- agentinputlab/benchmarks/preprocess.py +2313 -0
- agentinputlab/benchmarks/production.py +236 -0
- agentinputlab/benchmarks/qa.py +963 -0
- agentinputlab/benchmarks/registry.py +110 -0
- agentinputlab/benchmarks/retrieval.py +459 -0
- agentinputlab/benchmarks/runtime.py +509 -0
- agentinputlab/benchmarks/statebench.py +938 -0
- agentinputlab/benchmarks/tau3.py +725 -0
- agentinputlab/benchmarks/toolsandbox.py +626 -0
- agentinputlab/benchmarks/trec_dl_sample.py +263 -0
- agentinputlab/campaign.py +654 -0
- agentinputlab/campaign_runner.py +953 -0
- agentinputlab/cli/__init__.py +6 -0
- agentinputlab/cli/main.py +933 -0
- agentinputlab/connectors/__init__.py +46 -0
- agentinputlab/connectors/knowledge/__init__.py +4 -0
- agentinputlab/connectors/tools/__init__.py +30 -0
- agentinputlab/connectors/tools/base.py +57 -0
- agentinputlab/connectors/tools/mcp.py +222 -0
- agentinputlab/connectors/tools/memory.py +41 -0
- agentinputlab/connectors/tools/openapi.py +695 -0
- agentinputlab/connectors/tools/schema.py +102 -0
- agentinputlab/contracts/__init__.py +91 -0
- agentinputlab/contracts/availability.py +24 -0
- agentinputlab/contracts/dependency.py +58 -0
- agentinputlab/contracts/enums.py +82 -0
- agentinputlab/contracts/errors.py +63 -0
- agentinputlab/contracts/evidence.py +43 -0
- agentinputlab/contracts/intent.py +110 -0
- agentinputlab/contracts/lifecycle.py +164 -0
- agentinputlab/contracts/patch.py +167 -0
- agentinputlab/contracts/serialization.py +93 -0
- agentinputlab/contracts/state.py +127 -0
- agentinputlab/contracts/trace.py +59 -0
- agentinputlab/contracts/worker.py +42 -0
- agentinputlab/core/__init__.py +7 -0
- agentinputlab/data/__init__.py +32 -0
- agentinputlab/data/checksums.py +9 -0
- agentinputlab/data/downloader.py +235 -0
- agentinputlab/data/http.py +171 -0
- agentinputlab/data/index.py +21 -0
- agentinputlab/data/overlap.py +28 -0
- agentinputlab/data/preprocess.py +32 -0
- agentinputlab/data/storage.py +57 -0
- agentinputlab/data/trec_sample.py +427 -0
- agentinputlab/evaluation/__init__.py +5 -0
- agentinputlab/evaluation/outcomes.py +32 -0
- agentinputlab/experiments/__init__.py +278 -0
- agentinputlab/experiments/analysis.py +981 -0
- agentinputlab/experiments/artifacts.py +687 -0
- agentinputlab/experiments/automatic_measurement.py +678 -0
- agentinputlab/experiments/auxiliary_matrix.py +203 -0
- agentinputlab/experiments/bindings.py +430 -0
- agentinputlab/experiments/blueprints.py +147 -0
- agentinputlab/experiments/builders/__init__.py +45 -0
- agentinputlab/experiments/builders/executable_external_payload.py +423 -0
- agentinputlab/experiments/builders/external_process_arena.py +1018 -0
- agentinputlab/experiments/builders/registry_intervention.py +463 -0
- agentinputlab/experiments/cli.py +158 -0
- agentinputlab/experiments/controls.py +340 -0
- agentinputlab/experiments/driver_guard.py +205 -0
- agentinputlab/experiments/drivers/__init__.py +89 -0
- agentinputlab/experiments/drivers/external_arena.py +2908 -0
- agentinputlab/experiments/drivers/method_process.py +662 -0
- agentinputlab/experiments/drivers/parity_process.py +1484 -0
- agentinputlab/experiments/drivers/static_production.py +1574 -0
- agentinputlab/experiments/executor.py +448 -0
- agentinputlab/experiments/loader.py +605 -0
- agentinputlab/experiments/measurement.py +675 -0
- agentinputlab/experiments/paper_analysis.py +1818 -0
- agentinputlab/experiments/parity_identity.py +605 -0
- agentinputlab/experiments/plan.py +277 -0
- agentinputlab/experiments/production_builders.py +3739 -0
- agentinputlab/experiments/readiness.py +432 -0
- agentinputlab/experiments/schema.py +514 -0
- agentinputlab/experiments/secrets.py +177 -0
- agentinputlab/experiments/stateful_analysis.py +1738 -0
- agentinputlab/experiments/transfer_analysis.py +1316 -0
- agentinputlab/experiments/unseen_analysis.py +1025 -0
- agentinputlab/integrations/__init__.py +1 -0
- agentinputlab/integrations/action_space/__init__.py +1 -0
- agentinputlab/integrations/external_workers/__init__.py +76 -0
- agentinputlab/integrations/external_workers/ace.py +431 -0
- agentinputlab/integrations/external_workers/base.py +181 -0
- agentinputlab/integrations/external_workers/decomp_live.py +249 -0
- agentinputlab/integrations/external_workers/decomp_planner.py +30 -0
- agentinputlab/integrations/external_workers/infocqr_student.py +280 -0
- agentinputlab/integrations/external_workers/ircot.py +576 -0
- agentinputlab/integrations/external_workers/llmcompiler_live.py +360 -0
- agentinputlab/integrations/external_workers/longllmlingua.py +162 -0
- agentinputlab/integrations/external_workers/method.py +314 -0
- agentinputlab/integrations/external_workers/process.py +678 -0
- agentinputlab/integrations/external_workers/supervisor.py +1071 -0
- agentinputlab/integrations/full_architecture/__init__.py +1 -0
- agentinputlab/integrations/full_architecture/hyde.py +212 -0
- agentinputlab/integrations/full_architecture/plan_and_budget.py +188 -0
- agentinputlab/integrations/live_history.py +222 -0
- agentinputlab/integrations/prompt_optimization/__init__.py +1 -0
- agentinputlab/integrations/training/__init__.py +1 -0
- agentinputlab/metrics/__init__.py +50 -0
- agentinputlab/metrics/catalog.py +313 -0
- agentinputlab/metrics/harm.py +95 -0
- agentinputlab/metrics/paired.py +40 -0
- agentinputlab/metrics/qa.py +76 -0
- agentinputlab/metrics/text.py +33 -0
- agentinputlab/metrics/third_party.py +161 -0
- agentinputlab/models/__init__.py +4 -0
- agentinputlab/observability/__init__.py +56 -0
- agentinputlab/observability/budget.py +316 -0
- agentinputlab/observability/instrumentation.py +754 -0
- agentinputlab/observability/models.py +403 -0
- agentinputlab/observability/monitor.py +380 -0
- agentinputlab/optimizers/__init__.py +1 -0
- agentinputlab/optimizers/clarify/__init__.py +12 -0
- agentinputlab/optimizers/context/__init__.py +22 -0
- agentinputlab/optimizers/decompose/__init__.py +64 -0
- agentinputlab/optimizers/evidence/__init__.py +22 -0
- agentinputlab/optimizers/rewrite/__init__.py +30 -0
- agentinputlab/parity/__init__.py +5 -0
- agentinputlab/parity/base.py +206 -0
- agentinputlab/production_campaign.py +763 -0
- agentinputlab/py.typed +1 -0
- agentinputlab/recipes/__init__.py +333 -0
- agentinputlab/recipes/ace.py +418 -0
- agentinputlab/recipes/ace_bfcl.py +273 -0
- agentinputlab/recipes/ace_common_support.py +169 -0
- agentinputlab/recipes/ace_native_plan.py +322 -0
- agentinputlab/recipes/ace_online.py +711 -0
- agentinputlab/recipes/ace_retrieval.py +330 -0
- agentinputlab/recipes/ace_statebench.py +382 -0
- agentinputlab/recipes/ace_tau.py +463 -0
- agentinputlab/recipes/ace_toolsandbox.py +432 -0
- agentinputlab/recipes/acon_guideline.py +22 -0
- agentinputlab/recipes/adaptive_rag.py +822 -0
- agentinputlab/recipes/llmlingua2_inference.py +146 -0
- agentinputlab/recipes/llmlingua2_training.py +796 -0
- agentinputlab/recipes/mce.py +1486 -0
- agentinputlab/recipes/mce_final.py +335 -0
- agentinputlab/recipes/mce_text_fit.py +499 -0
- agentinputlab/recipes/mce_text_only.py +298 -0
- agentinputlab/recipes/qrag.py +729 -0
- agentinputlab/recipes/qrag_inference.py +364 -0
- agentinputlab/recipes/r2ag_features.py +236 -0
- agentinputlab/recipes/r2ag_inference.py +503 -0
- agentinputlab/recipes/r2ag_training.py +948 -0
- agentinputlab/recipes/recomp_abstractive.py +592 -0
- agentinputlab/recipes/recomp_extractive.py +525 -0
- agentinputlab/recipes/reformer.py +17 -0
- agentinputlab/recipes/rqrag.py +1516 -0
- agentinputlab/recipes/rqrag_common_support.py +193 -0
- agentinputlab/recipes/rqrag_completion.py +147 -0
- agentinputlab/recipes/skillopt.py +462 -0
- agentinputlab/recipes/skillopt_common_support.py +154 -0
- agentinputlab/recipes/skillopt_environment.py +165 -0
- agentinputlab/recipes/skillopt_environment_cli.py +5 -0
- agentinputlab/recipes/skillopt_retrieval.py +188 -0
- agentinputlab/recipes/smartsearch.py +897 -0
- agentinputlab/recipes/smartsearch_curriculum.py +283 -0
- agentinputlab/recipes/smartsearch_grpo_contracts.py +58 -0
- agentinputlab/recipes/smartsearch_grpo_data.py +314 -0
- agentinputlab/recipes/smartsearch_grpo_meter.py +324 -0
- agentinputlab/recipes/smartsearch_grpo_prefix.py +144 -0
- agentinputlab/recipes/smartsearch_grpo_rollout.py +119 -0
- agentinputlab/recipes/smartsearch_grpo_tools.py +364 -0
- agentinputlab/recipes/smartsearch_grpo_training.py +305 -0
- agentinputlab/recipes/smartsearch_grpo_transport.py +248 -0
- agentinputlab/recipes/smartsearch_grpo_worker.py +364 -0
- agentinputlab/recipes/smartsearch_inference.py +524 -0
- agentinputlab/recipes/smartsearch_native_data.py +172 -0
- agentinputlab/recipes/smartsearch_policy.py +616 -0
- agentinputlab/recipes/smartsearch_policy_worker.py +9 -0
- agentinputlab/recipes/smartsearch_sampling.py +232 -0
- agentinputlab/recipes/smartsearch_teacher.py +203 -0
- agentinputlab/recipes/smartsearch_training.py +265 -0
- agentinputlab/registry/__init__.py +46 -0
- agentinputlab/registry/beta.py +727 -0
- agentinputlab/registry/data/algorithms.json +1959 -0
- agentinputlab/registry/data/auxiliary_method_profiles.json +34 -0
- agentinputlab/registry/loader.py +100 -0
- agentinputlab/registry/result_manifest.py +184 -0
- agentinputlab/registry/runtime.py +195 -0
- agentinputlab/registry/schema.py +449 -0
- agentinputlab/runner/__init__.py +30 -0
- agentinputlab/runner/balance.py +248 -0
- agentinputlab/runner/cache.py +135 -0
- agentinputlab/runner/composite.py +130 -0
- agentinputlab/runner/engine.py +285 -0
- agentinputlab/runner/runtime_guard.py +268 -0
- agentinputlab/runner/worker.py +80 -0
- agentinputlab/runtime_bootstrap.py +288 -0
- agentinputlab/selectors/__init__.py +196 -0
- agentinputlab/selectors/advanced.py +1514 -0
- agentinputlab/selectors/artifacts.py +1087 -0
- agentinputlab/selectors/base.py +112 -0
- agentinputlab/selectors/campaigns.py +1893 -0
- agentinputlab/selectors/catalog.py +86 -0
- agentinputlab/selectors/discovery.py +1860 -0
- agentinputlab/selectors/evaluation.py +1348 -0
- agentinputlab/selectors/features.py +383 -0
- agentinputlab/selectors/learned.py +502 -0
- agentinputlab/selectors/no_op.py +28 -0
- agentinputlab/selectors/outcome_table.py +475 -0
- agentinputlab/selectors/producer.py +853 -0
- agentinputlab/selectors/rules.py +109 -0
- agentinputlab/selectors/runtime.py +420 -0
- agentinputlab/studies/__init__.py +16 -0
- agentinputlab/studies/design.py +165 -0
- agentinputlab/studies/paired.py +322 -0
- agentinputlab/studio/__init__.py +6 -0
- agentinputlab/studio/campaigns.py +819 -0
- agentinputlab/studio/engine.py +1408 -0
- agentinputlab/studio/model_backends.py +425 -0
- agentinputlab/studio/prepared.py +410 -0
- agentinputlab/studio/server.py +613 -0
- agentinputlab/studio/static/app.js +397 -0
- agentinputlab/studio/static/campaigns.html +175 -0
- agentinputlab/studio/static/campaigns.js +426 -0
- agentinputlab/studio/static/index.html +192 -0
- agentinputlab/studio/static/result.html +103 -0
- agentinputlab/studio/static/result.js +273 -0
- agentinputlab/studio/static/styles.css +467 -0
- agentinputlab-0.1.0a1.data/data/share/agentinputlab/CITATION.cff +22 -0
- agentinputlab-0.1.0a1.dist-info/METADATA +392 -0
- agentinputlab-0.1.0a1.dist-info/RECORD +469 -0
- agentinputlab-0.1.0a1.dist-info/WHEEL +5 -0
- agentinputlab-0.1.0a1.dist-info/entry_points.txt +6 -0
- agentinputlab-0.1.0a1.dist-info/licenses/LICENSE +21 -0
- agentinputlab-0.1.0a1.dist-info/licenses/NOTICE +31 -0
- agentinputlab-0.1.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +94 -0
- agentinputlab-0.1.0a1.dist-info/top_level.txt +2 -0
- workers/README.md +94 -0
- workers/ace/README.md +261 -0
- workers/ace/__init__.py +1 -0
- workers/ace/compatibility_manifest.json +39 -0
- workers/ace/driver.py +1682 -0
- workers/acon/README.md +215 -0
- workers/acon/__init__.py +5 -0
- workers/acon/compatibility_manifest.json +93 -0
- workers/acon/driver.py +1859 -0
- workers/acon/fitted.py +395 -0
- workers/acon/guideline.py +470 -0
- workers/acon/guideline_source_manifest.json +20 -0
- workers/adaptive_rag/README.md +96 -0
- workers/adaptive_rag/__init__.py +15 -0
- workers/adaptive_rag/compatibility_manifest.json +61 -0
- workers/adaptive_rag/driver.py +1470 -0
- workers/adaptive_rag/fixture_runtime.py +163 -0
- workers/adaptive_rag/runtime.py +252 -0
- workers/ask_or_assume/README.md +124 -0
- workers/ask_or_assume/__init__.py +1 -0
- workers/ask_or_assume/compatibility_manifest.json +36 -0
- workers/ask_or_assume/driver.py +1227 -0
- workers/decomp/README.md +133 -0
- workers/decomp/UPSTREAM_LICENSE.Apache-2.0.txt +201 -0
- workers/decomp/__init__.py +5 -0
- workers/decomp/compatibility_manifest.json +205 -0
- workers/decomp/driver.py +1015 -0
- workers/decomp/live.py +137 -0
- workers/decomp/runtime.py +231 -0
- workers/infocqr/README.md +106 -0
- workers/infocqr/__init__.py +1 -0
- workers/infocqr/compatibility_manifest.json +84 -0
- workers/infocqr/driver.py +1766 -0
- workers/ircot/README.md +167 -0
- workers/ircot/__init__.py +7 -0
- workers/ircot/compatibility_manifest.json +121 -0
- workers/ircot/controlled.py +457 -0
- workers/ircot/driver.py +1373 -0
- workers/ircot/fixture_bindings.json +39 -0
- workers/ircot/fixture_config.json +48 -0
- workers/ircot/fixture_prompt.txt +2 -0
- workers/ircot/native_qa.py +398 -0
- workers/ircot/qa_compatibility_manifest.json +57 -0
- workers/ircot/runtime.py +97 -0
- workers/llmcompiler/README.md +160 -0
- workers/llmcompiler/__init__.py +1 -0
- workers/llmcompiler/compatibility_manifest.json +45 -0
- workers/llmcompiler/driver.py +1514 -0
- workers/llmcompiler/export_prompts.py +74 -0
- workers/llmcompiler/live.py +174 -0
- workers/llmcompiler/patch_manifest.json +147 -0
- workers/mce/README.md +198 -0
- workers/mce/__init__.py +29 -0
- workers/mce/compatibility_manifest.json +115 -0
- workers/mce/driver.py +2585 -0
- workers/mce/final_eval.py +173 -0
- workers/official_arenas/README.md +25 -0
- workers/official_arenas/__init__.py +1 -0
- workers/official_arenas/capture_records.py +110 -0
- workers/official_arenas/driver.py +619 -0
- workers/official_arenas/protocol.py +334 -0
- workers/official_arenas/providers/__init__.py +1 -0
- workers/official_arenas/providers/_live_history.py +228 -0
- workers/official_arenas/providers/_message_compat.py +77 -0
- workers/official_arenas/providers/appworld_ul.py +196 -0
- workers/official_arenas/providers/fixture.py +112 -0
- workers/official_arenas/providers/statebench.py +960 -0
- workers/official_arenas/providers/tau3.py +1672 -0
- workers/official_arenas/providers/tau_retail.py +586 -0
- workers/official_arenas/providers/toolsandbox.py +1321 -0
- workers/official_arenas/providers/tooltalk.py +699 -0
- workers/official_arenas/retail_capture.py +188 -0
- workers/official_arenas/retail_driver.py +275 -0
- workers/qrag/README.md +172 -0
- workers/qrag/__init__.py +1 -0
- workers/qrag/compatibility_manifest.json +64 -0
- workers/qrag/driver.py +673 -0
- workers/r2ag/README.md +154 -0
- workers/r2ag/__init__.py +5 -0
- workers/r2ag/compatibility_manifest.json +55 -0
- workers/r2ag/driver.py +1287 -0
- workers/r2ag/feature_schema.json +8 -0
- workers/r2ag/runtime.py +589 -0
- workers/recomp/README.md +120 -0
- workers/recomp/__init__.py +1 -0
- workers/recomp/compatibility_manifest.json +43 -0
- workers/recomp/driver.py +1653 -0
- workers/reformer/README.md +125 -0
- workers/reformer/__init__.py +1 -0
- workers/reformer/compatibility_manifest.json +68 -0
- workers/reformer/driver.py +1459 -0
- workers/reformer/induction.py +457 -0
- workers/rrr/README.md +126 -0
- workers/rrr/__init__.py +1 -0
- workers/rrr/compatibility_manifest.json +57 -0
- workers/rrr/driver.py +1133 -0
- workers/smartsearch/README.md +331 -0
- workers/smartsearch/__init__.py +1 -0
- workers/smartsearch/compatibility_manifest.json +41 -0
- 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,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"]
|