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/decomp/live.py
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Isolated pinned-native DecomP driver with an explicit host callback seam."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import argparse
|
|
5
|
+
import hashlib
|
|
6
|
+
import importlib
|
|
7
|
+
import importlib.metadata
|
|
8
|
+
import json
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
import traceback
|
|
12
|
+
import urllib.parse
|
|
13
|
+
import urllib.request
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from uuid import uuid4
|
|
16
|
+
|
|
17
|
+
from agentinputlab.contracts.serialization import content_hash
|
|
18
|
+
|
|
19
|
+
from . import driver
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def failure_response(exc, checkout):
|
|
23
|
+
"""Expose source locations/types, never raw exception text or provider bodies."""
|
|
24
|
+
result = {"status":"error","failure_code":exc.code,"message":exc.public_message}
|
|
25
|
+
cause = exc.__cause__
|
|
26
|
+
if cause is not None:
|
|
27
|
+
result["upstream_error_type"] = type(cause).__name__
|
|
28
|
+
frames = []
|
|
29
|
+
for frame in traceback.extract_tb(cause.__traceback__)[-16:]:
|
|
30
|
+
try:
|
|
31
|
+
relative = Path(frame.filename).resolve().relative_to(Path(checkout).resolve())
|
|
32
|
+
except ValueError:
|
|
33
|
+
continue
|
|
34
|
+
if relative.as_posix().startswith("src/decomp/"):
|
|
35
|
+
frames.append({"file":relative.as_posix(),"line":frame.lineno,"function":frame.name})
|
|
36
|
+
result["upstream_source_frames"] = frames
|
|
37
|
+
return result
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class Callback:
|
|
41
|
+
def __init__(self, url, key_env, request_id, checkout, policy):
|
|
42
|
+
parsed = urllib.parse.urlparse(url)
|
|
43
|
+
if (parsed.scheme != "http" or parsed.hostname != "127.0.0.1" or parsed.port is None
|
|
44
|
+
or parsed.path != "/callback" or parsed.username or parsed.password or parsed.query or parsed.fragment):
|
|
45
|
+
raise driver.DriverError("CONFIGURATION_INVALID", "callback must use numeric loopback")
|
|
46
|
+
if not key_env.isidentifier() or not os.environ.get(key_env):
|
|
47
|
+
raise driver.DriverError("CONFIGURATION_INVALID", "callback credential unavailable")
|
|
48
|
+
self.url, self.key = url, os.environ[key_env]
|
|
49
|
+
self.request_id, self.checkout, self.policy, self.attested = request_id, checkout, policy, False
|
|
50
|
+
|
|
51
|
+
def attest(self):
|
|
52
|
+
for name, module in tuple(sys.modules.items()):
|
|
53
|
+
if name.startswith("decomp."):
|
|
54
|
+
location = getattr(module, "__file__", None)
|
|
55
|
+
if location and not Path(location).resolve().is_relative_to(self.checkout.root / "src"):
|
|
56
|
+
raise driver.DriverError("IMPORT_STATE_UNSAFE", "native module escaped checkout")
|
|
57
|
+
versions = {}
|
|
58
|
+
for name, expected in self.policy["live_required_versions"].items():
|
|
59
|
+
distribution = importlib.metadata.distribution(name)
|
|
60
|
+
if distribution.version != expected:
|
|
61
|
+
raise driver.DriverError("DEPENDENCY_MISMATCH", "native worker dependency version differs")
|
|
62
|
+
import_name = {"jsonnet": "_jsonnet", "python-dateutil": "dateutil"}.get(name, name.replace("-", "_"))
|
|
63
|
+
dependency = importlib.import_module(import_name)
|
|
64
|
+
origin = getattr(dependency, "__file__", None)
|
|
65
|
+
if not origin or not any(Path(distribution.locate_file(file)).resolve() == Path(origin).resolve()
|
|
66
|
+
for file in (distribution.files or ())):
|
|
67
|
+
raise driver.DriverError("DEPENDENCY_ORIGIN_MISMATCH", "native dependency import escaped distribution")
|
|
68
|
+
versions[name] = distribution.version
|
|
69
|
+
def sha(path):
|
|
70
|
+
return hashlib.sha256(path.read_bytes()).hexdigest()
|
|
71
|
+
value = {"schema": "agentinputlab.decomp.live-attestation.v1", "driver_sha256": sha(Path(driver.__file__)),
|
|
72
|
+
"live_sha256": sha(Path(__file__)), "compatibility_manifest_sha256": self.checkout.manifest_sha256,
|
|
73
|
+
"required_versions": versions,
|
|
74
|
+
"english_stopwords_sha256": sha(Path(os.environ["NLTK_DATA"])/"corpora/stopwords/english"),
|
|
75
|
+
"source_files_verified": True, "import_origins_verified": True}
|
|
76
|
+
self.call("attest", value)
|
|
77
|
+
self.attested = True
|
|
78
|
+
|
|
79
|
+
def call(self, kind, payload):
|
|
80
|
+
raw = {"request_id": self.request_id, "call_id": uuid4().hex, "kind": kind, "payload": payload}
|
|
81
|
+
request = urllib.request.Request(self.url, data=json.dumps(raw, allow_nan=False).encode(),
|
|
82
|
+
headers={"Authorization": "Bearer " + self.key, "Content-Type": "application/json"})
|
|
83
|
+
result, failed = None, False
|
|
84
|
+
try:
|
|
85
|
+
with urllib.request.build_opener(urllib.request.ProxyHandler({})).open(request, timeout=240) as response:
|
|
86
|
+
body = response.read(4 * 1024 * 1024 + 1)
|
|
87
|
+
if len(body) > 4 * 1024 * 1024:
|
|
88
|
+
raise ValueError("callback response byte limit")
|
|
89
|
+
result = json.loads(body)
|
|
90
|
+
if result.get("ok") is not True:
|
|
91
|
+
raise ValueError("host callback rejected")
|
|
92
|
+
except Exception:
|
|
93
|
+
failed = True
|
|
94
|
+
if failed:
|
|
95
|
+
raise driver.DriverError("HOST_CALLBACK_FAILED", "bound native completion failed; no retry")
|
|
96
|
+
return result["payload"]
|
|
97
|
+
|
|
98
|
+
def complete(self, **parameters):
|
|
99
|
+
if not self.attested:
|
|
100
|
+
self.attest()
|
|
101
|
+
return self.call("model", parameters)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def main(argv=None):
|
|
105
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
106
|
+
for key in ("checkout", "callback-url", "callback-key-env"):
|
|
107
|
+
parser.add_argument("--" + key, required=True)
|
|
108
|
+
parser.add_argument("--planner-component", action="store_true")
|
|
109
|
+
args = parser.parse_args(argv)
|
|
110
|
+
try:
|
|
111
|
+
raw = sys.stdin.buffer.readline(driver.MAX_REQUEST_BYTES + 1)
|
|
112
|
+
if len(raw) > driver.MAX_REQUEST_BYTES or not raw or sys.stdin.buffer.read(1):
|
|
113
|
+
raise driver.DriverError("INVALID_REQUEST", "one bounded JSON line required")
|
|
114
|
+
envelope = json.loads(raw)
|
|
115
|
+
if set(envelope) != {"request_id", "request"} or content_hash(envelope["request"]) != envelope["request_id"]:
|
|
116
|
+
raise driver.DriverError("INVALID_REQUEST", "native request identity differs")
|
|
117
|
+
request = dict(envelope["request"])
|
|
118
|
+
request.pop("execution_budget")
|
|
119
|
+
request.pop("seed")
|
|
120
|
+
native = driver.DecompDriver(environment={driver.UPSTREAM_ENV: args.checkout})
|
|
121
|
+
checkout = native._checkout()
|
|
122
|
+
callback = Callback(args.callback_url, args.callback_key_env, envelope["request_id"], checkout, checkout.manifest)
|
|
123
|
+
native.native_completion = callback.complete
|
|
124
|
+
result = native.run_planner(request) if args.planner_component else native.run(request)
|
|
125
|
+
if not callback.attested:
|
|
126
|
+
raise driver.DriverError("NATIVE_MODEL_NOT_CALLED", "no native model call was made")
|
|
127
|
+
response = {"status": "ok", "payload": result}
|
|
128
|
+
except driver.DriverError as exc:
|
|
129
|
+
response = failure_response(exc, args.checkout)
|
|
130
|
+
except Exception as exc:
|
|
131
|
+
response = {"status": "error", "failure_code": "WORKER_INTERNAL_FAILURE", "error_type": type(exc).__name__}
|
|
132
|
+
sys.stdout.write(json.dumps(response, sort_keys=True, allow_nan=False) + "\n")
|
|
133
|
+
return 0
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
if __name__ == "__main__":
|
|
137
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"""Core bridge adapter for the pinned DecomP worker driver."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import threading
|
|
7
|
+
from collections.abc import Mapping, Sequence
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from agentinputlab.algorithms.decompose.decomp.worker_bridge import (
|
|
12
|
+
DecompFrontierEvent,
|
|
13
|
+
DecompGraphNode,
|
|
14
|
+
DecompParticipantCall,
|
|
15
|
+
DecompWorkerRequest,
|
|
16
|
+
DecompWorkerResponse,
|
|
17
|
+
validate_decomp_full_response,
|
|
18
|
+
)
|
|
19
|
+
from agentinputlab.contracts import AlgorithmOutputError, ExternalDependencyError
|
|
20
|
+
from agentinputlab.contracts.serialization import to_jsonable
|
|
21
|
+
|
|
22
|
+
from .driver import DEFAULT_MANIFEST, UPSTREAM_COMMIT, DecompDriver, DriverError
|
|
23
|
+
|
|
24
|
+
_UPSTREAM_PROCESS_STATE_LOCK = threading.RLock()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class PinnedDecompRuntime:
|
|
28
|
+
"""Adapt :class:`DecompDriver` to ``DecompWorkerRuntime`` without a fallback."""
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
*,
|
|
33
|
+
manifest_path: Path = DEFAULT_MANIFEST,
|
|
34
|
+
environment: Mapping[str, str] | None = None,
|
|
35
|
+
) -> None:
|
|
36
|
+
self.driver = DecompDriver(
|
|
37
|
+
manifest_path=manifest_path,
|
|
38
|
+
environment=environment,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
def fingerprint(self) -> Mapping[str, Any]:
|
|
42
|
+
try:
|
|
43
|
+
with _UPSTREAM_PROCESS_STATE_LOCK:
|
|
44
|
+
upstream = self.driver.smoke_upstream_core()
|
|
45
|
+
driver_sha = _sha256_file(Path(__file__).with_name("driver.py"))
|
|
46
|
+
adapter_sha = _sha256_file(Path(__file__))
|
|
47
|
+
except DriverError as exc:
|
|
48
|
+
raise ExternalDependencyError(
|
|
49
|
+
f"pinned DecomP runtime identity failed with {exc.code}"
|
|
50
|
+
) from exc
|
|
51
|
+
return {
|
|
52
|
+
"worker_id": "agentinputlab.decomp.pinned.in_process.v1",
|
|
53
|
+
"execution_mode": "in_process_external_environment",
|
|
54
|
+
"concurrency_mode": "process_global_serial_rlock",
|
|
55
|
+
"upstream_revision": UPSTREAM_COMMIT,
|
|
56
|
+
"upstream_symbol": upstream["symbol"],
|
|
57
|
+
"compatibility_manifest_sha256": upstream["manifest_sha256"],
|
|
58
|
+
"driver_sha256": driver_sha,
|
|
59
|
+
"runtime_adapter_sha256": adapter_sha,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
def run(self, request: DecompWorkerRequest) -> DecompWorkerResponse:
|
|
63
|
+
if not isinstance(request, DecompWorkerRequest):
|
|
64
|
+
raise TypeError("PinnedDecompRuntime requires DecompWorkerRequest")
|
|
65
|
+
request_mapping = {
|
|
66
|
+
"case_id": request.case_id,
|
|
67
|
+
"question": request.question,
|
|
68
|
+
"paras": list(request.paras),
|
|
69
|
+
"paragraph_ids": list(request.paragraph_ids),
|
|
70
|
+
"context_hash": request.context_hash,
|
|
71
|
+
"config_artifact_id": request.config_artifact_id,
|
|
72
|
+
"backend_binding": to_jsonable(request.backend_binding),
|
|
73
|
+
"max_steps": request.max_steps,
|
|
74
|
+
"upstream_revision": request.upstream_revision,
|
|
75
|
+
"schema_version": request.schema_version,
|
|
76
|
+
}
|
|
77
|
+
try:
|
|
78
|
+
# Upstream mutates process-global CWD/sys.path while importing its
|
|
79
|
+
# pinned package, so all in-process identities share one serial lock.
|
|
80
|
+
with _UPSTREAM_PROCESS_STATE_LOCK:
|
|
81
|
+
raw = self.driver.run(request_mapping)
|
|
82
|
+
except DriverError as exc:
|
|
83
|
+
error_type = (
|
|
84
|
+
AlgorithmOutputError
|
|
85
|
+
if exc.code
|
|
86
|
+
in {
|
|
87
|
+
"UPSTREAM_OUTPUT_INVALID",
|
|
88
|
+
"USAGE_ACCOUNTING_UNAVAILABLE",
|
|
89
|
+
}
|
|
90
|
+
else ExternalDependencyError
|
|
91
|
+
)
|
|
92
|
+
raise error_type(f"pinned DecomP driver failed with {exc.code}") from exc
|
|
93
|
+
response = _parse_response(raw)
|
|
94
|
+
validate_decomp_full_response(response)
|
|
95
|
+
return response
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _parse_response(value: Mapping[str, Any]) -> DecompWorkerResponse:
|
|
99
|
+
if not isinstance(value, Mapping):
|
|
100
|
+
raise AlgorithmOutputError("DecomP driver response must be a mapping")
|
|
101
|
+
try:
|
|
102
|
+
nodes = tuple(
|
|
103
|
+
DecompGraphNode(
|
|
104
|
+
node_id=_text(item, "node_id", "node"),
|
|
105
|
+
question=_text(item, "question", "node", allow_empty=True),
|
|
106
|
+
answer=_text(item, "answer", "node", allow_empty=True),
|
|
107
|
+
handler=_text(item, "handler", "node", allow_empty=True),
|
|
108
|
+
depth=_nonnegative_integer(item.get("depth"), "node.depth"),
|
|
109
|
+
)
|
|
110
|
+
for item in _mapping_sequence(value.get("nodes"), "nodes")
|
|
111
|
+
)
|
|
112
|
+
edges = tuple(_edge(item) for item in _sequence(value.get("dependency_edges"), "edges"))
|
|
113
|
+
participant_calls = tuple(
|
|
114
|
+
DecompParticipantCall(
|
|
115
|
+
index=_nonnegative_integer(item.get("index"), "participant_call.index"),
|
|
116
|
+
participant=_text(item, "participant", "participant_call"),
|
|
117
|
+
input_state_id=_text(item, "input_state_id", "participant_call"),
|
|
118
|
+
output_state_id=_text(item, "output_state_id", "participant_call"),
|
|
119
|
+
command=_text(item, "command", "participant_call", allow_empty=True),
|
|
120
|
+
)
|
|
121
|
+
for item in _mapping_sequence(value.get("participant_calls"), "participant_calls")
|
|
122
|
+
)
|
|
123
|
+
frontier = tuple(
|
|
124
|
+
DecompFrontierEvent(
|
|
125
|
+
index=_nonnegative_integer(item.get("index"), "frontier.index"),
|
|
126
|
+
state_id=_text(item, "state_id", "frontier"),
|
|
127
|
+
score=_finite_number(item.get("score"), "frontier.score"),
|
|
128
|
+
next_command=_text(
|
|
129
|
+
item,
|
|
130
|
+
"next_command",
|
|
131
|
+
"frontier",
|
|
132
|
+
allow_empty=True,
|
|
133
|
+
),
|
|
134
|
+
action=_text(item, "action", "frontier"),
|
|
135
|
+
)
|
|
136
|
+
for item in _mapping_sequence(value.get("frontier"), "frontier")
|
|
137
|
+
)
|
|
138
|
+
usage = value.get("usage")
|
|
139
|
+
artifacts = value.get("native_artifacts", {})
|
|
140
|
+
if not isinstance(usage, Mapping) or not isinstance(artifacts, Mapping):
|
|
141
|
+
raise AlgorithmOutputError("DecomP response usage/artifacts must be mappings")
|
|
142
|
+
response = DecompWorkerResponse(
|
|
143
|
+
case_id=_text(value, "case_id", "response"),
|
|
144
|
+
profile_id=_text(value, "profile_id", "response"),
|
|
145
|
+
upstream_revision=_text(value, "upstream_revision", "response"),
|
|
146
|
+
paragraph_ids=tuple(
|
|
147
|
+
_text_value(item, "response.paragraph_ids")
|
|
148
|
+
for item in _sequence(value.get("paragraph_ids"), "paragraph_ids")
|
|
149
|
+
),
|
|
150
|
+
context_hash=_text(value, "context_hash", "response"),
|
|
151
|
+
nodes=nodes,
|
|
152
|
+
dependency_edges=edges,
|
|
153
|
+
participant_calls=participant_calls,
|
|
154
|
+
frontier=frontier,
|
|
155
|
+
reasoning_chain=_text(value, "reasoning_chain", "response"),
|
|
156
|
+
final_answer=_text(value, "final_answer", "response", allow_empty=True),
|
|
157
|
+
termination=_text(value, "termination", "response"),
|
|
158
|
+
component_only=value.get("component_only", False),
|
|
159
|
+
usage=dict(usage),
|
|
160
|
+
schema_version=_text(value, "schema_version", "response"),
|
|
161
|
+
native_artifacts={str(key): str(item) for key, item in artifacts.items()},
|
|
162
|
+
)
|
|
163
|
+
except (KeyError, TypeError, ValueError) as exc:
|
|
164
|
+
if isinstance(exc, AlgorithmOutputError):
|
|
165
|
+
raise
|
|
166
|
+
raise AlgorithmOutputError("DecomP driver response is malformed") from exc
|
|
167
|
+
return response
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def _mapping_sequence(value: Any, label: str) -> tuple[Mapping[str, Any], ...]:
|
|
171
|
+
result = _sequence(value, label)
|
|
172
|
+
if not all(isinstance(item, Mapping) for item in result):
|
|
173
|
+
raise AlgorithmOutputError(f"DecomP {label} must contain mappings")
|
|
174
|
+
return result # type: ignore[return-value]
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def _sequence(value: Any, label: str) -> tuple[Any, ...]:
|
|
178
|
+
if isinstance(value, (str, bytes)) or not isinstance(value, Sequence):
|
|
179
|
+
raise AlgorithmOutputError(f"DecomP {label} must be a sequence")
|
|
180
|
+
return tuple(value)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def _edge(value: Any) -> tuple[str, str]:
|
|
184
|
+
edge = _sequence(value, "edge")
|
|
185
|
+
if len(edge) != 2 or not all(isinstance(item, str) and item for item in edge):
|
|
186
|
+
raise AlgorithmOutputError("DecomP edge must contain two state IDs")
|
|
187
|
+
return edge[0], edge[1]
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def _text(
|
|
191
|
+
value: Mapping[str, Any],
|
|
192
|
+
key: str,
|
|
193
|
+
label: str,
|
|
194
|
+
*,
|
|
195
|
+
allow_empty: bool = False,
|
|
196
|
+
) -> str:
|
|
197
|
+
item = value.get(key)
|
|
198
|
+
if not isinstance(item, str) or (not allow_empty and not item.strip()):
|
|
199
|
+
raise AlgorithmOutputError(f"DecomP {label}.{key} must be text")
|
|
200
|
+
return item
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def _text_value(value: Any, label: str) -> str:
|
|
204
|
+
if not isinstance(value, str) or not value.strip():
|
|
205
|
+
raise AlgorithmOutputError(f"DecomP {label} must contain text")
|
|
206
|
+
return value
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def _nonnegative_integer(value: Any, label: str) -> int:
|
|
210
|
+
if isinstance(value, bool) or not isinstance(value, int) or value < 0:
|
|
211
|
+
raise AlgorithmOutputError(f"DecomP {label} must be a non-negative integer")
|
|
212
|
+
return value
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def _finite_number(value: Any, label: str) -> float:
|
|
216
|
+
if isinstance(value, bool) or not isinstance(value, (int, float)):
|
|
217
|
+
raise AlgorithmOutputError(f"DecomP {label} must be numeric")
|
|
218
|
+
result = float(value)
|
|
219
|
+
if result != result or result in {float("inf"), float("-inf")}:
|
|
220
|
+
raise AlgorithmOutputError(f"DecomP {label} must be finite")
|
|
221
|
+
return result
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def _sha256_file(path: Path) -> str:
|
|
225
|
+
try:
|
|
226
|
+
return hashlib.sha256(path.read_bytes()).hexdigest()
|
|
227
|
+
except OSError as exc:
|
|
228
|
+
raise DriverError("RUNTIME_SOURCE_MISSING", "runtime source file is unavailable") from exc
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
__all__ = ["PinnedDecompRuntime"]
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# InfoCQR pinned teacher/cache worker
|
|
2
|
+
|
|
3
|
+
This worker integrates the inference-time material in
|
|
4
|
+
[`smartyfh/InfoCQR@2953c461`](https://github.com/smartyfh/InfoCQR/tree/2953c461aa0c6817b1b7656dbd5168050227b31d)
|
|
5
|
+
without copying upstream source into AgentInputLab.
|
|
6
|
+
|
|
7
|
+
It supports two bounded paths:
|
|
8
|
+
|
|
9
|
+
1. checksum-locked replay of the author's QReCC JSONL caches (`rw_zsl`,
|
|
10
|
+
`rw_fsl`, and the T5-candidate teacher editor cache);
|
|
11
|
+
2. live teacher inference by dynamically loading and directly calling the
|
|
12
|
+
pinned official `generate_rewrite()` function for zero-shot, four-shot,
|
|
13
|
+
self-edit, or editor-only prompts.
|
|
14
|
+
|
|
15
|
+
`self_edit` follows the repository trajectory: official four-shot generation,
|
|
16
|
+
pinned post-processing, then official self-editor generation. `t5_edit` only
|
|
17
|
+
accepts an explicitly supplied initial candidate whose artifact SHA is bound in
|
|
18
|
+
the request; the worker does not claim that candidate came from released
|
|
19
|
+
InfoCQR weights.
|
|
20
|
+
|
|
21
|
+
## License and source gates
|
|
22
|
+
|
|
23
|
+
The audited checkout has no `LICENSE`, `COPYING`, or `NOTICE` file. Its source
|
|
24
|
+
and included generation caches therefore remain `NOASSERTION` and are never
|
|
25
|
+
vendored. Execution requires both:
|
|
26
|
+
|
|
27
|
+
- worker startup with `--acknowledge-noassertion-license`;
|
|
28
|
+
- `source_license_acknowledged=true` in every hashed request.
|
|
29
|
+
|
|
30
|
+
The worker verifies the exact commit when Git metadata is present, every
|
|
31
|
+
relevant source-file hash in all cases, the README evidence hash, and the
|
|
32
|
+
continued absence of a license file. A GitHub source tarball is identified by
|
|
33
|
+
the complete audited source-hash set.
|
|
34
|
+
|
|
35
|
+
## Bound experimental identity
|
|
36
|
+
|
|
37
|
+
Every request binds the QReCC revision/split, conversation source/number/turn,
|
|
38
|
+
ordered `NewContext`, current query, prompt source SHA, teacher deployment
|
|
39
|
+
fingerprint, retriever/corpus fingerprint, corpus ID, cache byte SHA when
|
|
40
|
+
replaying, seed, and model-call/token/cost ceilings. Endpoint and credentials
|
|
41
|
+
are startup-only and cannot be injected through JSONL.
|
|
42
|
+
|
|
43
|
+
The upstream first-turn scripts copy `Truth_rewrite` when `NewContext` is empty.
|
|
44
|
+
Cached first turns therefore fail closed unless the caller deliberately enables
|
|
45
|
+
`allow_first_turn_truth_rewrite`; live teacher mode calls the official prompt
|
|
46
|
+
function instead and never receives `Truth_rewrite`.
|
|
47
|
+
|
|
48
|
+
## Verify and run
|
|
49
|
+
|
|
50
|
+
Verify source plus a manifest-known author cache without importing provider
|
|
51
|
+
SDKs or making a model call:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
python workers/infocqr/driver.py \
|
|
55
|
+
--checkout /opt/upstreams/InfoCQR \
|
|
56
|
+
--known-cache test_rw_fsl \
|
|
57
|
+
--verify-only
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Run live generation against either a hosted OpenAI-compatible API or local
|
|
61
|
+
vLLM endpoint:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python workers/infocqr/driver.py \
|
|
65
|
+
--checkout /opt/upstreams/InfoCQR \
|
|
66
|
+
--acknowledge-noassertion-license \
|
|
67
|
+
--backend-config-json "$INFOCQR_BACKEND_CONFIG"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Example configuration:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"base_url": "http://127.0.0.1:8000/v1",
|
|
75
|
+
"api_key_env": "INFOCQR_API_KEY",
|
|
76
|
+
"model": "Qwen/Qwen2.5-7B-Instruct",
|
|
77
|
+
"fingerprint": {
|
|
78
|
+
"provider": "vllm",
|
|
79
|
+
"model": "Qwen/Qwen2.5-7B-Instruct",
|
|
80
|
+
"revision": "deployment-or-weight-revision"
|
|
81
|
+
},
|
|
82
|
+
"timeout_seconds": 60,
|
|
83
|
+
"max_output_tokens": 2560,
|
|
84
|
+
"temperature": 0,
|
|
85
|
+
"input_cost_per_million": 0,
|
|
86
|
+
"output_cost_per_million": 0
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
A custom cache requires all of `--cache-path`, `--cache-artifact-id`,
|
|
91
|
+
`--cache-sha256`, `--cache-profile`, and `--cache-split`.
|
|
92
|
+
|
|
93
|
+
## Deliberate limits
|
|
94
|
+
|
|
95
|
+
- The repository publishes T5 training/test scripts but no student checkpoint.
|
|
96
|
+
This legacy teacher/cache worker keeps its `T5_CHECKPOINT_UNAVAILABLE` gate.
|
|
97
|
+
The separate [trained student adapter](../../docs/infocqr-student.md) now
|
|
98
|
+
accepts a caller-mounted, checksum-pinned trained checkpoint and provenance
|
|
99
|
+
receipt. It executes native source serialization/collation and local T5
|
|
100
|
+
inference; no generic t5-base, teacher or author cache is substituted.
|
|
101
|
+
- The legacy OpenAI SDK call is replaced only at the provider transport seam.
|
|
102
|
+
Prompt construction still executes the exact pinned official function.
|
|
103
|
+
- `post_processing.py` exposes only a file-oriented `main`; its exact pinned
|
|
104
|
+
branch order is transparently reproduced and hash-labeled in the response.
|
|
105
|
+
- Cache/live plumbing and source prompt parity are tested. Paper-result parity
|
|
106
|
+
is not claimed.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Pinned external worker for the InfoCQR teacher and author caches."""
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "agentinputlab.infocqr.compatibility.v1",
|
|
3
|
+
"upstream": {
|
|
4
|
+
"repository": "https://github.com/smartyfh/InfoCQR.git",
|
|
5
|
+
"commit": "2953c461aa0c6817b1b7656dbd5168050227b31d",
|
|
6
|
+
"license_spdx": "NOASSERTION",
|
|
7
|
+
"license_file_present": false,
|
|
8
|
+
"license_evidence_path": "README.md",
|
|
9
|
+
"license_evidence_sha256": "56a86f36169028602eda0fdf2a0ebd893eb3aaf10cfe790d90eabddb0f73d757",
|
|
10
|
+
"require_clean_checkout": true
|
|
11
|
+
},
|
|
12
|
+
"source_files": {
|
|
13
|
+
"README.md": "56a86f36169028602eda0fdf2a0ebd893eb3aaf10cfe790d90eabddb0f73d757",
|
|
14
|
+
"requirements.txt": "1e2b9e614b3ac85cbebabc1c94bc1fd92d04fc5817af2af0cf26fadf4ba864dc",
|
|
15
|
+
"rewrite_chatgpt_zsl.py": "93d6ba61da042f15ed6d506b3d69bac1a16d3e33453b84ec8f6b7317d018defc",
|
|
16
|
+
"rewrite_chatgpt_inctx.py": "9c447f5292a6c936160ab847d3eb18db4704ea62f3d46a896ef5613aac2ce6a6",
|
|
17
|
+
"rewrite_chatgpt_editor.py": "5c71071d213ac562651d5577e623f73d0b98ffc3279f2dc1727127e8475d1bba",
|
|
18
|
+
"rewrite_chatgpt_self_editor.py": "2fba6bb3b24a7b332c7896b89c7ae6480c2d21272f42bad893ee5151c7739373",
|
|
19
|
+
"post_processing.py": "7201ceaeb16beaaf3af874faf083ce4f64dd630636a2e302edf398cc4da8d3dd",
|
|
20
|
+
"fuse_rewrite.py": "81f521240d53b8e34de3a806d7f09223b9c8ea39bf9394bbafae9dff957c01f9",
|
|
21
|
+
"dataset_cleaning.py": "9d4bdd7f8c20b05a1baafce35f725fcffd319a40442a16d2526cd4fd05be968b",
|
|
22
|
+
"T5QR/T5test.py": "c9c1b78d8147035ea3c300e7b29c791fb171ce399f8c1269a6e1a11b9bc05eb8",
|
|
23
|
+
"T5QR/T5train.py": "d40bc17e365d9f626fd5bf1fd14fffd3073c0b6772434a78eac6412d6fd2f4de"
|
|
24
|
+
},
|
|
25
|
+
"prompt_profiles": {
|
|
26
|
+
"rw_zsl": {
|
|
27
|
+
"source_path": "rewrite_chatgpt_zsl.py",
|
|
28
|
+
"source_sha256": "93d6ba61da042f15ed6d506b3d69bac1a16d3e33453b84ec8f6b7317d018defc",
|
|
29
|
+
"official_function": "generate_rewrite"
|
|
30
|
+
},
|
|
31
|
+
"rw_fsl": {
|
|
32
|
+
"source_path": "rewrite_chatgpt_inctx.py",
|
|
33
|
+
"source_sha256": "9c447f5292a6c936160ab847d3eb18db4704ea62f3d46a896ef5613aac2ce6a6",
|
|
34
|
+
"official_function": "generate_rewrite"
|
|
35
|
+
},
|
|
36
|
+
"t5_edit": {
|
|
37
|
+
"source_path": "rewrite_chatgpt_editor.py",
|
|
38
|
+
"source_sha256": "5c71071d213ac562651d5577e623f73d0b98ffc3279f2dc1727127e8475d1bba",
|
|
39
|
+
"official_function": "generate_rewrite"
|
|
40
|
+
},
|
|
41
|
+
"self_edit": {
|
|
42
|
+
"source_path": "rewrite_chatgpt_self_editor.py",
|
|
43
|
+
"source_sha256": "2fba6bb3b24a7b332c7896b89c7ae6480c2d21272f42bad893ee5151c7739373",
|
|
44
|
+
"official_function": "generate_rewrite"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"known_author_caches": {
|
|
48
|
+
"test_rw_zsl": {
|
|
49
|
+
"path": "datasets/qrecc/test_chatgpt_ZSL.jsonl",
|
|
50
|
+
"sha256": "c5304470e0f0399d8f432d9f4701015ca3aad40e56bcb06fcdb8a350efdf7134",
|
|
51
|
+
"profile": "rw_zsl",
|
|
52
|
+
"split": "test"
|
|
53
|
+
},
|
|
54
|
+
"test_rw_fsl": {
|
|
55
|
+
"path": "datasets/qrecc/test_chatgpt_ICL.jsonl",
|
|
56
|
+
"sha256": "9007463f7d6af418ee933d476abb4c449f39f0aa06d2c46662178b0050c777ce",
|
|
57
|
+
"profile": "rw_fsl",
|
|
58
|
+
"split": "test"
|
|
59
|
+
},
|
|
60
|
+
"test_t5_edit": {
|
|
61
|
+
"path": "datasets/qrecc/test_chatgpt_editor.jsonl",
|
|
62
|
+
"sha256": "115993dd58b5307fd411329ccfd3fc4e6ccd10d33116db718e3824cc7d728150",
|
|
63
|
+
"profile": "t5_edit",
|
|
64
|
+
"split": "test"
|
|
65
|
+
},
|
|
66
|
+
"test_self_edit": {
|
|
67
|
+
"path": "datasets/qrecc/test_chatgpt_ICL_editor.jsonl",
|
|
68
|
+
"sha256": "da2778285f9d616bcfb5dff0ca2d0079d5bed54aca8086352135e698b9373f5f",
|
|
69
|
+
"profile": "self_edit",
|
|
70
|
+
"split": "test"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"execution": {
|
|
74
|
+
"vendored_upstream_source": false,
|
|
75
|
+
"license_acknowledgement_required_at_startup": true,
|
|
76
|
+
"license_acknowledgement_required_per_request": true,
|
|
77
|
+
"official_teacher_function_called": true,
|
|
78
|
+
"common_support_profile": "controlled_adapter_visible_dialogue_only",
|
|
79
|
+
"post_processing_compatibility_hash": "7201ceaeb16beaaf3af874faf083ce4f64dd630636a2e302edf398cc4da8d3dd",
|
|
80
|
+
"t5_student_runtime_enabled": false,
|
|
81
|
+
"released_t5_checkpoint_present": false,
|
|
82
|
+
"paper_result_parity_claimed": false
|
|
83
|
+
}
|
|
84
|
+
}
|