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,189 @@
|
|
|
1
|
+
"""InfoCQR's trained T5 student, separate from its teacher and saved rewrites."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from collections.abc import Mapping
|
|
5
|
+
from dataclasses import dataclass, replace
|
|
6
|
+
|
|
7
|
+
from agentinputlab.contracts import (
|
|
8
|
+
AlgorithmOutputError,
|
|
9
|
+
ArtifactError,
|
|
10
|
+
BudgetExceededError,
|
|
11
|
+
ExecutionTrace,
|
|
12
|
+
ExternalDependencyError,
|
|
13
|
+
FrozenAgentState,
|
|
14
|
+
InputPatch,
|
|
15
|
+
InterventionContext,
|
|
16
|
+
PatchOp,
|
|
17
|
+
PatchOperation,
|
|
18
|
+
SemanticFamily,
|
|
19
|
+
TraceEvent,
|
|
20
|
+
TracePhase,
|
|
21
|
+
ValidationError,
|
|
22
|
+
)
|
|
23
|
+
from agentinputlab.contracts.serialization import content_hash
|
|
24
|
+
from agentinputlab.observability import external_usage_counters, normalize_external_usage
|
|
25
|
+
|
|
26
|
+
from .cache_replay import INFOCQR_UPSTREAM_COMMIT
|
|
27
|
+
from .external import _qrecc_conversation
|
|
28
|
+
|
|
29
|
+
INFOCQR_STUDENT_RELEASE = "rewrite.infocqr.t5_student_external"
|
|
30
|
+
INFOCQR_STUDENT_MODE = "source_pinned_t5_student.v1"
|
|
31
|
+
INFOCQR_STUDENT_SCHEMA = "agentinputlab.infocqr.student-request.v1"
|
|
32
|
+
INFOCQR_STUDENT_SOURCE_HASHES = {
|
|
33
|
+
"T5QR/T5test.py": "c9c1b78d8147035ea3c300e7b29c791fb171ce399f8c1269a6e1a11b9bc05eb8",
|
|
34
|
+
"T5QR/T5train.py": "d40bc17e365d9f626fd5bf1fd14fffd3073c0b6772434a78eac6412d6fd2f4de",
|
|
35
|
+
"T5QR/utils/dataCollator.py": "3e4a466b1f729cba306b4953f1e825efde14316e83586c0952dc0e404a974d5d",
|
|
36
|
+
"T5QR/data_preprocessing.ipynb": "6a7dd60ed6f84d89d1313850732599b94e55889cdb694b00f7d2c42df97f0695",
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass(frozen=True, slots=True)
|
|
41
|
+
class InfoCQRStudentRequest:
|
|
42
|
+
state_hash: str
|
|
43
|
+
task_id: str
|
|
44
|
+
query: str
|
|
45
|
+
conversation_source: str
|
|
46
|
+
conversation_no: int
|
|
47
|
+
turn_no: int
|
|
48
|
+
new_context: tuple[str, ...]
|
|
49
|
+
dataset_revision: str
|
|
50
|
+
checkpoint_manifest_sha256: str
|
|
51
|
+
seed: int
|
|
52
|
+
phase: str = "prepare"
|
|
53
|
+
schema_version: str = INFOCQR_STUDENT_SCHEMA
|
|
54
|
+
|
|
55
|
+
def __post_init__(self):
|
|
56
|
+
object.__setattr__(self, "new_context", tuple(self.new_context))
|
|
57
|
+
if self.schema_version != INFOCQR_STUDENT_SCHEMA:
|
|
58
|
+
raise ValidationError("InfoCQR student request schema differs")
|
|
59
|
+
if self.phase not in {"prepare", "generate", "discard"}:
|
|
60
|
+
raise ValidationError("InfoCQR student request phase differs")
|
|
61
|
+
for value in (self.state_hash, self.checkpoint_manifest_sha256):
|
|
62
|
+
if not _sha256(value):
|
|
63
|
+
raise ValidationError("InfoCQR student requires SHA-256 bindings")
|
|
64
|
+
if not all(isinstance(v, str) and v.strip() for v in
|
|
65
|
+
(self.query, self.conversation_source, self.dataset_revision)):
|
|
66
|
+
raise ValidationError("InfoCQR student requires visible query/conversation/dataset")
|
|
67
|
+
if any(type(v) is not int or v < 1 for v in (self.conversation_no, self.turn_no)):
|
|
68
|
+
raise ValidationError("InfoCQR student conversation/turn IDs must be positive")
|
|
69
|
+
if (len(self.new_context) % 2 or any(not isinstance(v, str) for v in self.new_context)
|
|
70
|
+
or (self.turn_no == 1 and self.new_context)):
|
|
71
|
+
raise ValidationError("InfoCQR student requires complete visible Q/A history")
|
|
72
|
+
if type(self.seed) is not int or self.seed < 0:
|
|
73
|
+
raise ValidationError("InfoCQR student seed must be non-negative")
|
|
74
|
+
|
|
75
|
+
@property
|
|
76
|
+
def request_id(self):
|
|
77
|
+
return content_hash(self)
|
|
78
|
+
|
|
79
|
+
def external_reservation(self):
|
|
80
|
+
return {"model_calls": 1 if self.phase == "generate" else 0}
|
|
81
|
+
|
|
82
|
+
def raise_for_external_status(self, result):
|
|
83
|
+
if isinstance(result, Mapping) and result.get("status") == "empty_output":
|
|
84
|
+
raise AlgorithmOutputError("InfoCQR T5 student produced an empty rewrite; no retry")
|
|
85
|
+
if isinstance(result, Mapping) and result.get("status") == "decode_failed":
|
|
86
|
+
raise AlgorithmOutputError("InfoCQR T5 student decoding failed after generation; usage retained")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _sha256(value):
|
|
90
|
+
return isinstance(value, str) and len(value) == 64 and all(c in "0123456789abcdef" for c in value)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class InfoCQRStudentExternal:
|
|
94
|
+
"""Rewrite the native QReCC conversational view using an explicit T5 artifact.
|
|
95
|
+
|
|
96
|
+
The rewriter is a fixed auxiliary student, not the downstream backbone. Its
|
|
97
|
+
generation is independently accounted through context.external_runtime.
|
|
98
|
+
Neither author caches, teacher calls nor a generic t5-base can substitute.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
method_id = "infocqr"
|
|
102
|
+
release_id = INFOCQR_STUDENT_RELEASE
|
|
103
|
+
family = SemanticFamily.REFORMULATE
|
|
104
|
+
|
|
105
|
+
def __init__(self, *, checkpoint_manifest_sha256: str, dataset_revision: str,
|
|
106
|
+
profile_kind: str = "controlled_adapter", source_license_acknowledged: bool = False):
|
|
107
|
+
if not _sha256(checkpoint_manifest_sha256):
|
|
108
|
+
raise ValidationError("InfoCQR student requires a trusted checkpoint manifest SHA-256")
|
|
109
|
+
if not isinstance(dataset_revision, str) or not dataset_revision.strip():
|
|
110
|
+
raise ValidationError("InfoCQR student requires the QReCC dataset revision")
|
|
111
|
+
if profile_kind not in {"official_native", "controlled_adapter"}:
|
|
112
|
+
raise ValidationError("InfoCQR student profile kind differs")
|
|
113
|
+
if source_license_acknowledged is not True:
|
|
114
|
+
raise ValidationError("InfoCQR student requires explicit external-source acknowledgement")
|
|
115
|
+
self.checkpoint_manifest_sha256 = checkpoint_manifest_sha256
|
|
116
|
+
self.dataset_revision, self.profile_kind = dataset_revision, profile_kind
|
|
117
|
+
self.source_license_acknowledged = True
|
|
118
|
+
|
|
119
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
120
|
+
conversation = _qrecc_conversation(state)
|
|
121
|
+
if state.metadata.get("benchmark_id", "qrecc") not in {"qrecc", "qrecc.main", "qrecc.retrieval"}:
|
|
122
|
+
raise ValidationError("InfoCQR student native release requires QReCC, not a renamed QA dataset")
|
|
123
|
+
if state.budget.max_model_calls < 1 or state.budget.max_output_tokens < 63:
|
|
124
|
+
raise BudgetExceededError("InfoCQR student requires one call and its native 63-new-token ceiling")
|
|
125
|
+
runtime = context.external_runtime
|
|
126
|
+
if runtime is None or not callable(getattr(runtime, "run", None)) or not callable(getattr(runtime, "fingerprint", None)):
|
|
127
|
+
raise ExternalDependencyError("InfoCQR student requires InfoCQRStudentRuntime with trained weights")
|
|
128
|
+
identity = runtime.fingerprint()
|
|
129
|
+
if (identity.get("mode") != INFOCQR_STUDENT_MODE
|
|
130
|
+
or identity.get("upstream_revision") != INFOCQR_UPSTREAM_COMMIT
|
|
131
|
+
or identity.get("checkpoint_manifest_sha256") != self.checkpoint_manifest_sha256
|
|
132
|
+
or identity.get("dataset_revision") != self.dataset_revision):
|
|
133
|
+
raise ArtifactError("InfoCQR student runtime/source/checkpoint/dataset binding differs")
|
|
134
|
+
if self.profile_kind == "official_native" and identity.get("provenance_kind") != "author_student":
|
|
135
|
+
raise ArtifactError("a user-trained student must not be labeled as the author's checkpoint")
|
|
136
|
+
request = InfoCQRStudentRequest(
|
|
137
|
+
state_hash=state.state_hash, task_id=state.task_id, query=state.query,
|
|
138
|
+
dataset_revision=self.dataset_revision,
|
|
139
|
+
checkpoint_manifest_sha256=self.checkpoint_manifest_sha256,
|
|
140
|
+
seed=context.seed, **conversation,
|
|
141
|
+
)
|
|
142
|
+
# Loading weights/tokenization is a zero-generation execution preflight,
|
|
143
|
+
# never a failed scientific attempt charged as one model invocation.
|
|
144
|
+
prepared = runtime.run(request)
|
|
145
|
+
if (not isinstance(prepared, Mapping) or prepared.get("status") != "ready"
|
|
146
|
+
or prepared.get("request_id") != request.request_id
|
|
147
|
+
or prepared.get("identity") != identity
|
|
148
|
+
or type(prepared.get("input_tokens")) is not int
|
|
149
|
+
or not 1 <= prepared["input_tokens"] <= 384
|
|
150
|
+
or normalize_external_usage(prepared.get("usage")).model_calls != 0):
|
|
151
|
+
raise AlgorithmOutputError("InfoCQR student execution preflight differs")
|
|
152
|
+
if (state.budget.max_context_tokens is not None
|
|
153
|
+
and prepared["input_tokens"] > state.budget.max_context_tokens):
|
|
154
|
+
runtime.run(replace(request, phase="discard"))
|
|
155
|
+
raise BudgetExceededError("InfoCQR student exceeds the input-token budget before generation")
|
|
156
|
+
request = replace(request, phase="generate")
|
|
157
|
+
response = runtime.run(request)
|
|
158
|
+
if (not isinstance(response, Mapping) or response.get("request_id") != request.request_id
|
|
159
|
+
or response.get("identity") != identity or response.get("status") != "ok"):
|
|
160
|
+
raise AlgorithmOutputError("InfoCQR student returned another request/runtime or failed status")
|
|
161
|
+
rewrite = response.get("rewrite")
|
|
162
|
+
if not isinstance(rewrite, str) or not rewrite.strip():
|
|
163
|
+
raise AlgorithmOutputError("InfoCQR student returned an empty rewrite; no fallback")
|
|
164
|
+
usage = normalize_external_usage(response.get("usage"))
|
|
165
|
+
if usage.model_calls != 1 or usage.retrieval_calls or usage.output_tokens > 63:
|
|
166
|
+
raise AlgorithmOutputError("InfoCQR student native generation usage differs")
|
|
167
|
+
return InputPatch(
|
|
168
|
+
method_id=self.method_id, release_id=self.release_id,
|
|
169
|
+
source_state_hash=state.state_hash,
|
|
170
|
+
operations=(PatchOperation(PatchOp.REPLACE_QUERY, rewrite, target="query",
|
|
171
|
+
rationale="source-pinned trained InfoCQR T5 student"),),
|
|
172
|
+
trace=ExecutionTrace(method_id=self.method_id, release_id=self.release_id,
|
|
173
|
+
events=(TraceEvent(TracePhase.OBSERVE, "native_t5_student", {
|
|
174
|
+
"request_id": request.request_id, "source_text_hash": response["source_text_hash"],
|
|
175
|
+
"checkpoint_manifest_sha256": self.checkpoint_manifest_sha256,
|
|
176
|
+
"max_source_length": 384, "generation_max_length_including_start": 64,
|
|
177
|
+
"target_labels_visible_to_generator": False,
|
|
178
|
+
}),), counters=external_usage_counters(usage)),
|
|
179
|
+
implementation_identity=f"external_student:InfoCQR@{INFOCQR_UPSTREAM_COMMIT}",
|
|
180
|
+
profile_kind=self.profile_kind,
|
|
181
|
+
metadata={"student_runtime": identity, "fixed_auxiliary_not_downstream_backbone": True,
|
|
182
|
+
"native_source_logic": True, "native_environment_parity_claimed": False,
|
|
183
|
+
"teacher_or_cache_fallback": False, "implicit_retry": False,
|
|
184
|
+
"checkpoint_provenance_verification": "caller_receipt_not_authorship_certificate",
|
|
185
|
+
"paper_result_parity_claimed": False},
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
__all__ = ["InfoCQRStudentExternal", "InfoCQRStudentRequest"]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Query2doc official-cache and QueryGym community-live profiles."""
|
|
2
|
+
|
|
3
|
+
from .controlled_live import Query2DocControlledLive, Query2DocLiveBindings, Query2DocLiveConfig
|
|
4
|
+
from .models import OfficialQuery2DocRow, QueryGymMode, QueryGymRawResult, QueryGymRequest
|
|
5
|
+
from .official_cached import (
|
|
6
|
+
OFFICIAL_ARTIFACT_SHA256,
|
|
7
|
+
OFFICIAL_DATASET_REVISION,
|
|
8
|
+
OFFICIAL_TREC_ARTIFACTS,
|
|
9
|
+
Query2DocCache,
|
|
10
|
+
Query2DocFixtureCached,
|
|
11
|
+
Query2DocOfficialCached,
|
|
12
|
+
compose_sparse_expansion,
|
|
13
|
+
)
|
|
14
|
+
from .querygym_bridge import (
|
|
15
|
+
QUERYGYM_REVISION,
|
|
16
|
+
QueryGymLiveBridge,
|
|
17
|
+
QueryGymRuntime,
|
|
18
|
+
select_demonstration_ids,
|
|
19
|
+
)
|
|
20
|
+
from .querygym_runtime import PinnedQueryGymRuntime
|
|
21
|
+
|
|
22
|
+
__all__ = [
|
|
23
|
+
"OFFICIAL_ARTIFACT_SHA256",
|
|
24
|
+
"OFFICIAL_DATASET_REVISION",
|
|
25
|
+
"OFFICIAL_TREC_ARTIFACTS",
|
|
26
|
+
"QUERYGYM_REVISION",
|
|
27
|
+
"OfficialQuery2DocRow",
|
|
28
|
+
"PinnedQueryGymRuntime",
|
|
29
|
+
"Query2DocCache",
|
|
30
|
+
"Query2DocControlledLive",
|
|
31
|
+
"Query2DocFixtureCached",
|
|
32
|
+
"Query2DocLiveBindings",
|
|
33
|
+
"Query2DocLiveConfig",
|
|
34
|
+
"Query2DocOfficialCached",
|
|
35
|
+
"QueryGymLiveBridge",
|
|
36
|
+
"QueryGymMode",
|
|
37
|
+
"QueryGymRawResult",
|
|
38
|
+
"QueryGymRequest",
|
|
39
|
+
"QueryGymRuntime",
|
|
40
|
+
"compose_sparse_expansion",
|
|
41
|
+
"select_demonstration_ids",
|
|
42
|
+
]
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"""Dependency-locked QueryGym live Query2doc; native generation logic is unchanged."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
from collections.abc import Mapping
|
|
7
|
+
from dataclasses import dataclass, replace
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from agentinputlab.backends.llm import GenerationRequest
|
|
11
|
+
from agentinputlab.contracts import (
|
|
12
|
+
ExecutionBudget,
|
|
13
|
+
ExternalDependencyError,
|
|
14
|
+
FrozenAgentState,
|
|
15
|
+
InputPatch,
|
|
16
|
+
InterventionContext,
|
|
17
|
+
SemanticFamily,
|
|
18
|
+
TraceEvent,
|
|
19
|
+
TracePhase,
|
|
20
|
+
ValidationError,
|
|
21
|
+
)
|
|
22
|
+
from agentinputlab.contracts.serialization import content_hash, freeze_mapping
|
|
23
|
+
|
|
24
|
+
from .models import QueryGymMode
|
|
25
|
+
from .querygym_bridge import QUERYGYM_REVISION, QueryGymLiveBridge
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True, slots=True)
|
|
29
|
+
class Query2DocLiveConfig:
|
|
30
|
+
mode: QueryGymMode | str = QueryGymMode.ZERO_SHOT
|
|
31
|
+
demonstration_ids: tuple[str, ...] = ()
|
|
32
|
+
temperature: float = 0.7
|
|
33
|
+
max_tokens: int = 256
|
|
34
|
+
|
|
35
|
+
def __post_init__(self) -> None:
|
|
36
|
+
if not isinstance(self.mode, (str, QueryGymMode)):
|
|
37
|
+
raise ValidationError("controlled Query2doc mode must be text")
|
|
38
|
+
object.__setattr__(self, "mode", QueryGymMode.parse(self.mode))
|
|
39
|
+
if isinstance(self.demonstration_ids, (str, bytes)):
|
|
40
|
+
raise ValidationError("controlled Query2doc demonstrations must be an ID sequence")
|
|
41
|
+
ids = tuple(self.demonstration_ids)
|
|
42
|
+
if any(not isinstance(i, str) or not i.strip() for i in ids) or len(set(ids)) != len(ids):
|
|
43
|
+
raise ValidationError("controlled Query2doc demonstration IDs must be unique nonempty text")
|
|
44
|
+
object.__setattr__(self, "demonstration_ids", ids)
|
|
45
|
+
if self.mode is QueryGymMode.FEW_SHOT and not ids:
|
|
46
|
+
raise ValidationError("controlled Query2doc few-shot mode requires frozen demonstration IDs")
|
|
47
|
+
if self.mode is not QueryGymMode.FEW_SHOT and ids:
|
|
48
|
+
raise ValidationError("controlled Query2doc demonstrations require few-shot mode")
|
|
49
|
+
# Reuse the public request's finite numeric/token validation without a
|
|
50
|
+
# model call. Prompt rendering still belongs to the pinned native worker.
|
|
51
|
+
GenerationRequest(prompt="configuration validation", temperature=self.temperature,
|
|
52
|
+
max_tokens=self.max_tokens)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
_DEFAULT_CONFIG = Query2DocLiveConfig()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _identity(value: Any, label: str) -> Mapping[str, Any]:
|
|
59
|
+
if not isinstance(value, Mapping) or not value:
|
|
60
|
+
raise ValidationError(f"controlled Query2doc {label} fingerprint must be nonempty")
|
|
61
|
+
try:
|
|
62
|
+
frozen = freeze_mapping(value)
|
|
63
|
+
content_hash(frozen)
|
|
64
|
+
except (TypeError, ValueError, OverflowError) as exc:
|
|
65
|
+
raise ValidationError(f"controlled Query2doc {label} fingerprint must be canonical JSON") from exc
|
|
66
|
+
return frozen
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _runtime_identities(context: InterventionContext) -> dict[str, Mapping[str, Any]]:
|
|
70
|
+
values = {}
|
|
71
|
+
for label, dependency, operation in (
|
|
72
|
+
("generator", context.backend, "generate"),
|
|
73
|
+
("retriever", context.retriever, "retrieve"),
|
|
74
|
+
("runtime", context.external_runtime, "reformulate"),
|
|
75
|
+
):
|
|
76
|
+
fingerprint = getattr(dependency, "fingerprint", None)
|
|
77
|
+
if not callable(fingerprint) or not callable(getattr(dependency, operation, None)):
|
|
78
|
+
raise ExternalDependencyError(
|
|
79
|
+
f"controlled Query2doc context requires {label} with {operation}() and fingerprint()"
|
|
80
|
+
)
|
|
81
|
+
values[label] = _identity(fingerprint(), label)
|
|
82
|
+
return values
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@dataclass(frozen=True, slots=True)
|
|
86
|
+
class Query2DocLiveBindings:
|
|
87
|
+
"""Immutable identities/settings; executable dependencies stay in the context."""
|
|
88
|
+
|
|
89
|
+
generator: Mapping[str, Any]
|
|
90
|
+
retriever: Mapping[str, Any]
|
|
91
|
+
runtime: Mapping[str, Any]
|
|
92
|
+
budget: ExecutionBudget
|
|
93
|
+
config: Query2DocLiveConfig = _DEFAULT_CONFIG
|
|
94
|
+
|
|
95
|
+
def __post_init__(self) -> None:
|
|
96
|
+
if not isinstance(self.budget, ExecutionBudget) or not isinstance(self.config, Query2DocLiveConfig):
|
|
97
|
+
raise ValidationError("controlled Query2doc bindings require typed budget/config")
|
|
98
|
+
for label in ("generator", "retriever", "runtime"):
|
|
99
|
+
object.__setattr__(self, label, _identity(getattr(self, label), label))
|
|
100
|
+
if self.runtime.get("revision") != QUERYGYM_REVISION:
|
|
101
|
+
raise ValidationError("controlled Query2doc runtime differs from the pinned QueryGym revision")
|
|
102
|
+
closure = self.runtime.get("source_closure_sha256")
|
|
103
|
+
if not isinstance(closure, str) or re.fullmatch(r"[0-9a-f]{64}", closure) is None:
|
|
104
|
+
raise ValidationError("controlled Query2doc requires a runtime source-closure SHA-256")
|
|
105
|
+
if content_hash(self.runtime.get("backend")) != content_hash(self.generator):
|
|
106
|
+
raise ValidationError("controlled Query2doc runtime uses a different generator identity")
|
|
107
|
+
|
|
108
|
+
@classmethod
|
|
109
|
+
def from_context(
|
|
110
|
+
cls, context: InterventionContext, *, budget: ExecutionBudget,
|
|
111
|
+
config: Query2DocLiveConfig = _DEFAULT_CONFIG,
|
|
112
|
+
) -> Query2DocLiveBindings:
|
|
113
|
+
if not isinstance(context, InterventionContext):
|
|
114
|
+
raise ValidationError("controlled Query2doc requires an InterventionContext")
|
|
115
|
+
return cls(**_runtime_identities(context), budget=budget, config=config)
|
|
116
|
+
|
|
117
|
+
@classmethod
|
|
118
|
+
def from_mapping(cls, value: Mapping[str, Any]) -> Query2DocLiveBindings:
|
|
119
|
+
required = {"generator", "retriever", "runtime", "budget"}
|
|
120
|
+
if not isinstance(value, Mapping) or not required.issubset(value):
|
|
121
|
+
raise ValidationError("controlled Query2doc binding recipe is missing required fields")
|
|
122
|
+
if set(value) - required - {"config"}:
|
|
123
|
+
raise ValidationError("controlled Query2doc binding recipe contains unknown fields")
|
|
124
|
+
if not isinstance(value["budget"], Mapping) or not isinstance(value.get("config", {}), Mapping):
|
|
125
|
+
raise ValidationError("controlled Query2doc budget/config recipes must be mappings")
|
|
126
|
+
try:
|
|
127
|
+
return cls(generator=value["generator"], retriever=value["retriever"], runtime=value["runtime"],
|
|
128
|
+
budget=ExecutionBudget(**value["budget"]),
|
|
129
|
+
config=Query2DocLiveConfig(**value.get("config", {})))
|
|
130
|
+
except TypeError as exc:
|
|
131
|
+
raise ValidationError("controlled Query2doc recipe contains invalid settings") from exc
|
|
132
|
+
|
|
133
|
+
@property
|
|
134
|
+
def binding_hash(self) -> str:
|
|
135
|
+
return content_hash(self)
|
|
136
|
+
|
|
137
|
+
def require_match(self, context: InterventionContext) -> None:
|
|
138
|
+
for label, actual in _runtime_identities(context).items():
|
|
139
|
+
if content_hash(actual) != content_hash(getattr(self, label)):
|
|
140
|
+
raise ValidationError(f"controlled Query2doc {label} fingerprint differs from binding")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@dataclass(frozen=True, slots=True)
|
|
144
|
+
class Query2DocControlledLive:
|
|
145
|
+
"""Native QueryGym reformulation with locked shared-comparison dependencies.
|
|
146
|
+
|
|
147
|
+
Retrieval is not performed by a query rewriter. Binding the shared retriever
|
|
148
|
+
prevents a dispatch-time swap; the downstream benchmark driver must use it
|
|
149
|
+
with its own declared retrieval depth and remaining budget.
|
|
150
|
+
"""
|
|
151
|
+
|
|
152
|
+
bindings: Query2DocLiveBindings | Mapping[str, Any]
|
|
153
|
+
profile_kind: str = "controlled_adapter"
|
|
154
|
+
method_id: str = "query2doc"
|
|
155
|
+
release_id: str = "rewrite.query2doc.controlled_live"
|
|
156
|
+
family: SemanticFamily = SemanticFamily.REFORMULATE
|
|
157
|
+
|
|
158
|
+
def __post_init__(self) -> None:
|
|
159
|
+
if isinstance(self.bindings, Mapping):
|
|
160
|
+
object.__setattr__(self, "bindings", Query2DocLiveBindings.from_mapping(self.bindings))
|
|
161
|
+
if not isinstance(self.bindings, Query2DocLiveBindings):
|
|
162
|
+
raise ValidationError("controlled Query2doc requires Query2DocLiveBindings")
|
|
163
|
+
if self.profile_kind not in {"controlled_adapter", "factorial_adapter"}:
|
|
164
|
+
raise ValidationError("controlled Query2doc profile_kind must be controlled or factorial")
|
|
165
|
+
if (self.method_id != "query2doc" or self.release_id != "rewrite.query2doc.controlled_live"
|
|
166
|
+
or self.family is not SemanticFamily.REFORMULATE):
|
|
167
|
+
raise ValidationError("controlled Query2doc identity differs from its registered profile")
|
|
168
|
+
|
|
169
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
170
|
+
if state.budget != self.bindings.budget:
|
|
171
|
+
raise ValidationError("controlled Query2doc state budget differs from binding")
|
|
172
|
+
self.bindings.require_match(context)
|
|
173
|
+
settings = self.bindings.config
|
|
174
|
+
native = QueryGymLiveBridge(mode=settings.mode, demonstration_ids=settings.demonstration_ids,
|
|
175
|
+
temperature=settings.temperature, max_tokens=settings.max_tokens).propose(state, context)
|
|
176
|
+
self.bindings.require_match(context)
|
|
177
|
+
return replace(native, release_id=self.release_id, profile_kind=self.profile_kind,
|
|
178
|
+
trace=replace(native.trace, release_id=self.release_id, events=(
|
|
179
|
+
TraceEvent(TracePhase.PREPARE, "controlled_dependency_binding", {
|
|
180
|
+
"binding_sha256": self.bindings.binding_hash, "budget": self.bindings.budget,
|
|
181
|
+
"config": settings, "shared_retriever_bound_not_invoked": True}),
|
|
182
|
+
*native.trace.events)),
|
|
183
|
+
metadata={**native.metadata, "native_source_release": native.release_id,
|
|
184
|
+
"controlled_binding_sha256": self.bindings.binding_hash,
|
|
185
|
+
"dependency_identity_verification": "operator_fingerprint_equality",
|
|
186
|
+
"downstream_retrieval_performed": False, "weight_files_verified_by_binding": False,
|
|
187
|
+
"original_paper_result_parity_claimed": False})
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
__all__ = ["Query2DocControlledLive", "Query2DocLiveBindings", "Query2DocLiveConfig"]
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""Dependency-free Query2doc bridge models."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from agentinputlab.contracts.enums import StrEnum
|
|
10
|
+
from agentinputlab.contracts.errors import ValidationError
|
|
11
|
+
from agentinputlab.contracts.serialization import freeze_mapping
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class QueryGymMode(StrEnum):
|
|
15
|
+
ZERO_SHOT = "zs"
|
|
16
|
+
COT = "cot"
|
|
17
|
+
FEW_SHOT = "few_shot"
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def parse(cls, value: str | QueryGymMode) -> QueryGymMode:
|
|
21
|
+
if isinstance(value, cls):
|
|
22
|
+
return value
|
|
23
|
+
normalized = value.strip().lower().replace("-", "_")
|
|
24
|
+
aliases = {
|
|
25
|
+
"zero_shot": cls.ZERO_SHOT,
|
|
26
|
+
"zero": cls.ZERO_SHOT,
|
|
27
|
+
"zs": cls.ZERO_SHOT,
|
|
28
|
+
"cot": cls.COT,
|
|
29
|
+
"fs": cls.FEW_SHOT,
|
|
30
|
+
"fewshot": cls.FEW_SHOT,
|
|
31
|
+
"few_shot": cls.FEW_SHOT,
|
|
32
|
+
}
|
|
33
|
+
try:
|
|
34
|
+
return aliases[normalized]
|
|
35
|
+
except KeyError as exc:
|
|
36
|
+
raise ValidationError(f"unsupported QueryGym Query2doc mode: {value!r}") from exc
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass(frozen=True, slots=True)
|
|
40
|
+
class OfficialQuery2DocRow:
|
|
41
|
+
query_id: str
|
|
42
|
+
query: str
|
|
43
|
+
pseudo_doc: str
|
|
44
|
+
split: str = ""
|
|
45
|
+
|
|
46
|
+
def __post_init__(self) -> None:
|
|
47
|
+
if not self.query_id:
|
|
48
|
+
raise ValidationError("Query2doc cache row requires query_id")
|
|
49
|
+
if not self.query:
|
|
50
|
+
raise ValidationError("Query2doc cache row requires query")
|
|
51
|
+
if not self.pseudo_doc:
|
|
52
|
+
raise ValidationError("Query2doc cache row requires pseudo_doc")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass(frozen=True, slots=True)
|
|
56
|
+
class QueryGymRequest:
|
|
57
|
+
query_id: str
|
|
58
|
+
query: str
|
|
59
|
+
mode: QueryGymMode
|
|
60
|
+
demonstration_ids: tuple[str, ...] = ()
|
|
61
|
+
temperature: float = 0.7
|
|
62
|
+
max_tokens: int = 256
|
|
63
|
+
seed: int = 0
|
|
64
|
+
backend_fingerprint: Mapping[str, Any] = field(default_factory=dict)
|
|
65
|
+
|
|
66
|
+
def __post_init__(self) -> None:
|
|
67
|
+
object.__setattr__(self, "demonstration_ids", tuple(self.demonstration_ids))
|
|
68
|
+
object.__setattr__(self, "backend_fingerprint", freeze_mapping(self.backend_fingerprint))
|
|
69
|
+
if not self.query:
|
|
70
|
+
raise ValidationError("QueryGym request requires a non-empty query")
|
|
71
|
+
if self.max_tokens < 1:
|
|
72
|
+
raise ValidationError("QueryGym max_tokens must be positive")
|
|
73
|
+
if self.temperature < 0:
|
|
74
|
+
raise ValidationError("QueryGym temperature must be non-negative")
|
|
75
|
+
if self.mode is QueryGymMode.FEW_SHOT and not self.demonstration_ids:
|
|
76
|
+
raise ValidationError("QueryGym few-shot mode requires fixed demonstration IDs")
|
|
77
|
+
|
|
78
|
+
def external_reservation(self) -> Mapping[str, int]:
|
|
79
|
+
"""One Query2doc reformulation always attempts exactly one model call."""
|
|
80
|
+
|
|
81
|
+
return {"model_calls": 1}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass(frozen=True, slots=True)
|
|
85
|
+
class QueryGymRawResult:
|
|
86
|
+
reformulated: str
|
|
87
|
+
generated_text: str = ""
|
|
88
|
+
prompt_hash: str = ""
|
|
89
|
+
fallback: bool = False
|
|
90
|
+
usage: Mapping[str, int | float] = field(default_factory=dict)
|
|
91
|
+
metadata: Mapping[str, Any] = field(default_factory=dict)
|
|
92
|
+
|
|
93
|
+
def __post_init__(self) -> None:
|
|
94
|
+
object.__setattr__(self, "usage", freeze_mapping(self.usage))
|
|
95
|
+
object.__setattr__(self, "metadata", freeze_mapping(self.metadata))
|