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,340 @@
|
|
|
1
|
+
"""Mechanism controls that preserve visible input while retaining intervention cost."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping, Sequence
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from typing import TYPE_CHECKING, Any
|
|
8
|
+
|
|
9
|
+
from agentinputlab.contracts.enums import PatchOp, SemanticFamily, TracePhase
|
|
10
|
+
from agentinputlab.contracts.errors import ValidationError
|
|
11
|
+
from agentinputlab.contracts.lifecycle import Intervention, InterventionContext
|
|
12
|
+
from agentinputlab.contracts.patch import InputPatch, PatchOperation
|
|
13
|
+
from agentinputlab.contracts.serialization import content_hash, freeze_mapping
|
|
14
|
+
from agentinputlab.contracts.state import FrozenAgentState
|
|
15
|
+
from agentinputlab.contracts.trace import ExecutionTrace, TraceEvent
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from agentinputlab.experiments.drivers.static_production import StaticArmBuildRequest
|
|
19
|
+
|
|
20
|
+
COST_MATCHED_NO_OP_RELEASE_ID = "baseline.no_op_cost_shadow"
|
|
21
|
+
COST_MATCHED_NO_OP_BUILDER_PROTOCOL = "agentinputlab.cost-matched-no-op-builder.v1"
|
|
22
|
+
COST_MATCHED_EXTERNAL_PAYLOAD_PROTOCOL = "agentinputlab.cost-matched-external-payload-builder.v1"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass(slots=True)
|
|
26
|
+
class CostMatchedNoOpIntervention:
|
|
27
|
+
"""Run a frozen intervention, discard its patch, and preserve its measured cost."""
|
|
28
|
+
|
|
29
|
+
delegate: Intervention
|
|
30
|
+
method_id: str = "no_op_cost_shadow"
|
|
31
|
+
release_id: str = COST_MATCHED_NO_OP_RELEASE_ID
|
|
32
|
+
family: SemanticFamily = SemanticFamily.NO_OP
|
|
33
|
+
|
|
34
|
+
def __post_init__(self) -> None:
|
|
35
|
+
if not isinstance(self.delegate, Intervention):
|
|
36
|
+
raise TypeError("cost-matched NO_OP requires an Intervention delegate")
|
|
37
|
+
if self.delegate.family is SemanticFamily.NO_OP:
|
|
38
|
+
raise ValidationError("cost-matched NO_OP delegate must perform a real intervention")
|
|
39
|
+
if self.release_id != COST_MATCHED_NO_OP_RELEASE_ID:
|
|
40
|
+
raise ValidationError("cost-matched NO_OP release identity is fixed")
|
|
41
|
+
|
|
42
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
43
|
+
candidate = self.delegate.propose(state, context)
|
|
44
|
+
if not isinstance(candidate, InputPatch):
|
|
45
|
+
raise ValidationError("cost-matched NO_OP delegate returned an invalid patch")
|
|
46
|
+
if candidate.source_state_hash != state.state_hash:
|
|
47
|
+
raise ValidationError("cost-matched NO_OP delegate patch belongs to another state")
|
|
48
|
+
trace = ExecutionTrace(
|
|
49
|
+
method_id=self.method_id,
|
|
50
|
+
release_id=self.release_id,
|
|
51
|
+
events=(
|
|
52
|
+
TraceEvent(
|
|
53
|
+
phase=TracePhase.FINALIZE,
|
|
54
|
+
name="discard_intervention_patch",
|
|
55
|
+
payload={
|
|
56
|
+
"delegate_method_id": self.delegate.method_id,
|
|
57
|
+
"delegate_release_id": self.delegate.release_id,
|
|
58
|
+
"discarded_patch_hash": candidate.patch_hash,
|
|
59
|
+
"visible_input_unchanged": True,
|
|
60
|
+
},
|
|
61
|
+
),
|
|
62
|
+
),
|
|
63
|
+
counters=dict(candidate.trace.counters),
|
|
64
|
+
warnings=("delegate patch intentionally discarded for cost-only mechanism control",),
|
|
65
|
+
)
|
|
66
|
+
return InputPatch(
|
|
67
|
+
method_id=self.method_id,
|
|
68
|
+
release_id=self.release_id,
|
|
69
|
+
source_state_hash=state.state_hash,
|
|
70
|
+
operations=(
|
|
71
|
+
PatchOperation(
|
|
72
|
+
PatchOp.NO_OP,
|
|
73
|
+
rationale="cost-matched shadow preserves the original visible input",
|
|
74
|
+
),
|
|
75
|
+
),
|
|
76
|
+
trace=trace,
|
|
77
|
+
implementation_identity="cost_shadow:"
|
|
78
|
+
+ content_hash(
|
|
79
|
+
{
|
|
80
|
+
"delegate_method_id": self.delegate.method_id,
|
|
81
|
+
"delegate_release_id": self.delegate.release_id,
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
profile_kind="controlled_adapter",
|
|
85
|
+
metadata={
|
|
86
|
+
"control_kind": "optimizer_orchestration_only",
|
|
87
|
+
"delegate_method_id": self.delegate.method_id,
|
|
88
|
+
"delegate_release_id": self.delegate.release_id,
|
|
89
|
+
"discarded_patch_hash": candidate.patch_hash,
|
|
90
|
+
"visible_input_unchanged": True,
|
|
91
|
+
},
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class CostMatchedNoOpBuilder:
|
|
96
|
+
"""Static-driver builder for an exact registry-backed shadow delegate."""
|
|
97
|
+
|
|
98
|
+
builder_kind = "intervention"
|
|
99
|
+
|
|
100
|
+
def fingerprint(self) -> Mapping[str, Any]:
|
|
101
|
+
return freeze_mapping(
|
|
102
|
+
{
|
|
103
|
+
"builder_id": COST_MATCHED_NO_OP_BUILDER_PROTOCOL,
|
|
104
|
+
"schema_version": 1,
|
|
105
|
+
"delegate_builder": "agentinputlab.registry-intervention-builder.v1",
|
|
106
|
+
"output_release_id": COST_MATCHED_NO_OP_RELEASE_ID,
|
|
107
|
+
"visible_input_policy": "discard_delegate_patch",
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
def preflight(self, parameters: Mapping[str, Any]) -> Sequence[str]:
|
|
112
|
+
from agentinputlab.experiments.builders.registry_intervention import (
|
|
113
|
+
RegistryInterventionBuilder,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
try:
|
|
117
|
+
parsed = _parameters(parameters)
|
|
118
|
+
except ValidationError as exc:
|
|
119
|
+
return (str(exc),)
|
|
120
|
+
return RegistryInterventionBuilder().preflight(_delegate_parameters(parsed))
|
|
121
|
+
|
|
122
|
+
def build(self, request: StaticArmBuildRequest) -> CostMatchedNoOpIntervention:
|
|
123
|
+
from agentinputlab.experiments.builders.registry_intervention import (
|
|
124
|
+
RegistryInterventionBuilder,
|
|
125
|
+
)
|
|
126
|
+
from agentinputlab.experiments.drivers.static_production import (
|
|
127
|
+
StaticArmBuildRequest,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
if not isinstance(request, StaticArmBuildRequest):
|
|
131
|
+
raise TypeError("cost-matched NO_OP builder requires StaticArmBuildRequest")
|
|
132
|
+
if (
|
|
133
|
+
request.release_id != COST_MATCHED_NO_OP_RELEASE_ID
|
|
134
|
+
or request.family is not SemanticFamily.NO_OP
|
|
135
|
+
):
|
|
136
|
+
raise ValidationError("cost-matched NO_OP builder received another arm identity")
|
|
137
|
+
parsed = _parameters(request.builder_parameters)
|
|
138
|
+
delegate_request = StaticArmBuildRequest(
|
|
139
|
+
arm_id=request.arm_id + ".delegate",
|
|
140
|
+
release_id=parsed["delegate_release_id"],
|
|
141
|
+
family=SemanticFamily(parsed["delegate_family"]),
|
|
142
|
+
profile_kind=request.profile_kind,
|
|
143
|
+
model_slot=request.model_slot,
|
|
144
|
+
seed=request.seed,
|
|
145
|
+
builder_parameters=_delegate_parameters(parsed),
|
|
146
|
+
arm_parameters=request.arm_parameters,
|
|
147
|
+
runtime=request.runtime,
|
|
148
|
+
)
|
|
149
|
+
delegate = RegistryInterventionBuilder().build(delegate_request)
|
|
150
|
+
return CostMatchedNoOpIntervention(delegate=delegate)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def cost_matched_no_op_builder_factory() -> CostMatchedNoOpBuilder:
|
|
154
|
+
return CostMatchedNoOpBuilder()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class CostMatchedExternalPayloadBuilder:
|
|
158
|
+
"""Build an atomic-arena instruction that discards a delegate's patch."""
|
|
159
|
+
|
|
160
|
+
builder_kind = "arm_payload"
|
|
161
|
+
|
|
162
|
+
def fingerprint(self) -> Mapping[str, Any]:
|
|
163
|
+
return freeze_mapping(
|
|
164
|
+
{
|
|
165
|
+
"builder_id": COST_MATCHED_EXTERNAL_PAYLOAD_PROTOCOL,
|
|
166
|
+
"schema_version": 1,
|
|
167
|
+
"output_release_id": COST_MATCHED_NO_OP_RELEASE_ID,
|
|
168
|
+
"required_runtime_action": "execute_optimizer_discard_patch",
|
|
169
|
+
"visible_input_policy": "preserve_original_state",
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
def preflight(self, parameters: Mapping[str, Any]) -> Sequence[str]:
|
|
174
|
+
try:
|
|
175
|
+
parsed = _external_parameters(parameters)
|
|
176
|
+
except ValidationError as exc:
|
|
177
|
+
return (str(exc),)
|
|
178
|
+
if not parsed["runtime_support_attested"]:
|
|
179
|
+
return ("external runtime has not attested execute_optimizer_discard_patch support",)
|
|
180
|
+
return ()
|
|
181
|
+
|
|
182
|
+
def build(self, request: Any) -> Any:
|
|
183
|
+
from agentinputlab.experiments.drivers.external_arena import (
|
|
184
|
+
ExternalArmPayload,
|
|
185
|
+
ExternalArmPayloadBuildRequest,
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
if not isinstance(request, ExternalArmPayloadBuildRequest):
|
|
189
|
+
raise TypeError(
|
|
190
|
+
"cost-matched external payload builder requires ExternalArmPayloadBuildRequest"
|
|
191
|
+
)
|
|
192
|
+
if request.release_id != COST_MATCHED_NO_OP_RELEASE_ID or request.family not in {
|
|
193
|
+
SemanticFamily.REFORMULATE,
|
|
194
|
+
SemanticFamily.DECOMPOSE,
|
|
195
|
+
SemanticFamily.ACQUIRE,
|
|
196
|
+
SemanticFamily.CLARIFY,
|
|
197
|
+
SemanticFamily.CURATE,
|
|
198
|
+
}:
|
|
199
|
+
raise ValidationError(
|
|
200
|
+
"cost-matched external payload builder received another arm identity"
|
|
201
|
+
)
|
|
202
|
+
parsed = _external_parameters(request.builder_parameters)
|
|
203
|
+
if not parsed["runtime_support_attested"]:
|
|
204
|
+
raise ValidationError(
|
|
205
|
+
"cost-matched external payload requires runtime support attestation"
|
|
206
|
+
)
|
|
207
|
+
shadow_family = request.arm_parameters.get("shadow_family")
|
|
208
|
+
shadow_release = request.arm_parameters.get("shadow_release_id")
|
|
209
|
+
if (
|
|
210
|
+
shadow_family != parsed["delegate_family"]
|
|
211
|
+
or shadow_release != parsed["delegate_release_id"]
|
|
212
|
+
or request.family.value != parsed["delegate_family"]
|
|
213
|
+
):
|
|
214
|
+
raise ValidationError(
|
|
215
|
+
"cost-matched external arm parameters differ from its locked delegate"
|
|
216
|
+
)
|
|
217
|
+
payload = {
|
|
218
|
+
"schema_version": 1,
|
|
219
|
+
"protocol": COST_MATCHED_EXTERNAL_PAYLOAD_PROTOCOL,
|
|
220
|
+
"action": "execute_optimizer_discard_patch",
|
|
221
|
+
"delegate": {
|
|
222
|
+
"family": parsed["delegate_family"],
|
|
223
|
+
"release_id": parsed["delegate_release_id"],
|
|
224
|
+
"configuration_sha256": parsed["delegate_configuration_sha256"],
|
|
225
|
+
},
|
|
226
|
+
"checkpoint_identity_sha256": request.checkpoint.identity_hash,
|
|
227
|
+
"visible_state_sha256": request.checkpoint.visible_state.state_hash,
|
|
228
|
+
"model_slot": request.model_slot,
|
|
229
|
+
"seed": request.seed,
|
|
230
|
+
"visible_input_unchanged": True,
|
|
231
|
+
"discard_delegate_patch": True,
|
|
232
|
+
}
|
|
233
|
+
return ExternalArmPayload(
|
|
234
|
+
arm_id=request.arm_id,
|
|
235
|
+
release_id=request.release_id,
|
|
236
|
+
family=request.family,
|
|
237
|
+
profile_kind=request.profile_kind,
|
|
238
|
+
payload=payload,
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def cost_matched_external_payload_builder_factory() -> CostMatchedExternalPayloadBuilder:
|
|
243
|
+
return CostMatchedExternalPayloadBuilder()
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def _parameters(value: Mapping[str, Any]) -> Mapping[str, Any]:
|
|
247
|
+
if not isinstance(value, Mapping):
|
|
248
|
+
raise ValidationError("cost-matched NO_OP parameters must be an object")
|
|
249
|
+
required = {
|
|
250
|
+
"schema_version",
|
|
251
|
+
"delegate_release_id",
|
|
252
|
+
"delegate_family",
|
|
253
|
+
"constructor_kwargs",
|
|
254
|
+
"arm_parameter_bindings",
|
|
255
|
+
"required_environment",
|
|
256
|
+
}
|
|
257
|
+
if set(value) != required or value.get("schema_version") != 1:
|
|
258
|
+
raise ValidationError("cost-matched NO_OP parameter schema is invalid")
|
|
259
|
+
release_id = value.get("delegate_release_id")
|
|
260
|
+
family = value.get("delegate_family")
|
|
261
|
+
if not isinstance(release_id, str) or not release_id.strip():
|
|
262
|
+
raise ValidationError("cost-matched NO_OP delegate_release_id must be non-empty")
|
|
263
|
+
try:
|
|
264
|
+
SemanticFamily(family)
|
|
265
|
+
except (TypeError, ValueError) as exc:
|
|
266
|
+
raise ValidationError("cost-matched NO_OP delegate_family is invalid") from exc
|
|
267
|
+
if SemanticFamily(family) in {SemanticFamily.NO_OP, SemanticFamily.COMPOSITE}:
|
|
268
|
+
raise ValidationError("cost-matched NO_OP delegate must be one prompt family")
|
|
269
|
+
if not isinstance(value["constructor_kwargs"], Mapping):
|
|
270
|
+
raise ValidationError("cost-matched NO_OP constructor_kwargs must be an object")
|
|
271
|
+
if not isinstance(value["arm_parameter_bindings"], Mapping):
|
|
272
|
+
raise ValidationError("cost-matched NO_OP arm_parameter_bindings must be an object")
|
|
273
|
+
required_environment = value["required_environment"]
|
|
274
|
+
if isinstance(required_environment, (str, bytes)) or not isinstance(
|
|
275
|
+
required_environment, Sequence
|
|
276
|
+
):
|
|
277
|
+
raise ValidationError("cost-matched NO_OP required_environment must be an array")
|
|
278
|
+
try:
|
|
279
|
+
return freeze_mapping(value)
|
|
280
|
+
except (TypeError, ValueError) as exc:
|
|
281
|
+
raise ValidationError("cost-matched NO_OP parameters must be canonical JSON") from exc
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def _delegate_parameters(value: Mapping[str, Any]) -> Mapping[str, Any]:
|
|
285
|
+
return freeze_mapping(
|
|
286
|
+
{
|
|
287
|
+
"schema_version": 1,
|
|
288
|
+
"release_id": value["delegate_release_id"],
|
|
289
|
+
"constructor_kwargs": value["constructor_kwargs"],
|
|
290
|
+
"runtime_bindings": {},
|
|
291
|
+
"arm_parameter_bindings": value["arm_parameter_bindings"],
|
|
292
|
+
"required_environment": value["required_environment"],
|
|
293
|
+
}
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def _external_parameters(value: Mapping[str, Any]) -> Mapping[str, Any]:
|
|
298
|
+
if not isinstance(value, Mapping):
|
|
299
|
+
raise ValidationError("cost-matched external parameters must be an object")
|
|
300
|
+
required = {
|
|
301
|
+
"schema_version",
|
|
302
|
+
"delegate_release_id",
|
|
303
|
+
"delegate_family",
|
|
304
|
+
"delegate_configuration_sha256",
|
|
305
|
+
"runtime_support_attested",
|
|
306
|
+
}
|
|
307
|
+
if set(value) != required or value.get("schema_version") != 1:
|
|
308
|
+
raise ValidationError("cost-matched external parameter schema is invalid")
|
|
309
|
+
release_id = value.get("delegate_release_id")
|
|
310
|
+
family = value.get("delegate_family")
|
|
311
|
+
digest = value.get("delegate_configuration_sha256")
|
|
312
|
+
if not isinstance(release_id, str) or not release_id.strip():
|
|
313
|
+
raise ValidationError("cost-matched external delegate_release_id must be non-empty")
|
|
314
|
+
try:
|
|
315
|
+
typed_family = SemanticFamily(family)
|
|
316
|
+
except (TypeError, ValueError) as exc:
|
|
317
|
+
raise ValidationError("cost-matched external delegate_family is invalid") from exc
|
|
318
|
+
if typed_family in {SemanticFamily.NO_OP, SemanticFamily.COMPOSITE}:
|
|
319
|
+
raise ValidationError("cost-matched external delegate must be one prompt family")
|
|
320
|
+
if (
|
|
321
|
+
not isinstance(digest, str)
|
|
322
|
+
or len(digest) != 64
|
|
323
|
+
or any(character not in "0123456789abcdef" for character in digest)
|
|
324
|
+
):
|
|
325
|
+
raise ValidationError("cost-matched external delegate_configuration_sha256 must be SHA-256")
|
|
326
|
+
if not isinstance(value["runtime_support_attested"], bool):
|
|
327
|
+
raise ValidationError("cost-matched external runtime_support_attested must be boolean")
|
|
328
|
+
return freeze_mapping(value)
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
__all__ = [
|
|
332
|
+
"COST_MATCHED_EXTERNAL_PAYLOAD_PROTOCOL",
|
|
333
|
+
"COST_MATCHED_NO_OP_BUILDER_PROTOCOL",
|
|
334
|
+
"COST_MATCHED_NO_OP_RELEASE_ID",
|
|
335
|
+
"CostMatchedExternalPayloadBuilder",
|
|
336
|
+
"CostMatchedNoOpBuilder",
|
|
337
|
+
"CostMatchedNoOpIntervention",
|
|
338
|
+
"cost_matched_external_payload_builder_factory",
|
|
339
|
+
"cost_matched_no_op_builder_factory",
|
|
340
|
+
]
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"""Runtime wrapper that keeps preflight identities attached through persistence."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Iterator, Mapping, Sequence
|
|
6
|
+
from contextlib import contextmanager
|
|
7
|
+
from contextvars import ContextVar
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from agentinputlab.contracts.errors import ArtifactError
|
|
12
|
+
from agentinputlab.contracts.serialization import freeze_mapping
|
|
13
|
+
|
|
14
|
+
from .bindings import (
|
|
15
|
+
FrozenBindingReceipt,
|
|
16
|
+
build_guarded_driver_fingerprint,
|
|
17
|
+
resolve_frozen_binding_receipt,
|
|
18
|
+
)
|
|
19
|
+
from .executor import ExperimentCellResult, ExperimentDriver
|
|
20
|
+
from .parity_identity import (
|
|
21
|
+
HOST_EXECUTION_RECEIPT_PROTOCOL,
|
|
22
|
+
ParityImplementationContract,
|
|
23
|
+
validate_host_process_cell_result,
|
|
24
|
+
validate_parity_cell_result,
|
|
25
|
+
)
|
|
26
|
+
from .plan import ExperimentCell
|
|
27
|
+
from .schema import ExperimentManifest
|
|
28
|
+
|
|
29
|
+
_GUARDED_ENTRYPOINT = "agentinputlab.experiments.driver_guard:active_guarded_driver_factory"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@dataclass(frozen=True, slots=True)
|
|
33
|
+
class _GuardConfiguration:
|
|
34
|
+
manifest: ExperimentManifest
|
|
35
|
+
operator_entrypoint: str
|
|
36
|
+
operator_fingerprint: Mapping[str, Any]
|
|
37
|
+
binding_receipt: FrozenBindingReceipt
|
|
38
|
+
parity_contract: ParityImplementationContract | None
|
|
39
|
+
|
|
40
|
+
def __post_init__(self) -> None:
|
|
41
|
+
if self.operator_entrypoint == _GUARDED_ENTRYPOINT:
|
|
42
|
+
raise ArtifactError("guarded driver cannot recursively wrap itself")
|
|
43
|
+
try:
|
|
44
|
+
fingerprint = freeze_mapping(self.operator_fingerprint)
|
|
45
|
+
except (TypeError, ValueError) as exc:
|
|
46
|
+
raise ArtifactError("operator driver fingerprint is not canonical JSON") from exc
|
|
47
|
+
if not fingerprint:
|
|
48
|
+
raise ArtifactError("operator driver fingerprint must not be empty")
|
|
49
|
+
object.__setattr__(self, "operator_fingerprint", fingerprint)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
_ACTIVE_GUARD: ContextVar[_GuardConfiguration | None] = ContextVar(
|
|
53
|
+
"agentinputlab_active_experiment_driver_guard",
|
|
54
|
+
default=None,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class GuardedExperimentDriver:
|
|
59
|
+
"""Bind one operator driver to the exact receipt accepted by preflight."""
|
|
60
|
+
|
|
61
|
+
def __init__(
|
|
62
|
+
self,
|
|
63
|
+
operator: ExperimentDriver,
|
|
64
|
+
*,
|
|
65
|
+
manifest: ExperimentManifest,
|
|
66
|
+
expected_operator_fingerprint: Mapping[str, Any],
|
|
67
|
+
binding_receipt: FrozenBindingReceipt,
|
|
68
|
+
parity_contract: ParityImplementationContract | None = None,
|
|
69
|
+
) -> None:
|
|
70
|
+
if not isinstance(operator, ExperimentDriver):
|
|
71
|
+
raise ArtifactError("guard requires an ExperimentDriver implementation")
|
|
72
|
+
self._operator = operator
|
|
73
|
+
self._manifest = manifest
|
|
74
|
+
self._expected_operator_fingerprint = freeze_mapping(expected_operator_fingerprint)
|
|
75
|
+
self._binding_receipt = binding_receipt
|
|
76
|
+
self._parity_contract = parity_contract
|
|
77
|
+
self._require_stable_operator_fingerprint()
|
|
78
|
+
self._fingerprint = build_guarded_driver_fingerprint(
|
|
79
|
+
self._expected_operator_fingerprint,
|
|
80
|
+
binding_receipt,
|
|
81
|
+
parity_contract=(parity_contract.to_dict() if parity_contract is not None else None),
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def fingerprint(self) -> Mapping[str, Any]:
|
|
85
|
+
self._require_stable_operator_fingerprint()
|
|
86
|
+
return self._fingerprint
|
|
87
|
+
|
|
88
|
+
def preflight(self, manifest: ExperimentManifest) -> Sequence[str]:
|
|
89
|
+
self._require_manifest(manifest)
|
|
90
|
+
self._require_stable_bindings()
|
|
91
|
+
self._require_stable_operator_fingerprint()
|
|
92
|
+
blockers = self._operator.preflight(manifest)
|
|
93
|
+
self._require_stable_operator_fingerprint()
|
|
94
|
+
self._require_stable_bindings()
|
|
95
|
+
return blockers
|
|
96
|
+
|
|
97
|
+
def execute_cell(
|
|
98
|
+
self,
|
|
99
|
+
manifest: ExperimentManifest,
|
|
100
|
+
cell: ExperimentCell,
|
|
101
|
+
) -> ExperimentCellResult:
|
|
102
|
+
self._require_manifest(manifest)
|
|
103
|
+
self._require_stable_bindings()
|
|
104
|
+
self._require_stable_operator_fingerprint()
|
|
105
|
+
result = self._operator.execute_cell(manifest, cell)
|
|
106
|
+
self._require_stable_operator_fingerprint()
|
|
107
|
+
self._require_stable_bindings()
|
|
108
|
+
if self._parity_contract is not None and isinstance(result, ExperimentCellResult):
|
|
109
|
+
validate_parity_cell_result(
|
|
110
|
+
cell,
|
|
111
|
+
result,
|
|
112
|
+
binding_receipt=self._binding_receipt,
|
|
113
|
+
contract=self._parity_contract,
|
|
114
|
+
operator_fingerprint=self._expected_operator_fingerprint,
|
|
115
|
+
)
|
|
116
|
+
elif (
|
|
117
|
+
isinstance(result, ExperimentCellResult)
|
|
118
|
+
and self._expected_operator_fingerprint.get("execution_receipt_protocol")
|
|
119
|
+
== HOST_EXECUTION_RECEIPT_PROTOCOL
|
|
120
|
+
):
|
|
121
|
+
validate_host_process_cell_result(
|
|
122
|
+
cell,
|
|
123
|
+
result,
|
|
124
|
+
binding_receipt=self._binding_receipt,
|
|
125
|
+
operator_fingerprint=self._expected_operator_fingerprint,
|
|
126
|
+
)
|
|
127
|
+
return result
|
|
128
|
+
|
|
129
|
+
def _require_manifest(self, manifest: ExperimentManifest) -> None:
|
|
130
|
+
if manifest.manifest_hash != self._manifest.manifest_hash:
|
|
131
|
+
raise ArtifactError("guarded driver received another experiment manifest")
|
|
132
|
+
|
|
133
|
+
def _require_stable_operator_fingerprint(self) -> None:
|
|
134
|
+
try:
|
|
135
|
+
observed = freeze_mapping(self._operator.fingerprint())
|
|
136
|
+
except (TypeError, ValueError) as exc:
|
|
137
|
+
raise ArtifactError("operator driver fingerprint is not canonical JSON") from exc
|
|
138
|
+
if observed != self._expected_operator_fingerprint:
|
|
139
|
+
raise ArtifactError("operator driver fingerprint changed after frozen preflight")
|
|
140
|
+
|
|
141
|
+
def _require_stable_bindings(self) -> None:
|
|
142
|
+
"""Re-attest every prerequisite immediately around each cell."""
|
|
143
|
+
|
|
144
|
+
current = resolve_frozen_binding_receipt(self._manifest)
|
|
145
|
+
if current.to_dict() != self._binding_receipt.to_dict():
|
|
146
|
+
raise ArtifactError("experiment prerequisite bindings changed after frozen preflight")
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@contextmanager
|
|
150
|
+
def activate_guarded_driver(
|
|
151
|
+
*,
|
|
152
|
+
manifest: ExperimentManifest,
|
|
153
|
+
operator_entrypoint: str,
|
|
154
|
+
operator_fingerprint: Mapping[str, Any],
|
|
155
|
+
binding_receipt: FrozenBindingReceipt,
|
|
156
|
+
parity_contract: ParityImplementationContract | None = None,
|
|
157
|
+
) -> Iterator[str]:
|
|
158
|
+
"""Install a process-local factory used only around one synchronous run."""
|
|
159
|
+
|
|
160
|
+
configuration = _GuardConfiguration(
|
|
161
|
+
manifest=manifest,
|
|
162
|
+
operator_entrypoint=operator_entrypoint,
|
|
163
|
+
operator_fingerprint=operator_fingerprint,
|
|
164
|
+
binding_receipt=binding_receipt,
|
|
165
|
+
parity_contract=parity_contract,
|
|
166
|
+
)
|
|
167
|
+
token = _ACTIVE_GUARD.set(configuration)
|
|
168
|
+
try:
|
|
169
|
+
yield _GUARDED_ENTRYPOINT
|
|
170
|
+
finally:
|
|
171
|
+
_ACTIVE_GUARD.reset(token)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def active_guarded_driver_factory() -> GuardedExperimentDriver:
|
|
175
|
+
"""Zero-argument factory consumed by the existing executor entrypoint API."""
|
|
176
|
+
|
|
177
|
+
configuration = _ACTIVE_GUARD.get()
|
|
178
|
+
if configuration is None:
|
|
179
|
+
raise ArtifactError("guarded driver factory is inactive; use activate_guarded_driver()")
|
|
180
|
+
current_receipt = resolve_frozen_binding_receipt(configuration.manifest)
|
|
181
|
+
if current_receipt.to_dict() != configuration.binding_receipt.to_dict():
|
|
182
|
+
raise ArtifactError("experiment prerequisite bindings changed after frozen preflight")
|
|
183
|
+
from .loader import resolve_driver_entrypoint
|
|
184
|
+
|
|
185
|
+
factory = resolve_driver_entrypoint(configuration.operator_entrypoint)
|
|
186
|
+
if not callable(factory):
|
|
187
|
+
raise ArtifactError("operator driver entrypoint must be a zero-argument factory")
|
|
188
|
+
try:
|
|
189
|
+
operator = factory()
|
|
190
|
+
except TypeError as exc:
|
|
191
|
+
raise ArtifactError("operator driver entrypoint must be a zero-argument factory") from exc
|
|
192
|
+
return GuardedExperimentDriver(
|
|
193
|
+
operator,
|
|
194
|
+
manifest=configuration.manifest,
|
|
195
|
+
expected_operator_fingerprint=configuration.operator_fingerprint,
|
|
196
|
+
binding_receipt=configuration.binding_receipt,
|
|
197
|
+
parity_contract=configuration.parity_contract,
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
__all__ = [
|
|
202
|
+
"GuardedExperimentDriver",
|
|
203
|
+
"activate_guarded_driver",
|
|
204
|
+
"active_guarded_driver_factory",
|
|
205
|
+
]
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""Audited experiment-driver building blocks.
|
|
2
|
+
|
|
3
|
+
The package does not select a model, download an asset, or execute at import
|
|
4
|
+
time. Production factories remain operator-configured and checksum locked.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .external_arena import (
|
|
8
|
+
CONFIG_PATH_ENV as EXTERNAL_ARENA_CONFIG_PATH_ENV,
|
|
9
|
+
)
|
|
10
|
+
from .external_arena import (
|
|
11
|
+
CONFIG_SHA256_ENV as EXTERNAL_ARENA_CONFIG_SHA256_ENV,
|
|
12
|
+
)
|
|
13
|
+
from .external_arena import (
|
|
14
|
+
ExternalArenaCheckpoint,
|
|
15
|
+
ExternalArenaExperimentDriver,
|
|
16
|
+
ExternalArmPayload,
|
|
17
|
+
ExternalArmPayloadBuildRequest,
|
|
18
|
+
ExternalBridgeBuildRequest,
|
|
19
|
+
ExternalCheckpointBuildRequest,
|
|
20
|
+
ExternalUnitPreflightRequest,
|
|
21
|
+
LockedExternalArenaBuilder,
|
|
22
|
+
)
|
|
23
|
+
from .method_process import (
|
|
24
|
+
CONFIG_PATH_ENV as METHOD_PROCESS_CONFIG_PATH_ENV,
|
|
25
|
+
)
|
|
26
|
+
from .method_process import (
|
|
27
|
+
CONFIG_SHA256_ENV as METHOD_PROCESS_CONFIG_SHA256_ENV,
|
|
28
|
+
)
|
|
29
|
+
from .method_process import MethodProcessExperimentDriver
|
|
30
|
+
from .method_process import factory as method_process_factory
|
|
31
|
+
from .parity_process import (
|
|
32
|
+
CONFIG_PATH_ENV as PARITY_PROCESS_CONFIG_PATH_ENV,
|
|
33
|
+
)
|
|
34
|
+
from .parity_process import (
|
|
35
|
+
CONFIG_SHA256_ENV as PARITY_PROCESS_CONFIG_SHA256_ENV,
|
|
36
|
+
)
|
|
37
|
+
from .parity_process import (
|
|
38
|
+
ParityProcessExperimentDriver,
|
|
39
|
+
ParityProcessProtocolError,
|
|
40
|
+
)
|
|
41
|
+
from .parity_process import (
|
|
42
|
+
factory as parity_process_factory,
|
|
43
|
+
)
|
|
44
|
+
from .static_production import (
|
|
45
|
+
CONFIG_PATH_ENV,
|
|
46
|
+
CONFIG_SHA256_ENV,
|
|
47
|
+
LockedBuilderSpec,
|
|
48
|
+
StaticArmBuildRequest,
|
|
49
|
+
StaticBackendBuildRequest,
|
|
50
|
+
StaticPredictorBuildRequest,
|
|
51
|
+
StaticProductionExperimentDriver,
|
|
52
|
+
StaticRuntimeComponents,
|
|
53
|
+
factory,
|
|
54
|
+
static_predictor_product_sha256,
|
|
55
|
+
static_runtime_product_sha256,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
__all__ = [
|
|
59
|
+
"CONFIG_PATH_ENV",
|
|
60
|
+
"CONFIG_SHA256_ENV",
|
|
61
|
+
"EXTERNAL_ARENA_CONFIG_PATH_ENV",
|
|
62
|
+
"EXTERNAL_ARENA_CONFIG_SHA256_ENV",
|
|
63
|
+
"METHOD_PROCESS_CONFIG_PATH_ENV",
|
|
64
|
+
"METHOD_PROCESS_CONFIG_SHA256_ENV",
|
|
65
|
+
"PARITY_PROCESS_CONFIG_PATH_ENV",
|
|
66
|
+
"PARITY_PROCESS_CONFIG_SHA256_ENV",
|
|
67
|
+
"ExternalArenaCheckpoint",
|
|
68
|
+
"ExternalArenaExperimentDriver",
|
|
69
|
+
"ExternalArmPayload",
|
|
70
|
+
"ExternalArmPayloadBuildRequest",
|
|
71
|
+
"ExternalBridgeBuildRequest",
|
|
72
|
+
"ExternalCheckpointBuildRequest",
|
|
73
|
+
"ExternalUnitPreflightRequest",
|
|
74
|
+
"LockedBuilderSpec",
|
|
75
|
+
"LockedExternalArenaBuilder",
|
|
76
|
+
"MethodProcessExperimentDriver",
|
|
77
|
+
"ParityProcessExperimentDriver",
|
|
78
|
+
"ParityProcessProtocolError",
|
|
79
|
+
"StaticArmBuildRequest",
|
|
80
|
+
"StaticBackendBuildRequest",
|
|
81
|
+
"StaticPredictorBuildRequest",
|
|
82
|
+
"StaticProductionExperimentDriver",
|
|
83
|
+
"StaticRuntimeComponents",
|
|
84
|
+
"factory",
|
|
85
|
+
"method_process_factory",
|
|
86
|
+
"parity_process_factory",
|
|
87
|
+
"static_predictor_product_sha256",
|
|
88
|
+
"static_runtime_product_sha256",
|
|
89
|
+
]
|