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,478 @@
|
|
|
1
|
+
"""Controlled IRCoT runtime for a shared benchmark corpus.
|
|
2
|
+
|
|
3
|
+
The upstream Apache-2.0 worker remains the native-path integration. This
|
|
4
|
+
module is the explicitly adapted common-support release used when every arm
|
|
5
|
+
must share AgentInputLab's frozen retriever and downstream agent. It preserves
|
|
6
|
+
the upstream controller order and prompt construction while keeping generated
|
|
7
|
+
reasoning private: only retrieved corpus documents become visible evidence.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import hashlib
|
|
13
|
+
import re
|
|
14
|
+
from collections.abc import Sequence
|
|
15
|
+
from dataclasses import dataclass
|
|
16
|
+
|
|
17
|
+
from agentinputlab.backends.llm import GenerationRequest, LLMBackend
|
|
18
|
+
from agentinputlab.backends.retrieval import RetrievalResult, Retriever
|
|
19
|
+
from agentinputlab.contracts import (
|
|
20
|
+
AlgorithmOutputError,
|
|
21
|
+
BudgetExceededError,
|
|
22
|
+
CapabilityError,
|
|
23
|
+
ContextBlock,
|
|
24
|
+
ExecutionTrace,
|
|
25
|
+
ExternalDependencyError,
|
|
26
|
+
FrozenAgentState,
|
|
27
|
+
InputPatch,
|
|
28
|
+
InterventionContext,
|
|
29
|
+
PatchOp,
|
|
30
|
+
PatchOperation,
|
|
31
|
+
SemanticFamily,
|
|
32
|
+
TraceEvent,
|
|
33
|
+
TracePhase,
|
|
34
|
+
ValidationError,
|
|
35
|
+
)
|
|
36
|
+
from agentinputlab.integrations.external_workers.ircot import IRCOT_UPSTREAM_COMMIT
|
|
37
|
+
|
|
38
|
+
_SHA256 = re.compile(r"^[0-9a-f]{64}$")
|
|
39
|
+
_ANSWER = re.compile(r".* answer is:? (.*)\.?")
|
|
40
|
+
_SENTENCE = re.compile(r"^(.+?(?:[.!?](?=\s|$)|$))", re.DOTALL)
|
|
41
|
+
_REASONING_STARTERS = ("thus ", "thus,", "so ", "so,", "that is,", "therefore", "hence")
|
|
42
|
+
_ARITHMETIC_REASONING = re.compile(
|
|
43
|
+
r"(.*)(\d[\d,]*\.?\d+|\d+) ([+-]) (\d[\d,]*\.?\d+|\d+) = "
|
|
44
|
+
r"(\d[\d,]*\.?\d+|\d+)(.*)"
|
|
45
|
+
)
|
|
46
|
+
_WH_WORDS = frozenset({"who", "what", "when", "where", "why", "which", "how", "does", "is"})
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass(frozen=True, slots=True)
|
|
50
|
+
class IRCoTCommonSupportConfig:
|
|
51
|
+
"""Frozen settings for the controlled shared-retriever profile."""
|
|
52
|
+
|
|
53
|
+
demonstrations: str
|
|
54
|
+
prompt_sha256: str
|
|
55
|
+
max_steps: int = 4
|
|
56
|
+
retrieval_top_k: int = 6
|
|
57
|
+
max_total_documents: int = 15
|
|
58
|
+
max_tokens_per_call: int = 200
|
|
59
|
+
max_document_words: int = 350
|
|
60
|
+
temperature: float = 0.0
|
|
61
|
+
|
|
62
|
+
def __post_init__(self) -> None:
|
|
63
|
+
if not self.demonstrations.strip():
|
|
64
|
+
raise ValidationError("IRCoT common-support requires a frozen demonstration prompt")
|
|
65
|
+
if _SHA256.fullmatch(self.prompt_sha256) is None:
|
|
66
|
+
raise ValidationError("IRCoT prompt_sha256 must be lowercase SHA-256")
|
|
67
|
+
actual = hashlib.sha256(self.demonstrations.encode("utf-8")).hexdigest()
|
|
68
|
+
if actual != self.prompt_sha256:
|
|
69
|
+
raise ValidationError("IRCoT demonstration prompt checksum mismatch")
|
|
70
|
+
for name in (
|
|
71
|
+
"max_steps",
|
|
72
|
+
"retrieval_top_k",
|
|
73
|
+
"max_total_documents",
|
|
74
|
+
"max_tokens_per_call",
|
|
75
|
+
"max_document_words",
|
|
76
|
+
):
|
|
77
|
+
value = getattr(self, name)
|
|
78
|
+
if isinstance(value, bool) or not isinstance(value, int) or value < 1:
|
|
79
|
+
raise ValidationError(f"IRCoT {name} must be a positive integer")
|
|
80
|
+
if self.retrieval_top_k > self.max_total_documents:
|
|
81
|
+
raise ValidationError("IRCoT retrieval_top_k cannot exceed max_total_documents")
|
|
82
|
+
if self.temperature < 0:
|
|
83
|
+
raise ValidationError("IRCoT temperature must be non-negative")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@dataclass(frozen=True, slots=True)
|
|
87
|
+
class IRCoTCommonSupportStep:
|
|
88
|
+
index: int
|
|
89
|
+
generated_sentence: str
|
|
90
|
+
retrieval_query: str | None
|
|
91
|
+
retrieved_document_ids: tuple[str, ...]
|
|
92
|
+
new_document_ids: tuple[str, ...]
|
|
93
|
+
active_document_ids: tuple[str, ...]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@dataclass(frozen=True, slots=True)
|
|
97
|
+
class IRCoTCommonSupportResult:
|
|
98
|
+
answer: str
|
|
99
|
+
exit_reason: str
|
|
100
|
+
initial_query: str
|
|
101
|
+
initial_retrieval_query: str
|
|
102
|
+
initial_results: tuple[RetrievalResult, ...]
|
|
103
|
+
steps: tuple[IRCoTCommonSupportStep, ...]
|
|
104
|
+
active_results: tuple[RetrievalResult, ...]
|
|
105
|
+
model_calls: int
|
|
106
|
+
retrieval_calls: int
|
|
107
|
+
input_tokens: int
|
|
108
|
+
output_tokens: int
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _remove_wh_words(text: str) -> str:
|
|
112
|
+
"""Match upstream ``remove_wh_words`` without importing legacy code."""
|
|
113
|
+
|
|
114
|
+
return " ".join(word for word in text.split(" ") if word.strip().lower() not in _WH_WORDS)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _is_reasoning_sentence(sentence: str) -> bool:
|
|
118
|
+
lowered = sentence.lower()
|
|
119
|
+
return lowered.startswith(_REASONING_STARTERS) or bool(_ARITHMETIC_REASONING.match(sentence))
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _first_sentence(text: str) -> str:
|
|
123
|
+
"""Controlled substitute for upstream spaCy ``doc.sents[0]``.
|
|
124
|
+
|
|
125
|
+
The substitution is intentionally small and declared in patch metadata so
|
|
126
|
+
it cannot be mistaken for native component parity.
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
cleaned = text.strip()
|
|
130
|
+
match = _SENTENCE.match(cleaned)
|
|
131
|
+
return match.group(1).strip() if match else ""
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _answer(sentence: str) -> str:
|
|
135
|
+
match = _ANSWER.match(sentence)
|
|
136
|
+
if match is None:
|
|
137
|
+
return ""
|
|
138
|
+
answer = match.group(1).strip()
|
|
139
|
+
if answer.endswith("."):
|
|
140
|
+
answer = answer[:-1]
|
|
141
|
+
return answer.strip()
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _validated_results(
|
|
145
|
+
values: Sequence[RetrievalResult], *, top_k: int
|
|
146
|
+
) -> tuple[RetrievalResult, ...]:
|
|
147
|
+
try:
|
|
148
|
+
results = tuple(values)
|
|
149
|
+
except TypeError as exc:
|
|
150
|
+
raise AlgorithmOutputError("IRCoT retriever returned a non-sequence") from exc
|
|
151
|
+
if not all(isinstance(item, RetrievalResult) for item in results):
|
|
152
|
+
raise AlgorithmOutputError("IRCoT retriever returned an invalid result")
|
|
153
|
+
if len(results) > top_k:
|
|
154
|
+
raise AlgorithmOutputError("IRCoT retriever returned more than top_k documents")
|
|
155
|
+
ids = tuple(item.document.doc_id for item in results)
|
|
156
|
+
if any(not item for item in ids) or len(ids) != len(set(ids)):
|
|
157
|
+
raise AlgorithmOutputError("IRCoT retrieval document IDs must be non-empty and unique")
|
|
158
|
+
if tuple(item.rank for item in results) != tuple(range(1, len(results) + 1)):
|
|
159
|
+
raise AlgorithmOutputError("IRCoT retrieval ranks must be contiguous and one-based")
|
|
160
|
+
return results
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def _paragraph(result: RetrievalResult, max_words: int) -> str:
|
|
164
|
+
document = result.document
|
|
165
|
+
paragraph = " ".join(document.text.split(" ")[:max_words])
|
|
166
|
+
if paragraph.strip().startswith("Wikipedia Title: "):
|
|
167
|
+
return paragraph.strip()
|
|
168
|
+
return f"Wikipedia Title: {document.title}\n{paragraph.strip()}"
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
@dataclass(slots=True)
|
|
172
|
+
class IRCoTCommonSupport:
|
|
173
|
+
"""IRCoT controller over injected, checksum-locked common dependencies."""
|
|
174
|
+
|
|
175
|
+
config: IRCoTCommonSupportConfig
|
|
176
|
+
method_id: str = "ircot"
|
|
177
|
+
release_id: str = "acquire.ircot.common_support"
|
|
178
|
+
family: SemanticFamily = SemanticFamily.ACQUIRE
|
|
179
|
+
|
|
180
|
+
@staticmethod
|
|
181
|
+
def _backend(value: object) -> LLMBackend:
|
|
182
|
+
if value is None:
|
|
183
|
+
raise ExternalDependencyError("IRCoT common-support requires an LLMBackend")
|
|
184
|
+
if not hasattr(value, "generate") or not hasattr(value, "fingerprint"):
|
|
185
|
+
raise CapabilityError("IRCoT backend does not implement LLMBackend")
|
|
186
|
+
return value # type: ignore[return-value]
|
|
187
|
+
|
|
188
|
+
@staticmethod
|
|
189
|
+
def _retriever(value: object) -> Retriever:
|
|
190
|
+
if value is None:
|
|
191
|
+
raise ExternalDependencyError("IRCoT common-support requires a Retriever")
|
|
192
|
+
if not hasattr(value, "retrieve") or not hasattr(value, "fingerprint"):
|
|
193
|
+
raise CapabilityError("IRCoT retriever does not implement Retriever")
|
|
194
|
+
return value # type: ignore[return-value]
|
|
195
|
+
|
|
196
|
+
def run(
|
|
197
|
+
self, state: FrozenAgentState, context: InterventionContext
|
|
198
|
+
) -> IRCoTCommonSupportResult:
|
|
199
|
+
if not state.query.strip():
|
|
200
|
+
raise ValidationError("IRCoT requires a non-empty question")
|
|
201
|
+
backend = self._backend(context.backend)
|
|
202
|
+
retriever = self._retriever(context.retriever)
|
|
203
|
+
model_calls = retrieval_calls = input_tokens = output_tokens = 0
|
|
204
|
+
active: dict[str, RetrievalResult] = {}
|
|
205
|
+
generated: list[str] = []
|
|
206
|
+
steps: list[IRCoTCommonSupportStep] = []
|
|
207
|
+
|
|
208
|
+
def retrieve(query: str) -> tuple[RetrievalResult, ...]:
|
|
209
|
+
nonlocal retrieval_calls
|
|
210
|
+
if retrieval_calls >= state.budget.max_retrieval_calls:
|
|
211
|
+
raise BudgetExceededError("IRCoT exhausted max_retrieval_calls")
|
|
212
|
+
normalized = _remove_wh_words(query)
|
|
213
|
+
results = _validated_results(
|
|
214
|
+
retriever.retrieve(normalized, top_k=self.config.retrieval_top_k),
|
|
215
|
+
top_k=self.config.retrieval_top_k,
|
|
216
|
+
)
|
|
217
|
+
retrieval_calls += 1
|
|
218
|
+
return results
|
|
219
|
+
|
|
220
|
+
initial_retrieval_query = _remove_wh_words(state.query)
|
|
221
|
+
initial = retrieve(state.query)
|
|
222
|
+
if not initial:
|
|
223
|
+
raise AlgorithmOutputError("IRCoT initial retrieval returned no documents")
|
|
224
|
+
for result in initial:
|
|
225
|
+
if len(active) >= self.config.max_total_documents:
|
|
226
|
+
break
|
|
227
|
+
active.setdefault(result.document.doc_id, result)
|
|
228
|
+
|
|
229
|
+
answer = ""
|
|
230
|
+
exit_reason = "max_steps"
|
|
231
|
+
for index in range(self.config.max_steps):
|
|
232
|
+
if model_calls >= state.budget.max_model_calls:
|
|
233
|
+
raise BudgetExceededError("IRCoT exhausted max_model_calls")
|
|
234
|
+
remaining_output = state.budget.max_output_tokens - output_tokens
|
|
235
|
+
if remaining_output < 1:
|
|
236
|
+
raise BudgetExceededError("IRCoT exhausted max_output_tokens")
|
|
237
|
+
paragraphs = "\n\n".join(
|
|
238
|
+
_paragraph(result, self.config.max_document_words) for result in active.values()
|
|
239
|
+
)
|
|
240
|
+
reasoning = " ".join(generated)
|
|
241
|
+
question = "Answer the following question by reasoning step-by-step.\n" + state.query
|
|
242
|
+
test_example = f"{paragraphs}\n\nQ: {question}\nA: {reasoning}".strip()
|
|
243
|
+
prompt = f"{self.config.demonstrations.rstrip()}\n\n\n{test_example}"
|
|
244
|
+
response = backend.generate(
|
|
245
|
+
GenerationRequest(
|
|
246
|
+
prompt=prompt,
|
|
247
|
+
temperature=self.config.temperature,
|
|
248
|
+
max_tokens=min(self.config.max_tokens_per_call, remaining_output),
|
|
249
|
+
seed=context.seed + model_calls,
|
|
250
|
+
metadata={
|
|
251
|
+
"method_id": self.method_id,
|
|
252
|
+
"release_id": self.release_id,
|
|
253
|
+
"step_index": index,
|
|
254
|
+
},
|
|
255
|
+
)
|
|
256
|
+
)
|
|
257
|
+
model_calls += 1
|
|
258
|
+
input_tokens += response.usage.input_tokens
|
|
259
|
+
output_tokens += response.usage.output_tokens
|
|
260
|
+
if output_tokens > state.budget.max_output_tokens:
|
|
261
|
+
raise BudgetExceededError("IRCoT exceeded max_output_tokens")
|
|
262
|
+
if (
|
|
263
|
+
state.budget.max_context_tokens is not None
|
|
264
|
+
and input_tokens > state.budget.max_context_tokens
|
|
265
|
+
):
|
|
266
|
+
raise BudgetExceededError("IRCoT exceeded max_context_tokens")
|
|
267
|
+
sentence = _first_sentence(response.text)
|
|
268
|
+
if not sentence:
|
|
269
|
+
raise AlgorithmOutputError("IRCoT generator returned no sentence")
|
|
270
|
+
generated.append(sentence)
|
|
271
|
+
answer = _answer(sentence)
|
|
272
|
+
if answer:
|
|
273
|
+
exit_reason = "answer_detected"
|
|
274
|
+
steps.append(
|
|
275
|
+
IRCoTCommonSupportStep(
|
|
276
|
+
index=index,
|
|
277
|
+
generated_sentence=sentence,
|
|
278
|
+
retrieval_query=None,
|
|
279
|
+
retrieved_document_ids=(),
|
|
280
|
+
new_document_ids=(),
|
|
281
|
+
active_document_ids=tuple(active),
|
|
282
|
+
)
|
|
283
|
+
)
|
|
284
|
+
break
|
|
285
|
+
if index + 1 == self.config.max_steps:
|
|
286
|
+
answer = " ".join(generated)
|
|
287
|
+
steps.append(
|
|
288
|
+
IRCoTCommonSupportStep(
|
|
289
|
+
index=index,
|
|
290
|
+
generated_sentence=sentence,
|
|
291
|
+
retrieval_query=None,
|
|
292
|
+
retrieved_document_ids=(),
|
|
293
|
+
new_document_ids=(),
|
|
294
|
+
active_document_ids=tuple(active),
|
|
295
|
+
)
|
|
296
|
+
)
|
|
297
|
+
break
|
|
298
|
+
|
|
299
|
+
factual = [item for item in generated if not _is_reasoning_sentence(item)]
|
|
300
|
+
retrieval_query = factual[-1].strip() if factual else state.query
|
|
301
|
+
results = retrieve(retrieval_query)
|
|
302
|
+
retrieved_ids = tuple(item.document.doc_id for item in results)
|
|
303
|
+
new_ids: list[str] = []
|
|
304
|
+
for result in results:
|
|
305
|
+
document_id = result.document.doc_id
|
|
306
|
+
if document_id in active or len(active) >= self.config.max_total_documents:
|
|
307
|
+
continue
|
|
308
|
+
active[document_id] = result
|
|
309
|
+
new_ids.append(document_id)
|
|
310
|
+
steps.append(
|
|
311
|
+
IRCoTCommonSupportStep(
|
|
312
|
+
index=index,
|
|
313
|
+
generated_sentence=sentence,
|
|
314
|
+
retrieval_query=_remove_wh_words(retrieval_query),
|
|
315
|
+
retrieved_document_ids=retrieved_ids,
|
|
316
|
+
new_document_ids=tuple(new_ids),
|
|
317
|
+
active_document_ids=tuple(active),
|
|
318
|
+
)
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
if not active:
|
|
322
|
+
raise AlgorithmOutputError("IRCoT returned no active corpus evidence")
|
|
323
|
+
return IRCoTCommonSupportResult(
|
|
324
|
+
answer=answer,
|
|
325
|
+
exit_reason=exit_reason,
|
|
326
|
+
initial_query=state.query,
|
|
327
|
+
initial_retrieval_query=initial_retrieval_query,
|
|
328
|
+
initial_results=initial,
|
|
329
|
+
steps=tuple(steps),
|
|
330
|
+
active_results=tuple(active.values()),
|
|
331
|
+
model_calls=model_calls,
|
|
332
|
+
retrieval_calls=retrieval_calls,
|
|
333
|
+
input_tokens=input_tokens,
|
|
334
|
+
output_tokens=output_tokens,
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
338
|
+
backend = self._backend(context.backend)
|
|
339
|
+
retriever = self._retriever(context.retriever)
|
|
340
|
+
result = self.run(state, context)
|
|
341
|
+
events = [
|
|
342
|
+
TraceEvent(
|
|
343
|
+
TracePhase.PREPARE,
|
|
344
|
+
"ircot_common_support_configuration",
|
|
345
|
+
{
|
|
346
|
+
"upstream_commit": IRCOT_UPSTREAM_COMMIT,
|
|
347
|
+
"prompt_sha256": self.config.prompt_sha256,
|
|
348
|
+
"max_steps": self.config.max_steps,
|
|
349
|
+
"retrieval_top_k": self.config.retrieval_top_k,
|
|
350
|
+
"max_total_documents": self.config.max_total_documents,
|
|
351
|
+
"sentence_segmenter": "terminal_punctuation_first_sentence.v1",
|
|
352
|
+
"backend": dict(backend.fingerprint()),
|
|
353
|
+
"retriever": dict(retriever.fingerprint()),
|
|
354
|
+
},
|
|
355
|
+
),
|
|
356
|
+
TraceEvent(
|
|
357
|
+
TracePhase.OBSERVE,
|
|
358
|
+
"initial_retrieval",
|
|
359
|
+
{
|
|
360
|
+
"query": result.initial_query,
|
|
361
|
+
"normalized_query": result.initial_retrieval_query,
|
|
362
|
+
"document_ids": tuple(item.document.doc_id for item in result.initial_results),
|
|
363
|
+
},
|
|
364
|
+
),
|
|
365
|
+
]
|
|
366
|
+
events.extend(
|
|
367
|
+
TraceEvent(
|
|
368
|
+
TracePhase.OBSERVE,
|
|
369
|
+
"ircot_step",
|
|
370
|
+
{
|
|
371
|
+
"index": step.index,
|
|
372
|
+
"generated_sentence": step.generated_sentence,
|
|
373
|
+
"retrieval_query": step.retrieval_query,
|
|
374
|
+
"retrieved_document_ids": step.retrieved_document_ids,
|
|
375
|
+
"new_document_ids": step.new_document_ids,
|
|
376
|
+
"active_document_ids": step.active_document_ids,
|
|
377
|
+
},
|
|
378
|
+
)
|
|
379
|
+
for step in result.steps
|
|
380
|
+
)
|
|
381
|
+
events.append(
|
|
382
|
+
TraceEvent(
|
|
383
|
+
TracePhase.FINALIZE,
|
|
384
|
+
"ircot_exit",
|
|
385
|
+
{
|
|
386
|
+
"exit_reason": result.exit_reason,
|
|
387
|
+
"answer": result.answer,
|
|
388
|
+
"active_document_ids": tuple(
|
|
389
|
+
item.document.doc_id for item in result.active_results
|
|
390
|
+
),
|
|
391
|
+
"answer_visible_to_downstream": False,
|
|
392
|
+
},
|
|
393
|
+
)
|
|
394
|
+
)
|
|
395
|
+
trace = ExecutionTrace(
|
|
396
|
+
method_id=self.method_id,
|
|
397
|
+
release_id=self.release_id,
|
|
398
|
+
events=tuple(events),
|
|
399
|
+
counters={
|
|
400
|
+
"model_calls": result.model_calls,
|
|
401
|
+
"retrieval_calls": result.retrieval_calls,
|
|
402
|
+
"reasoning_steps": len(result.steps),
|
|
403
|
+
"active_documents": len(result.active_results),
|
|
404
|
+
"input_tokens": result.input_tokens,
|
|
405
|
+
"output_tokens": result.output_tokens,
|
|
406
|
+
},
|
|
407
|
+
)
|
|
408
|
+
evidence = tuple(_context_from_result(item) for item in result.active_results)
|
|
409
|
+
return InputPatch(
|
|
410
|
+
method_id=self.method_id,
|
|
411
|
+
release_id=self.release_id,
|
|
412
|
+
source_state_hash=state.state_hash,
|
|
413
|
+
operations=(
|
|
414
|
+
PatchOperation(
|
|
415
|
+
PatchOp.ADD_CONTEXT,
|
|
416
|
+
evidence,
|
|
417
|
+
target="retrieved_evidence",
|
|
418
|
+
rationale="real corpus evidence selected by the controlled IRCoT loop",
|
|
419
|
+
),
|
|
420
|
+
),
|
|
421
|
+
trace=trace,
|
|
422
|
+
implementation_identity=(
|
|
423
|
+
f"controlled_minimal_engineering:StonyBrookNLP/ircot@{IRCOT_UPSTREAM_COMMIT}"
|
|
424
|
+
),
|
|
425
|
+
profile_kind="controlled_adapter",
|
|
426
|
+
metadata={
|
|
427
|
+
"implementation_origin": "official_controller_minimal_engineering",
|
|
428
|
+
"upstream_commit": IRCOT_UPSTREAM_COMMIT,
|
|
429
|
+
"prompt_sha256": self.config.prompt_sha256,
|
|
430
|
+
"generated_reasoning_is_evidence": False,
|
|
431
|
+
"generated_answer_visible_to_downstream": False,
|
|
432
|
+
"query_normalization": "upstream_remove_wh_words",
|
|
433
|
+
"retrieval_query_policy": "question_or_last_non_reasoning_sentence",
|
|
434
|
+
"sentence_segmenter_substitution": "terminal_punctuation_first_sentence.v1",
|
|
435
|
+
},
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
def _context_from_result(result: RetrievalResult) -> ContextBlock:
|
|
440
|
+
document = result.document
|
|
441
|
+
if not document.corpus_revision:
|
|
442
|
+
raise AlgorithmOutputError("IRCoT evidence requires corpus revision provenance")
|
|
443
|
+
reserved = {
|
|
444
|
+
"corpus_revision",
|
|
445
|
+
"document_id",
|
|
446
|
+
"evidence_kind",
|
|
447
|
+
"rank",
|
|
448
|
+
"retrieval_features",
|
|
449
|
+
"title",
|
|
450
|
+
}
|
|
451
|
+
overlap = reserved & set(document.metadata)
|
|
452
|
+
if overlap:
|
|
453
|
+
raise AlgorithmOutputError(
|
|
454
|
+
"IRCoT document metadata uses reserved provenance keys: " + ", ".join(sorted(overlap))
|
|
455
|
+
)
|
|
456
|
+
return ContextBlock(
|
|
457
|
+
block_id=document.doc_id,
|
|
458
|
+
text=document.text,
|
|
459
|
+
source=document.corpus_revision,
|
|
460
|
+
score=result.score,
|
|
461
|
+
metadata={
|
|
462
|
+
**dict(document.metadata),
|
|
463
|
+
"document_id": document.doc_id,
|
|
464
|
+
"title": document.title,
|
|
465
|
+
"corpus_revision": document.corpus_revision,
|
|
466
|
+
"rank": result.rank,
|
|
467
|
+
"retrieval_features": dict(result.features),
|
|
468
|
+
"evidence_kind": "real_corpus_document",
|
|
469
|
+
},
|
|
470
|
+
)
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
__all__ = [
|
|
474
|
+
"IRCoTCommonSupport",
|
|
475
|
+
"IRCoTCommonSupportConfig",
|
|
476
|
+
"IRCoTCommonSupportResult",
|
|
477
|
+
"IRCoTCommonSupportStep",
|
|
478
|
+
]
|