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,520 @@
|
|
|
1
|
+
"""Faithful transport boundary for the pinned LLMCompiler runtime.
|
|
2
|
+
|
|
3
|
+
Planning, streaming scheduling, tool execution, join, and replan stay in the
|
|
4
|
+
official MIT worker. The bridge validates the task DAG and scheduler history
|
|
5
|
+
instead of replacing the system with a one-shot planning prompt.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
import math
|
|
12
|
+
from collections.abc import Mapping, Sequence
|
|
13
|
+
from dataclasses import asdict, dataclass
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
from agentinputlab.connectors.tools import ToolConnector
|
|
17
|
+
from agentinputlab.contracts import (
|
|
18
|
+
AlgorithmOutputError,
|
|
19
|
+
CompositeResult,
|
|
20
|
+
ContextBlock,
|
|
21
|
+
ExecutionTrace,
|
|
22
|
+
ExternalDependencyError,
|
|
23
|
+
FrozenAgentState,
|
|
24
|
+
InputPatch,
|
|
25
|
+
InterventionContext,
|
|
26
|
+
PatchOp,
|
|
27
|
+
PatchOperation,
|
|
28
|
+
SemanticFamily,
|
|
29
|
+
TraceEvent,
|
|
30
|
+
TracePhase,
|
|
31
|
+
ValidationError,
|
|
32
|
+
)
|
|
33
|
+
from agentinputlab.contracts.serialization import content_hash, freeze_mapping, to_jsonable
|
|
34
|
+
from agentinputlab.integrations.external_workers import WorkerClient
|
|
35
|
+
from agentinputlab.integrations.external_workers.method import (
|
|
36
|
+
MethodWorkerRequest,
|
|
37
|
+
call_worker,
|
|
38
|
+
dependency_fingerprint,
|
|
39
|
+
mapping_sequence,
|
|
40
|
+
nonnegative_integer,
|
|
41
|
+
optional_text,
|
|
42
|
+
required_text,
|
|
43
|
+
resolve_worker,
|
|
44
|
+
worker_fingerprint,
|
|
45
|
+
)
|
|
46
|
+
from agentinputlab.observability import external_usage_counters
|
|
47
|
+
|
|
48
|
+
LLMCOMPILER_UPSTREAM_COMMIT = "a00c9d35507507da70e8c637eee64efc8c1857ae"
|
|
49
|
+
LLMCOMPILER_COMPATIBILITY_MANIFEST_SHA256 = (
|
|
50
|
+
"4b22356ddd587b0fac952511ab53dcf1ae0007b9645e02cd6375122a41ddedd6"
|
|
51
|
+
)
|
|
52
|
+
_OFFICIAL_NATIVE_WORKER_IDS = frozenset({"agentinputlab.llmcompiler.official-native.pinned.v1"})
|
|
53
|
+
_OFFICIAL_NATIVE_ATTESTATION = {
|
|
54
|
+
"schema_version": "agentinputlab.llmcompiler.official-native-attestation.v1",
|
|
55
|
+
"upstream_commit": LLMCOMPILER_UPSTREAM_COMMIT,
|
|
56
|
+
"compatibility_manifest_sha256": LLMCOMPILER_COMPATIBILITY_MANIFEST_SHA256,
|
|
57
|
+
"source_files_verified": True,
|
|
58
|
+
"required_versions_verified": True,
|
|
59
|
+
"import_origins_verified": True,
|
|
60
|
+
"model_transport": "upstream_native",
|
|
61
|
+
"tool_transport": "upstream_native",
|
|
62
|
+
}
|
|
63
|
+
_TASK_STATES = ("planned", "ready", "running", "completed", "failed")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _profile_identity(
|
|
67
|
+
worker_identity: Mapping[str, Any],
|
|
68
|
+
*,
|
|
69
|
+
full_system: bool,
|
|
70
|
+
) -> tuple[str, str, str]:
|
|
71
|
+
"""Return a conservative profile label from a strict worker attestation."""
|
|
72
|
+
|
|
73
|
+
attestation = worker_identity.get("official_native_attestation")
|
|
74
|
+
official = (
|
|
75
|
+
full_system
|
|
76
|
+
and worker_identity.get("worker_id") in _OFFICIAL_NATIVE_WORKER_IDS
|
|
77
|
+
and worker_identity.get("upstream_commit") == LLMCOMPILER_UPSTREAM_COMMIT
|
|
78
|
+
and isinstance(attestation, Mapping)
|
|
79
|
+
and dict(attestation) == _OFFICIAL_NATIVE_ATTESTATION
|
|
80
|
+
)
|
|
81
|
+
if official:
|
|
82
|
+
return "official_native", "official_external_adapter", "official_native_allowlisted"
|
|
83
|
+
return "controlled_adapter", "controlled_external_adapter", "controlled_default"
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@dataclass(frozen=True, slots=True)
|
|
87
|
+
class LLMCompilerControls:
|
|
88
|
+
max_tasks: int = 32
|
|
89
|
+
max_replans: int = 2
|
|
90
|
+
concurrency: int = 8
|
|
91
|
+
timeout_seconds: float = 300.0
|
|
92
|
+
streaming: bool = True
|
|
93
|
+
|
|
94
|
+
def __post_init__(self) -> None:
|
|
95
|
+
if any(
|
|
96
|
+
isinstance(value, bool) or not isinstance(value, int) or value < 1
|
|
97
|
+
for value in (self.max_tasks, self.concurrency)
|
|
98
|
+
):
|
|
99
|
+
raise ValidationError("LLMCompiler task/concurrency limits must be positive")
|
|
100
|
+
if (
|
|
101
|
+
isinstance(self.max_replans, bool)
|
|
102
|
+
or not isinstance(self.max_replans, int)
|
|
103
|
+
or self.max_replans < 0
|
|
104
|
+
):
|
|
105
|
+
raise ValidationError("LLMCompiler max_replans must be non-negative")
|
|
106
|
+
if (
|
|
107
|
+
isinstance(self.timeout_seconds, bool)
|
|
108
|
+
or not isinstance(self.timeout_seconds, (int, float))
|
|
109
|
+
or not math.isfinite(self.timeout_seconds)
|
|
110
|
+
or self.timeout_seconds <= 0
|
|
111
|
+
):
|
|
112
|
+
raise ValidationError("LLMCompiler timeout_seconds must be positive")
|
|
113
|
+
if not isinstance(self.streaming, bool):
|
|
114
|
+
raise ValidationError("LLMCompiler streaming must be boolean")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
@dataclass(frozen=True, slots=True)
|
|
118
|
+
class CompilerTask:
|
|
119
|
+
task_id: int
|
|
120
|
+
tool_name: str
|
|
121
|
+
arguments: Mapping[str, Any]
|
|
122
|
+
dependencies: tuple[int, ...]
|
|
123
|
+
|
|
124
|
+
def __post_init__(self) -> None:
|
|
125
|
+
if self.task_id < 1 or not self.tool_name.strip():
|
|
126
|
+
raise AlgorithmOutputError("LLMCompiler task ID/tool name is invalid")
|
|
127
|
+
object.__setattr__(self, "arguments", freeze_mapping(self.arguments))
|
|
128
|
+
object.__setattr__(self, "dependencies", tuple(self.dependencies))
|
|
129
|
+
if any(
|
|
130
|
+
isinstance(item, bool) or not isinstance(item, int) or item < 1
|
|
131
|
+
for item in self.dependencies
|
|
132
|
+
):
|
|
133
|
+
raise AlgorithmOutputError("LLMCompiler dependencies must be positive task IDs")
|
|
134
|
+
if len(self.dependencies) != len(set(self.dependencies)):
|
|
135
|
+
raise AlgorithmOutputError("LLMCompiler task contains duplicate dependencies")
|
|
136
|
+
|
|
137
|
+
@classmethod
|
|
138
|
+
def from_mapping(cls, value: Mapping[str, Any]) -> CompilerTask:
|
|
139
|
+
task_id = nonnegative_integer(value.get("task_id"), label="LLMCompiler task_id")
|
|
140
|
+
tool_name = required_text(value, "tool_name", label="LLMCompiler task")
|
|
141
|
+
arguments = value.get("arguments", {})
|
|
142
|
+
if not isinstance(arguments, Mapping):
|
|
143
|
+
raise AlgorithmOutputError("LLMCompiler task arguments must be a mapping")
|
|
144
|
+
dependencies = value.get("dependencies", ())
|
|
145
|
+
if isinstance(dependencies, (str, bytes)) or not isinstance(dependencies, Sequence):
|
|
146
|
+
raise AlgorithmOutputError("LLMCompiler task dependencies must be a sequence")
|
|
147
|
+
return cls(
|
|
148
|
+
task_id=task_id,
|
|
149
|
+
tool_name=tool_name,
|
|
150
|
+
arguments=dict(arguments),
|
|
151
|
+
dependencies=tuple(dependencies),
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
@dataclass(frozen=True, slots=True)
|
|
156
|
+
class SchedulerEvent:
|
|
157
|
+
index: int
|
|
158
|
+
task_id: int
|
|
159
|
+
state: str
|
|
160
|
+
|
|
161
|
+
@classmethod
|
|
162
|
+
def from_mapping(cls, value: Mapping[str, Any]) -> SchedulerEvent:
|
|
163
|
+
index = nonnegative_integer(value.get("index"), label="scheduler event index")
|
|
164
|
+
task_id = nonnegative_integer(value.get("task_id"), label="scheduler event task_id")
|
|
165
|
+
state = required_text(value, "state", label="scheduler event")
|
|
166
|
+
if state not in _TASK_STATES:
|
|
167
|
+
raise AlgorithmOutputError("LLMCompiler scheduler event has an unsupported state")
|
|
168
|
+
return cls(index=index, task_id=task_id, state=state)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
@dataclass(slots=True)
|
|
172
|
+
class _LLMCompilerBridge:
|
|
173
|
+
client: WorkerClient | None = None
|
|
174
|
+
controls: LLMCompilerControls = LLMCompilerControls()
|
|
175
|
+
prompt_hash: str = ""
|
|
176
|
+
full_system: bool = False
|
|
177
|
+
release_id: str = "plan.llm_compiler.planner_component"
|
|
178
|
+
method_id: str = "llm_compiler"
|
|
179
|
+
family: SemanticFamily = SemanticFamily.DECOMPOSE
|
|
180
|
+
|
|
181
|
+
def __post_init__(self) -> None:
|
|
182
|
+
if not self.prompt_hash.strip():
|
|
183
|
+
raise ValidationError("LLMCompiler requires a prompt_hash")
|
|
184
|
+
|
|
185
|
+
def _execute_patch(
|
|
186
|
+
self,
|
|
187
|
+
state: FrozenAgentState,
|
|
188
|
+
context: InterventionContext,
|
|
189
|
+
) -> InputPatch:
|
|
190
|
+
if not state.query.strip():
|
|
191
|
+
raise ValidationError("LLMCompiler requires a non-empty query")
|
|
192
|
+
worker = resolve_worker(self.client, context, label="LLMCompiler")
|
|
193
|
+
worker_identity = worker_fingerprint(worker, label="LLMCompiler")
|
|
194
|
+
if not isinstance(context.tools, ToolConnector):
|
|
195
|
+
raise ExternalDependencyError("LLMCompiler requires an injected ToolConnector")
|
|
196
|
+
tool_specs = context.tools.list_tools()
|
|
197
|
+
allowed_tools = tuple(spec.name for spec in tool_specs)
|
|
198
|
+
if not allowed_tools:
|
|
199
|
+
raise ExternalDependencyError("LLMCompiler requires at least one available tool")
|
|
200
|
+
backend_fp = dependency_fingerprint(
|
|
201
|
+
context.backend,
|
|
202
|
+
label="LLMCompiler planner backend",
|
|
203
|
+
required=True,
|
|
204
|
+
)
|
|
205
|
+
tools_fp = dependency_fingerprint(
|
|
206
|
+
context.tools,
|
|
207
|
+
label="LLMCompiler tools",
|
|
208
|
+
required=True,
|
|
209
|
+
)
|
|
210
|
+
request = MethodWorkerRequest(
|
|
211
|
+
method_id=self.method_id,
|
|
212
|
+
release_id=self.release_id,
|
|
213
|
+
upstream_commit=LLMCOMPILER_UPSTREAM_COMMIT,
|
|
214
|
+
state_hash=state.state_hash,
|
|
215
|
+
payload={
|
|
216
|
+
"task_id": state.task_id,
|
|
217
|
+
"query": state.query,
|
|
218
|
+
"instruction": state.instruction,
|
|
219
|
+
"messages": state.messages,
|
|
220
|
+
"tool_specs": tool_specs,
|
|
221
|
+
"controls": asdict(self.controls),
|
|
222
|
+
"prompt_hash": self.prompt_hash,
|
|
223
|
+
"execution_mode": "full" if self.full_system else "planner_component",
|
|
224
|
+
"seed": context.seed,
|
|
225
|
+
"execution_budget": asdict(state.budget),
|
|
226
|
+
"tool_argument_order": worker_identity.get("positional_argument_order", {}),
|
|
227
|
+
},
|
|
228
|
+
dependency_fingerprints={"backend": backend_fp, "tools": tools_fp},
|
|
229
|
+
minimum_reservation={"model_calls": 1},
|
|
230
|
+
protocol_version="agentinputlab.llm-compiler.v1",
|
|
231
|
+
)
|
|
232
|
+
response = call_worker(worker, request)
|
|
233
|
+
payload = response.payload
|
|
234
|
+
tasks = tuple(
|
|
235
|
+
CompilerTask.from_mapping(row)
|
|
236
|
+
for row in mapping_sequence(payload.get("tasks"), label="LLMCompiler tasks")
|
|
237
|
+
)
|
|
238
|
+
_validate_dag(tasks, max_tasks=self.controls.max_tasks, allowed_tools=set(allowed_tools))
|
|
239
|
+
raw_events = mapping_sequence(
|
|
240
|
+
payload.get("scheduler_events", ()),
|
|
241
|
+
label="LLMCompiler scheduler_events",
|
|
242
|
+
)
|
|
243
|
+
events = tuple(SchedulerEvent.from_mapping(row) for row in raw_events)
|
|
244
|
+
_validate_scheduler(events, tasks, full_system=self.full_system)
|
|
245
|
+
replans = nonnegative_integer(payload.get("replans", 0), label="LLMCompiler replans")
|
|
246
|
+
if replans > self.controls.max_replans:
|
|
247
|
+
raise AlgorithmOutputError("LLMCompiler worker exceeded max_replans")
|
|
248
|
+
streaming = payload.get("streaming")
|
|
249
|
+
if not isinstance(streaming, bool) or streaming != self.controls.streaming:
|
|
250
|
+
raise AlgorithmOutputError("LLMCompiler worker streaming mode mismatch")
|
|
251
|
+
raw_plan_hash = required_text(payload, "raw_plan_hash", label="LLMCompiler response")
|
|
252
|
+
termination = required_text(payload, "termination", label="LLMCompiler response")
|
|
253
|
+
if termination not in {"planner_complete", "finish", "replan_limit", "tool_failure"}:
|
|
254
|
+
raise AlgorithmOutputError("LLMCompiler response has unsupported termination")
|
|
255
|
+
final_answer = optional_text(payload, "final_answer", label="LLMCompiler response")
|
|
256
|
+
if self.full_system and (termination != "finish" or not final_answer.strip()):
|
|
257
|
+
raise AlgorithmOutputError(
|
|
258
|
+
"LLMCompiler full profile requires successful finish and a final answer"
|
|
259
|
+
)
|
|
260
|
+
if not self.full_system and termination != "planner_complete":
|
|
261
|
+
raise AlgorithmOutputError(
|
|
262
|
+
"LLMCompiler planner component requires planner_complete termination"
|
|
263
|
+
)
|
|
264
|
+
if not self.full_system and events:
|
|
265
|
+
raise AlgorithmOutputError("LLMCompiler planner component must not execute tasks")
|
|
266
|
+
|
|
267
|
+
task_rows = tuple(to_jsonable(task) for task in tasks)
|
|
268
|
+
canonical_plan = json.dumps(
|
|
269
|
+
task_rows,
|
|
270
|
+
ensure_ascii=False,
|
|
271
|
+
sort_keys=True,
|
|
272
|
+
separators=(",", ":"),
|
|
273
|
+
)
|
|
274
|
+
operations: list[PatchOperation] = [
|
|
275
|
+
PatchOperation(
|
|
276
|
+
PatchOp.ADD_CONTEXT,
|
|
277
|
+
ContextBlock(
|
|
278
|
+
block_id=f"{state.task_id or state.state_hash}:llm-compiler-plan",
|
|
279
|
+
text=canonical_plan,
|
|
280
|
+
source="llm_compiler_task_dag",
|
|
281
|
+
metadata={
|
|
282
|
+
"raw_plan_hash": raw_plan_hash,
|
|
283
|
+
"task_count": len(tasks),
|
|
284
|
+
"full_system": self.full_system,
|
|
285
|
+
},
|
|
286
|
+
),
|
|
287
|
+
target="execution_plan",
|
|
288
|
+
rationale="materialize the parsed LLMCompiler dependency DAG",
|
|
289
|
+
),
|
|
290
|
+
PatchOperation(
|
|
291
|
+
PatchOp.SET_METADATA,
|
|
292
|
+
{
|
|
293
|
+
"llm_compiler_tasks": task_rows,
|
|
294
|
+
"llm_compiler_termination": termination,
|
|
295
|
+
"llm_compiler_replans": replans,
|
|
296
|
+
"llm_compiler_final_answer": final_answer,
|
|
297
|
+
},
|
|
298
|
+
target="metadata",
|
|
299
|
+
),
|
|
300
|
+
]
|
|
301
|
+
trace_events = [
|
|
302
|
+
TraceEvent(
|
|
303
|
+
TracePhase.PREPARE,
|
|
304
|
+
"compiler_controls",
|
|
305
|
+
{
|
|
306
|
+
**asdict(self.controls),
|
|
307
|
+
"prompt_hash": self.prompt_hash,
|
|
308
|
+
"tool_names": allowed_tools,
|
|
309
|
+
},
|
|
310
|
+
),
|
|
311
|
+
TraceEvent(
|
|
312
|
+
TracePhase.PROPOSE,
|
|
313
|
+
"task_dag",
|
|
314
|
+
{"tasks": task_rows, "raw_plan_hash": raw_plan_hash},
|
|
315
|
+
),
|
|
316
|
+
]
|
|
317
|
+
trace_events.extend(
|
|
318
|
+
TraceEvent(
|
|
319
|
+
TracePhase.OBSERVE,
|
|
320
|
+
"scheduler_event",
|
|
321
|
+
{"index": event.index, "task_id": event.task_id, "state": event.state},
|
|
322
|
+
)
|
|
323
|
+
for event in events
|
|
324
|
+
)
|
|
325
|
+
trace_events.append(
|
|
326
|
+
TraceEvent(
|
|
327
|
+
TracePhase.FINALIZE,
|
|
328
|
+
"join_result",
|
|
329
|
+
{
|
|
330
|
+
"termination": termination,
|
|
331
|
+
"replans": replans,
|
|
332
|
+
"final_answer": final_answer,
|
|
333
|
+
"full_system": self.full_system,
|
|
334
|
+
},
|
|
335
|
+
)
|
|
336
|
+
)
|
|
337
|
+
trace = ExecutionTrace(
|
|
338
|
+
method_id=self.method_id,
|
|
339
|
+
release_id=self.release_id,
|
|
340
|
+
events=tuple(trace_events),
|
|
341
|
+
counters={
|
|
342
|
+
**external_usage_counters(response.usage),
|
|
343
|
+
"worker_calls": 1,
|
|
344
|
+
"planned_tasks": len(tasks),
|
|
345
|
+
"scheduler_events": len(events),
|
|
346
|
+
"replans": replans,
|
|
347
|
+
},
|
|
348
|
+
)
|
|
349
|
+
profile_kind, implementation_origin, profile_attestation = _profile_identity(
|
|
350
|
+
worker_identity,
|
|
351
|
+
full_system=self.full_system,
|
|
352
|
+
)
|
|
353
|
+
return InputPatch(
|
|
354
|
+
method_id=self.method_id,
|
|
355
|
+
release_id=self.release_id,
|
|
356
|
+
source_state_hash=state.state_hash,
|
|
357
|
+
operations=tuple(operations),
|
|
358
|
+
trace=trace,
|
|
359
|
+
implementation_identity=(
|
|
360
|
+
f"{implementation_origin}:SqueezeAILab/LLMCompiler@{LLMCOMPILER_UPSTREAM_COMMIT}"
|
|
361
|
+
),
|
|
362
|
+
profile_kind=profile_kind,
|
|
363
|
+
metadata={
|
|
364
|
+
"implementation_origin": implementation_origin,
|
|
365
|
+
"profile_attestation": profile_attestation,
|
|
366
|
+
"full_system": self.full_system,
|
|
367
|
+
"requires_tools": True,
|
|
368
|
+
"terminal_answer_in_metadata": self.full_system,
|
|
369
|
+
"worker_fingerprint": worker_identity,
|
|
370
|
+
"backend_fingerprint": backend_fp,
|
|
371
|
+
"tools_fingerprint": tools_fp,
|
|
372
|
+
"tool_schema_hash": content_hash(tool_specs),
|
|
373
|
+
"final_answer": final_answer,
|
|
374
|
+
"task_dag": task_rows,
|
|
375
|
+
},
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
class LLMCompilerPlannerBridge(_LLMCompilerBridge):
|
|
380
|
+
def __init__(
|
|
381
|
+
self,
|
|
382
|
+
client: WorkerClient | None = None,
|
|
383
|
+
*,
|
|
384
|
+
prompt_hash: str = "",
|
|
385
|
+
controls: LLMCompilerControls | None = None,
|
|
386
|
+
) -> None:
|
|
387
|
+
super().__init__(
|
|
388
|
+
client=client,
|
|
389
|
+
controls=controls if controls is not None else LLMCompilerControls(),
|
|
390
|
+
prompt_hash=prompt_hash,
|
|
391
|
+
full_system=False,
|
|
392
|
+
release_id="plan.llm_compiler.planner_component",
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
def propose(self, state: FrozenAgentState, context: InterventionContext) -> InputPatch:
|
|
396
|
+
return self._execute_patch(state, context)
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
class LLMCompilerFullBridge(_LLMCompilerBridge):
|
|
400
|
+
def __init__(
|
|
401
|
+
self,
|
|
402
|
+
client: WorkerClient | None = None,
|
|
403
|
+
*,
|
|
404
|
+
prompt_hash: str = "",
|
|
405
|
+
controls: LLMCompilerControls | None = None,
|
|
406
|
+
) -> None:
|
|
407
|
+
super().__init__(
|
|
408
|
+
client=client,
|
|
409
|
+
controls=controls if controls is not None else LLMCompilerControls(),
|
|
410
|
+
prompt_hash=prompt_hash,
|
|
411
|
+
full_system=True,
|
|
412
|
+
release_id="plan.llm_compiler.full",
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
def run(self, state: FrozenAgentState, context: InterventionContext) -> CompositeResult:
|
|
416
|
+
patch = self._execute_patch(state, context)
|
|
417
|
+
return CompositeResult(
|
|
418
|
+
method_id=self.method_id,
|
|
419
|
+
release_id=self.release_id,
|
|
420
|
+
source_state_hash=state.state_hash,
|
|
421
|
+
final_answer=str(patch.metadata["final_answer"]),
|
|
422
|
+
evidence=(),
|
|
423
|
+
trace=patch.trace,
|
|
424
|
+
implementation_identity=patch.implementation_identity,
|
|
425
|
+
profile_kind=patch.profile_kind,
|
|
426
|
+
metadata={
|
|
427
|
+
**dict(patch.metadata),
|
|
428
|
+
"internal_validation_patch_hash": patch.patch_hash,
|
|
429
|
+
},
|
|
430
|
+
)
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
def _validate_dag(
|
|
434
|
+
tasks: tuple[CompilerTask, ...],
|
|
435
|
+
*,
|
|
436
|
+
max_tasks: int,
|
|
437
|
+
allowed_tools: set[str],
|
|
438
|
+
) -> None:
|
|
439
|
+
if not tasks:
|
|
440
|
+
raise AlgorithmOutputError("LLMCompiler worker returned an empty task DAG")
|
|
441
|
+
if len(tasks) > max_tasks:
|
|
442
|
+
raise AlgorithmOutputError("LLMCompiler worker exceeded max_tasks")
|
|
443
|
+
ids = tuple(task.task_id for task in tasks)
|
|
444
|
+
if len(ids) != len(set(ids)):
|
|
445
|
+
raise AlgorithmOutputError("LLMCompiler task IDs must be unique")
|
|
446
|
+
if ids != tuple(sorted(ids)):
|
|
447
|
+
raise AlgorithmOutputError("LLMCompiler task IDs must be monotonically increasing")
|
|
448
|
+
known = set(ids)
|
|
449
|
+
for task in tasks:
|
|
450
|
+
if task.tool_name not in allowed_tools:
|
|
451
|
+
raise AlgorithmOutputError(f"LLMCompiler planned unknown tool {task.tool_name!r}")
|
|
452
|
+
if not set(task.dependencies) <= known:
|
|
453
|
+
raise AlgorithmOutputError("LLMCompiler task references an unknown dependency")
|
|
454
|
+
if task.task_id in task.dependencies:
|
|
455
|
+
raise AlgorithmOutputError("LLMCompiler task cannot depend on itself")
|
|
456
|
+
graph = {task.task_id: set(task.dependencies) for task in tasks}
|
|
457
|
+
visiting: set[int] = set()
|
|
458
|
+
visited: set[int] = set()
|
|
459
|
+
|
|
460
|
+
def visit(node: int) -> None:
|
|
461
|
+
if node in visiting:
|
|
462
|
+
raise AlgorithmOutputError("LLMCompiler task graph contains a cycle")
|
|
463
|
+
if node in visited:
|
|
464
|
+
return
|
|
465
|
+
visiting.add(node)
|
|
466
|
+
for dependency in graph[node]:
|
|
467
|
+
visit(dependency)
|
|
468
|
+
visiting.remove(node)
|
|
469
|
+
visited.add(node)
|
|
470
|
+
|
|
471
|
+
for task_id in ids:
|
|
472
|
+
visit(task_id)
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
def _validate_scheduler(
|
|
476
|
+
events: tuple[SchedulerEvent, ...],
|
|
477
|
+
tasks: tuple[CompilerTask, ...],
|
|
478
|
+
*,
|
|
479
|
+
full_system: bool,
|
|
480
|
+
) -> None:
|
|
481
|
+
if not full_system:
|
|
482
|
+
return
|
|
483
|
+
if not events:
|
|
484
|
+
raise AlgorithmOutputError("LLMCompiler full worker requires scheduler events")
|
|
485
|
+
if tuple(event.index for event in events) != tuple(range(len(events))):
|
|
486
|
+
raise AlgorithmOutputError("LLMCompiler scheduler indices must be contiguous")
|
|
487
|
+
by_id = {task.task_id: task for task in tasks}
|
|
488
|
+
state_index = {state: index for index, state in enumerate(_TASK_STATES)}
|
|
489
|
+
current: dict[int, str] = {}
|
|
490
|
+
completed: set[int] = set()
|
|
491
|
+
for event in events:
|
|
492
|
+
if event.task_id not in by_id:
|
|
493
|
+
raise AlgorithmOutputError("LLMCompiler scheduler references an unknown task")
|
|
494
|
+
previous = current.get(event.task_id)
|
|
495
|
+
if previous is not None and state_index[event.state] < state_index[previous]:
|
|
496
|
+
raise AlgorithmOutputError("LLMCompiler scheduler state moved backwards")
|
|
497
|
+
if event.state == "running" and not set(by_id[event.task_id].dependencies) <= completed:
|
|
498
|
+
raise AlgorithmOutputError("LLMCompiler task started before all dependencies completed")
|
|
499
|
+
current[event.task_id] = event.state
|
|
500
|
+
if event.state == "completed":
|
|
501
|
+
completed.add(event.task_id)
|
|
502
|
+
missing = set(by_id) - set(current)
|
|
503
|
+
if missing:
|
|
504
|
+
raise AlgorithmOutputError(
|
|
505
|
+
"LLMCompiler full worker omitted scheduler histories for planned tasks"
|
|
506
|
+
)
|
|
507
|
+
if completed != set(by_id):
|
|
508
|
+
raise AlgorithmOutputError(
|
|
509
|
+
"LLMCompiler full worker finished before every planned task completed"
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
__all__ = [
|
|
514
|
+
"LLMCOMPILER_UPSTREAM_COMMIT",
|
|
515
|
+
"CompilerTask",
|
|
516
|
+
"LLMCompilerControls",
|
|
517
|
+
"LLMCompilerFullBridge",
|
|
518
|
+
"LLMCompilerPlannerBridge",
|
|
519
|
+
"SchedulerEvent",
|
|
520
|
+
]
|