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,675 @@
|
|
|
1
|
+
"""External bridges for the pinned InfoCQR teacher and official author caches."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import math
|
|
6
|
+
import re
|
|
7
|
+
from collections.abc import Mapping, Sequence
|
|
8
|
+
from dataclasses import asdict, dataclass
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from agentinputlab.contracts import (
|
|
12
|
+
AlgorithmOutputError,
|
|
13
|
+
ExecutionTrace,
|
|
14
|
+
ExternalDependencyError,
|
|
15
|
+
FrozenAgentState,
|
|
16
|
+
InputPatch,
|
|
17
|
+
InterventionContext,
|
|
18
|
+
PatchOp,
|
|
19
|
+
PatchOperation,
|
|
20
|
+
SemanticFamily,
|
|
21
|
+
TraceEvent,
|
|
22
|
+
TracePhase,
|
|
23
|
+
ValidationError,
|
|
24
|
+
)
|
|
25
|
+
from agentinputlab.contracts.serialization import content_hash
|
|
26
|
+
from agentinputlab.integrations.external_workers import WorkerClient
|
|
27
|
+
from agentinputlab.integrations.external_workers.method import (
|
|
28
|
+
MethodWorkerRequest,
|
|
29
|
+
call_worker,
|
|
30
|
+
required_text,
|
|
31
|
+
resolve_worker,
|
|
32
|
+
string_tuple,
|
|
33
|
+
worker_fingerprint,
|
|
34
|
+
)
|
|
35
|
+
from agentinputlab.observability import external_usage_counters
|
|
36
|
+
|
|
37
|
+
from .cache_replay import INFOCQR_UPSTREAM_COMMIT
|
|
38
|
+
|
|
39
|
+
INFOCQR_PROTOCOL_VERSION = "agentinputlab.infocqr.v1"
|
|
40
|
+
INFOCQR_POSTPROCESS_SHA256 = "7201ceaeb16beaaf3af874faf083ce4f64dd630636a2e302edf398cc4da8d3dd"
|
|
41
|
+
INFOCQR_PROMPT_SOURCE_SHA256 = {
|
|
42
|
+
"rw_zsl": "93d6ba61da042f15ed6d506b3d69bac1a16d3e33453b84ec8f6b7317d018defc",
|
|
43
|
+
"rw_fsl": "9c447f5292a6c936160ab847d3eb18db4704ea62f3d46a896ef5613aac2ce6a6",
|
|
44
|
+
"t5_edit": "5c71071d213ac562651d5577e623f73d0b98ffc3279f2dc1727127e8475d1bba",
|
|
45
|
+
"self_edit": "2fba6bb3b24a7b332c7896b89c7ae6480c2d21272f42bad893ee5151c7739373",
|
|
46
|
+
}
|
|
47
|
+
_LIVE_PROFILES = frozenset(INFOCQR_PROMPT_SOURCE_SHA256)
|
|
48
|
+
_CACHE_RELEASES = {
|
|
49
|
+
"rw_zsl": "rewrite.infocqr.cached_rw_zsl",
|
|
50
|
+
"rw_fsl": "rewrite.infocqr.cached_rw_fsl",
|
|
51
|
+
"t5_edit": "rewrite.infocqr.cached_edit",
|
|
52
|
+
}
|
|
53
|
+
_SHA256 = re.compile(r"[0-9a-f]{64}")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@dataclass(frozen=True, slots=True)
|
|
57
|
+
class InfoCQRExternalControls:
|
|
58
|
+
max_model_calls: int = 2
|
|
59
|
+
max_tokens: int = 8_192
|
|
60
|
+
max_cost_usd: float = 10.0
|
|
61
|
+
|
|
62
|
+
def __post_init__(self) -> None:
|
|
63
|
+
for name in ("max_model_calls", "max_tokens"):
|
|
64
|
+
value = getattr(self, name)
|
|
65
|
+
if isinstance(value, bool) or not isinstance(value, int) or value < 0:
|
|
66
|
+
raise ValidationError(f"InfoCQR {name} must be non-negative")
|
|
67
|
+
if (
|
|
68
|
+
isinstance(self.max_cost_usd, bool)
|
|
69
|
+
or not isinstance(self.max_cost_usd, (int, float))
|
|
70
|
+
or not math.isfinite(float(self.max_cost_usd))
|
|
71
|
+
or self.max_cost_usd < 0
|
|
72
|
+
):
|
|
73
|
+
raise ValidationError("InfoCQR max_cost_usd must be finite and non-negative")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@dataclass(slots=True)
|
|
77
|
+
class InfoCQRLiveTeacherExternal:
|
|
78
|
+
"""Call the exact pinned teacher prompt function through an external worker."""
|
|
79
|
+
|
|
80
|
+
prompt_profile: str = "rw_fsl"
|
|
81
|
+
client: WorkerClient | None = None
|
|
82
|
+
source_license_acknowledged: bool = False
|
|
83
|
+
dataset_id: str = "qrecc"
|
|
84
|
+
dataset_revision: str = ""
|
|
85
|
+
split: str = "test"
|
|
86
|
+
retrieval_corpus_id: str = ""
|
|
87
|
+
profile_kind: str = "controlled_adapter"
|
|
88
|
+
initial_rewrite: str = ""
|
|
89
|
+
initial_rewrite_source_sha256: str = ""
|
|
90
|
+
controls: InfoCQRExternalControls = InfoCQRExternalControls()
|
|
91
|
+
release_id: str = "rewrite.infocqr.live_teacher_external"
|
|
92
|
+
method_id: str = "infocqr"
|
|
93
|
+
family: SemanticFamily = SemanticFamily.REFORMULATE
|
|
94
|
+
|
|
95
|
+
def __post_init__(self) -> None:
|
|
96
|
+
common_support = self.release_id == "rewrite.infocqr.common_support_rw_zsl"
|
|
97
|
+
if self.prompt_profile not in _LIVE_PROFILES or (
|
|
98
|
+
common_support and self.prompt_profile != "rw_zsl"
|
|
99
|
+
):
|
|
100
|
+
raise ValidationError("unsupported InfoCQR live teacher profile")
|
|
101
|
+
_validate_common_configuration(
|
|
102
|
+
source_license_acknowledged=self.source_license_acknowledged,
|
|
103
|
+
dataset_revision=self.dataset_revision,
|
|
104
|
+
split=self.split,
|
|
105
|
+
retrieval_corpus_id=self.retrieval_corpus_id,
|
|
106
|
+
)
|
|
107
|
+
if self.profile_kind not in {"official_native", "controlled_adapter"}:
|
|
108
|
+
raise ValidationError("InfoCQR live profile_kind is invalid")
|
|
109
|
+
if not self.dataset_id.strip():
|
|
110
|
+
raise ValidationError("InfoCQR dataset_id must not be empty")
|
|
111
|
+
if common_support and self.profile_kind != "controlled_adapter":
|
|
112
|
+
raise ValidationError("InfoCQR common-support execution is a controlled adapter")
|
|
113
|
+
if not common_support and self.dataset_id.lower() != "qrecc":
|
|
114
|
+
raise ValidationError("native InfoCQR execution requires QReCC")
|
|
115
|
+
if self.prompt_profile == "t5_edit":
|
|
116
|
+
if not self.initial_rewrite.strip() or not _is_hash(self.initial_rewrite_source_sha256):
|
|
117
|
+
raise ValidationError(
|
|
118
|
+
"InfoCQR t5_edit requires an initial rewrite and artifact SHA-256"
|
|
119
|
+
)
|
|
120
|
+
if self.profile_kind != "controlled_adapter":
|
|
121
|
+
raise ValidationError("user-supplied T5 candidates are controlled_adapter inputs")
|
|
122
|
+
elif self.initial_rewrite or self.initial_rewrite_source_sha256:
|
|
123
|
+
raise ValidationError("InfoCQR profile does not accept an initial rewrite")
|
|
124
|
+
expected_calls = 2 if self.prompt_profile == "self_edit" else 1
|
|
125
|
+
if self.controls.max_model_calls < expected_calls:
|
|
126
|
+
raise ValidationError("InfoCQR controls cannot reserve required teacher calls")
|
|
127
|
+
|
|
128
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
129
|
+
conversation = _conversation_view(
|
|
130
|
+
state, common_support=self.release_id == "rewrite.infocqr.common_support_rw_zsl"
|
|
131
|
+
)
|
|
132
|
+
_require_source_license_acknowledgement(self.source_license_acknowledged)
|
|
133
|
+
worker = resolve_worker(self.client, context, label="InfoCQR")
|
|
134
|
+
backend_fp = _bound_fingerprint(
|
|
135
|
+
context.backend,
|
|
136
|
+
context.run_config.get("infocqr_model_fingerprint"),
|
|
137
|
+
label="InfoCQR teacher",
|
|
138
|
+
)
|
|
139
|
+
retriever_fp = _bound_fingerprint(
|
|
140
|
+
context.retriever,
|
|
141
|
+
context.run_config.get("infocqr_retriever_fingerprint"),
|
|
142
|
+
label="InfoCQR retrieval corpus",
|
|
143
|
+
)
|
|
144
|
+
expected_calls = 2 if self.prompt_profile == "self_edit" else 1
|
|
145
|
+
request = MethodWorkerRequest(
|
|
146
|
+
method_id=self.method_id,
|
|
147
|
+
release_id=self.release_id,
|
|
148
|
+
upstream_commit=INFOCQR_UPSTREAM_COMMIT,
|
|
149
|
+
state_hash=state.state_hash,
|
|
150
|
+
payload=_request_payload(
|
|
151
|
+
state,
|
|
152
|
+
conversation,
|
|
153
|
+
dataset_id=self.dataset_id,
|
|
154
|
+
operation="live_teacher",
|
|
155
|
+
prompt_profile=self.prompt_profile,
|
|
156
|
+
prompt_source_sha256=INFOCQR_PROMPT_SOURCE_SHA256[self.prompt_profile],
|
|
157
|
+
dataset_revision=self.dataset_revision,
|
|
158
|
+
split=self.split,
|
|
159
|
+
retrieval_corpus_id=self.retrieval_corpus_id,
|
|
160
|
+
profile_kind=self.profile_kind,
|
|
161
|
+
initial_rewrite=self.initial_rewrite,
|
|
162
|
+
initial_rewrite_source_sha256=self.initial_rewrite_source_sha256,
|
|
163
|
+
cache_artifact_id="",
|
|
164
|
+
cache_artifact_sha256="",
|
|
165
|
+
allow_first_turn_truth_rewrite=False,
|
|
166
|
+
source_license_acknowledged=self.source_license_acknowledged,
|
|
167
|
+
controls=self.controls,
|
|
168
|
+
seed=context.seed,
|
|
169
|
+
),
|
|
170
|
+
dependency_fingerprints={"backend": backend_fp, "retriever": retriever_fp},
|
|
171
|
+
minimum_reservation={"model_calls": expected_calls},
|
|
172
|
+
protocol_version=INFOCQR_PROTOCOL_VERSION,
|
|
173
|
+
)
|
|
174
|
+
response = call_worker(worker, request)
|
|
175
|
+
payload = _validate_response(
|
|
176
|
+
response.payload,
|
|
177
|
+
state=state,
|
|
178
|
+
conversation=conversation,
|
|
179
|
+
dataset_id=self.dataset_id,
|
|
180
|
+
operation="live_teacher",
|
|
181
|
+
prompt_profile=self.prompt_profile,
|
|
182
|
+
prompt_source_sha256=INFOCQR_PROMPT_SOURCE_SHA256[self.prompt_profile],
|
|
183
|
+
dataset_revision=self.dataset_revision,
|
|
184
|
+
split=self.split,
|
|
185
|
+
retrieval_corpus_id=self.retrieval_corpus_id,
|
|
186
|
+
profile_kind=self.profile_kind,
|
|
187
|
+
cache_artifact_id="",
|
|
188
|
+
cache_artifact_sha256="",
|
|
189
|
+
)
|
|
190
|
+
if response.usage.model_calls != expected_calls:
|
|
191
|
+
raise AlgorithmOutputError("InfoCQR worker usage omits or adds a teacher call")
|
|
192
|
+
return _materialize_patch(
|
|
193
|
+
state,
|
|
194
|
+
payload,
|
|
195
|
+
response.usage,
|
|
196
|
+
worker=worker,
|
|
197
|
+
release_id=self.release_id,
|
|
198
|
+
profile_kind=self.profile_kind,
|
|
199
|
+
implementation_origin="thin_external_wrapper",
|
|
200
|
+
source_license_acknowledged=self.source_license_acknowledged,
|
|
201
|
+
backend_fingerprint=backend_fp,
|
|
202
|
+
retriever_fingerprint=retriever_fp,
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
@dataclass(slots=True)
|
|
207
|
+
class InfoCQRCommonSupportZeroShot(InfoCQRLiveTeacherExternal):
|
|
208
|
+
"""Bound zero-shot visible-dialogue profile, not native QReCC execution."""
|
|
209
|
+
|
|
210
|
+
prompt_profile: str = 'rw_zsl'
|
|
211
|
+
release_id: str = 'rewrite.infocqr.common_support_rw_zsl'
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
@dataclass(slots=True)
|
|
215
|
+
class InfoCQRMountedCacheReplay:
|
|
216
|
+
"""Replay an official-format InfoCQR author cache mounted by the operator."""
|
|
217
|
+
|
|
218
|
+
prompt_profile: str
|
|
219
|
+
cache_artifact_id: str
|
|
220
|
+
cache_artifact_sha256: str
|
|
221
|
+
client: WorkerClient | None = None
|
|
222
|
+
source_license_acknowledged: bool = False
|
|
223
|
+
dataset_revision: str = ""
|
|
224
|
+
split: str = "test"
|
|
225
|
+
retrieval_corpus_id: str = ""
|
|
226
|
+
allow_first_turn_truth_rewrite: bool = False
|
|
227
|
+
controls: InfoCQRExternalControls = InfoCQRExternalControls(
|
|
228
|
+
max_model_calls=0,
|
|
229
|
+
max_tokens=0,
|
|
230
|
+
max_cost_usd=0.0,
|
|
231
|
+
)
|
|
232
|
+
method_id: str = "infocqr"
|
|
233
|
+
family: SemanticFamily = SemanticFamily.REFORMULATE
|
|
234
|
+
|
|
235
|
+
def __post_init__(self) -> None:
|
|
236
|
+
if self.prompt_profile not in _CACHE_RELEASES:
|
|
237
|
+
raise ValidationError("unsupported InfoCQR author-cache profile")
|
|
238
|
+
if not self.cache_artifact_id.strip() or not _is_hash(self.cache_artifact_sha256):
|
|
239
|
+
raise ValidationError("InfoCQR author cache requires artifact ID and SHA-256")
|
|
240
|
+
_validate_common_configuration(
|
|
241
|
+
source_license_acknowledged=self.source_license_acknowledged,
|
|
242
|
+
dataset_revision=self.dataset_revision,
|
|
243
|
+
split=self.split,
|
|
244
|
+
retrieval_corpus_id=self.retrieval_corpus_id,
|
|
245
|
+
)
|
|
246
|
+
if not isinstance(self.allow_first_turn_truth_rewrite, bool):
|
|
247
|
+
raise ValidationError("allow_first_turn_truth_rewrite must be boolean")
|
|
248
|
+
if self.controls.max_model_calls != 0:
|
|
249
|
+
raise ValidationError("InfoCQR cache replay cannot reserve live model calls")
|
|
250
|
+
|
|
251
|
+
@property
|
|
252
|
+
def release_id(self) -> str:
|
|
253
|
+
return _CACHE_RELEASES[self.prompt_profile]
|
|
254
|
+
|
|
255
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
256
|
+
conversation = _qrecc_conversation(state)
|
|
257
|
+
_require_source_license_acknowledgement(self.source_license_acknowledged)
|
|
258
|
+
worker = resolve_worker(self.client, context, label="InfoCQR")
|
|
259
|
+
retriever_fp = _bound_fingerprint(
|
|
260
|
+
context.retriever,
|
|
261
|
+
context.run_config.get("infocqr_retriever_fingerprint"),
|
|
262
|
+
label="InfoCQR retrieval corpus",
|
|
263
|
+
)
|
|
264
|
+
request = MethodWorkerRequest(
|
|
265
|
+
method_id=self.method_id,
|
|
266
|
+
release_id=self.release_id,
|
|
267
|
+
upstream_commit=INFOCQR_UPSTREAM_COMMIT,
|
|
268
|
+
state_hash=state.state_hash,
|
|
269
|
+
payload=_request_payload(
|
|
270
|
+
state,
|
|
271
|
+
conversation,
|
|
272
|
+
dataset_id="qrecc",
|
|
273
|
+
operation="cached_replay",
|
|
274
|
+
prompt_profile=self.prompt_profile,
|
|
275
|
+
prompt_source_sha256=INFOCQR_PROMPT_SOURCE_SHA256[self.prompt_profile],
|
|
276
|
+
dataset_revision=self.dataset_revision,
|
|
277
|
+
split=self.split,
|
|
278
|
+
retrieval_corpus_id=self.retrieval_corpus_id,
|
|
279
|
+
profile_kind="artifact_replay",
|
|
280
|
+
initial_rewrite="",
|
|
281
|
+
initial_rewrite_source_sha256="",
|
|
282
|
+
cache_artifact_id=self.cache_artifact_id,
|
|
283
|
+
cache_artifact_sha256=self.cache_artifact_sha256,
|
|
284
|
+
allow_first_turn_truth_rewrite=self.allow_first_turn_truth_rewrite,
|
|
285
|
+
source_license_acknowledged=self.source_license_acknowledged,
|
|
286
|
+
controls=self.controls,
|
|
287
|
+
seed=context.seed,
|
|
288
|
+
),
|
|
289
|
+
dependency_fingerprints={"backend": {}, "retriever": retriever_fp},
|
|
290
|
+
minimum_reservation={"model_calls": 0},
|
|
291
|
+
protocol_version=INFOCQR_PROTOCOL_VERSION,
|
|
292
|
+
)
|
|
293
|
+
response = call_worker(worker, request)
|
|
294
|
+
payload = _validate_response(
|
|
295
|
+
response.payload,
|
|
296
|
+
state=state,
|
|
297
|
+
conversation=conversation,
|
|
298
|
+
dataset_id="qrecc",
|
|
299
|
+
operation="cached_replay",
|
|
300
|
+
prompt_profile=self.prompt_profile,
|
|
301
|
+
prompt_source_sha256=INFOCQR_PROMPT_SOURCE_SHA256[self.prompt_profile],
|
|
302
|
+
dataset_revision=self.dataset_revision,
|
|
303
|
+
split=self.split,
|
|
304
|
+
retrieval_corpus_id=self.retrieval_corpus_id,
|
|
305
|
+
profile_kind="artifact_replay",
|
|
306
|
+
cache_artifact_id=self.cache_artifact_id,
|
|
307
|
+
cache_artifact_sha256=self.cache_artifact_sha256,
|
|
308
|
+
)
|
|
309
|
+
if (
|
|
310
|
+
response.usage.model_calls
|
|
311
|
+
or response.usage.input_tokens
|
|
312
|
+
or response.usage.output_tokens
|
|
313
|
+
):
|
|
314
|
+
raise AlgorithmOutputError("InfoCQR replay incorrectly billed historical generation")
|
|
315
|
+
return _materialize_patch(
|
|
316
|
+
state,
|
|
317
|
+
payload,
|
|
318
|
+
response.usage,
|
|
319
|
+
worker=worker,
|
|
320
|
+
release_id=self.release_id,
|
|
321
|
+
profile_kind="controlled_adapter",
|
|
322
|
+
implementation_origin="compatibility_replay",
|
|
323
|
+
source_license_acknowledged=self.source_license_acknowledged,
|
|
324
|
+
backend_fingerprint={},
|
|
325
|
+
retriever_fingerprint=retriever_fp,
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
def _request_payload(
|
|
330
|
+
state: FrozenAgentState,
|
|
331
|
+
conversation: Mapping[str, Any],
|
|
332
|
+
*,
|
|
333
|
+
dataset_id: str,
|
|
334
|
+
operation: str,
|
|
335
|
+
prompt_profile: str,
|
|
336
|
+
prompt_source_sha256: str,
|
|
337
|
+
dataset_revision: str,
|
|
338
|
+
split: str,
|
|
339
|
+
retrieval_corpus_id: str,
|
|
340
|
+
profile_kind: str,
|
|
341
|
+
initial_rewrite: str,
|
|
342
|
+
initial_rewrite_source_sha256: str,
|
|
343
|
+
cache_artifact_id: str,
|
|
344
|
+
cache_artifact_sha256: str,
|
|
345
|
+
allow_first_turn_truth_rewrite: bool,
|
|
346
|
+
source_license_acknowledged: bool,
|
|
347
|
+
controls: InfoCQRExternalControls,
|
|
348
|
+
seed: int,
|
|
349
|
+
) -> Mapping[str, Any]:
|
|
350
|
+
return {
|
|
351
|
+
"operation": operation,
|
|
352
|
+
"task_id": state.task_id
|
|
353
|
+
or f"{conversation['conversation_source']}:"
|
|
354
|
+
f"{conversation['conversation_no']}:{conversation['turn_no']}",
|
|
355
|
+
"dataset_id": dataset_id,
|
|
356
|
+
"dataset_revision": dataset_revision,
|
|
357
|
+
"split": split,
|
|
358
|
+
"conversation_source": conversation["conversation_source"],
|
|
359
|
+
"conversation_no": conversation["conversation_no"],
|
|
360
|
+
"turn_no": conversation["turn_no"],
|
|
361
|
+
"query": state.query,
|
|
362
|
+
"new_context": conversation["new_context"],
|
|
363
|
+
"prompt_profile": prompt_profile,
|
|
364
|
+
"prompt_source_sha256": prompt_source_sha256,
|
|
365
|
+
"cache_artifact_id": cache_artifact_id,
|
|
366
|
+
"cache_artifact_sha256": cache_artifact_sha256,
|
|
367
|
+
"allow_first_turn_truth_rewrite": allow_first_turn_truth_rewrite,
|
|
368
|
+
"source_license_acknowledged": source_license_acknowledged,
|
|
369
|
+
"retrieval_corpus_id": retrieval_corpus_id,
|
|
370
|
+
"profile_kind": profile_kind,
|
|
371
|
+
"initial_rewrite": initial_rewrite,
|
|
372
|
+
"initial_rewrite_source_sha256": initial_rewrite_source_sha256,
|
|
373
|
+
"controls": asdict(controls),
|
|
374
|
+
"seed": seed,
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def _validate_response(
|
|
379
|
+
payload: Mapping[str, Any],
|
|
380
|
+
*,
|
|
381
|
+
state: FrozenAgentState,
|
|
382
|
+
conversation: Mapping[str, Any],
|
|
383
|
+
dataset_id: str,
|
|
384
|
+
operation: str,
|
|
385
|
+
prompt_profile: str,
|
|
386
|
+
prompt_source_sha256: str,
|
|
387
|
+
dataset_revision: str,
|
|
388
|
+
split: str,
|
|
389
|
+
retrieval_corpus_id: str,
|
|
390
|
+
profile_kind: str,
|
|
391
|
+
cache_artifact_id: str,
|
|
392
|
+
cache_artifact_sha256: str,
|
|
393
|
+
) -> Mapping[str, Any]:
|
|
394
|
+
rewrite = required_text(payload, "rewrite", label="InfoCQR response")
|
|
395
|
+
del rewrite
|
|
396
|
+
expected_text = {
|
|
397
|
+
"operation": operation,
|
|
398
|
+
"prompt_profile": prompt_profile,
|
|
399
|
+
"prompt_source_sha256": prompt_source_sha256,
|
|
400
|
+
"postprocess_source_sha256": INFOCQR_POSTPROCESS_SHA256,
|
|
401
|
+
"dataset_id": dataset_id,
|
|
402
|
+
"dataset_revision": dataset_revision,
|
|
403
|
+
"split": split,
|
|
404
|
+
"conversation_source": conversation["conversation_source"],
|
|
405
|
+
"retrieval_corpus_id": retrieval_corpus_id,
|
|
406
|
+
"profile_kind": profile_kind,
|
|
407
|
+
"cache_artifact_id": cache_artifact_id,
|
|
408
|
+
"cache_artifact_sha256": cache_artifact_sha256,
|
|
409
|
+
}
|
|
410
|
+
for key, expected in expected_text.items():
|
|
411
|
+
observed = payload.get(key, "")
|
|
412
|
+
if observed != expected:
|
|
413
|
+
raise AlgorithmOutputError(f"InfoCQR worker {key} identity mismatch")
|
|
414
|
+
if (
|
|
415
|
+
payload.get("conversation_no") != conversation["conversation_no"]
|
|
416
|
+
or payload.get("turn_no") != conversation["turn_no"]
|
|
417
|
+
):
|
|
418
|
+
raise AlgorithmOutputError("InfoCQR worker conversation turn mismatch")
|
|
419
|
+
expected_view_hash = content_hash(
|
|
420
|
+
{"query": state.query, "new_context": conversation["new_context"]}
|
|
421
|
+
)
|
|
422
|
+
if payload.get("conversation_view_hash") != expected_view_hash:
|
|
423
|
+
raise AlgorithmOutputError("InfoCQR worker conversation view hash mismatch")
|
|
424
|
+
raw_candidates = string_tuple(
|
|
425
|
+
payload.get("raw_candidates", ()),
|
|
426
|
+
label="InfoCQR raw_candidates",
|
|
427
|
+
allow_empty=False,
|
|
428
|
+
)
|
|
429
|
+
del raw_candidates
|
|
430
|
+
official_calls = string_tuple(
|
|
431
|
+
payload.get("official_calls", ()),
|
|
432
|
+
label="InfoCQR official_calls",
|
|
433
|
+
)
|
|
434
|
+
reconstructed_calls = string_tuple(
|
|
435
|
+
payload.get("reconstructed_calls", ()),
|
|
436
|
+
label="InfoCQR reconstructed_calls",
|
|
437
|
+
)
|
|
438
|
+
execution_label = payload.get("execution_label")
|
|
439
|
+
if operation == "cached_replay":
|
|
440
|
+
if execution_label != "compatibility_replay" or official_calls or not reconstructed_calls:
|
|
441
|
+
raise AlgorithmOutputError(
|
|
442
|
+
"InfoCQR cache must disclose compatibility replay without official calls"
|
|
443
|
+
)
|
|
444
|
+
elif execution_label != "official_function_calls" or not official_calls or reconstructed_calls:
|
|
445
|
+
raise AlgorithmOutputError("InfoCQR live teacher must disclose its official function calls")
|
|
446
|
+
if payload.get("source_license_id") != "NOASSERTION":
|
|
447
|
+
raise AlgorithmOutputError("InfoCQR worker changed source license identity")
|
|
448
|
+
if payload.get("source_license_acknowledged") is not True:
|
|
449
|
+
raise AlgorithmOutputError("InfoCQR worker omitted license acknowledgement")
|
|
450
|
+
if (
|
|
451
|
+
payload.get("vendored_upstream_source") is not False
|
|
452
|
+
or payload.get("t5_student_checkpoint_used") is not False
|
|
453
|
+
or payload.get("paper_result_parity_claimed") is not False
|
|
454
|
+
):
|
|
455
|
+
raise AlgorithmOutputError("InfoCQR worker safety declaration mismatch")
|
|
456
|
+
return payload
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
def _materialize_patch(
|
|
460
|
+
state: FrozenAgentState,
|
|
461
|
+
payload: Mapping[str, Any],
|
|
462
|
+
usage: Any,
|
|
463
|
+
*,
|
|
464
|
+
worker: WorkerClient,
|
|
465
|
+
release_id: str,
|
|
466
|
+
profile_kind: str,
|
|
467
|
+
implementation_origin: str,
|
|
468
|
+
source_license_acknowledged: bool,
|
|
469
|
+
backend_fingerprint: Mapping[str, Any],
|
|
470
|
+
retriever_fingerprint: Mapping[str, Any],
|
|
471
|
+
) -> InputPatch:
|
|
472
|
+
rewrite = str(payload["rewrite"])
|
|
473
|
+
trace = ExecutionTrace(
|
|
474
|
+
method_id="infocqr",
|
|
475
|
+
release_id=release_id,
|
|
476
|
+
events=(
|
|
477
|
+
TraceEvent(
|
|
478
|
+
TracePhase.PREPARE,
|
|
479
|
+
"dataset_identity",
|
|
480
|
+
{
|
|
481
|
+
"dataset_id": payload["dataset_id"],
|
|
482
|
+
"dataset_revision": payload["dataset_revision"],
|
|
483
|
+
"split": payload["split"],
|
|
484
|
+
"conversation_source": payload["conversation_source"],
|
|
485
|
+
"conversation_no": payload["conversation_no"],
|
|
486
|
+
"turn_no": payload["turn_no"],
|
|
487
|
+
"conversation_view_hash": payload["conversation_view_hash"],
|
|
488
|
+
},
|
|
489
|
+
),
|
|
490
|
+
TraceEvent(
|
|
491
|
+
TracePhase.PROPOSE,
|
|
492
|
+
"official_teacher_or_cache",
|
|
493
|
+
{
|
|
494
|
+
"operation": payload["operation"],
|
|
495
|
+
"prompt_profile": payload["prompt_profile"],
|
|
496
|
+
"execution_label": payload["execution_label"],
|
|
497
|
+
"execution_calls": (
|
|
498
|
+
payload["official_calls"]
|
|
499
|
+
if payload["execution_label"] == "official_function_calls"
|
|
500
|
+
else payload["reconstructed_calls"]
|
|
501
|
+
),
|
|
502
|
+
"raw_candidates": payload["raw_candidates"],
|
|
503
|
+
},
|
|
504
|
+
),
|
|
505
|
+
TraceEvent(
|
|
506
|
+
TracePhase.FINALIZE,
|
|
507
|
+
"official_post_processing",
|
|
508
|
+
{
|
|
509
|
+
"postprocess_status": payload["postprocess_status"],
|
|
510
|
+
"rewrite": rewrite,
|
|
511
|
+
},
|
|
512
|
+
),
|
|
513
|
+
),
|
|
514
|
+
counters={**external_usage_counters(usage), "worker_calls": 1},
|
|
515
|
+
)
|
|
516
|
+
return InputPatch(
|
|
517
|
+
method_id="infocqr",
|
|
518
|
+
release_id=release_id,
|
|
519
|
+
source_state_hash=state.state_hash,
|
|
520
|
+
operations=(
|
|
521
|
+
PatchOperation(
|
|
522
|
+
PatchOp.REPLACE_QUERY,
|
|
523
|
+
rewrite,
|
|
524
|
+
target="query",
|
|
525
|
+
rationale="pinned InfoCQR teacher/cache conversational rewrite",
|
|
526
|
+
),
|
|
527
|
+
),
|
|
528
|
+
trace=trace,
|
|
529
|
+
implementation_identity=(
|
|
530
|
+
f"{implementation_origin}:smartyfh/InfoCQR@{INFOCQR_UPSTREAM_COMMIT}:"
|
|
531
|
+
f"{payload['prompt_source_sha256']}"
|
|
532
|
+
),
|
|
533
|
+
profile_kind=profile_kind,
|
|
534
|
+
metadata={
|
|
535
|
+
"implementation_origin": implementation_origin,
|
|
536
|
+
"source_license_id": "NOASSERTION",
|
|
537
|
+
"source_license_acknowledged": source_license_acknowledged,
|
|
538
|
+
"operation": payload["operation"],
|
|
539
|
+
"prompt_profile": payload["prompt_profile"],
|
|
540
|
+
"prompt_source_sha256": payload["prompt_source_sha256"],
|
|
541
|
+
"postprocess_source_sha256": payload["postprocess_source_sha256"],
|
|
542
|
+
"cache_artifact_id": payload["cache_artifact_id"],
|
|
543
|
+
"cache_artifact_sha256": payload["cache_artifact_sha256"],
|
|
544
|
+
"retrieval_corpus_id": payload["retrieval_corpus_id"],
|
|
545
|
+
"worker_fingerprint": worker_fingerprint(worker, label="InfoCQR"),
|
|
546
|
+
"backend_fingerprint": backend_fingerprint,
|
|
547
|
+
"retriever_fingerprint": retriever_fingerprint,
|
|
548
|
+
},
|
|
549
|
+
)
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
def _conversation_view(
|
|
553
|
+
state: FrozenAgentState, *, common_support: bool = False
|
|
554
|
+
) -> Mapping[str, Any]:
|
|
555
|
+
if common_support:
|
|
556
|
+
return _common_support_conversation(state)
|
|
557
|
+
return _qrecc_conversation(state)
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
def _qrecc_conversation(state: FrozenAgentState) -> Mapping[str, Any]:
|
|
561
|
+
if not state.query.strip():
|
|
562
|
+
raise ValidationError("InfoCQR requires a non-empty query")
|
|
563
|
+
metadata = state.metadata
|
|
564
|
+
source = metadata.get("conversation_source")
|
|
565
|
+
conversation_no = metadata.get("conversation_no")
|
|
566
|
+
turn_no = metadata.get("turn_no")
|
|
567
|
+
new_context = metadata.get("new_context")
|
|
568
|
+
if not isinstance(source, str) or not source.strip():
|
|
569
|
+
raise ValidationError("InfoCQR requires metadata.conversation_source")
|
|
570
|
+
for name, value in (("conversation_no", conversation_no), ("turn_no", turn_no)):
|
|
571
|
+
if isinstance(value, bool) or not isinstance(value, int) or value < 1:
|
|
572
|
+
raise ValidationError(f"InfoCQR requires positive metadata.{name}")
|
|
573
|
+
if isinstance(new_context, (str, bytes)) or not isinstance(new_context, Sequence):
|
|
574
|
+
raise ValidationError("InfoCQR requires metadata.new_context as Q/A sequence")
|
|
575
|
+
normalized = tuple(new_context)
|
|
576
|
+
if not all(isinstance(item, str) for item in normalized):
|
|
577
|
+
raise ValidationError("InfoCQR new_context must contain strings")
|
|
578
|
+
if len(normalized) % 2:
|
|
579
|
+
raise ValidationError("InfoCQR new_context must contain complete Q/A pairs")
|
|
580
|
+
if turn_no == 1 and normalized:
|
|
581
|
+
raise ValidationError("InfoCQR first turn cannot have new_context")
|
|
582
|
+
return {
|
|
583
|
+
"conversation_source": source,
|
|
584
|
+
"conversation_no": conversation_no,
|
|
585
|
+
"turn_no": turn_no,
|
|
586
|
+
"new_context": normalized,
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
def _common_support_conversation(state: FrozenAgentState) -> Mapping[str, Any]:
|
|
591
|
+
"""Serialize only complete visible user/assistant pairs into InfoCQR's schema."""
|
|
592
|
+
|
|
593
|
+
if not state.query.strip():
|
|
594
|
+
raise ValidationError("InfoCQR requires a non-empty query")
|
|
595
|
+
messages = list(state.messages)
|
|
596
|
+
if (
|
|
597
|
+
messages
|
|
598
|
+
and messages[-1].role == "user"
|
|
599
|
+
and messages[-1].content.strip() == state.query.strip()
|
|
600
|
+
):
|
|
601
|
+
messages.pop()
|
|
602
|
+
pairs: list[str] = []
|
|
603
|
+
pending_user: str | None = None
|
|
604
|
+
for message in messages:
|
|
605
|
+
role = message.role.lower()
|
|
606
|
+
if role == "user":
|
|
607
|
+
pending_user = message.content
|
|
608
|
+
elif role == "assistant" and pending_user is not None:
|
|
609
|
+
pairs.extend((pending_user, message.content))
|
|
610
|
+
pending_user = None
|
|
611
|
+
benchmark_id = state.metadata.get("benchmark_id", "common_support")
|
|
612
|
+
if not isinstance(benchmark_id, str) or not benchmark_id.strip():
|
|
613
|
+
raise ValidationError("InfoCQR common-support state requires metadata.benchmark_id")
|
|
614
|
+
return {
|
|
615
|
+
"conversation_source": benchmark_id,
|
|
616
|
+
"conversation_no": 1,
|
|
617
|
+
"turn_no": len(pairs) // 2 + 1,
|
|
618
|
+
"new_context": tuple(pairs),
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
def _bound_fingerprint(
|
|
623
|
+
dependency: Any,
|
|
624
|
+
configured: Any,
|
|
625
|
+
*,
|
|
626
|
+
label: str,
|
|
627
|
+
) -> Mapping[str, Any]:
|
|
628
|
+
if dependency is not None:
|
|
629
|
+
fingerprint = getattr(dependency, "fingerprint", None)
|
|
630
|
+
if not callable(fingerprint):
|
|
631
|
+
raise ExternalDependencyError(f"{label} must expose fingerprint()")
|
|
632
|
+
identity = fingerprint()
|
|
633
|
+
else:
|
|
634
|
+
identity = configured
|
|
635
|
+
if not isinstance(identity, Mapping) or not identity:
|
|
636
|
+
raise ExternalDependencyError(f"{label} fingerprint is required")
|
|
637
|
+
return identity
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
def _validate_common_configuration(
|
|
641
|
+
*,
|
|
642
|
+
source_license_acknowledged: bool,
|
|
643
|
+
dataset_revision: str,
|
|
644
|
+
split: str,
|
|
645
|
+
retrieval_corpus_id: str,
|
|
646
|
+
) -> None:
|
|
647
|
+
if not isinstance(source_license_acknowledged, bool):
|
|
648
|
+
raise ValidationError("InfoCQR source_license_acknowledged must be boolean")
|
|
649
|
+
if not dataset_revision.strip() or not split.strip() or not retrieval_corpus_id.strip():
|
|
650
|
+
raise ValidationError(
|
|
651
|
+
"InfoCQR requires dataset revision, split, and retrieval corpus identity"
|
|
652
|
+
)
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
def _require_source_license_acknowledgement(acknowledged: bool) -> None:
|
|
656
|
+
if not acknowledged:
|
|
657
|
+
raise ExternalDependencyError(
|
|
658
|
+
"InfoCQR upstream source/cache license is NOASSERTION; explicitly acknowledge "
|
|
659
|
+
"the user-mounted material before execution"
|
|
660
|
+
)
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
def _is_hash(value: str) -> bool:
|
|
664
|
+
return isinstance(value, str) and _SHA256.fullmatch(value.lower()) is not None
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
__all__ = [
|
|
668
|
+
"INFOCQR_POSTPROCESS_SHA256",
|
|
669
|
+
"INFOCQR_PROMPT_SOURCE_SHA256",
|
|
670
|
+
"INFOCQR_PROTOCOL_VERSION",
|
|
671
|
+
"InfoCQRCommonSupportZeroShot",
|
|
672
|
+
"InfoCQRExternalControls",
|
|
673
|
+
"InfoCQRLiveTeacherExternal",
|
|
674
|
+
"InfoCQRMountedCacheReplay",
|
|
675
|
+
]
|