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,371 @@
|
|
|
1
|
+
"""Expected-information-gain clarification from Active Task Disambiguation."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import math
|
|
7
|
+
from collections import Counter
|
|
8
|
+
from collections.abc import Mapping
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from agentinputlab.backends.llm import GenerationRequest, LLMBackend, ModelCapability
|
|
13
|
+
from agentinputlab.backends.llm.base import require_capabilities
|
|
14
|
+
from agentinputlab.contracts import (
|
|
15
|
+
AlgorithmOutputError,
|
|
16
|
+
BudgetExceededError,
|
|
17
|
+
ExecutionTrace,
|
|
18
|
+
ExternalDependencyError,
|
|
19
|
+
FrozenAgentState,
|
|
20
|
+
InputPatch,
|
|
21
|
+
InterventionContext,
|
|
22
|
+
PatchOp,
|
|
23
|
+
PatchOperation,
|
|
24
|
+
SemanticFamily,
|
|
25
|
+
TraceEvent,
|
|
26
|
+
TracePhase,
|
|
27
|
+
ValidationError,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
from ._structured import parse_json_object, string_list, visible_problem
|
|
31
|
+
from .future_turns import _usage_counters
|
|
32
|
+
|
|
33
|
+
ACTIVE_TASK_DISAMBIGUATION_UPSTREAM_COMMIT = "4c8ecb4d4ffdbffcc611366743fc1e2461037772"
|
|
34
|
+
ACTIVE_TASK_DISAMBIGUATION_RELEASE = "clarify.active_task_disambiguation.eig_uniform"
|
|
35
|
+
ACTIVE_TASK_DISAMBIGUATION_PROTOCOL = "agentinputlab.active-task-disambiguation.v1"
|
|
36
|
+
ACTIVE_TASK_RESPONSE_ADAPTER = "unambiguous-text-records.v1"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass(frozen=True, slots=True)
|
|
40
|
+
class ActiveDisambiguationControls:
|
|
41
|
+
total_hypotheses: int = 8
|
|
42
|
+
total_questions: int = 4
|
|
43
|
+
max_tokens: int = 768
|
|
44
|
+
temperature: float = 0.7
|
|
45
|
+
|
|
46
|
+
def __post_init__(self) -> None:
|
|
47
|
+
if not 2 <= self.total_hypotheses <= 20:
|
|
48
|
+
raise ValidationError("active disambiguation hypotheses must be in [2, 20]")
|
|
49
|
+
if not 1 <= self.total_questions <= 8:
|
|
50
|
+
raise ValidationError("active disambiguation questions must be in [1, 8]")
|
|
51
|
+
if self.max_tokens < 128:
|
|
52
|
+
raise ValidationError("active disambiguation max_tokens must be at least 128")
|
|
53
|
+
if self.temperature < 0:
|
|
54
|
+
raise ValidationError("active disambiguation temperature must be non-negative")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@dataclass(slots=True)
|
|
58
|
+
class ActiveTaskDisambiguation:
|
|
59
|
+
"""Sample hypotheses and select the question with maximum empirical EIG."""
|
|
60
|
+
|
|
61
|
+
backend: LLMBackend | None = None
|
|
62
|
+
controls: ActiveDisambiguationControls = ActiveDisambiguationControls()
|
|
63
|
+
method_id: str = "active_task_disambiguation"
|
|
64
|
+
release_id: str = ACTIVE_TASK_DISAMBIGUATION_RELEASE
|
|
65
|
+
family: SemanticFamily = SemanticFamily.CLARIFY
|
|
66
|
+
|
|
67
|
+
def __post_init__(self) -> None:
|
|
68
|
+
if not isinstance(self.controls, ActiveDisambiguationControls):
|
|
69
|
+
raise ValidationError(
|
|
70
|
+
"active disambiguation controls must be ActiveDisambiguationControls"
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
74
|
+
backend = self.backend or context.backend
|
|
75
|
+
if backend is None:
|
|
76
|
+
raise ExternalDependencyError("active task disambiguation requires an LLM backend")
|
|
77
|
+
require_capabilities(
|
|
78
|
+
backend,
|
|
79
|
+
{ModelCapability.CHAT, ModelCapability.JSON_OBJECT, ModelCapability.SEED},
|
|
80
|
+
)
|
|
81
|
+
per_call_output_cap = _fair_per_call_output_cap(
|
|
82
|
+
state,
|
|
83
|
+
requested=self.controls.max_tokens,
|
|
84
|
+
)
|
|
85
|
+
calls: list[dict[str, Any]] = []
|
|
86
|
+
normalizations: list[dict[str, Any]] = []
|
|
87
|
+
hypotheses_payload = self._call(
|
|
88
|
+
backend,
|
|
89
|
+
system=(
|
|
90
|
+
"Sample diverse and representative solutions or user-intent hypotheses that "
|
|
91
|
+
"remain compatible with the visible problem statement. Return JSON only."
|
|
92
|
+
),
|
|
93
|
+
prompt=(
|
|
94
|
+
f"{visible_problem(state)}\n\n"
|
|
95
|
+
f'Return {{"hypotheses":[...]}} with exactly '
|
|
96
|
+
f"{self.controls.total_hypotheses} concise hypotheses."
|
|
97
|
+
),
|
|
98
|
+
seed=context.seed,
|
|
99
|
+
phase="sample_hypotheses",
|
|
100
|
+
calls=calls,
|
|
101
|
+
max_tokens=per_call_output_cap,
|
|
102
|
+
)
|
|
103
|
+
hypotheses = _atd_string_list(
|
|
104
|
+
hypotheses_payload.get("hypotheses"),
|
|
105
|
+
label="active-disambiguation hypotheses",
|
|
106
|
+
minimum=2,
|
|
107
|
+
maximum=self.controls.total_hypotheses,
|
|
108
|
+
text_fields=("text", "description"),
|
|
109
|
+
normalizations=normalizations,
|
|
110
|
+
)
|
|
111
|
+
question_payload = self._call(
|
|
112
|
+
backend,
|
|
113
|
+
system=(
|
|
114
|
+
"Generate questions whose possible answers distinguish the compatible "
|
|
115
|
+
"hypotheses. Return JSON only."
|
|
116
|
+
),
|
|
117
|
+
prompt=(
|
|
118
|
+
f"{visible_problem(state)}\n\nHypotheses:\n{_numbered(hypotheses)}\n\n"
|
|
119
|
+
f'Return {{"questions":[...]}} with exactly '
|
|
120
|
+
f"{self.controls.total_questions} concise questions."
|
|
121
|
+
),
|
|
122
|
+
seed=context.seed + 1,
|
|
123
|
+
phase="sample_questions",
|
|
124
|
+
calls=calls,
|
|
125
|
+
max_tokens=per_call_output_cap,
|
|
126
|
+
)
|
|
127
|
+
questions = _atd_string_list(
|
|
128
|
+
question_payload.get("questions"),
|
|
129
|
+
label="active-disambiguation questions",
|
|
130
|
+
minimum=1,
|
|
131
|
+
maximum=self.controls.total_questions,
|
|
132
|
+
text_fields=("text",),
|
|
133
|
+
normalizations=normalizations,
|
|
134
|
+
)
|
|
135
|
+
entropies: list[float] = []
|
|
136
|
+
partitions: list[tuple[str, ...]] = []
|
|
137
|
+
for index, question in enumerate(questions):
|
|
138
|
+
payload = self._call(
|
|
139
|
+
backend,
|
|
140
|
+
system=(
|
|
141
|
+
"Predict the categorical user answer to one candidate clarifying question "
|
|
142
|
+
"under every supplied hypothesis. Use the same short category string for "
|
|
143
|
+
"semantically equivalent answers. Return JSON only."
|
|
144
|
+
),
|
|
145
|
+
prompt=(
|
|
146
|
+
f"Hypotheses:\n{_numbered(hypotheses)}\n\nQuestion: {question}\n\n"
|
|
147
|
+
'Return {"answers":[{"hypothesis_id":0,'
|
|
148
|
+
'"answer_category":"..."},...]}; cover every hypothesis once. '
|
|
149
|
+
"Use answer categories of at most six words."
|
|
150
|
+
),
|
|
151
|
+
seed=context.seed + 2 + index,
|
|
152
|
+
phase="partition_hypotheses",
|
|
153
|
+
calls=calls,
|
|
154
|
+
max_tokens=per_call_output_cap,
|
|
155
|
+
)
|
|
156
|
+
categories = _parse_partition(payload, expected=len(hypotheses))
|
|
157
|
+
partitions.append(categories)
|
|
158
|
+
entropies.append(empirical_entropy(categories))
|
|
159
|
+
selected_index = max(range(len(questions)), key=entropies.__getitem__)
|
|
160
|
+
selected_question = questions[selected_index]
|
|
161
|
+
trace = ExecutionTrace(
|
|
162
|
+
method_id=self.method_id,
|
|
163
|
+
release_id=self.release_id,
|
|
164
|
+
events=(
|
|
165
|
+
TraceEvent(
|
|
166
|
+
TracePhase.PREPARE,
|
|
167
|
+
"sampled_compatible_hypotheses",
|
|
168
|
+
{"count": len(hypotheses)},
|
|
169
|
+
),
|
|
170
|
+
TraceEvent(
|
|
171
|
+
TracePhase.PROPOSE,
|
|
172
|
+
"estimated_question_information_gain",
|
|
173
|
+
{
|
|
174
|
+
"question_count": len(questions),
|
|
175
|
+
"entropies": entropies,
|
|
176
|
+
"selected_index": selected_index,
|
|
177
|
+
"selected_question": selected_question,
|
|
178
|
+
},
|
|
179
|
+
),
|
|
180
|
+
),
|
|
181
|
+
counters=_usage_counters(calls),
|
|
182
|
+
warnings=(
|
|
183
|
+
"controlled_general_task_adapter_of_released_code_generation_runtime",
|
|
184
|
+
"hypothesis_answers_are_model_simulations_not_hidden_user_labels",
|
|
185
|
+
),
|
|
186
|
+
)
|
|
187
|
+
return InputPatch(
|
|
188
|
+
method_id=self.method_id,
|
|
189
|
+
release_id=self.release_id,
|
|
190
|
+
source_state_hash=state.state_hash,
|
|
191
|
+
operations=(
|
|
192
|
+
PatchOperation(
|
|
193
|
+
PatchOp.REQUEST_CLARIFICATION,
|
|
194
|
+
selected_question,
|
|
195
|
+
target="user",
|
|
196
|
+
rationale="Maximum uniform empirical information gain over sampled hypotheses.",
|
|
197
|
+
),
|
|
198
|
+
),
|
|
199
|
+
trace=trace,
|
|
200
|
+
implementation_identity=(
|
|
201
|
+
f"eig_uniform_solution_partition@{ACTIVE_TASK_DISAMBIGUATION_UPSTREAM_COMMIT}"
|
|
202
|
+
),
|
|
203
|
+
profile_kind="controlled_adapter",
|
|
204
|
+
metadata={
|
|
205
|
+
"protocol": ACTIVE_TASK_DISAMBIGUATION_PROTOCOL,
|
|
206
|
+
"upstream_commit": ACTIVE_TASK_DISAMBIGUATION_UPSTREAM_COMMIT,
|
|
207
|
+
"hypothesis_count": len(hypotheses),
|
|
208
|
+
"question_count": len(questions),
|
|
209
|
+
"entropies": entropies,
|
|
210
|
+
"selected_question_index": selected_index,
|
|
211
|
+
"logprob_weighting": False,
|
|
212
|
+
"paper_result_parity_claimed": False,
|
|
213
|
+
"effective_max_tokens_per_call": per_call_output_cap,
|
|
214
|
+
"response_adapter_revision": ACTIVE_TASK_RESPONSE_ADAPTER,
|
|
215
|
+
"response_normalizations": normalizations,
|
|
216
|
+
"backend_fingerprint": dict(backend.fingerprint()),
|
|
217
|
+
},
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
def _call(
|
|
221
|
+
self,
|
|
222
|
+
backend: LLMBackend,
|
|
223
|
+
*,
|
|
224
|
+
system: str,
|
|
225
|
+
prompt: str,
|
|
226
|
+
seed: int,
|
|
227
|
+
phase: str,
|
|
228
|
+
calls: list[dict[str, Any]],
|
|
229
|
+
max_tokens: int,
|
|
230
|
+
) -> Any:
|
|
231
|
+
request = GenerationRequest(
|
|
232
|
+
prompt=prompt,
|
|
233
|
+
system=system,
|
|
234
|
+
temperature=self.controls.temperature,
|
|
235
|
+
max_tokens=max_tokens,
|
|
236
|
+
seed=seed,
|
|
237
|
+
response_format={"type": "json_object"},
|
|
238
|
+
metadata={
|
|
239
|
+
"method_id": self.method_id,
|
|
240
|
+
"release_id": self.release_id,
|
|
241
|
+
"phase": phase,
|
|
242
|
+
},
|
|
243
|
+
)
|
|
244
|
+
response = backend.generate(request)
|
|
245
|
+
calls.append(
|
|
246
|
+
{
|
|
247
|
+
"request_hash": request.request_hash,
|
|
248
|
+
"input_tokens": response.usage.input_tokens,
|
|
249
|
+
"output_tokens": response.usage.output_tokens,
|
|
250
|
+
"cost_usd": response.usage.cost_usd,
|
|
251
|
+
"phase": phase,
|
|
252
|
+
"finish_reason": response.finish_reason,
|
|
253
|
+
"response_sha256": (
|
|
254
|
+
hashlib.sha256(response.text.encode("utf-8")).hexdigest()
|
|
255
|
+
if isinstance(response.text, str) else None
|
|
256
|
+
),
|
|
257
|
+
}
|
|
258
|
+
)
|
|
259
|
+
try:
|
|
260
|
+
return parse_json_object(response.text, label=f"active disambiguation {phase}")
|
|
261
|
+
except AlgorithmOutputError as exc:
|
|
262
|
+
# A paid empty/truncated response remains a failure, never a retry or
|
|
263
|
+
# a license to use reasoning_content as the final answer.
|
|
264
|
+
reason = response.finish_reason
|
|
265
|
+
safe_reason = (
|
|
266
|
+
reason
|
|
267
|
+
if isinstance(reason, str) and reason in {"stop", "length", "content_filter"}
|
|
268
|
+
else "other"
|
|
269
|
+
)
|
|
270
|
+
raise AlgorithmOutputError(
|
|
271
|
+
f"{exc} [finish_reason={safe_reason}; "
|
|
272
|
+
f"output_tokens={response.usage.output_tokens}; max_tokens={max_tokens}]"
|
|
273
|
+
) from exc
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def _atd_string_list(
|
|
277
|
+
value: Any,
|
|
278
|
+
*,
|
|
279
|
+
label: str,
|
|
280
|
+
minimum: int,
|
|
281
|
+
maximum: int,
|
|
282
|
+
text_fields: tuple[str, ...],
|
|
283
|
+
normalizations: list[dict[str, Any]],
|
|
284
|
+
) -> tuple[str, ...]:
|
|
285
|
+
"""Unwrap only unambiguous text records; do not repair generated content.
|
|
286
|
+
|
|
287
|
+
Saved O20 responses use {text: ...} questions and {id, description}
|
|
288
|
+
hypotheses. IDs are display metadata: subsequent partition prompts use
|
|
289
|
+
freshly enumerated positions, exactly as for the original string array.
|
|
290
|
+
Unknown fields, conflicting text fields and duplicate IDs are rejected.
|
|
291
|
+
"""
|
|
292
|
+
if not isinstance(value, list):
|
|
293
|
+
return string_list(value, label=label, minimum=minimum, maximum=maximum)
|
|
294
|
+
unwrapped = []
|
|
295
|
+
identifiers: set[str | int] = set()
|
|
296
|
+
normalized_count = 0
|
|
297
|
+
for item in value:
|
|
298
|
+
if isinstance(item, Mapping):
|
|
299
|
+
present = [key for key in text_fields if key in item]
|
|
300
|
+
if len(present) != 1 or set(item) - {present[0], "id"}:
|
|
301
|
+
raise AlgorithmOutputError(f"{label} text records must be unambiguous")
|
|
302
|
+
if "id" in item:
|
|
303
|
+
identifier = item["id"]
|
|
304
|
+
if (
|
|
305
|
+
isinstance(identifier, bool)
|
|
306
|
+
or not isinstance(identifier, (str, int))
|
|
307
|
+
or (isinstance(identifier, str) and not identifier.strip())
|
|
308
|
+
or identifier in identifiers
|
|
309
|
+
):
|
|
310
|
+
raise AlgorithmOutputError(f"{label} text-record IDs must be unique scalars")
|
|
311
|
+
identifiers.add(identifier)
|
|
312
|
+
item = item[present[0]]
|
|
313
|
+
normalized_count += 1
|
|
314
|
+
unwrapped.append(item)
|
|
315
|
+
result = string_list(unwrapped, label=label, minimum=minimum, maximum=maximum)
|
|
316
|
+
if normalized_count:
|
|
317
|
+
normalizations.append({"label": label, "text_records_unwrapped": normalized_count})
|
|
318
|
+
return result
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def _fair_per_call_output_cap(state: FrozenAgentState, *, requested: int) -> int:
|
|
322
|
+
"""Keep every optimizer call inside the visible shared control envelope.
|
|
323
|
+
|
|
324
|
+
The official visible state carries cumulative output and call ceilings but
|
|
325
|
+
not the paper runner's separate per-call field. Reserving an equal share
|
|
326
|
+
for every permitted model call reconstructs the standard 4096 / 8 = 512
|
|
327
|
+
cap and prevents this multi-call method from consuming the arena's budget
|
|
328
|
+
before official execution begins.
|
|
329
|
+
"""
|
|
330
|
+
|
|
331
|
+
budget = state.budget
|
|
332
|
+
if budget.max_model_calls < 1 or budget.max_output_tokens < 1:
|
|
333
|
+
raise BudgetExceededError("active disambiguation has no visible model-output budget")
|
|
334
|
+
return min(requested, max(1, budget.max_output_tokens // budget.max_model_calls))
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def _parse_partition(payload: Any, *, expected: int) -> tuple[str, ...]:
|
|
338
|
+
raw = payload.get("answers")
|
|
339
|
+
if not isinstance(raw, list):
|
|
340
|
+
raise AlgorithmOutputError("active-disambiguation answers must be a JSON array")
|
|
341
|
+
indexed: dict[int, str] = {}
|
|
342
|
+
for item in raw:
|
|
343
|
+
if not isinstance(item, dict):
|
|
344
|
+
raise AlgorithmOutputError("active-disambiguation answers must be objects")
|
|
345
|
+
identifier = item.get("hypothesis_id")
|
|
346
|
+
category = item.get("answer_category")
|
|
347
|
+
if isinstance(identifier, bool) or not isinstance(identifier, int):
|
|
348
|
+
raise AlgorithmOutputError("active-disambiguation hypothesis_id must be integer")
|
|
349
|
+
if identifier in indexed or not 0 <= identifier < expected:
|
|
350
|
+
raise AlgorithmOutputError(
|
|
351
|
+
"active-disambiguation hypothesis_id is invalid or duplicated"
|
|
352
|
+
)
|
|
353
|
+
if not isinstance(category, str) or not category.strip():
|
|
354
|
+
raise AlgorithmOutputError("active-disambiguation answer_category must be text")
|
|
355
|
+
indexed[identifier] = category.strip().casefold()
|
|
356
|
+
if set(indexed) != set(range(expected)):
|
|
357
|
+
raise AlgorithmOutputError(
|
|
358
|
+
"active-disambiguation answer partition must cover every hypothesis"
|
|
359
|
+
)
|
|
360
|
+
return tuple(indexed[index] for index in range(expected))
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def empirical_entropy(categories: tuple[str, ...]) -> float:
|
|
364
|
+
if not categories:
|
|
365
|
+
raise ValidationError("entropy requires at least one answer category")
|
|
366
|
+
total = len(categories)
|
|
367
|
+
return -sum((count / total) * math.log(count / total) for count in Counter(categories).values())
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def _numbered(items: tuple[str, ...]) -> str:
|
|
371
|
+
return "\n".join(f"{index}. {item}" for index, item in enumerate(items))
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Ask-or-Assume intent-monitor component."""
|
|
2
|
+
|
|
3
|
+
from .monitor import (
|
|
4
|
+
ASK_OR_ASSUME_INTENT_PROMPT_SHA256,
|
|
5
|
+
ASK_OR_ASSUME_UPSTREAM_COMMIT,
|
|
6
|
+
AskOrAssumeControls,
|
|
7
|
+
AskOrAssumeDecision,
|
|
8
|
+
AskOrAssumeIntentMonitor,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"ASK_OR_ASSUME_INTENT_PROMPT_SHA256",
|
|
13
|
+
"ASK_OR_ASSUME_UPSTREAM_COMMIT",
|
|
14
|
+
"AskOrAssumeControls",
|
|
15
|
+
"AskOrAssumeDecision",
|
|
16
|
+
"AskOrAssumeIntentMonitor",
|
|
17
|
+
]
|