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
workers/acon/fitted.py
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
"""Content-addressed, model-bound deployment of fitted native ACON guidelines.
|
|
2
|
+
|
|
3
|
+
Generated templates are accepted as literal text plus source-declared variable
|
|
4
|
+
placeholders, never as general Jinja programs. The original HistoryOptimizer
|
|
5
|
+
still builds the prompt, calls the explicit metered backend and parses output.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import hashlib
|
|
11
|
+
import importlib
|
|
12
|
+
import json
|
|
13
|
+
from collections.abc import Mapping
|
|
14
|
+
from dataclasses import dataclass
|
|
15
|
+
from pathlib import Path, PurePosixPath
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from agentinputlab.backends import LLMBackend
|
|
19
|
+
from agentinputlab.contracts import ExternalDependencyError, ValidationError
|
|
20
|
+
from agentinputlab.contracts.serialization import content_hash, freeze_mapping, to_jsonable
|
|
21
|
+
|
|
22
|
+
from .driver import _construct_optimizer, _load_manifest, _upstream_import_scope
|
|
23
|
+
from .guideline import (
|
|
24
|
+
_LOCK,
|
|
25
|
+
ACONGuidelineControls,
|
|
26
|
+
_MeteredLLM,
|
|
27
|
+
_save,
|
|
28
|
+
validate_guideline_checkout,
|
|
29
|
+
validate_training_bundle,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
_PROTOCOL = "agentinputlab.acon.fitted-history.literal-placeholders.v1"
|
|
33
|
+
_VARIABLES = frozenset({"task", "history", "prev_summary"})
|
|
34
|
+
_SIGNALS = frozenset(
|
|
35
|
+
{
|
|
36
|
+
"remediation_recommendations",
|
|
37
|
+
"inefficiency_patterns",
|
|
38
|
+
"inefficiency_evidence",
|
|
39
|
+
"missing_or_distorted_facts",
|
|
40
|
+
"summary_inaccuracies",
|
|
41
|
+
"summary_or_session_contributors",
|
|
42
|
+
"lost_state_variables",
|
|
43
|
+
"lost_or_recreated_state",
|
|
44
|
+
"root_cause_categories",
|
|
45
|
+
"primary_inflation_causes",
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def validate_training_signals(rows):
|
|
51
|
+
"""Do not promote an updater's raw-output fallback as completed training."""
|
|
52
|
+
if (
|
|
53
|
+
not isinstance(rows, list)
|
|
54
|
+
or not rows
|
|
55
|
+
or any(
|
|
56
|
+
not isinstance(row, dict)
|
|
57
|
+
or "raw_output" in row
|
|
58
|
+
or not any(isinstance(row.get(key), list) and row[key] for key in _SIGNALS)
|
|
59
|
+
for row in rows
|
|
60
|
+
)
|
|
61
|
+
):
|
|
62
|
+
raise ValidationError(
|
|
63
|
+
"native ACON analysis lacks complete parsed training signals; candidate remains diagnostic"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def validate_fitted_template(text: str, expected_variables=_VARIABLES) -> tuple[str, ...]:
|
|
68
|
+
"""Parse without evaluation. Reject executable/indirect Jinja constructs."""
|
|
69
|
+
if not isinstance(text, str) or not text.strip() or len(text.encode()) > 65536:
|
|
70
|
+
raise ValidationError("fitted ACON template must be non-empty bounded UTF-8 text")
|
|
71
|
+
try:
|
|
72
|
+
from jinja2 import Environment, meta, nodes
|
|
73
|
+
except ModuleNotFoundError as exc:
|
|
74
|
+
raise ExternalDependencyError(
|
|
75
|
+
"install agentinputlab[acon-fit] for fitted templates"
|
|
76
|
+
) from exc
|
|
77
|
+
try:
|
|
78
|
+
tree = Environment().parse(text)
|
|
79
|
+
except Exception as exc:
|
|
80
|
+
raise ValidationError("fitted ACON template syntax is invalid") from exc
|
|
81
|
+
allowed = {nodes.Output, nodes.TemplateData, nodes.Name}
|
|
82
|
+
if any(type(node) not in allowed for node in tree.find_all(nodes.Node)):
|
|
83
|
+
raise ValidationError(
|
|
84
|
+
"fitted ACON templates allow literal text and variable placeholders only"
|
|
85
|
+
)
|
|
86
|
+
if any(node.name not in _VARIABLES or node.ctx != "load" for node in tree.find_all(nodes.Name)):
|
|
87
|
+
raise ValidationError("fitted ACON may reference only explicit source variable names")
|
|
88
|
+
variables = meta.find_undeclared_variables(tree)
|
|
89
|
+
if variables != set(expected_variables) or not variables <= _VARIABLES:
|
|
90
|
+
raise ValidationError("fitted ACON placeholders differ from the pinned source template")
|
|
91
|
+
return tuple(sorted(variables))
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _pinned_file(root: Path, relative: str, expected: str, limit=2 * 1024**2) -> bytes:
|
|
95
|
+
p = PurePosixPath(relative)
|
|
96
|
+
path = root / p
|
|
97
|
+
if (
|
|
98
|
+
p.is_absolute()
|
|
99
|
+
or ".." in p.parts
|
|
100
|
+
or root.is_symlink()
|
|
101
|
+
or path.is_symlink()
|
|
102
|
+
or not path.is_file()
|
|
103
|
+
):
|
|
104
|
+
raise ValidationError("invalid fitted ACON provenance file")
|
|
105
|
+
if not path.resolve().is_relative_to(root.resolve()) or path.stat().st_size > limit:
|
|
106
|
+
raise ValidationError("fitted ACON provenance path or size differs")
|
|
107
|
+
raw = path.read_bytes()
|
|
108
|
+
if hashlib.sha256(raw).hexdigest() != expected:
|
|
109
|
+
raise ValidationError("fitted ACON provenance checksum differs")
|
|
110
|
+
return raw
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@dataclass(frozen=True, slots=True)
|
|
114
|
+
class ACONGuidelineArtifact:
|
|
115
|
+
artifact_id: str
|
|
116
|
+
template: str
|
|
117
|
+
template_sha256: str
|
|
118
|
+
base_profile: str
|
|
119
|
+
source_hashes: Mapping[str, str]
|
|
120
|
+
backend_fingerprint: Mapping[str, Any]
|
|
121
|
+
training_manifest_sha256: str
|
|
122
|
+
train_ids: tuple[str, ...]
|
|
123
|
+
excluded_evaluation_ids: tuple[str, ...]
|
|
124
|
+
fit_artifact_identity: str
|
|
125
|
+
provenance: Mapping[str, str]
|
|
126
|
+
protocol: str = _PROTOCOL
|
|
127
|
+
|
|
128
|
+
def __post_init__(self):
|
|
129
|
+
if (
|
|
130
|
+
self.protocol != _PROTOCOL
|
|
131
|
+
or hashlib.sha256(self.template.encode()).hexdigest() != self.template_sha256
|
|
132
|
+
):
|
|
133
|
+
raise ValidationError("fitted ACON protocol or template identity differs")
|
|
134
|
+
validate_fitted_template(self.template)
|
|
135
|
+
for name in ("source_hashes", "backend_fingerprint", "provenance"):
|
|
136
|
+
object.__setattr__(self, name, freeze_mapping(getattr(self, name)))
|
|
137
|
+
required = {"fit_start_sha256", "fit_terminal_sha256", "analysis_sha256", "candidate_path"}
|
|
138
|
+
if set(self.provenance) != required:
|
|
139
|
+
raise ValidationError(
|
|
140
|
+
"fitted ACON artifact must retain its complete fit/analysis provenance"
|
|
141
|
+
)
|
|
142
|
+
for name in ("train_ids", "excluded_evaluation_ids"):
|
|
143
|
+
values = tuple(getattr(self, name))
|
|
144
|
+
if any(not isinstance(x, str) or not x for x in values) or len(set(values)) != len(
|
|
145
|
+
values
|
|
146
|
+
):
|
|
147
|
+
raise ValidationError("fitted ACON split IDs must be unique non-empty strings")
|
|
148
|
+
object.__setattr__(self, name, values)
|
|
149
|
+
if not self.train_ids or set(self.train_ids) & set(self.excluded_evaluation_ids):
|
|
150
|
+
raise ValidationError("fitted ACON train/evaluation IDs overlap or train is empty")
|
|
151
|
+
if self.artifact_id != content_hash(self.identity_payload()):
|
|
152
|
+
raise ValidationError("fitted ACON artifact payload differs from its identity")
|
|
153
|
+
|
|
154
|
+
def identity_payload(self):
|
|
155
|
+
return {k: getattr(self, k) for k in self.__dataclass_fields__ if k != "artifact_id"}
|
|
156
|
+
|
|
157
|
+
def as_dict(self):
|
|
158
|
+
return to_jsonable({"artifact_id": self.artifact_id, **self.identity_payload()})
|
|
159
|
+
|
|
160
|
+
def save(self, path: str | Path):
|
|
161
|
+
_save(Path(path), self.as_dict())
|
|
162
|
+
|
|
163
|
+
@classmethod
|
|
164
|
+
def load(cls, path: str | Path, *, sha256: str):
|
|
165
|
+
path = Path(path)
|
|
166
|
+
raw = _pinned_file(path.parent, path.name, sha256)
|
|
167
|
+
return cls(**json.loads(raw))
|
|
168
|
+
|
|
169
|
+
@classmethod
|
|
170
|
+
def from_fit(
|
|
171
|
+
cls,
|
|
172
|
+
*,
|
|
173
|
+
checkout,
|
|
174
|
+
fit_root,
|
|
175
|
+
training_root,
|
|
176
|
+
backend: LLMBackend,
|
|
177
|
+
fit_start_sha256: str,
|
|
178
|
+
fit_terminal_sha256: str,
|
|
179
|
+
analysis_sha256: str,
|
|
180
|
+
candidate_path: str,
|
|
181
|
+
):
|
|
182
|
+
"""Freeze one explicitly selected candidate, never select by heldout scores."""
|
|
183
|
+
root = Path(fit_root)
|
|
184
|
+
start = json.loads(_pinned_file(root, "fit-start.json", fit_start_sha256))
|
|
185
|
+
terminal = json.loads(_pinned_file(root, "fit-terminal.json", fit_terminal_sha256))
|
|
186
|
+
analysis = json.loads(
|
|
187
|
+
_pinned_file(root, "aggregated_history_regressions.json", analysis_sha256)
|
|
188
|
+
)
|
|
189
|
+
validate_training_signals(analysis)
|
|
190
|
+
source, hashes = validate_guideline_checkout(checkout)
|
|
191
|
+
if start["source_hashes"] != hashes or terminal["source_hashes"] != hashes:
|
|
192
|
+
raise ValidationError("fitted ACON upstream source identity differs")
|
|
193
|
+
if content_hash(start["backend"]) != content_hash(backend.fingerprint()):
|
|
194
|
+
raise ValidationError("fitted ACON artifact cannot change its model/backend binding")
|
|
195
|
+
if (
|
|
196
|
+
terminal["status"] != "candidates_generated"
|
|
197
|
+
or candidate_path not in terminal["candidates"]
|
|
198
|
+
):
|
|
199
|
+
raise ValidationError("fitted ACON candidate was not produced by the pinned fit")
|
|
200
|
+
if start["training_manifest_sha256"] != terminal["training_manifest_sha256"]:
|
|
201
|
+
raise ValidationError("fitted ACON training provenance differs")
|
|
202
|
+
inputs = validate_training_bundle(training_root, start["training_manifest_sha256"])
|
|
203
|
+
core, _ = _load_manifest(Path(__file__).with_name("compatibility_manifest.json"))
|
|
204
|
+
profile = core["prompt_profiles"].get(start["base_profile"])
|
|
205
|
+
if not profile or profile["mode"] != "history":
|
|
206
|
+
raise ValidationError("fitted ACON base prompt is not a pinned history profile")
|
|
207
|
+
from jinja2 import Environment, meta
|
|
208
|
+
|
|
209
|
+
base = source / profile["prompt_dir"] / (profile["user_template"] + ".jinja")
|
|
210
|
+
expected_vars = meta.find_undeclared_variables(Environment().parse(base.read_text()))
|
|
211
|
+
candidates = terminal["candidates"]
|
|
212
|
+
if len({PurePosixPath(p).name for p in candidates}) != len(candidates):
|
|
213
|
+
raise ValidationError("fitted ACON candidate names collide")
|
|
214
|
+
identity = content_hash(
|
|
215
|
+
{
|
|
216
|
+
"candidates": {PurePosixPath(k).name: v for k, v in candidates.items()},
|
|
217
|
+
"source": hashes,
|
|
218
|
+
"training": start["training_manifest_sha256"],
|
|
219
|
+
"backend": start["backend"],
|
|
220
|
+
"controls": start["controls"],
|
|
221
|
+
"base_profile": start["base_profile"],
|
|
222
|
+
}
|
|
223
|
+
)
|
|
224
|
+
if identity != terminal["artifact_identity"]:
|
|
225
|
+
raise ValidationError("native ACON fit artifact identity differs")
|
|
226
|
+
raw = _pinned_file(root, candidate_path, candidates[candidate_path], limit=65536)
|
|
227
|
+
text = raw.decode("utf-8")
|
|
228
|
+
validate_fitted_template(text, expected_vars)
|
|
229
|
+
values = dict(
|
|
230
|
+
template=text,
|
|
231
|
+
template_sha256=candidates[candidate_path],
|
|
232
|
+
base_profile=start["base_profile"],
|
|
233
|
+
source_hashes=hashes,
|
|
234
|
+
backend_fingerprint=start["backend"],
|
|
235
|
+
training_manifest_sha256=start["training_manifest_sha256"],
|
|
236
|
+
train_ids=tuple(inputs["train_ids"]),
|
|
237
|
+
excluded_evaluation_ids=tuple(inputs["excluded_evaluation_ids"]),
|
|
238
|
+
fit_artifact_identity=identity,
|
|
239
|
+
provenance={
|
|
240
|
+
"fit_start_sha256": fit_start_sha256,
|
|
241
|
+
"fit_terminal_sha256": fit_terminal_sha256,
|
|
242
|
+
"analysis_sha256": analysis_sha256,
|
|
243
|
+
"candidate_path": candidate_path,
|
|
244
|
+
},
|
|
245
|
+
protocol=_PROTOCOL,
|
|
246
|
+
)
|
|
247
|
+
return cls(artifact_id=content_hash(values), **values)
|
|
248
|
+
|
|
249
|
+
def compress_history(
|
|
250
|
+
self,
|
|
251
|
+
*,
|
|
252
|
+
checkout,
|
|
253
|
+
backend: LLMBackend,
|
|
254
|
+
task: str,
|
|
255
|
+
history: str,
|
|
256
|
+
output_root,
|
|
257
|
+
previous_summary: str | None = None,
|
|
258
|
+
evaluation_id: str | None = None,
|
|
259
|
+
controls: ACONGuidelineControls | None = None,
|
|
260
|
+
):
|
|
261
|
+
"""Run pinned native compression with one frozen artifact and metered usage.
|
|
262
|
+
|
|
263
|
+
Use a dedicated child process for the upstream's process-global imports.
|
|
264
|
+
A supplied evaluation ID must have been explicitly excluded before fit.
|
|
265
|
+
This is caller-bound ID separation, not independent dataset/group attestation.
|
|
266
|
+
Omit the ID for general inference; no heldout-evaluation claim is then made.
|
|
267
|
+
"""
|
|
268
|
+
if content_hash(backend.fingerprint()) != content_hash(self.backend_fingerprint):
|
|
269
|
+
raise ValidationError("fitted ACON backend/model differs before inference")
|
|
270
|
+
if evaluation_id is not None and evaluation_id not in self.excluded_evaluation_ids:
|
|
271
|
+
raise ValidationError("fitted ACON evaluation ID was not excluded before training")
|
|
272
|
+
if (
|
|
273
|
+
not isinstance(task, str)
|
|
274
|
+
or not task.strip()
|
|
275
|
+
or not isinstance(history, str)
|
|
276
|
+
or not history.strip()
|
|
277
|
+
):
|
|
278
|
+
raise ValidationError("fitted ACON requires non-empty task and real history text")
|
|
279
|
+
if previous_summary is not None and not isinstance(previous_summary, str):
|
|
280
|
+
raise ValidationError("fitted ACON previous summary must be text")
|
|
281
|
+
if len((task + history + (previous_summary or "")).encode()) > 4 * 1024**2:
|
|
282
|
+
raise ValidationError("fitted ACON input exceeds limit")
|
|
283
|
+
source, hashes = validate_guideline_checkout(checkout)
|
|
284
|
+
if dict(self.source_hashes) != hashes:
|
|
285
|
+
raise ValidationError("fitted ACON source differs before inference")
|
|
286
|
+
core, _ = _load_manifest(Path(__file__).with_name("compatibility_manifest.json"))
|
|
287
|
+
profile = core["prompt_profiles"].get(self.base_profile)
|
|
288
|
+
if not profile or profile["mode"] != "history":
|
|
289
|
+
raise ValidationError("fitted ACON prompt profile differs")
|
|
290
|
+
validate_fitted_template(self.template)
|
|
291
|
+
controls = controls or ACONGuidelineControls(
|
|
292
|
+
max_model_calls=1, max_output_tokens=512, timeout_seconds=180
|
|
293
|
+
)
|
|
294
|
+
root = Path(output_root)
|
|
295
|
+
if root.is_symlink():
|
|
296
|
+
raise ValidationError("fitted ACON output root must not be a symlink")
|
|
297
|
+
root.mkdir(parents=True, exist_ok=False)
|
|
298
|
+
_save(
|
|
299
|
+
root / "runtime-start.json",
|
|
300
|
+
{
|
|
301
|
+
"artifact_id": self.artifact_id,
|
|
302
|
+
"controls": controls,
|
|
303
|
+
"evaluation_id": evaluation_id,
|
|
304
|
+
"input_hash": content_hash(
|
|
305
|
+
{"task": task, "history": history, "previous_summary": previous_summary}
|
|
306
|
+
),
|
|
307
|
+
"automatic_retry": False,
|
|
308
|
+
},
|
|
309
|
+
)
|
|
310
|
+
meter = None
|
|
311
|
+
try:
|
|
312
|
+
prompts = root / "prompts"
|
|
313
|
+
prompts.mkdir()
|
|
314
|
+
system = (
|
|
315
|
+
source / profile["prompt_dir"] / (profile["system_template"] + ".jinja")
|
|
316
|
+
).read_text()
|
|
317
|
+
for name, text in (
|
|
318
|
+
("source_system.jinja", system),
|
|
319
|
+
("fitted_history.jinja", self.template),
|
|
320
|
+
):
|
|
321
|
+
with (prompts / name).open("x", encoding="utf-8") as f:
|
|
322
|
+
f.write(text)
|
|
323
|
+
journal = root / "provider-attempts"
|
|
324
|
+
journal.mkdir()
|
|
325
|
+
meter = _NativeHistoryMeter(backend, controls, journal)
|
|
326
|
+
with _LOCK, _upstream_import_scope(source):
|
|
327
|
+
native = importlib.import_module(
|
|
328
|
+
"productive_agents.ctxopt.history_optimizer"
|
|
329
|
+
).HistoryOptimizer
|
|
330
|
+
optimizer = _construct_optimizer(
|
|
331
|
+
native,
|
|
332
|
+
{
|
|
333
|
+
"history_prompt_dir": str(prompts.resolve()),
|
|
334
|
+
"prompts": {
|
|
335
|
+
"prompt_system": "source_system",
|
|
336
|
+
"prompt_history_user": "fitted_history",
|
|
337
|
+
},
|
|
338
|
+
"history_summarization_threshold": -1,
|
|
339
|
+
"model": backend.model_id,
|
|
340
|
+
"temperature": 0.0,
|
|
341
|
+
"use_llmlingua": False,
|
|
342
|
+
},
|
|
343
|
+
meter,
|
|
344
|
+
"HistoryOptimizer",
|
|
345
|
+
)
|
|
346
|
+
if optimizer.tokenizer is None:
|
|
347
|
+
raise ValidationError("exact native tokenizer unavailable")
|
|
348
|
+
summary = optimizer.process(
|
|
349
|
+
task=task,
|
|
350
|
+
history=history,
|
|
351
|
+
prev_history_summary=previous_summary,
|
|
352
|
+
raw_history=[],
|
|
353
|
+
opt_args=None,
|
|
354
|
+
)
|
|
355
|
+
if not isinstance(summary, str) or not summary.strip():
|
|
356
|
+
raise ValidationError("fitted native ACON returned an empty summary")
|
|
357
|
+
result = {
|
|
358
|
+
"status": "native_summary_terminal",
|
|
359
|
+
"summary": summary,
|
|
360
|
+
"artifact_id": self.artifact_id,
|
|
361
|
+
"model_calls": meter.attempts,
|
|
362
|
+
"input_tokens": meter.input_tokens,
|
|
363
|
+
"output_tokens": meter.output_tokens,
|
|
364
|
+
"native_class": native.__module__ + "." + native.__name__,
|
|
365
|
+
"native_interactions": optimizer.history,
|
|
366
|
+
"native_system_sha256": hashlib.sha256(
|
|
367
|
+
meter.system_message.encode()
|
|
368
|
+
).hexdigest(),
|
|
369
|
+
"evaluation_id_verified_against_prefit_exclusions": evaluation_id is not None,
|
|
370
|
+
"automatic_retry": False,
|
|
371
|
+
"profile_kind": "controlled_adapter",
|
|
372
|
+
}
|
|
373
|
+
_save(root / "runtime-terminal.json", result)
|
|
374
|
+
return result
|
|
375
|
+
except Exception as exc:
|
|
376
|
+
_save(
|
|
377
|
+
root / "runtime-terminal.json",
|
|
378
|
+
{
|
|
379
|
+
"status": "failed_runtime" if meter else "entry_failure",
|
|
380
|
+
"error_type": type(exc).__name__,
|
|
381
|
+
"model_calls": meter.attempts if meter else 0,
|
|
382
|
+
"known_input_tokens": meter.input_tokens if meter else 0,
|
|
383
|
+
"known_output_tokens": meter.output_tokens if meter else 0,
|
|
384
|
+
"usage_unknown": meter.usage_unknown if meter else False,
|
|
385
|
+
"automatic_retry": False,
|
|
386
|
+
},
|
|
387
|
+
)
|
|
388
|
+
raise
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
class _NativeHistoryMeter(_MeteredLLM):
|
|
392
|
+
def generate(self, prompt, temperature=0.0):
|
|
393
|
+
if temperature != 0.0:
|
|
394
|
+
raise ValidationError("fitted native ACON temperature must remain zero")
|
|
395
|
+
return super().generate(prompt)
|