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,504 @@
|
|
|
1
|
+
"""Source-locked LLMCompiler planner for the three common-support arenas.
|
|
2
|
+
|
|
3
|
+
This profile preserves the pinned planner prompt, plan grammar, dependency
|
|
4
|
+
references, and DAG materialization. It deliberately stops before scheduling:
|
|
5
|
+
the official arena remains the sole owner of tool execution and final answers.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import ast
|
|
11
|
+
import json
|
|
12
|
+
import math
|
|
13
|
+
import re
|
|
14
|
+
from collections.abc import Mapping, Sequence
|
|
15
|
+
from dataclasses import dataclass
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from agentinputlab.backends.llm import GenerationRequest, LLMBackend
|
|
19
|
+
from agentinputlab.connectors.tools import ToolConnector, ToolSpec
|
|
20
|
+
from agentinputlab.contracts import (
|
|
21
|
+
AlgorithmOutputError,
|
|
22
|
+
BudgetExceededError,
|
|
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.contracts.serialization import content_hash, to_jsonable
|
|
37
|
+
|
|
38
|
+
from .bridge import LLMCOMPILER_UPSTREAM_COMMIT, CompilerTask, _validate_dag
|
|
39
|
+
|
|
40
|
+
LLMCOMPILER_COMMON_SUPPORT_RELEASE = "plan.llm_compiler.common_support_planner"
|
|
41
|
+
LLMCOMPILER_PLANNER_SOURCE_SHA256 = (
|
|
42
|
+
"d597890d8a6aee9fc7576400bd443eb2090201632ac2f64dcef349057aed9e05"
|
|
43
|
+
)
|
|
44
|
+
LLMCOMPILER_PARSER_SOURCE_SHA256 = (
|
|
45
|
+
"fb187ec2ce4aa3f8cd1b83c0576da4de382fd5154935497f401830085f50f275"
|
|
46
|
+
)
|
|
47
|
+
LLMCOMPILER_END_OF_PLAN = "<END_OF_PLAN>"
|
|
48
|
+
_HEX64 = re.compile(r"^[0-9a-f]{64}$")
|
|
49
|
+
_SAFE_TOOL = re.compile(r"^\w+$")
|
|
50
|
+
_ACTION_PATTERN = re.compile(r"\n*(\d+)\. (\w+)\((.*)\)(\s*#\w+\n)?")
|
|
51
|
+
_ID_PATTERN = re.compile(r"\$\{?(\d+)\}?")
|
|
52
|
+
_JOIN_DESCRIPTION = (
|
|
53
|
+
"join():\n"
|
|
54
|
+
" - Collects and combines results from prior actions.\n"
|
|
55
|
+
" - A LLM agent is called upon invoking join to either finalize the user query or wait until the plans are executed.\n"
|
|
56
|
+
" - join should always be the last action in the plan, and will be called in two scenarios:\n"
|
|
57
|
+
" (a) if the answer can be determined by gathering the outputs from tasks to generate the final response.\n"
|
|
58
|
+
" (b) if the answer cannot be determined in the planning phase before you execute the plans. "
|
|
59
|
+
)
|
|
60
|
+
_CHAT_COMPATIBILITY_SUFFIX = (
|
|
61
|
+
"\nCompatibility requirement for this chat backend:\n"
|
|
62
|
+
"Return only the source planner grammar as plain text, never JSON, Markdown, "
|
|
63
|
+
"code fences, or prose. Use one action per line in exactly this form: "
|
|
64
|
+
"`1. tool_name(positional_python_literals)`. Arguments must follow the declared "
|
|
65
|
+
"schema order. Inside each call pass only positional values: never repeat argument "
|
|
66
|
+
"names and never use `name: value` or `name=value`. Number every line with "
|
|
67
|
+
"consecutive decimal integers; end with "
|
|
68
|
+
"the actual next integer and `join()` (for example, `2. join()`), followed by "
|
|
69
|
+
"`<END_OF_PLAN>`.\n"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@dataclass(frozen=True, slots=True)
|
|
74
|
+
class LLMCompilerCommonSupportConfig:
|
|
75
|
+
"""Bounded controls for the planner-only comparison profile."""
|
|
76
|
+
|
|
77
|
+
max_tasks: int = 32
|
|
78
|
+
max_tokens: int = 512
|
|
79
|
+
temperature: float = 0.0
|
|
80
|
+
allow_connector_only_tool_inventory: bool = False
|
|
81
|
+
|
|
82
|
+
def __post_init__(self) -> None:
|
|
83
|
+
for label, value in (("max_tasks", self.max_tasks), ("max_tokens", self.max_tokens)):
|
|
84
|
+
if isinstance(value, bool) or not isinstance(value, int) or value < 1:
|
|
85
|
+
raise ValidationError(f"LLMCompiler {label} must be a positive integer")
|
|
86
|
+
if self.max_tasks > 128:
|
|
87
|
+
raise ValidationError("LLMCompiler max_tasks must not exceed 128")
|
|
88
|
+
if (
|
|
89
|
+
isinstance(self.temperature, bool)
|
|
90
|
+
or not isinstance(self.temperature, (int, float))
|
|
91
|
+
or not math.isfinite(self.temperature)
|
|
92
|
+
or not 0 <= self.temperature <= 2
|
|
93
|
+
):
|
|
94
|
+
raise ValidationError("LLMCompiler temperature must be in [0, 2]")
|
|
95
|
+
if not isinstance(self.allow_connector_only_tool_inventory, bool):
|
|
96
|
+
raise ValidationError("LLMCompiler allow_connector_only_tool_inventory must be boolean")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@dataclass(slots=True)
|
|
100
|
+
class LLMCompilerCommonSupportPlanner:
|
|
101
|
+
"""Generate one source-grammar task DAG over frozen official tool schemas."""
|
|
102
|
+
|
|
103
|
+
config: LLMCompilerCommonSupportConfig = LLMCompilerCommonSupportConfig()
|
|
104
|
+
method_id: str = "llm_compiler"
|
|
105
|
+
release_id: str = LLMCOMPILER_COMMON_SUPPORT_RELEASE
|
|
106
|
+
family: SemanticFamily = SemanticFamily.DECOMPOSE
|
|
107
|
+
|
|
108
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
109
|
+
if not state.query.strip():
|
|
110
|
+
raise ValidationError("LLMCompiler common support requires a non-empty query")
|
|
111
|
+
backend = context.backend
|
|
112
|
+
tools = context.tools
|
|
113
|
+
if not isinstance(backend, LLMBackend):
|
|
114
|
+
raise ExternalDependencyError("LLMCompiler common support requires an LLMBackend")
|
|
115
|
+
if not isinstance(tools, ToolConnector):
|
|
116
|
+
raise ExternalDependencyError(
|
|
117
|
+
"LLMCompiler common support requires a frozen ToolConnector"
|
|
118
|
+
)
|
|
119
|
+
tool_specs = tools.list_tools()
|
|
120
|
+
_validate_tool_specs(
|
|
121
|
+
tool_specs,
|
|
122
|
+
state.tool_names,
|
|
123
|
+
allow_connector_only=self.config.allow_connector_only_tool_inventory,
|
|
124
|
+
)
|
|
125
|
+
if state.budget.max_model_calls < 1:
|
|
126
|
+
raise BudgetExceededError("LLMCompiler has no remaining model-call budget")
|
|
127
|
+
if state.budget.max_output_tokens < 1:
|
|
128
|
+
raise BudgetExceededError("LLMCompiler has no remaining output-token budget")
|
|
129
|
+
|
|
130
|
+
source_prompt = render_llmcompiler_planner_prompt(tool_specs)
|
|
131
|
+
system_prompt = source_prompt + _CHAT_COMPATIBILITY_SUFFIX
|
|
132
|
+
request = GenerationRequest(
|
|
133
|
+
prompt=f"Question: {state.query}",
|
|
134
|
+
system=system_prompt,
|
|
135
|
+
temperature=self.config.temperature,
|
|
136
|
+
max_tokens=min(self.config.max_tokens, state.budget.max_output_tokens),
|
|
137
|
+
seed=context.seed,
|
|
138
|
+
stop=(LLMCOMPILER_END_OF_PLAN,),
|
|
139
|
+
metadata={
|
|
140
|
+
"method_id": self.method_id,
|
|
141
|
+
"release_id": self.release_id,
|
|
142
|
+
"execution_mode": "planner_component",
|
|
143
|
+
"upstream_commit": LLMCOMPILER_UPSTREAM_COMMIT,
|
|
144
|
+
},
|
|
145
|
+
)
|
|
146
|
+
response = backend.generate(request)
|
|
147
|
+
if not isinstance(response.text, str) or not response.text.strip():
|
|
148
|
+
raise AlgorithmOutputError("LLMCompiler planner returned empty output")
|
|
149
|
+
usage = response.usage
|
|
150
|
+
if usage.output_tokens > state.budget.max_output_tokens:
|
|
151
|
+
raise BudgetExceededError("LLMCompiler exceeded max_output_tokens")
|
|
152
|
+
if (
|
|
153
|
+
state.budget.max_context_tokens is not None
|
|
154
|
+
and usage.input_tokens > state.budget.max_context_tokens
|
|
155
|
+
):
|
|
156
|
+
raise BudgetExceededError("LLMCompiler exceeded max_context_tokens")
|
|
157
|
+
if (
|
|
158
|
+
state.budget.max_cost_usd is not None
|
|
159
|
+
and usage.cost_usd is not None
|
|
160
|
+
and usage.cost_usd > state.budget.max_cost_usd
|
|
161
|
+
):
|
|
162
|
+
raise BudgetExceededError("LLMCompiler exceeded max_cost_usd")
|
|
163
|
+
|
|
164
|
+
tasks, join_task_id = parse_llmcompiler_plan(
|
|
165
|
+
response.text,
|
|
166
|
+
tool_specs,
|
|
167
|
+
max_tasks=self.config.max_tasks,
|
|
168
|
+
)
|
|
169
|
+
task_rows = tuple(
|
|
170
|
+
{
|
|
171
|
+
"task_id": task.task_id,
|
|
172
|
+
"tool_name": task.tool_name,
|
|
173
|
+
"arguments": dict(task.arguments),
|
|
174
|
+
"dependencies": task.dependencies,
|
|
175
|
+
}
|
|
176
|
+
for task in tasks
|
|
177
|
+
)
|
|
178
|
+
canonical_plan = json.dumps(
|
|
179
|
+
task_rows,
|
|
180
|
+
ensure_ascii=False,
|
|
181
|
+
sort_keys=True,
|
|
182
|
+
separators=(",", ":"),
|
|
183
|
+
)
|
|
184
|
+
raw_plan_hash = content_hash(response.text)
|
|
185
|
+
tool_schema_hash = content_hash(tool_specs)
|
|
186
|
+
block = ContextBlock(
|
|
187
|
+
block_id=f"{state.task_id or state.state_hash}:llm-compiler-plan",
|
|
188
|
+
text=canonical_plan,
|
|
189
|
+
source="llm_compiler_task_dag",
|
|
190
|
+
metadata={
|
|
191
|
+
"raw_plan_hash": raw_plan_hash,
|
|
192
|
+
"task_count": len(tasks),
|
|
193
|
+
"join_task_id": join_task_id,
|
|
194
|
+
"full_system": False,
|
|
195
|
+
"tool_schema_hash": tool_schema_hash,
|
|
196
|
+
},
|
|
197
|
+
)
|
|
198
|
+
trace = ExecutionTrace(
|
|
199
|
+
method_id=self.method_id,
|
|
200
|
+
release_id=self.release_id,
|
|
201
|
+
events=(
|
|
202
|
+
TraceEvent(
|
|
203
|
+
TracePhase.PREPARE,
|
|
204
|
+
"source_locked_common_support_planner",
|
|
205
|
+
{
|
|
206
|
+
"upstream_commit": LLMCOMPILER_UPSTREAM_COMMIT,
|
|
207
|
+
"planner_source_sha256": LLMCOMPILER_PLANNER_SOURCE_SHA256,
|
|
208
|
+
"parser_source_sha256": LLMCOMPILER_PARSER_SOURCE_SHA256,
|
|
209
|
+
"source_prompt_sha256": content_hash(source_prompt),
|
|
210
|
+
"chat_compatibility_suffix_sha256": content_hash(
|
|
211
|
+
_CHAT_COMPATIBILITY_SUFFIX
|
|
212
|
+
),
|
|
213
|
+
"effective_prompt_sha256": content_hash(system_prompt),
|
|
214
|
+
"tool_schema_hash": tool_schema_hash,
|
|
215
|
+
"tool_names": tuple(spec.name for spec in tool_specs),
|
|
216
|
+
"demonstration_policy": "zero_shot_cross_arena",
|
|
217
|
+
"tool_inventory_policy": (
|
|
218
|
+
"connector_only_controlled_static.v1"
|
|
219
|
+
if self.config.allow_connector_only_tool_inventory
|
|
220
|
+
else "checkpoint_exact.v1"
|
|
221
|
+
),
|
|
222
|
+
"stop": LLMCOMPILER_END_OF_PLAN,
|
|
223
|
+
},
|
|
224
|
+
),
|
|
225
|
+
TraceEvent(
|
|
226
|
+
TracePhase.PROPOSE,
|
|
227
|
+
"task_dag",
|
|
228
|
+
{
|
|
229
|
+
"tasks": task_rows,
|
|
230
|
+
"join_task_id": join_task_id,
|
|
231
|
+
"raw_plan_hash": raw_plan_hash,
|
|
232
|
+
},
|
|
233
|
+
),
|
|
234
|
+
TraceEvent(
|
|
235
|
+
TracePhase.FINALIZE,
|
|
236
|
+
"planner_component_complete",
|
|
237
|
+
{
|
|
238
|
+
"downstream_execution_required": True,
|
|
239
|
+
"optimizer_tool_calls": 0,
|
|
240
|
+
"final_answer_injected": False,
|
|
241
|
+
},
|
|
242
|
+
),
|
|
243
|
+
),
|
|
244
|
+
counters={
|
|
245
|
+
"model_calls": 1,
|
|
246
|
+
"tool_calls": 0,
|
|
247
|
+
"input_tokens": usage.input_tokens,
|
|
248
|
+
"output_tokens": usage.output_tokens,
|
|
249
|
+
"planned_tasks": len(tasks),
|
|
250
|
+
},
|
|
251
|
+
warnings=(
|
|
252
|
+
"controlled_zero_shot_cross_arena_prompt_not_upstream_benchmark_prompt",
|
|
253
|
+
"planner_component_not_full_parallel_execution_system",
|
|
254
|
+
),
|
|
255
|
+
)
|
|
256
|
+
return InputPatch(
|
|
257
|
+
method_id=self.method_id,
|
|
258
|
+
release_id=self.release_id,
|
|
259
|
+
source_state_hash=state.state_hash,
|
|
260
|
+
operations=(
|
|
261
|
+
PatchOperation(
|
|
262
|
+
PatchOp.ADD_CONTEXT,
|
|
263
|
+
value=block,
|
|
264
|
+
target="execution_plan",
|
|
265
|
+
rationale="materialize the source-grammar LLMCompiler dependency DAG",
|
|
266
|
+
),
|
|
267
|
+
PatchOperation(
|
|
268
|
+
PatchOp.SET_METADATA,
|
|
269
|
+
value={
|
|
270
|
+
"llm_compiler_tasks": task_rows,
|
|
271
|
+
"llm_compiler_join_task_id": join_task_id,
|
|
272
|
+
"llm_compiler_termination": "planner_complete",
|
|
273
|
+
},
|
|
274
|
+
target="metadata",
|
|
275
|
+
),
|
|
276
|
+
),
|
|
277
|
+
trace=trace,
|
|
278
|
+
implementation_identity=(
|
|
279
|
+
f"controlled_source_locked:SqueezeAILab/LLMCompiler@{LLMCOMPILER_UPSTREAM_COMMIT}"
|
|
280
|
+
),
|
|
281
|
+
profile_kind="controlled_adapter",
|
|
282
|
+
metadata={
|
|
283
|
+
"implementation_origin": "controlled_source_locked",
|
|
284
|
+
"profile_attestation": "controlled_common_support_planner",
|
|
285
|
+
"upstream_prompt_template_preserved": True,
|
|
286
|
+
"upstream_plan_grammar_preserved": True,
|
|
287
|
+
"upstream_dependency_reference_semantics_preserved": True,
|
|
288
|
+
"dependency_parser_repair": "known_prior_task_ids_only.v1",
|
|
289
|
+
"named_argument_parser_repair": "single_colon_or_python_keyword.v1",
|
|
290
|
+
"schema_rendering_adapter": "openai_json_schema_to_source_signature.v1",
|
|
291
|
+
"chat_compatibility_wrapper": True,
|
|
292
|
+
"demonstration_policy": "zero_shot_cross_arena",
|
|
293
|
+
"tool_inventory_policy": (
|
|
294
|
+
"connector_only_controlled_static.v1"
|
|
295
|
+
if self.config.allow_connector_only_tool_inventory
|
|
296
|
+
else "checkpoint_exact.v1"
|
|
297
|
+
),
|
|
298
|
+
"full_system": False,
|
|
299
|
+
"final_answer_injected": False,
|
|
300
|
+
"optimizer_tool_calls": 0,
|
|
301
|
+
"backend_fingerprint": dict(backend.fingerprint()),
|
|
302
|
+
"tools_fingerprint": dict(tools.fingerprint()),
|
|
303
|
+
"tool_schema_hash": tool_schema_hash,
|
|
304
|
+
"request_hash": request.request_hash,
|
|
305
|
+
},
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def render_llmcompiler_planner_prompt(tool_specs: Sequence[ToolSpec]) -> str:
|
|
310
|
+
"""Render the pinned ``generate_llm_compiler_prompt`` with no task examples."""
|
|
311
|
+
|
|
312
|
+
specs = tuple(tool_specs)
|
|
313
|
+
prefix = (
|
|
314
|
+
"Given a user query, create a plan to solve it with the utmost parallelizability. "
|
|
315
|
+
f"Each plan should comprise an action from the following {len(specs) + 1} types:\n"
|
|
316
|
+
)
|
|
317
|
+
for index, spec in enumerate(specs):
|
|
318
|
+
prefix += f"{index + 1}. {_source_tool_description(spec)}\n"
|
|
319
|
+
prefix += f"{len(specs) + 1}. {_JOIN_DESCRIPTION}\n\n"
|
|
320
|
+
prefix += (
|
|
321
|
+
"Guidelines:\n"
|
|
322
|
+
" - Each action described above contains input/output types and description.\n"
|
|
323
|
+
" - You must strictly adhere to the input and output types for each action.\n"
|
|
324
|
+
" - The action descriptions contain the guidelines. You MUST strictly follow those guidelines when you use the actions.\n"
|
|
325
|
+
" - Each action in the plan should strictly be one of the above types. Follow the Python conventions for each action.\n"
|
|
326
|
+
" - Each action MUST have a unique ID, which is strictly increasing.\n"
|
|
327
|
+
" - Inputs for actions can either be constants or outputs from preceding actions. "
|
|
328
|
+
"In the latter case, use the format $id to denote the ID of the previous action whose output will be the input.\n"
|
|
329
|
+
f" - Always call join as the last action in the plan. Say '{LLMCOMPILER_END_OF_PLAN}' after you call join\n"
|
|
330
|
+
" - Ensure the plan maximizes parallelizability.\n"
|
|
331
|
+
" - Only use the provided action types. If a query cannot be addressed using these, invoke the join action for the next steps.\n"
|
|
332
|
+
" - Never explain the plan with comments (e.g. #).\n"
|
|
333
|
+
" - Never introduce new actions other than the ones provided.\n\n"
|
|
334
|
+
"Here are some examples:\n\n"
|
|
335
|
+
)
|
|
336
|
+
return prefix
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
def parse_llmcompiler_plan(
|
|
340
|
+
raw: str,
|
|
341
|
+
tool_specs: Sequence[ToolSpec],
|
|
342
|
+
*,
|
|
343
|
+
max_tasks: int,
|
|
344
|
+
) -> tuple[tuple[CompilerTask, ...], int]:
|
|
345
|
+
"""Parse the pinned action grammar and omit the non-executable join node."""
|
|
346
|
+
|
|
347
|
+
if not isinstance(raw, str) or not raw.strip():
|
|
348
|
+
raise AlgorithmOutputError("LLMCompiler plan must be non-empty text")
|
|
349
|
+
specs = {spec.name: spec for spec in tool_specs}
|
|
350
|
+
tasks: list[CompilerTask] = []
|
|
351
|
+
join_task_id: int | None = None
|
|
352
|
+
for match in _ACTION_PATTERN.finditer(raw):
|
|
353
|
+
task_id = int(match.group(1))
|
|
354
|
+
tool_name = match.group(2)
|
|
355
|
+
raw_arguments = match.group(3)
|
|
356
|
+
if tool_name == "join":
|
|
357
|
+
join_task_id = task_id
|
|
358
|
+
break
|
|
359
|
+
spec = specs.get(tool_name)
|
|
360
|
+
if spec is None:
|
|
361
|
+
raise AlgorithmOutputError(f"LLMCompiler planned unknown tool {tool_name!r}")
|
|
362
|
+
arguments = _normalized_arguments(raw_arguments, spec)
|
|
363
|
+
dependencies = _dependency_ids(arguments, {task.task_id for task in tasks})
|
|
364
|
+
tasks.append(
|
|
365
|
+
CompilerTask(
|
|
366
|
+
task_id=task_id,
|
|
367
|
+
tool_name=tool_name,
|
|
368
|
+
arguments=arguments,
|
|
369
|
+
dependencies=dependencies,
|
|
370
|
+
)
|
|
371
|
+
)
|
|
372
|
+
if join_task_id is None:
|
|
373
|
+
raise AlgorithmOutputError("LLMCompiler plan must end with join")
|
|
374
|
+
if not tasks:
|
|
375
|
+
raise AlgorithmOutputError("LLMCompiler plan contains no executable task")
|
|
376
|
+
if join_task_id <= tasks[-1].task_id:
|
|
377
|
+
raise AlgorithmOutputError("LLMCompiler join ID must follow executable tasks")
|
|
378
|
+
frozen_tasks = tuple(tasks)
|
|
379
|
+
_validate_dag(frozen_tasks, max_tasks=max_tasks, allowed_tools=set(specs))
|
|
380
|
+
return frozen_tasks, join_task_id
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
def _normalized_arguments(raw: str, spec: ToolSpec) -> Mapping[str, Any]:
|
|
384
|
+
properties = spec.input_schema.get("properties", {})
|
|
385
|
+
names = tuple(properties) if isinstance(properties, Mapping) else ()
|
|
386
|
+
if raw == "":
|
|
387
|
+
values: tuple[Any, ...] = ()
|
|
388
|
+
else:
|
|
389
|
+
try:
|
|
390
|
+
parsed = ast.literal_eval(raw)
|
|
391
|
+
except (SyntaxError, ValueError):
|
|
392
|
+
keyword_values = _python_keyword_arguments(raw, names)
|
|
393
|
+
if keyword_values is not None:
|
|
394
|
+
return keyword_values
|
|
395
|
+
if len(names) == 1:
|
|
396
|
+
colon = re.fullmatch(rf"\s*{re.escape(names[0])}\s*:\s*(.+)", raw)
|
|
397
|
+
if colon is not None:
|
|
398
|
+
try:
|
|
399
|
+
value = ast.literal_eval(colon.group(1))
|
|
400
|
+
except (SyntaxError, ValueError):
|
|
401
|
+
value = colon.group(1).strip()
|
|
402
|
+
return {names[0]: value}
|
|
403
|
+
parsed = raw
|
|
404
|
+
values = tuple(parsed) if isinstance(parsed, (list, tuple)) else (parsed,)
|
|
405
|
+
if len(values) == 1 and isinstance(values[0], Mapping):
|
|
406
|
+
return dict(values[0])
|
|
407
|
+
if len(names) == len(values):
|
|
408
|
+
return dict(zip(names, values, strict=True))
|
|
409
|
+
return {"__args__": values}
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
def _python_keyword_arguments(raw: str, names: tuple[str, ...]) -> Mapping[str, Any] | None:
|
|
413
|
+
try:
|
|
414
|
+
expression = ast.parse(f"_tool({raw})", mode="eval").body
|
|
415
|
+
except SyntaxError:
|
|
416
|
+
return None
|
|
417
|
+
if not isinstance(expression, ast.Call) or expression.args or not expression.keywords:
|
|
418
|
+
return None
|
|
419
|
+
values: dict[str, Any] = {}
|
|
420
|
+
for keyword in expression.keywords:
|
|
421
|
+
if keyword.arg is None or keyword.arg not in names or keyword.arg in values:
|
|
422
|
+
return None
|
|
423
|
+
try:
|
|
424
|
+
values[keyword.arg] = ast.literal_eval(keyword.value)
|
|
425
|
+
except (TypeError, ValueError):
|
|
426
|
+
return None
|
|
427
|
+
return values if set(values) == set(names) else None
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
def _dependency_ids(arguments: Mapping[str, Any], known_ids: set[int]) -> tuple[int, ...]:
|
|
431
|
+
found: set[int] = set()
|
|
432
|
+
|
|
433
|
+
def visit(value: Any) -> None:
|
|
434
|
+
if isinstance(value, str):
|
|
435
|
+
found.update(
|
|
436
|
+
task_id
|
|
437
|
+
for task_id in (int(item) for item in _ID_PATTERN.findall(value))
|
|
438
|
+
if task_id in known_ids
|
|
439
|
+
)
|
|
440
|
+
elif isinstance(value, Mapping):
|
|
441
|
+
for item in value.values():
|
|
442
|
+
visit(item)
|
|
443
|
+
elif isinstance(value, Sequence) and not isinstance(value, (str, bytes)):
|
|
444
|
+
for item in value:
|
|
445
|
+
visit(item)
|
|
446
|
+
|
|
447
|
+
visit(arguments)
|
|
448
|
+
return tuple(sorted(found))
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
def _source_tool_description(spec: ToolSpec) -> str:
|
|
452
|
+
properties = spec.input_schema.get("properties", {})
|
|
453
|
+
required = spec.input_schema.get("required", ())
|
|
454
|
+
required_names = set(required) if isinstance(required, Sequence) else set()
|
|
455
|
+
rendered: list[str] = []
|
|
456
|
+
if isinstance(properties, Mapping):
|
|
457
|
+
for name, schema in properties.items():
|
|
458
|
+
schema_type = schema.get("type", "Any") if isinstance(schema, Mapping) else "Any"
|
|
459
|
+
optional = "" if name in required_names else " = None"
|
|
460
|
+
rendered.append(f"{name}: {schema_type}{optional}")
|
|
461
|
+
signature = f"{spec.name}({', '.join(rendered)}) -> Any:"
|
|
462
|
+
compact_schema = json.dumps(
|
|
463
|
+
to_jsonable(spec.input_schema),
|
|
464
|
+
ensure_ascii=False,
|
|
465
|
+
sort_keys=True,
|
|
466
|
+
separators=(",", ":"),
|
|
467
|
+
)
|
|
468
|
+
return f"{signature}\n - {spec.description.strip()}\n - Input JSON schema: {compact_schema}"
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
def _validate_tool_specs(
|
|
472
|
+
specs: Sequence[ToolSpec],
|
|
473
|
+
state_names: Sequence[str],
|
|
474
|
+
*,
|
|
475
|
+
allow_connector_only: bool = False,
|
|
476
|
+
) -> None:
|
|
477
|
+
values = tuple(specs)
|
|
478
|
+
if not values:
|
|
479
|
+
raise ExternalDependencyError("LLMCompiler requires at least one tool schema")
|
|
480
|
+
if any(not isinstance(spec, ToolSpec) for spec in values):
|
|
481
|
+
raise TypeError("LLMCompiler connector returned a non-ToolSpec")
|
|
482
|
+
names = tuple(spec.name for spec in values)
|
|
483
|
+
if len(names) != len(set(names)) or any(_SAFE_TOOL.fullmatch(name) is None for name in names):
|
|
484
|
+
raise ValidationError("LLMCompiler tool names must be unique Python identifiers")
|
|
485
|
+
if set(names) != set(state_names) and not (allow_connector_only and not tuple(state_names)):
|
|
486
|
+
raise ValidationError(
|
|
487
|
+
"LLMCompiler frozen tool schemas differ from the checkpoint tool inventory"
|
|
488
|
+
)
|
|
489
|
+
if any(not spec.description.strip() for spec in values):
|
|
490
|
+
raise ValidationError("LLMCompiler tool descriptions must be non-empty")
|
|
491
|
+
for digest in (LLMCOMPILER_PLANNER_SOURCE_SHA256, LLMCOMPILER_PARSER_SOURCE_SHA256):
|
|
492
|
+
if _HEX64.fullmatch(digest) is None: # pragma: no cover - source-lock invariant
|
|
493
|
+
raise RuntimeError("LLMCompiler source SHA constant is invalid")
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
__all__ = [
|
|
497
|
+
"LLMCOMPILER_COMMON_SUPPORT_RELEASE",
|
|
498
|
+
"LLMCOMPILER_PARSER_SOURCE_SHA256",
|
|
499
|
+
"LLMCOMPILER_PLANNER_SOURCE_SHA256",
|
|
500
|
+
"LLMCompilerCommonSupportConfig",
|
|
501
|
+
"LLMCompilerCommonSupportPlanner",
|
|
502
|
+
"parse_llmcompiler_plan",
|
|
503
|
+
"render_llmcompiler_planner_prompt",
|
|
504
|
+
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Plan-and-Budget cached soft-word-budget profile."""
|
|
2
|
+
|
|
3
|
+
from .cached_soft_budget import (
|
|
4
|
+
P_AND_B_UPSTREAM_REVISION,
|
|
5
|
+
CachedPlanBudgetRecord,
|
|
6
|
+
DecaySchedule,
|
|
7
|
+
PlanAndBudgetCache,
|
|
8
|
+
PlanAndBudgetCachedSoftBudget,
|
|
9
|
+
allocate_tokens,
|
|
10
|
+
load_cached_record,
|
|
11
|
+
render_soft_budget_instruction,
|
|
12
|
+
)
|
|
13
|
+
from .decomposer_component import PlanAndBudgetDecomposerComponent
|
|
14
|
+
from .full import PlanAndBudgetFull
|
|
15
|
+
from .hard_cap import (
|
|
16
|
+
PAB_HARD_CAP_PROTOCOL,
|
|
17
|
+
PAB_HARD_CAP_RELEASE,
|
|
18
|
+
PlanAndBudgetHardCapExtension,
|
|
19
|
+
allocate_hard_token_caps,
|
|
20
|
+
)
|
|
21
|
+
from .regenerated_soft_budget import (
|
|
22
|
+
PlanAndBudgetRegeneratedSoftBudget,
|
|
23
|
+
RegeneratedPlanBudgetConfig,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
__all__ = [
|
|
27
|
+
"PAB_HARD_CAP_PROTOCOL",
|
|
28
|
+
"PAB_HARD_CAP_RELEASE",
|
|
29
|
+
"P_AND_B_UPSTREAM_REVISION",
|
|
30
|
+
"CachedPlanBudgetRecord",
|
|
31
|
+
"DecaySchedule",
|
|
32
|
+
"PlanAndBudgetCache",
|
|
33
|
+
"PlanAndBudgetCachedSoftBudget",
|
|
34
|
+
"PlanAndBudgetDecomposerComponent",
|
|
35
|
+
"PlanAndBudgetFull",
|
|
36
|
+
"PlanAndBudgetHardCapExtension",
|
|
37
|
+
"PlanAndBudgetRegeneratedSoftBudget",
|
|
38
|
+
"RegeneratedPlanBudgetConfig",
|
|
39
|
+
"allocate_hard_token_caps",
|
|
40
|
+
"allocate_tokens",
|
|
41
|
+
"load_cached_record",
|
|
42
|
+
"render_soft_budget_instruction",
|
|
43
|
+
]
|