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,449 @@
|
|
|
1
|
+
"""Typed, dependency-free schema for the algorithm registry.
|
|
2
|
+
|
|
3
|
+
The source registry is deliberately JSON-compatible YAML. Keeping the schema
|
|
4
|
+
in the standard library lets ``agentinputlab list`` and ``doctor`` work in the
|
|
5
|
+
minimal installation, before optional model or YAML dependencies are present.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import re
|
|
11
|
+
from collections.abc import Mapping
|
|
12
|
+
from dataclasses import dataclass
|
|
13
|
+
from typing import Any, TypeVar
|
|
14
|
+
|
|
15
|
+
from agentinputlab.contracts.enums import (
|
|
16
|
+
ExecutionKind,
|
|
17
|
+
ImplementationKind,
|
|
18
|
+
ProfileKind,
|
|
19
|
+
ReleaseTier,
|
|
20
|
+
SemanticFamily,
|
|
21
|
+
SupportStatus,
|
|
22
|
+
)
|
|
23
|
+
from agentinputlab.contracts.errors import RegistryError
|
|
24
|
+
|
|
25
|
+
_FULL_GIT_SHA = re.compile(r"^[0-9a-f]{40}$")
|
|
26
|
+
_IDENTIFIER = re.compile(r"^[a-z0-9][a-z0-9_.-]*$")
|
|
27
|
+
_DELIVERY_TIERS = frozenset({"must_ship", "stretch", "blocked_or_post_v1"})
|
|
28
|
+
_EnumT = TypeVar("_EnumT")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _mapping(value: Any, path: str) -> Mapping[str, Any]:
|
|
32
|
+
if not isinstance(value, Mapping):
|
|
33
|
+
raise RegistryError(f"{path} must be an object")
|
|
34
|
+
return value
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _required_string(data: Mapping[str, Any], key: str, path: str) -> str:
|
|
38
|
+
value = data.get(key)
|
|
39
|
+
if not isinstance(value, str) or not value.strip():
|
|
40
|
+
raise RegistryError(f"{path}.{key} must be a non-empty string")
|
|
41
|
+
return value
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _optional_string(data: Mapping[str, Any], key: str, path: str) -> str | None:
|
|
45
|
+
value = data.get(key)
|
|
46
|
+
if value is None:
|
|
47
|
+
return None
|
|
48
|
+
if not isinstance(value, str) or not value.strip():
|
|
49
|
+
raise RegistryError(f"{path}.{key} must be null or a non-empty string")
|
|
50
|
+
return value
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _string_tuple(value: Any, path: str) -> tuple[str, ...]:
|
|
54
|
+
if not isinstance(value, list):
|
|
55
|
+
raise RegistryError(f"{path} must be an array")
|
|
56
|
+
result: list[str] = []
|
|
57
|
+
for index, item in enumerate(value):
|
|
58
|
+
if not isinstance(item, str) or not item.strip():
|
|
59
|
+
raise RegistryError(f"{path}[{index}] must be a non-empty string")
|
|
60
|
+
result.append(item)
|
|
61
|
+
return tuple(result)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _enum(enum_type: type[_EnumT], value: Any, path: str) -> _EnumT:
|
|
65
|
+
if not isinstance(value, str):
|
|
66
|
+
raise RegistryError(f"{path} must be a string")
|
|
67
|
+
try:
|
|
68
|
+
return enum_type(value)
|
|
69
|
+
except ValueError as exc:
|
|
70
|
+
allowed = ", ".join(item.value for item in enum_type) # type: ignore[attr-defined]
|
|
71
|
+
raise RegistryError(f"{path} must be one of: {allowed}") from exc
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _enum_tuple(enum_type: type[_EnumT], value: Any, path: str) -> tuple[_EnumT, ...]:
|
|
75
|
+
if not isinstance(value, list):
|
|
76
|
+
raise RegistryError(f"{path} must be an array")
|
|
77
|
+
return tuple(_enum(enum_type, item, f"{path}[{index}]") for index, item in enumerate(value))
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@dataclass(frozen=True, slots=True)
|
|
81
|
+
class Publication:
|
|
82
|
+
"""Publication identity used for citation and roster audits."""
|
|
83
|
+
|
|
84
|
+
venue: str
|
|
85
|
+
year: int
|
|
86
|
+
paper_url: str
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def from_mapping(cls, raw: Any, path: str) -> Publication:
|
|
90
|
+
data = _mapping(raw, path)
|
|
91
|
+
year = data.get("year")
|
|
92
|
+
if not isinstance(year, int) or isinstance(year, bool) or year < 2000:
|
|
93
|
+
raise RegistryError(f"{path}.year must be an integer publication year")
|
|
94
|
+
return cls(
|
|
95
|
+
venue=_required_string(data, "venue", path),
|
|
96
|
+
year=year,
|
|
97
|
+
paper_url=_required_string(data, "paper_url", path),
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def to_dict(self) -> dict[str, Any]:
|
|
101
|
+
return {"venue": self.venue, "year": self.year, "paper_url": self.paper_url}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@dataclass(frozen=True, slots=True)
|
|
105
|
+
class UpstreamSource:
|
|
106
|
+
"""Pinned public source identity and source-level redistribution policy."""
|
|
107
|
+
|
|
108
|
+
repo_url: str
|
|
109
|
+
commit: str
|
|
110
|
+
license_id: str
|
|
111
|
+
vendoring_allowed: bool
|
|
112
|
+
source_subdir: str | None = None
|
|
113
|
+
license_notes: str | None = None
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def from_mapping(cls, raw: Any, path: str) -> UpstreamSource:
|
|
117
|
+
data = _mapping(raw, path)
|
|
118
|
+
commit = _required_string(data, "commit", path)
|
|
119
|
+
if not _FULL_GIT_SHA.fullmatch(commit):
|
|
120
|
+
raise RegistryError(f"{path}.commit must be a lowercase 40-character Git SHA")
|
|
121
|
+
vendoring_allowed = data.get("vendoring_allowed")
|
|
122
|
+
if not isinstance(vendoring_allowed, bool):
|
|
123
|
+
raise RegistryError(f"{path}.vendoring_allowed must be a boolean")
|
|
124
|
+
license_id = _required_string(data, "license_id", path)
|
|
125
|
+
if license_id == "NOASSERTION" and vendoring_allowed:
|
|
126
|
+
raise RegistryError(
|
|
127
|
+
f"{path}.vendoring_allowed must be false when license_id is NOASSERTION"
|
|
128
|
+
)
|
|
129
|
+
return cls(
|
|
130
|
+
repo_url=_required_string(data, "repo_url", path),
|
|
131
|
+
commit=commit,
|
|
132
|
+
license_id=license_id,
|
|
133
|
+
vendoring_allowed=vendoring_allowed,
|
|
134
|
+
source_subdir=_optional_string(data, "source_subdir", path),
|
|
135
|
+
license_notes=_optional_string(data, "license_notes", path),
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
def to_dict(self) -> dict[str, Any]:
|
|
139
|
+
result: dict[str, Any] = {
|
|
140
|
+
"repo_url": self.repo_url,
|
|
141
|
+
"commit": self.commit,
|
|
142
|
+
"license_id": self.license_id,
|
|
143
|
+
"vendoring_allowed": self.vendoring_allowed,
|
|
144
|
+
}
|
|
145
|
+
if self.source_subdir is not None:
|
|
146
|
+
result["source_subdir"] = self.source_subdir
|
|
147
|
+
if self.license_notes is not None:
|
|
148
|
+
result["license_notes"] = self.license_notes
|
|
149
|
+
return result
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
@dataclass(frozen=True, slots=True)
|
|
153
|
+
class ReleaseProfile:
|
|
154
|
+
"""One runnable, replay, component, or training identity for a method."""
|
|
155
|
+
|
|
156
|
+
id: str
|
|
157
|
+
implementation_kind: ImplementationKind
|
|
158
|
+
execution_kind: ExecutionKind
|
|
159
|
+
status: SupportStatus
|
|
160
|
+
delivery_tier: str
|
|
161
|
+
profile_modes: tuple[ProfileKind, ...]
|
|
162
|
+
entrypoint: str | None
|
|
163
|
+
blocking_reasons: tuple[str, ...]
|
|
164
|
+
|
|
165
|
+
@property
|
|
166
|
+
def must_ship(self) -> bool:
|
|
167
|
+
return self.delivery_tier == "must_ship"
|
|
168
|
+
|
|
169
|
+
@property
|
|
170
|
+
def runnable(self) -> bool:
|
|
171
|
+
return self.entrypoint is not None and self.status in {
|
|
172
|
+
SupportStatus.EXPERIMENTAL,
|
|
173
|
+
SupportStatus.SUPPORTED,
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def entrypoint_available(self) -> bool:
|
|
178
|
+
"""Whether this release exposes any importable integration entrypoint."""
|
|
179
|
+
|
|
180
|
+
return self.entrypoint is not None
|
|
181
|
+
|
|
182
|
+
@property
|
|
183
|
+
def availability(self) -> str:
|
|
184
|
+
"""Canonical user-facing availability independent of maturity claims."""
|
|
185
|
+
|
|
186
|
+
if self.runnable:
|
|
187
|
+
return "runnable"
|
|
188
|
+
if self.entrypoint_available:
|
|
189
|
+
return "gated"
|
|
190
|
+
return "locked"
|
|
191
|
+
|
|
192
|
+
@property
|
|
193
|
+
def blocker(self) -> str:
|
|
194
|
+
"""Concise reason why a release is not mechanically runnable."""
|
|
195
|
+
|
|
196
|
+
if self.runnable:
|
|
197
|
+
return ""
|
|
198
|
+
if self.blocking_reasons:
|
|
199
|
+
return "; ".join(self.blocking_reasons)
|
|
200
|
+
return f"release status is {self.status.value}"
|
|
201
|
+
|
|
202
|
+
@classmethod
|
|
203
|
+
def from_mapping(cls, raw: Any, path: str) -> ReleaseProfile:
|
|
204
|
+
data = _mapping(raw, path)
|
|
205
|
+
release_id = _required_string(data, "id", path)
|
|
206
|
+
if not _IDENTIFIER.fullmatch(release_id):
|
|
207
|
+
raise RegistryError(f"{path}.id contains unsupported characters")
|
|
208
|
+
delivery_tier = _required_string(data, "delivery_tier", path)
|
|
209
|
+
if delivery_tier not in _DELIVERY_TIERS:
|
|
210
|
+
allowed = ", ".join(sorted(_DELIVERY_TIERS))
|
|
211
|
+
raise RegistryError(f"{path}.delivery_tier must be one of: {allowed}")
|
|
212
|
+
entrypoint = _optional_string(data, "entrypoint", path)
|
|
213
|
+
if entrypoint is not None and ":" not in entrypoint:
|
|
214
|
+
raise RegistryError(f"{path}.entrypoint must use module:attribute syntax")
|
|
215
|
+
profile = cls(
|
|
216
|
+
id=release_id,
|
|
217
|
+
implementation_kind=_enum(
|
|
218
|
+
ImplementationKind,
|
|
219
|
+
data.get("implementation_kind"),
|
|
220
|
+
f"{path}.implementation_kind",
|
|
221
|
+
),
|
|
222
|
+
execution_kind=_enum(
|
|
223
|
+
ExecutionKind, data.get("execution_kind"), f"{path}.execution_kind"
|
|
224
|
+
),
|
|
225
|
+
status=_enum(SupportStatus, data.get("status"), f"{path}.status"),
|
|
226
|
+
delivery_tier=delivery_tier,
|
|
227
|
+
profile_modes=_enum_tuple(
|
|
228
|
+
ProfileKind, data.get("profile_modes", []), f"{path}.profile_modes"
|
|
229
|
+
),
|
|
230
|
+
entrypoint=entrypoint,
|
|
231
|
+
blocking_reasons=_string_tuple(
|
|
232
|
+
data.get("blocking_reasons", []), f"{path}.blocking_reasons"
|
|
233
|
+
),
|
|
234
|
+
)
|
|
235
|
+
if (
|
|
236
|
+
profile.status
|
|
237
|
+
in {
|
|
238
|
+
SupportStatus.EXPERIMENTAL,
|
|
239
|
+
SupportStatus.SUPPORTED,
|
|
240
|
+
}
|
|
241
|
+
and profile.entrypoint is None
|
|
242
|
+
):
|
|
243
|
+
raise RegistryError(f"{path}: {profile.status.value} releases require an entrypoint")
|
|
244
|
+
if profile.entrypoint is None and not profile.blocking_reasons:
|
|
245
|
+
raise RegistryError(f"{path}: releases without an entrypoint require blocking_reasons")
|
|
246
|
+
if (
|
|
247
|
+
profile.status
|
|
248
|
+
in {
|
|
249
|
+
SupportStatus.BLOCKED,
|
|
250
|
+
SupportStatus.EXTERNAL_ONLY,
|
|
251
|
+
SupportStatus.NATIVE_ONLY,
|
|
252
|
+
SupportStatus.RETRAIN_REQUIRED,
|
|
253
|
+
}
|
|
254
|
+
and not profile.blocking_reasons
|
|
255
|
+
):
|
|
256
|
+
raise RegistryError(f"{path}: status {profile.status.value} requires blocking_reasons")
|
|
257
|
+
return profile
|
|
258
|
+
|
|
259
|
+
def to_dict(self) -> dict[str, Any]:
|
|
260
|
+
return {
|
|
261
|
+
"id": self.id,
|
|
262
|
+
"implementation_kind": self.implementation_kind.value,
|
|
263
|
+
"execution_kind": self.execution_kind.value,
|
|
264
|
+
"status": self.status.value,
|
|
265
|
+
"delivery_tier": self.delivery_tier,
|
|
266
|
+
"profile_modes": [item.value for item in self.profile_modes],
|
|
267
|
+
"entrypoint": self.entrypoint,
|
|
268
|
+
"blocking_reasons": list(self.blocking_reasons),
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
@dataclass(frozen=True, slots=True)
|
|
273
|
+
class AlgorithmCard:
|
|
274
|
+
"""Canonical paper-method identity with one or more release profiles."""
|
|
275
|
+
|
|
276
|
+
method_id: str
|
|
277
|
+
display_name: str
|
|
278
|
+
paper_title: str
|
|
279
|
+
semantic_family: SemanticFamily
|
|
280
|
+
release_tier: ReleaseTier
|
|
281
|
+
status: SupportStatus
|
|
282
|
+
publication: Publication
|
|
283
|
+
upstream: UpstreamSource
|
|
284
|
+
releases: tuple[ReleaseProfile, ...]
|
|
285
|
+
semantic_tags: tuple[str, ...] = ()
|
|
286
|
+
notes: str | None = None
|
|
287
|
+
|
|
288
|
+
@classmethod
|
|
289
|
+
def from_mapping(cls, raw: Any, path: str) -> AlgorithmCard:
|
|
290
|
+
data = _mapping(raw, path)
|
|
291
|
+
method_id = _required_string(data, "method_id", path)
|
|
292
|
+
if not _IDENTIFIER.fullmatch(method_id):
|
|
293
|
+
raise RegistryError(f"{path}.method_id contains unsupported characters")
|
|
294
|
+
raw_releases = data.get("releases")
|
|
295
|
+
if not isinstance(raw_releases, list) or not raw_releases:
|
|
296
|
+
raise RegistryError(f"{path}.releases must be a non-empty array")
|
|
297
|
+
releases = tuple(
|
|
298
|
+
ReleaseProfile.from_mapping(item, f"{path}.releases[{index}]")
|
|
299
|
+
for index, item in enumerate(raw_releases)
|
|
300
|
+
)
|
|
301
|
+
local_ids = [item.id for item in releases]
|
|
302
|
+
if len(local_ids) != len(set(local_ids)):
|
|
303
|
+
raise RegistryError(f"{path}.releases contains duplicate release IDs")
|
|
304
|
+
return cls(
|
|
305
|
+
method_id=method_id,
|
|
306
|
+
display_name=_required_string(data, "display_name", path),
|
|
307
|
+
paper_title=_required_string(data, "paper_title", path),
|
|
308
|
+
semantic_family=_enum(
|
|
309
|
+
SemanticFamily, data.get("semantic_family"), f"{path}.semantic_family"
|
|
310
|
+
),
|
|
311
|
+
release_tier=_enum(ReleaseTier, data.get("release_tier"), f"{path}.release_tier"),
|
|
312
|
+
status=_enum(SupportStatus, data.get("status"), f"{path}.status"),
|
|
313
|
+
publication=Publication.from_mapping(data.get("publication"), f"{path}.publication"),
|
|
314
|
+
upstream=UpstreamSource.from_mapping(data.get("upstream"), f"{path}.upstream"),
|
|
315
|
+
releases=releases,
|
|
316
|
+
semantic_tags=_string_tuple(data.get("semantic_tags", []), f"{path}.semantic_tags"),
|
|
317
|
+
notes=_optional_string(data, "notes", path),
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
def to_dict(self) -> dict[str, Any]:
|
|
321
|
+
result: dict[str, Any] = {
|
|
322
|
+
"method_id": self.method_id,
|
|
323
|
+
"display_name": self.display_name,
|
|
324
|
+
"paper_title": self.paper_title,
|
|
325
|
+
"semantic_family": self.semantic_family.value,
|
|
326
|
+
"release_tier": self.release_tier.value,
|
|
327
|
+
"status": self.status.value,
|
|
328
|
+
"publication": self.publication.to_dict(),
|
|
329
|
+
"upstream": self.upstream.to_dict(),
|
|
330
|
+
"semantic_tags": list(self.semantic_tags),
|
|
331
|
+
"releases": [item.to_dict() for item in self.releases],
|
|
332
|
+
}
|
|
333
|
+
if self.notes is not None:
|
|
334
|
+
result["notes"] = self.notes
|
|
335
|
+
return result
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
@dataclass(frozen=True, slots=True)
|
|
339
|
+
class RegistryDocument:
|
|
340
|
+
"""Validated immutable registry document."""
|
|
341
|
+
|
|
342
|
+
schema_version: int
|
|
343
|
+
registry_id: str
|
|
344
|
+
audit_date: str
|
|
345
|
+
reserve_pool_status: str
|
|
346
|
+
algorithms: tuple[AlgorithmCard, ...]
|
|
347
|
+
|
|
348
|
+
@property
|
|
349
|
+
def releases(self) -> tuple[ReleaseProfile, ...]:
|
|
350
|
+
return tuple(release for method in self.algorithms for release in method.releases)
|
|
351
|
+
|
|
352
|
+
@classmethod
|
|
353
|
+
def from_mapping(cls, raw: Any) -> RegistryDocument:
|
|
354
|
+
data = _mapping(raw, "registry")
|
|
355
|
+
schema_version = data.get("schema_version")
|
|
356
|
+
if schema_version != 1:
|
|
357
|
+
raise RegistryError("registry.schema_version must equal 1")
|
|
358
|
+
raw_algorithms = data.get("algorithms")
|
|
359
|
+
if not isinstance(raw_algorithms, list):
|
|
360
|
+
raise RegistryError("registry.algorithms must be an array")
|
|
361
|
+
algorithms = tuple(
|
|
362
|
+
AlgorithmCard.from_mapping(item, f"registry.algorithms[{index}]")
|
|
363
|
+
for index, item in enumerate(raw_algorithms)
|
|
364
|
+
)
|
|
365
|
+
document = cls(
|
|
366
|
+
schema_version=schema_version,
|
|
367
|
+
registry_id=_required_string(data, "registry_id", "registry"),
|
|
368
|
+
audit_date=_required_string(data, "audit_date", "registry"),
|
|
369
|
+
reserve_pool_status=_required_string(data, "reserve_pool_status", "registry"),
|
|
370
|
+
algorithms=algorithms,
|
|
371
|
+
)
|
|
372
|
+
document.validate_roster()
|
|
373
|
+
return document
|
|
374
|
+
|
|
375
|
+
def validate_roster(self) -> None:
|
|
376
|
+
"""Enforce the frozen v0.2 roster and release-level identity rules."""
|
|
377
|
+
|
|
378
|
+
if len(self.algorithms) != 27:
|
|
379
|
+
raise RegistryError(f"registry must contain 27 methods, found {len(self.algorithms)}")
|
|
380
|
+
method_ids = [item.method_id for item in self.algorithms]
|
|
381
|
+
if len(method_ids) != len(set(method_ids)):
|
|
382
|
+
raise RegistryError("registry contains duplicate method IDs")
|
|
383
|
+
release_ids = [item.id for item in self.releases]
|
|
384
|
+
if len(release_ids) != len(set(release_ids)):
|
|
385
|
+
raise RegistryError("registry contains duplicate release IDs")
|
|
386
|
+
|
|
387
|
+
core = [item for item in self.algorithms if item.release_tier is ReleaseTier.CORE]
|
|
388
|
+
optional = [item for item in self.algorithms if item.release_tier is ReleaseTier.OPTIONAL]
|
|
389
|
+
if len(core) != 20 or len(optional) != 7:
|
|
390
|
+
raise RegistryError(
|
|
391
|
+
f"registry tier counts must be core=20 optional=7, "
|
|
392
|
+
f"found core={len(core)} optional={len(optional)}"
|
|
393
|
+
)
|
|
394
|
+
expected_family_counts = {
|
|
395
|
+
SemanticFamily.REFORMULATE: 4,
|
|
396
|
+
SemanticFamily.DECOMPOSE: 5,
|
|
397
|
+
SemanticFamily.ACQUIRE: 5,
|
|
398
|
+
SemanticFamily.CLARIFY: 2,
|
|
399
|
+
SemanticFamily.CURATE: 4,
|
|
400
|
+
}
|
|
401
|
+
actual_family_counts = {
|
|
402
|
+
family: sum(item.semantic_family is family for item in core)
|
|
403
|
+
for family in expected_family_counts
|
|
404
|
+
}
|
|
405
|
+
if actual_family_counts != expected_family_counts:
|
|
406
|
+
rendered = {key.value: value for key, value in actual_family_counts.items()}
|
|
407
|
+
raise RegistryError(
|
|
408
|
+
f"core semantic-family counts do not match frozen roster: {rendered}"
|
|
409
|
+
)
|
|
410
|
+
|
|
411
|
+
must_ship = {item.id for item in self.releases if item.must_ship}
|
|
412
|
+
expected_must_ship = {
|
|
413
|
+
"rewrite.query2doc.official_cached",
|
|
414
|
+
"rewrite.query2doc.querygym_live",
|
|
415
|
+
"plan.plan_and_solve.ps_prompt",
|
|
416
|
+
"plan.decomp.full",
|
|
417
|
+
"plan.self_ask.full_loop",
|
|
418
|
+
"plan.plan_and_budget.native_cached_soft_budget",
|
|
419
|
+
"acquire.hyde.paper_reimplementation",
|
|
420
|
+
"acquire.ircot.controlled",
|
|
421
|
+
"clarify.udcs.repo_native_prompt_route",
|
|
422
|
+
"curate.longllmlingua.official",
|
|
423
|
+
"curate.llmlingua2.xlm_roberta_official",
|
|
424
|
+
"recipe.ace.offline",
|
|
425
|
+
}
|
|
426
|
+
if must_ship != expected_must_ship:
|
|
427
|
+
missing = sorted(expected_must_ship - must_ship)
|
|
428
|
+
extra = sorted(must_ship - expected_must_ship)
|
|
429
|
+
raise RegistryError(
|
|
430
|
+
f"must-ship release set differs from the frozen plan; missing={missing}, extra={extra}"
|
|
431
|
+
)
|
|
432
|
+
|
|
433
|
+
def to_dict(self) -> dict[str, Any]:
|
|
434
|
+
return {
|
|
435
|
+
"schema_version": self.schema_version,
|
|
436
|
+
"registry_id": self.registry_id,
|
|
437
|
+
"audit_date": self.audit_date,
|
|
438
|
+
"reserve_pool_status": self.reserve_pool_status,
|
|
439
|
+
"algorithms": [item.to_dict() for item in self.algorithms],
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
__all__ = [
|
|
444
|
+
"AlgorithmCard",
|
|
445
|
+
"Publication",
|
|
446
|
+
"RegistryDocument",
|
|
447
|
+
"ReleaseProfile",
|
|
448
|
+
"UpstreamSource",
|
|
449
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Execution, materialization, comparison balance, cache, and worker APIs."""
|
|
2
|
+
|
|
3
|
+
from .balance import (
|
|
4
|
+
BalanceAuditor,
|
|
5
|
+
BalanceReport,
|
|
6
|
+
ComparisonArm,
|
|
7
|
+
ComparisonProfile,
|
|
8
|
+
context_dependency_fingerprints,
|
|
9
|
+
)
|
|
10
|
+
from .cache import run_cache_key
|
|
11
|
+
from .composite import CompositeInterventionRunner, CompositeRunRecord
|
|
12
|
+
from .engine import InterventionRunner, RunRecord, RunStatus
|
|
13
|
+
from .worker import FunctionWorkerClient, JsonLineWorkerClient, WorkerClient
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"BalanceAuditor",
|
|
17
|
+
"BalanceReport",
|
|
18
|
+
"ComparisonArm",
|
|
19
|
+
"ComparisonProfile",
|
|
20
|
+
"CompositeInterventionRunner",
|
|
21
|
+
"CompositeRunRecord",
|
|
22
|
+
"FunctionWorkerClient",
|
|
23
|
+
"InterventionRunner",
|
|
24
|
+
"JsonLineWorkerClient",
|
|
25
|
+
"RunRecord",
|
|
26
|
+
"RunStatus",
|
|
27
|
+
"WorkerClient",
|
|
28
|
+
"context_dependency_fingerprints",
|
|
29
|
+
"run_cache_key",
|
|
30
|
+
]
|