agentinputlab 0.1.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agentinputlab/__init__.py +28 -0
- agentinputlab/algorithms/__init__.py +6 -0
- agentinputlab/algorithms/acquire/__init__.py +145 -0
- agentinputlab/algorithms/acquire/adaptive_rag/__init__.py +43 -0
- agentinputlab/algorithms/acquire/adaptive_rag/replay.py +367 -0
- agentinputlab/algorithms/acquire/adaptive_rag/runtime.py +1202 -0
- agentinputlab/algorithms/acquire/adaptive_rag_common_support.py +542 -0
- agentinputlab/algorithms/acquire/hyde.py +296 -0
- agentinputlab/algorithms/acquire/hyde_controlled.py +200 -0
- agentinputlab/algorithms/acquire/hyde_external.py +148 -0
- agentinputlab/algorithms/acquire/ircot.py +28 -0
- agentinputlab/algorithms/acquire/ircot_common_support.py +478 -0
- agentinputlab/algorithms/acquire/ircot_native.py +355 -0
- agentinputlab/algorithms/acquire/ircot_replay.py +327 -0
- agentinputlab/algorithms/acquire/qrag/__init__.py +79 -0
- agentinputlab/algorithms/acquire/qrag/bridge.py +828 -0
- agentinputlab/algorithms/acquire/qrag/common_support.py +891 -0
- agentinputlab/algorithms/acquire/qrag/native_axis.py +71 -0
- agentinputlab/algorithms/acquire/qrag/reader_adapter.py +139 -0
- agentinputlab/algorithms/acquire/r2ag/__init__.py +57 -0
- agentinputlab/algorithms/acquire/r2ag/bridge.py +1312 -0
- agentinputlab/algorithms/acquire/r2ag/common_support.py +1029 -0
- agentinputlab/algorithms/acquire/r2ag/socket_runtime.py +255 -0
- agentinputlab/algorithms/clarify/__init__.py +61 -0
- agentinputlab/algorithms/clarify/_structured.py +64 -0
- agentinputlab/algorithms/clarify/active_task_disambiguation.py +371 -0
- agentinputlab/algorithms/clarify/ask_or_assume/__init__.py +17 -0
- agentinputlab/algorithms/clarify/ask_or_assume/monitor.py +410 -0
- agentinputlab/algorithms/clarify/future_turns.py +379 -0
- agentinputlab/algorithms/clarify/udcs.py +255 -0
- agentinputlab/algorithms/clarify/udcs_deterministic.py +196 -0
- agentinputlab/algorithms/curate/__init__.py +65 -0
- agentinputlab/algorithms/curate/acon/__init__.py +27 -0
- agentinputlab/algorithms/curate/acon/common.py +284 -0
- agentinputlab/algorithms/curate/acon/common_support.py +136 -0
- agentinputlab/algorithms/curate/acon/history_bridge.py +309 -0
- agentinputlab/algorithms/curate/acon/observation_bridge.py +290 -0
- agentinputlab/algorithms/curate/llmlingua/__init__.py +30 -0
- agentinputlab/algorithms/curate/llmlingua/adapters.py +537 -0
- agentinputlab/algorithms/curate/llmlingua/budget.py +48 -0
- agentinputlab/algorithms/curate/llmlingua/controlled.py +175 -0
- agentinputlab/algorithms/curate/llmlingua/multilingual.py +105 -0
- agentinputlab/algorithms/curate/llmlingua/span_map.py +167 -0
- agentinputlab/algorithms/curate/recomp/__init__.py +47 -0
- agentinputlab/algorithms/curate/recomp/external.py +1129 -0
- agentinputlab/algorithms/curate/recomp/selective.py +304 -0
- agentinputlab/algorithms/decompose/__init__.py +107 -0
- agentinputlab/algorithms/decompose/decomp/__init__.py +53 -0
- agentinputlab/algorithms/decompose/decomp/common_support.py +478 -0
- agentinputlab/algorithms/decompose/decomp/planner_component.py +199 -0
- agentinputlab/algorithms/decompose/decomp/worker_bridge.py +416 -0
- agentinputlab/algorithms/decompose/llm_compiler/__init__.py +35 -0
- agentinputlab/algorithms/decompose/llm_compiler/bridge.py +520 -0
- agentinputlab/algorithms/decompose/llm_compiler/common_support.py +504 -0
- agentinputlab/algorithms/decompose/plan_and_budget/__init__.py +43 -0
- agentinputlab/algorithms/decompose/plan_and_budget/cached_soft_budget.py +362 -0
- agentinputlab/algorithms/decompose/plan_and_budget/decomposer_component.py +107 -0
- agentinputlab/algorithms/decompose/plan_and_budget/full.py +205 -0
- agentinputlab/algorithms/decompose/plan_and_budget/hard_cap.py +246 -0
- agentinputlab/algorithms/decompose/plan_and_budget/regenerated_soft_budget.py +448 -0
- agentinputlab/algorithms/decompose/plan_and_solve/__init__.py +33 -0
- agentinputlab/algorithms/decompose/plan_and_solve/plan_component.py +192 -0
- agentinputlab/algorithms/decompose/plan_and_solve/ps_prompt.py +127 -0
- agentinputlab/algorithms/decompose/self_ask/__init__.py +27 -0
- agentinputlab/algorithms/decompose/self_ask/loop.py +362 -0
- agentinputlab/algorithms/decompose/self_ask/planner_component.py +117 -0
- agentinputlab/algorithms/reformulate/__init__.py +85 -0
- agentinputlab/algorithms/reformulate/infocqr/__init__.py +40 -0
- agentinputlab/algorithms/reformulate/infocqr/cache_replay.py +362 -0
- agentinputlab/algorithms/reformulate/infocqr/external.py +675 -0
- agentinputlab/algorithms/reformulate/infocqr/student.py +189 -0
- agentinputlab/algorithms/reformulate/query2doc/__init__.py +42 -0
- agentinputlab/algorithms/reformulate/query2doc/controlled_live.py +190 -0
- agentinputlab/algorithms/reformulate/query2doc/models.py +95 -0
- agentinputlab/algorithms/reformulate/query2doc/official_cached.py +335 -0
- agentinputlab/algorithms/reformulate/query2doc/querygym_bridge.py +223 -0
- agentinputlab/algorithms/reformulate/query2doc/querygym_runtime.py +326 -0
- agentinputlab/algorithms/reformulate/reformer/__init__.py +23 -0
- agentinputlab/algorithms/reformulate/reformer/external.py +417 -0
- agentinputlab/algorithms/reformulate/rrr.py +696 -0
- agentinputlab/annotation/__init__.py +5 -0
- agentinputlab/annotation/independent.py +428 -0
- agentinputlab/annotation/server.py +233 -0
- agentinputlab/annotation/static/app.js +121 -0
- agentinputlab/annotation/static/index.html +60 -0
- agentinputlab/annotation/static/review.css +2 -0
- agentinputlab/annotation/static/review.html +10 -0
- agentinputlab/annotation/static/review.js +11 -0
- agentinputlab/annotation/static/styles.css +55 -0
- agentinputlab/annotation/store.py +444 -0
- agentinputlab/api.py +368 -0
- agentinputlab/artifacts/__init__.py +15 -0
- agentinputlab/artifacts/json_file.py +104 -0
- agentinputlab/artifacts/manifest.py +98 -0
- agentinputlab/artifacts/store.py +157 -0
- agentinputlab/backends/__init__.py +98 -0
- agentinputlab/backends/embedding/__init__.py +25 -0
- agentinputlab/backends/embedding/base.py +145 -0
- agentinputlab/backends/embedding/callable.py +75 -0
- agentinputlab/backends/embedding/replay.py +129 -0
- agentinputlab/backends/llm/__init__.py +31 -0
- agentinputlab/backends/llm/base.py +149 -0
- agentinputlab/backends/llm/callable.py +108 -0
- agentinputlab/backends/llm/decomp_completion.py +88 -0
- agentinputlab/backends/llm/final_content_stop.py +72 -0
- agentinputlab/backends/llm/gpt_oss_final_channel.py +84 -0
- agentinputlab/backends/llm/openai_compatible.py +332 -0
- agentinputlab/backends/llm/transformers.py +171 -0
- agentinputlab/backends/retrieval/__init__.py +35 -0
- agentinputlab/backends/retrieval/base.py +50 -0
- agentinputlab/backends/retrieval/dense.py +777 -0
- agentinputlab/backends/retrieval/memory.py +119 -0
- agentinputlab/backends/retrieval/sqlite_fts.py +155 -0
- agentinputlab/backends/user/__init__.py +15 -0
- agentinputlab/backends/user/base.py +66 -0
- agentinputlab/backends/user/callable.py +54 -0
- agentinputlab/backends/user/replay.py +89 -0
- agentinputlab/backends/vector.py +38 -0
- agentinputlab/benchmarks/__init__.py +246 -0
- agentinputlab/benchmarks/acquisition.py +106 -0
- agentinputlab/benchmarks/ale.py +540 -0
- agentinputlab/benchmarks/appworld_ul.py +669 -0
- agentinputlab/benchmarks/assets.py +226 -0
- agentinputlab/benchmarks/base.py +68 -0
- agentinputlab/benchmarks/beir_archive.py +235 -0
- agentinputlab/benchmarks/beir_sample.py +269 -0
- agentinputlab/benchmarks/bfcl_native.py +245 -0
- agentinputlab/benchmarks/bfcl_v3.py +607 -0
- agentinputlab/benchmarks/cache.py +218 -0
- agentinputlab/benchmarks/clariq.py +203 -0
- agentinputlab/benchmarks/data/registry.json +321 -0
- agentinputlab/benchmarks/data/smoke_assets.json +511 -0
- agentinputlab/benchmarks/data/statebench_v0_8_1_task_ids.json +475 -0
- agentinputlab/benchmarks/data/toolsandbox_165848b_scenario_names.json +1 -0
- agentinputlab/benchmarks/execution.py +1111 -0
- agentinputlab/benchmarks/interactive.py +257 -0
- agentinputlab/benchmarks/ir_query.py +204 -0
- agentinputlab/benchmarks/longbench.py +203 -0
- agentinputlab/benchmarks/paired_replay.py +479 -0
- agentinputlab/benchmarks/preprocess.py +2313 -0
- agentinputlab/benchmarks/production.py +236 -0
- agentinputlab/benchmarks/qa.py +963 -0
- agentinputlab/benchmarks/registry.py +110 -0
- agentinputlab/benchmarks/retrieval.py +459 -0
- agentinputlab/benchmarks/runtime.py +509 -0
- agentinputlab/benchmarks/statebench.py +938 -0
- agentinputlab/benchmarks/tau3.py +725 -0
- agentinputlab/benchmarks/toolsandbox.py +626 -0
- agentinputlab/benchmarks/trec_dl_sample.py +263 -0
- agentinputlab/campaign.py +654 -0
- agentinputlab/campaign_runner.py +953 -0
- agentinputlab/cli/__init__.py +6 -0
- agentinputlab/cli/main.py +933 -0
- agentinputlab/connectors/__init__.py +46 -0
- agentinputlab/connectors/knowledge/__init__.py +4 -0
- agentinputlab/connectors/tools/__init__.py +30 -0
- agentinputlab/connectors/tools/base.py +57 -0
- agentinputlab/connectors/tools/mcp.py +222 -0
- agentinputlab/connectors/tools/memory.py +41 -0
- agentinputlab/connectors/tools/openapi.py +695 -0
- agentinputlab/connectors/tools/schema.py +102 -0
- agentinputlab/contracts/__init__.py +91 -0
- agentinputlab/contracts/availability.py +24 -0
- agentinputlab/contracts/dependency.py +58 -0
- agentinputlab/contracts/enums.py +82 -0
- agentinputlab/contracts/errors.py +63 -0
- agentinputlab/contracts/evidence.py +43 -0
- agentinputlab/contracts/intent.py +110 -0
- agentinputlab/contracts/lifecycle.py +164 -0
- agentinputlab/contracts/patch.py +167 -0
- agentinputlab/contracts/serialization.py +93 -0
- agentinputlab/contracts/state.py +127 -0
- agentinputlab/contracts/trace.py +59 -0
- agentinputlab/contracts/worker.py +42 -0
- agentinputlab/core/__init__.py +7 -0
- agentinputlab/data/__init__.py +32 -0
- agentinputlab/data/checksums.py +9 -0
- agentinputlab/data/downloader.py +235 -0
- agentinputlab/data/http.py +171 -0
- agentinputlab/data/index.py +21 -0
- agentinputlab/data/overlap.py +28 -0
- agentinputlab/data/preprocess.py +32 -0
- agentinputlab/data/storage.py +57 -0
- agentinputlab/data/trec_sample.py +427 -0
- agentinputlab/evaluation/__init__.py +5 -0
- agentinputlab/evaluation/outcomes.py +32 -0
- agentinputlab/experiments/__init__.py +278 -0
- agentinputlab/experiments/analysis.py +981 -0
- agentinputlab/experiments/artifacts.py +687 -0
- agentinputlab/experiments/automatic_measurement.py +678 -0
- agentinputlab/experiments/auxiliary_matrix.py +203 -0
- agentinputlab/experiments/bindings.py +430 -0
- agentinputlab/experiments/blueprints.py +147 -0
- agentinputlab/experiments/builders/__init__.py +45 -0
- agentinputlab/experiments/builders/executable_external_payload.py +423 -0
- agentinputlab/experiments/builders/external_process_arena.py +1018 -0
- agentinputlab/experiments/builders/registry_intervention.py +463 -0
- agentinputlab/experiments/cli.py +158 -0
- agentinputlab/experiments/controls.py +340 -0
- agentinputlab/experiments/driver_guard.py +205 -0
- agentinputlab/experiments/drivers/__init__.py +89 -0
- agentinputlab/experiments/drivers/external_arena.py +2908 -0
- agentinputlab/experiments/drivers/method_process.py +662 -0
- agentinputlab/experiments/drivers/parity_process.py +1484 -0
- agentinputlab/experiments/drivers/static_production.py +1574 -0
- agentinputlab/experiments/executor.py +448 -0
- agentinputlab/experiments/loader.py +605 -0
- agentinputlab/experiments/measurement.py +675 -0
- agentinputlab/experiments/paper_analysis.py +1818 -0
- agentinputlab/experiments/parity_identity.py +605 -0
- agentinputlab/experiments/plan.py +277 -0
- agentinputlab/experiments/production_builders.py +3739 -0
- agentinputlab/experiments/readiness.py +432 -0
- agentinputlab/experiments/schema.py +514 -0
- agentinputlab/experiments/secrets.py +177 -0
- agentinputlab/experiments/stateful_analysis.py +1738 -0
- agentinputlab/experiments/transfer_analysis.py +1316 -0
- agentinputlab/experiments/unseen_analysis.py +1025 -0
- agentinputlab/integrations/__init__.py +1 -0
- agentinputlab/integrations/action_space/__init__.py +1 -0
- agentinputlab/integrations/external_workers/__init__.py +76 -0
- agentinputlab/integrations/external_workers/ace.py +431 -0
- agentinputlab/integrations/external_workers/base.py +181 -0
- agentinputlab/integrations/external_workers/decomp_live.py +249 -0
- agentinputlab/integrations/external_workers/decomp_planner.py +30 -0
- agentinputlab/integrations/external_workers/infocqr_student.py +280 -0
- agentinputlab/integrations/external_workers/ircot.py +576 -0
- agentinputlab/integrations/external_workers/llmcompiler_live.py +360 -0
- agentinputlab/integrations/external_workers/longllmlingua.py +162 -0
- agentinputlab/integrations/external_workers/method.py +314 -0
- agentinputlab/integrations/external_workers/process.py +678 -0
- agentinputlab/integrations/external_workers/supervisor.py +1071 -0
- agentinputlab/integrations/full_architecture/__init__.py +1 -0
- agentinputlab/integrations/full_architecture/hyde.py +212 -0
- agentinputlab/integrations/full_architecture/plan_and_budget.py +188 -0
- agentinputlab/integrations/live_history.py +222 -0
- agentinputlab/integrations/prompt_optimization/__init__.py +1 -0
- agentinputlab/integrations/training/__init__.py +1 -0
- agentinputlab/metrics/__init__.py +50 -0
- agentinputlab/metrics/catalog.py +313 -0
- agentinputlab/metrics/harm.py +95 -0
- agentinputlab/metrics/paired.py +40 -0
- agentinputlab/metrics/qa.py +76 -0
- agentinputlab/metrics/text.py +33 -0
- agentinputlab/metrics/third_party.py +161 -0
- agentinputlab/models/__init__.py +4 -0
- agentinputlab/observability/__init__.py +56 -0
- agentinputlab/observability/budget.py +316 -0
- agentinputlab/observability/instrumentation.py +754 -0
- agentinputlab/observability/models.py +403 -0
- agentinputlab/observability/monitor.py +380 -0
- agentinputlab/optimizers/__init__.py +1 -0
- agentinputlab/optimizers/clarify/__init__.py +12 -0
- agentinputlab/optimizers/context/__init__.py +22 -0
- agentinputlab/optimizers/decompose/__init__.py +64 -0
- agentinputlab/optimizers/evidence/__init__.py +22 -0
- agentinputlab/optimizers/rewrite/__init__.py +30 -0
- agentinputlab/parity/__init__.py +5 -0
- agentinputlab/parity/base.py +206 -0
- agentinputlab/production_campaign.py +763 -0
- agentinputlab/py.typed +1 -0
- agentinputlab/recipes/__init__.py +333 -0
- agentinputlab/recipes/ace.py +418 -0
- agentinputlab/recipes/ace_bfcl.py +273 -0
- agentinputlab/recipes/ace_common_support.py +169 -0
- agentinputlab/recipes/ace_native_plan.py +322 -0
- agentinputlab/recipes/ace_online.py +711 -0
- agentinputlab/recipes/ace_retrieval.py +330 -0
- agentinputlab/recipes/ace_statebench.py +382 -0
- agentinputlab/recipes/ace_tau.py +463 -0
- agentinputlab/recipes/ace_toolsandbox.py +432 -0
- agentinputlab/recipes/acon_guideline.py +22 -0
- agentinputlab/recipes/adaptive_rag.py +822 -0
- agentinputlab/recipes/llmlingua2_inference.py +146 -0
- agentinputlab/recipes/llmlingua2_training.py +796 -0
- agentinputlab/recipes/mce.py +1486 -0
- agentinputlab/recipes/mce_final.py +335 -0
- agentinputlab/recipes/mce_text_fit.py +499 -0
- agentinputlab/recipes/mce_text_only.py +298 -0
- agentinputlab/recipes/qrag.py +729 -0
- agentinputlab/recipes/qrag_inference.py +364 -0
- agentinputlab/recipes/r2ag_features.py +236 -0
- agentinputlab/recipes/r2ag_inference.py +503 -0
- agentinputlab/recipes/r2ag_training.py +948 -0
- agentinputlab/recipes/recomp_abstractive.py +592 -0
- agentinputlab/recipes/recomp_extractive.py +525 -0
- agentinputlab/recipes/reformer.py +17 -0
- agentinputlab/recipes/rqrag.py +1516 -0
- agentinputlab/recipes/rqrag_common_support.py +193 -0
- agentinputlab/recipes/rqrag_completion.py +147 -0
- agentinputlab/recipes/skillopt.py +462 -0
- agentinputlab/recipes/skillopt_common_support.py +154 -0
- agentinputlab/recipes/skillopt_environment.py +165 -0
- agentinputlab/recipes/skillopt_environment_cli.py +5 -0
- agentinputlab/recipes/skillopt_retrieval.py +188 -0
- agentinputlab/recipes/smartsearch.py +897 -0
- agentinputlab/recipes/smartsearch_curriculum.py +283 -0
- agentinputlab/recipes/smartsearch_grpo_contracts.py +58 -0
- agentinputlab/recipes/smartsearch_grpo_data.py +314 -0
- agentinputlab/recipes/smartsearch_grpo_meter.py +324 -0
- agentinputlab/recipes/smartsearch_grpo_prefix.py +144 -0
- agentinputlab/recipes/smartsearch_grpo_rollout.py +119 -0
- agentinputlab/recipes/smartsearch_grpo_tools.py +364 -0
- agentinputlab/recipes/smartsearch_grpo_training.py +305 -0
- agentinputlab/recipes/smartsearch_grpo_transport.py +248 -0
- agentinputlab/recipes/smartsearch_grpo_worker.py +364 -0
- agentinputlab/recipes/smartsearch_inference.py +524 -0
- agentinputlab/recipes/smartsearch_native_data.py +172 -0
- agentinputlab/recipes/smartsearch_policy.py +616 -0
- agentinputlab/recipes/smartsearch_policy_worker.py +9 -0
- agentinputlab/recipes/smartsearch_sampling.py +232 -0
- agentinputlab/recipes/smartsearch_teacher.py +203 -0
- agentinputlab/recipes/smartsearch_training.py +265 -0
- agentinputlab/registry/__init__.py +46 -0
- agentinputlab/registry/beta.py +727 -0
- agentinputlab/registry/data/algorithms.json +1959 -0
- agentinputlab/registry/data/auxiliary_method_profiles.json +34 -0
- agentinputlab/registry/loader.py +100 -0
- agentinputlab/registry/result_manifest.py +184 -0
- agentinputlab/registry/runtime.py +195 -0
- agentinputlab/registry/schema.py +449 -0
- agentinputlab/runner/__init__.py +30 -0
- agentinputlab/runner/balance.py +248 -0
- agentinputlab/runner/cache.py +135 -0
- agentinputlab/runner/composite.py +130 -0
- agentinputlab/runner/engine.py +285 -0
- agentinputlab/runner/runtime_guard.py +268 -0
- agentinputlab/runner/worker.py +80 -0
- agentinputlab/runtime_bootstrap.py +288 -0
- agentinputlab/selectors/__init__.py +196 -0
- agentinputlab/selectors/advanced.py +1514 -0
- agentinputlab/selectors/artifacts.py +1087 -0
- agentinputlab/selectors/base.py +112 -0
- agentinputlab/selectors/campaigns.py +1893 -0
- agentinputlab/selectors/catalog.py +86 -0
- agentinputlab/selectors/discovery.py +1860 -0
- agentinputlab/selectors/evaluation.py +1348 -0
- agentinputlab/selectors/features.py +383 -0
- agentinputlab/selectors/learned.py +502 -0
- agentinputlab/selectors/no_op.py +28 -0
- agentinputlab/selectors/outcome_table.py +475 -0
- agentinputlab/selectors/producer.py +853 -0
- agentinputlab/selectors/rules.py +109 -0
- agentinputlab/selectors/runtime.py +420 -0
- agentinputlab/studies/__init__.py +16 -0
- agentinputlab/studies/design.py +165 -0
- agentinputlab/studies/paired.py +322 -0
- agentinputlab/studio/__init__.py +6 -0
- agentinputlab/studio/campaigns.py +819 -0
- agentinputlab/studio/engine.py +1408 -0
- agentinputlab/studio/model_backends.py +425 -0
- agentinputlab/studio/prepared.py +410 -0
- agentinputlab/studio/server.py +613 -0
- agentinputlab/studio/static/app.js +397 -0
- agentinputlab/studio/static/campaigns.html +175 -0
- agentinputlab/studio/static/campaigns.js +426 -0
- agentinputlab/studio/static/index.html +192 -0
- agentinputlab/studio/static/result.html +103 -0
- agentinputlab/studio/static/result.js +273 -0
- agentinputlab/studio/static/styles.css +467 -0
- agentinputlab-0.1.0a1.data/data/share/agentinputlab/CITATION.cff +22 -0
- agentinputlab-0.1.0a1.dist-info/METADATA +392 -0
- agentinputlab-0.1.0a1.dist-info/RECORD +469 -0
- agentinputlab-0.1.0a1.dist-info/WHEEL +5 -0
- agentinputlab-0.1.0a1.dist-info/entry_points.txt +6 -0
- agentinputlab-0.1.0a1.dist-info/licenses/LICENSE +21 -0
- agentinputlab-0.1.0a1.dist-info/licenses/NOTICE +31 -0
- agentinputlab-0.1.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +94 -0
- agentinputlab-0.1.0a1.dist-info/top_level.txt +2 -0
- workers/README.md +94 -0
- workers/ace/README.md +261 -0
- workers/ace/__init__.py +1 -0
- workers/ace/compatibility_manifest.json +39 -0
- workers/ace/driver.py +1682 -0
- workers/acon/README.md +215 -0
- workers/acon/__init__.py +5 -0
- workers/acon/compatibility_manifest.json +93 -0
- workers/acon/driver.py +1859 -0
- workers/acon/fitted.py +395 -0
- workers/acon/guideline.py +470 -0
- workers/acon/guideline_source_manifest.json +20 -0
- workers/adaptive_rag/README.md +96 -0
- workers/adaptive_rag/__init__.py +15 -0
- workers/adaptive_rag/compatibility_manifest.json +61 -0
- workers/adaptive_rag/driver.py +1470 -0
- workers/adaptive_rag/fixture_runtime.py +163 -0
- workers/adaptive_rag/runtime.py +252 -0
- workers/ask_or_assume/README.md +124 -0
- workers/ask_or_assume/__init__.py +1 -0
- workers/ask_or_assume/compatibility_manifest.json +36 -0
- workers/ask_or_assume/driver.py +1227 -0
- workers/decomp/README.md +133 -0
- workers/decomp/UPSTREAM_LICENSE.Apache-2.0.txt +201 -0
- workers/decomp/__init__.py +5 -0
- workers/decomp/compatibility_manifest.json +205 -0
- workers/decomp/driver.py +1015 -0
- workers/decomp/live.py +137 -0
- workers/decomp/runtime.py +231 -0
- workers/infocqr/README.md +106 -0
- workers/infocqr/__init__.py +1 -0
- workers/infocqr/compatibility_manifest.json +84 -0
- workers/infocqr/driver.py +1766 -0
- workers/ircot/README.md +167 -0
- workers/ircot/__init__.py +7 -0
- workers/ircot/compatibility_manifest.json +121 -0
- workers/ircot/controlled.py +457 -0
- workers/ircot/driver.py +1373 -0
- workers/ircot/fixture_bindings.json +39 -0
- workers/ircot/fixture_config.json +48 -0
- workers/ircot/fixture_prompt.txt +2 -0
- workers/ircot/native_qa.py +398 -0
- workers/ircot/qa_compatibility_manifest.json +57 -0
- workers/ircot/runtime.py +97 -0
- workers/llmcompiler/README.md +160 -0
- workers/llmcompiler/__init__.py +1 -0
- workers/llmcompiler/compatibility_manifest.json +45 -0
- workers/llmcompiler/driver.py +1514 -0
- workers/llmcompiler/export_prompts.py +74 -0
- workers/llmcompiler/live.py +174 -0
- workers/llmcompiler/patch_manifest.json +147 -0
- workers/mce/README.md +198 -0
- workers/mce/__init__.py +29 -0
- workers/mce/compatibility_manifest.json +115 -0
- workers/mce/driver.py +2585 -0
- workers/mce/final_eval.py +173 -0
- workers/official_arenas/README.md +25 -0
- workers/official_arenas/__init__.py +1 -0
- workers/official_arenas/capture_records.py +110 -0
- workers/official_arenas/driver.py +619 -0
- workers/official_arenas/protocol.py +334 -0
- workers/official_arenas/providers/__init__.py +1 -0
- workers/official_arenas/providers/_live_history.py +228 -0
- workers/official_arenas/providers/_message_compat.py +77 -0
- workers/official_arenas/providers/appworld_ul.py +196 -0
- workers/official_arenas/providers/fixture.py +112 -0
- workers/official_arenas/providers/statebench.py +960 -0
- workers/official_arenas/providers/tau3.py +1672 -0
- workers/official_arenas/providers/tau_retail.py +586 -0
- workers/official_arenas/providers/toolsandbox.py +1321 -0
- workers/official_arenas/providers/tooltalk.py +699 -0
- workers/official_arenas/retail_capture.py +188 -0
- workers/official_arenas/retail_driver.py +275 -0
- workers/qrag/README.md +172 -0
- workers/qrag/__init__.py +1 -0
- workers/qrag/compatibility_manifest.json +64 -0
- workers/qrag/driver.py +673 -0
- workers/r2ag/README.md +154 -0
- workers/r2ag/__init__.py +5 -0
- workers/r2ag/compatibility_manifest.json +55 -0
- workers/r2ag/driver.py +1287 -0
- workers/r2ag/feature_schema.json +8 -0
- workers/r2ag/runtime.py +589 -0
- workers/recomp/README.md +120 -0
- workers/recomp/__init__.py +1 -0
- workers/recomp/compatibility_manifest.json +43 -0
- workers/recomp/driver.py +1653 -0
- workers/reformer/README.md +125 -0
- workers/reformer/__init__.py +1 -0
- workers/reformer/compatibility_manifest.json +68 -0
- workers/reformer/driver.py +1459 -0
- workers/reformer/induction.py +457 -0
- workers/rrr/README.md +126 -0
- workers/rrr/__init__.py +1 -0
- workers/rrr/compatibility_manifest.json +57 -0
- workers/rrr/driver.py +1133 -0
- workers/smartsearch/README.md +331 -0
- workers/smartsearch/__init__.py +1 -0
- workers/smartsearch/compatibility_manifest.json +41 -0
- workers/smartsearch/driver.py +1643 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
"""Bounded pattern induction using a caller-mounted, pinned ReFormeR checkout.
|
|
2
|
+
|
|
3
|
+
The native extractor's prompt, parser and iterative replacement rule execute
|
|
4
|
+
unchanged. Only its Ollama transport and two broken import paths are bridged.
|
|
5
|
+
Use a dedicated process: upstream imports and logging are process-global.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import argparse
|
|
11
|
+
import hashlib
|
|
12
|
+
import math
|
|
13
|
+
import sys
|
|
14
|
+
import threading
|
|
15
|
+
import types
|
|
16
|
+
from collections.abc import Mapping, Sequence
|
|
17
|
+
from contextlib import contextmanager, redirect_stdout
|
|
18
|
+
from dataclasses import asdict, dataclass
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
from agentinputlab.contracts import ValidationError
|
|
23
|
+
|
|
24
|
+
from .driver import (
|
|
25
|
+
INDUCTION_PATH,
|
|
26
|
+
PROMPT_MANAGER_PATH,
|
|
27
|
+
PROMPT_PATH,
|
|
28
|
+
UPSTREAM_COMMIT,
|
|
29
|
+
BackendConfig,
|
|
30
|
+
CompatibilityPolicy,
|
|
31
|
+
CompletionBackend,
|
|
32
|
+
Controls,
|
|
33
|
+
DriverError,
|
|
34
|
+
OpenAICompatibleBackend,
|
|
35
|
+
UsageTracker,
|
|
36
|
+
_canonical_hash,
|
|
37
|
+
_canonical_json,
|
|
38
|
+
_load_module,
|
|
39
|
+
_load_patterns,
|
|
40
|
+
_loads_strict_json,
|
|
41
|
+
_sha256_file,
|
|
42
|
+
load_compatibility_policy,
|
|
43
|
+
verify_checkout,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
RELEASE_ID = "training.reformer.pattern_induction"
|
|
47
|
+
PROMPT_BUILDER_PATH = "reformer/patterns/query_reformulation_prompts.py"
|
|
48
|
+
ADAPTER_REVISION = "native-induction-import-transport-bridge.v1"
|
|
49
|
+
_IMPORT_LOCK = threading.RLock()
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _save(path: Path, value: Any) -> None:
|
|
53
|
+
with path.open("x", encoding="utf-8") as handle:
|
|
54
|
+
handle.write(_canonical_json(value) + "\n")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@dataclass(frozen=True, slots=True)
|
|
58
|
+
class ReFormeRQueryPair:
|
|
59
|
+
query_id: str
|
|
60
|
+
original_query: str
|
|
61
|
+
reformulated_query: str | None = None
|
|
62
|
+
split: str = "train"
|
|
63
|
+
|
|
64
|
+
def __post_init__(self) -> None:
|
|
65
|
+
if not isinstance(self.split, str) or self.split not in {"train", "validation", "test"}:
|
|
66
|
+
raise ValidationError("ReFormeR pair split must be train, validation or test")
|
|
67
|
+
for name in ("query_id", "original_query"):
|
|
68
|
+
value = getattr(self, name)
|
|
69
|
+
if not isinstance(value, str) or not value.strip() or len(value) > 48_000:
|
|
70
|
+
raise ValidationError(f"ReFormeR {name} must be non-empty bounded text")
|
|
71
|
+
if "\x00" in value:
|
|
72
|
+
raise ValidationError(f"ReFormeR {name} must not contain NUL")
|
|
73
|
+
# Held-out queries are used for split isolation, never for induction.
|
|
74
|
+
# Their callers need not invent unused target rewrites to declare them.
|
|
75
|
+
if self.split != "train" and self.reformulated_query is None:
|
|
76
|
+
return
|
|
77
|
+
value = self.reformulated_query
|
|
78
|
+
if not isinstance(value, str) or not value.strip() or len(value) > 48_000:
|
|
79
|
+
raise ValidationError("ReFormeR reformulated_query must be non-empty bounded text")
|
|
80
|
+
if "\x00" in value:
|
|
81
|
+
raise ValidationError("ReFormeR reformulated_query must not contain NUL")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass(frozen=True, slots=True)
|
|
85
|
+
class ReFormeRInductionControls:
|
|
86
|
+
batch_size: int = 2
|
|
87
|
+
max_patterns: int = 25
|
|
88
|
+
max_model_calls: int = 8
|
|
89
|
+
max_tokens: int = 4096
|
|
90
|
+
max_cost_usd: float = 10.0
|
|
91
|
+
seed: int = 17
|
|
92
|
+
|
|
93
|
+
def __post_init__(self) -> None:
|
|
94
|
+
for name in ("batch_size", "max_patterns", "max_model_calls", "max_tokens", "seed"):
|
|
95
|
+
value = getattr(self, name)
|
|
96
|
+
if (
|
|
97
|
+
isinstance(value, bool)
|
|
98
|
+
or not isinstance(value, int)
|
|
99
|
+
or value < (0 if name == "seed" else 1)
|
|
100
|
+
):
|
|
101
|
+
raise ValidationError(f"ReFormeR induction {name} is invalid")
|
|
102
|
+
if (
|
|
103
|
+
isinstance(self.max_cost_usd, bool)
|
|
104
|
+
or not isinstance(self.max_cost_usd, (int, float))
|
|
105
|
+
or not math.isfinite(self.max_cost_usd)
|
|
106
|
+
or self.max_cost_usd < 0
|
|
107
|
+
):
|
|
108
|
+
raise ValidationError("ReFormeR induction max_cost_usd is invalid")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def validate_induction_splits(
|
|
112
|
+
training_pairs: Sequence[ReFormeRQueryPair],
|
|
113
|
+
held_out_pairs: Sequence[ReFormeRQueryPair],
|
|
114
|
+
) -> dict[str, Any]:
|
|
115
|
+
"""Audit caller-declared splits; does not infer unseen dataset membership."""
|
|
116
|
+
if not training_pairs or not held_out_pairs:
|
|
117
|
+
raise ValidationError("ReFormeR fit requires train pairs and declared held-out pairs")
|
|
118
|
+
seen_ids: set[str] = set()
|
|
119
|
+
seen_queries: set[str] = set()
|
|
120
|
+
for pairs, train in ((training_pairs, True), (held_out_pairs, False)):
|
|
121
|
+
for pair in pairs:
|
|
122
|
+
if not isinstance(pair, ReFormeRQueryPair):
|
|
123
|
+
raise ValidationError("ReFormeR fit requires ReFormeRQueryPair records")
|
|
124
|
+
if (pair.split == "train") is not train:
|
|
125
|
+
raise ValidationError("ReFormeR training/held-out split assignment is invalid")
|
|
126
|
+
query = " ".join(pair.original_query.casefold().split())
|
|
127
|
+
if pair.query_id in seen_ids or query in seen_queries:
|
|
128
|
+
raise ValidationError("ReFormeR duplicate ID/query or train/held-out overlap")
|
|
129
|
+
seen_ids.add(pair.query_id)
|
|
130
|
+
seen_queries.add(query)
|
|
131
|
+
return {
|
|
132
|
+
"training_ids": [pair.query_id for pair in training_pairs],
|
|
133
|
+
"held_out_ids": [pair.query_id for pair in held_out_pairs],
|
|
134
|
+
"training_sha256": _canonical_hash([asdict(pair) for pair in training_pairs]),
|
|
135
|
+
"held_out_sha256": _canonical_hash([asdict(pair) for pair in held_out_pairs]),
|
|
136
|
+
"scope": "caller_declared_records_only",
|
|
137
|
+
"held_out_used_in_model_prompts": False,
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def _blocked_ollama(*args, **kwargs):
|
|
142
|
+
raise DriverError("UNDECLARED_MODEL_TRANSPORT", "native Ollama transport is not enabled")
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@contextmanager
|
|
146
|
+
def _native_induction(root: Path):
|
|
147
|
+
"""Bind the pinned source's missing relative/absolute imports, then restore."""
|
|
148
|
+
with _IMPORT_LOCK:
|
|
149
|
+
prefix = "_ail_reformer_induction_" + hashlib.sha256(str(root).encode()).hexdigest()[:16]
|
|
150
|
+
package = prefix + ".reformer"
|
|
151
|
+
patterns = package + ".patterns"
|
|
152
|
+
names = (
|
|
153
|
+
prefix,
|
|
154
|
+
package,
|
|
155
|
+
patterns,
|
|
156
|
+
package + ".prompt_manager",
|
|
157
|
+
patterns + ".prompt_manager",
|
|
158
|
+
patterns + ".query_reformulation_prompts",
|
|
159
|
+
patterns + ".iterative_pattern_extraction",
|
|
160
|
+
"query_reformulation_prompts",
|
|
161
|
+
"ollama",
|
|
162
|
+
)
|
|
163
|
+
previous = {name: sys.modules.get(name) for name in names}
|
|
164
|
+
bytecode = sys.dont_write_bytecode
|
|
165
|
+
sys.dont_write_bytecode = True
|
|
166
|
+
try:
|
|
167
|
+
for name, path in (
|
|
168
|
+
(prefix, root),
|
|
169
|
+
(package, root / "reformer"),
|
|
170
|
+
(patterns, root / "reformer/patterns"),
|
|
171
|
+
):
|
|
172
|
+
module = types.ModuleType(name)
|
|
173
|
+
module.__package__ = name
|
|
174
|
+
module.__path__ = [str(path)]
|
|
175
|
+
sys.modules[name] = module
|
|
176
|
+
stub = types.ModuleType("ollama")
|
|
177
|
+
stub.Client = _blocked_ollama
|
|
178
|
+
sys.modules["ollama"] = stub
|
|
179
|
+
manager = _load_module(package + ".prompt_manager", root / PROMPT_MANAGER_PATH)
|
|
180
|
+
sys.modules[patterns + ".prompt_manager"] = manager
|
|
181
|
+
prompts = _load_module(
|
|
182
|
+
patterns + ".query_reformulation_prompts", root / PROMPT_BUILDER_PATH
|
|
183
|
+
)
|
|
184
|
+
sys.modules["query_reformulation_prompts"] = prompts
|
|
185
|
+
native = _load_module(patterns + ".iterative_pattern_extraction", root / INDUCTION_PATH)
|
|
186
|
+
yield native.IterativePatternExtractor, prompts.QueryPair
|
|
187
|
+
finally:
|
|
188
|
+
sys.dont_write_bytecode = bytecode
|
|
189
|
+
for name, value in previous.items():
|
|
190
|
+
if value is None:
|
|
191
|
+
sys.modules.pop(name, None)
|
|
192
|
+
else:
|
|
193
|
+
sys.modules[name] = value
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
@dataclass(frozen=True, slots=True)
|
|
197
|
+
class ReFormeRPatternArtifact:
|
|
198
|
+
root: Path
|
|
199
|
+
artifact_id: str
|
|
200
|
+
pattern_sha256: str
|
|
201
|
+
patterns: tuple[Mapping[str, Any], ...]
|
|
202
|
+
|
|
203
|
+
@property
|
|
204
|
+
def pattern_path(self) -> Path:
|
|
205
|
+
return self.root / "patterns.json"
|
|
206
|
+
|
|
207
|
+
@classmethod
|
|
208
|
+
def load(cls, root: str | Path) -> ReFormeRPatternArtifact:
|
|
209
|
+
supplied = Path(root).expanduser()
|
|
210
|
+
if supplied.is_symlink():
|
|
211
|
+
raise ValidationError("ReFormeR artifact root must not be a symlink")
|
|
212
|
+
folder = supplied.resolve(strict=True)
|
|
213
|
+
for name in ("artifact.json", "fit-terminal.json", "patterns.json"):
|
|
214
|
+
if (folder / name).is_symlink() or not (folder / name).is_file():
|
|
215
|
+
raise ValidationError("ReFormeR fitted artifact file is unavailable")
|
|
216
|
+
terminal = _loads_strict_json((folder / "fit-terminal.json").read_text(encoding="utf-8"))
|
|
217
|
+
meta = _loads_strict_json((folder / "artifact.json").read_text(encoding="utf-8"))
|
|
218
|
+
if (
|
|
219
|
+
not isinstance(terminal, dict)
|
|
220
|
+
or terminal.get("status") != "candidate_generated"
|
|
221
|
+
or not isinstance(meta, dict)
|
|
222
|
+
or meta.get("release_id") != RELEASE_ID
|
|
223
|
+
or meta.get("schema_version") != "agentinputlab.reformer.pattern_artifact.v1"
|
|
224
|
+
or meta.get("upstream_commit") != UPSTREAM_COMMIT
|
|
225
|
+
or meta.get("artifact_id")
|
|
226
|
+
!= _canonical_hash({key: value for key, value in meta.items() if key != "artifact_id"})
|
|
227
|
+
or terminal.get("artifact_id") != meta.get("artifact_id")
|
|
228
|
+
or _sha256_file(folder / "patterns.json") != meta.get("pattern_sha256")
|
|
229
|
+
):
|
|
230
|
+
raise ValidationError("ReFormeR fitted artifact identity/status mismatch")
|
|
231
|
+
patterns = _load_patterns(folder / "patterns.json")
|
|
232
|
+
if not meta.get("usage", {}).get("model_calls") or not meta.get("split_audit"):
|
|
233
|
+
raise ValidationError("ReFormeR fitted artifact lacks fit provenance")
|
|
234
|
+
return cls(folder, meta["artifact_id"], meta["pattern_sha256"], patterns)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
class ReFormeRPatternInduction:
|
|
238
|
+
"""Fit a pattern library; candidate generation is not held-out acceptance."""
|
|
239
|
+
|
|
240
|
+
def __init__(self, controls: ReFormeRInductionControls | None = None):
|
|
241
|
+
self.controls = controls or ReFormeRInductionControls()
|
|
242
|
+
|
|
243
|
+
def fit(
|
|
244
|
+
self,
|
|
245
|
+
*,
|
|
246
|
+
checkout: str | Path,
|
|
247
|
+
training_pairs: Sequence[ReFormeRQueryPair],
|
|
248
|
+
held_out_pairs: Sequence[ReFormeRQueryPair],
|
|
249
|
+
output_root: str | Path,
|
|
250
|
+
backend_config: BackendConfig,
|
|
251
|
+
backend: CompletionBackend,
|
|
252
|
+
source_license_acknowledged: bool = False,
|
|
253
|
+
policy: CompatibilityPolicy | None = None,
|
|
254
|
+
) -> ReFormeRPatternArtifact:
|
|
255
|
+
if source_license_acknowledged is not True:
|
|
256
|
+
raise ValidationError("ReFormeR requires acknowledgement of caller-mounted source")
|
|
257
|
+
training_pairs, held_out_pairs = tuple(training_pairs), tuple(held_out_pairs)
|
|
258
|
+
audit = validate_induction_splits(training_pairs, held_out_pairs)
|
|
259
|
+
c = self.controls
|
|
260
|
+
batches = (len(training_pairs) + c.batch_size - 1) // c.batch_size
|
|
261
|
+
if batches > c.max_model_calls:
|
|
262
|
+
raise ValidationError("ReFormeR declared training batches exceed model-call budget")
|
|
263
|
+
policy = policy or load_compatibility_policy()
|
|
264
|
+
source = verify_checkout(Path(checkout), policy)
|
|
265
|
+
if not {INDUCTION_PATH, PROMPT_PATH, PROMPT_BUILDER_PATH} <= set(policy.source_hashes):
|
|
266
|
+
raise ValidationError("ReFormeR induction source closure is incomplete")
|
|
267
|
+
if _canonical_json(backend.fingerprint()) != _canonical_json(backend_config.fingerprint):
|
|
268
|
+
raise ValidationError("ReFormeR induction backend identity differs from config")
|
|
269
|
+
supplied = Path(output_root).expanduser()
|
|
270
|
+
if supplied.is_symlink():
|
|
271
|
+
raise ValidationError("ReFormeR fit output must not be a symlink")
|
|
272
|
+
root = supplied.resolve()
|
|
273
|
+
if root.is_relative_to(source) or source.is_relative_to(root):
|
|
274
|
+
raise ValidationError("ReFormeR fit output must be separate from upstream source")
|
|
275
|
+
root.mkdir(parents=True, exist_ok=False)
|
|
276
|
+
tracker = UsageTracker(
|
|
277
|
+
Controls(c.max_model_calls, c.max_tokens, c.max_cost_usd), backend_config
|
|
278
|
+
)
|
|
279
|
+
_save(
|
|
280
|
+
root / "fit-start.json",
|
|
281
|
+
{
|
|
282
|
+
"release_id": RELEASE_ID,
|
|
283
|
+
"adapter_revision": ADAPTER_REVISION,
|
|
284
|
+
"controls": asdict(c),
|
|
285
|
+
"backend": dict(backend_config.fingerprint),
|
|
286
|
+
"backend_settings": {
|
|
287
|
+
"per_call_output_tokens": backend_config.max_output_tokens,
|
|
288
|
+
"temperature": backend_config.temperature,
|
|
289
|
+
},
|
|
290
|
+
"source_hashes": dict(policy.source_hashes),
|
|
291
|
+
"split_audit": audit,
|
|
292
|
+
"automatic_retry": False,
|
|
293
|
+
"upstream_transport": "replaced_ollama_with_bounded_backend",
|
|
294
|
+
"import_path_repairs": ["patterns.prompt_manager", "query_reformulation_prompts"],
|
|
295
|
+
},
|
|
296
|
+
)
|
|
297
|
+
try:
|
|
298
|
+
with _native_induction(source) as (extractor_class, pair_class):
|
|
299
|
+
extractor = extractor_class.__new__(extractor_class)
|
|
300
|
+
extractor.max_patterns = c.max_patterns
|
|
301
|
+
extractor.consolidated_patterns = []
|
|
302
|
+
extractor.individual_patterns = []
|
|
303
|
+
for index in range(batches):
|
|
304
|
+
if _canonical_json(backend.fingerprint()) != _canonical_json(
|
|
305
|
+
backend_config.fingerprint
|
|
306
|
+
):
|
|
307
|
+
raise ValidationError("ReFormeR training backend changed identity")
|
|
308
|
+
pairs = training_pairs[index * c.batch_size : (index + 1) * c.batch_size]
|
|
309
|
+
native_pairs = [
|
|
310
|
+
pair_class(pair.original_query, pair.reformulated_query, pair.query_id)
|
|
311
|
+
for pair in pairs
|
|
312
|
+
]
|
|
313
|
+
journal = root / f"batch-{index + 1:04d}"
|
|
314
|
+
journal.mkdir()
|
|
315
|
+
|
|
316
|
+
def call_llm(messages, *, _journal=journal, _index=index):
|
|
317
|
+
_save(
|
|
318
|
+
_journal / "request.json",
|
|
319
|
+
{
|
|
320
|
+
"messages": messages,
|
|
321
|
+
"seed": c.seed + _index,
|
|
322
|
+
"max_output_tokens": backend_config.max_output_tokens,
|
|
323
|
+
"temperature": backend_config.temperature,
|
|
324
|
+
"backend": dict(backend_config.fingerprint),
|
|
325
|
+
},
|
|
326
|
+
)
|
|
327
|
+
text = tracker.complete(
|
|
328
|
+
backend,
|
|
329
|
+
stage="pattern_induction",
|
|
330
|
+
messages=messages,
|
|
331
|
+
seed=c.seed + _index,
|
|
332
|
+
)
|
|
333
|
+
_save(
|
|
334
|
+
_journal / "response.json",
|
|
335
|
+
{
|
|
336
|
+
"text": text,
|
|
337
|
+
"usage_cumulative": tracker.as_dict(),
|
|
338
|
+
"model_trace": tracker.stages,
|
|
339
|
+
},
|
|
340
|
+
)
|
|
341
|
+
return {"choices": [{"message": {"content": text}}]}
|
|
342
|
+
|
|
343
|
+
extractor.call_llm = call_llm
|
|
344
|
+
# Native parser and consolidation semantics, not a local replacement.
|
|
345
|
+
with redirect_stdout(sys.stderr):
|
|
346
|
+
result = extractor.extract_patterns_from_batch(native_pairs, index + 1)
|
|
347
|
+
extractor.consolidated_patterns = result
|
|
348
|
+
_save(
|
|
349
|
+
journal / "native-result.json",
|
|
350
|
+
{
|
|
351
|
+
"patterns": [asdict(pattern) for pattern in result],
|
|
352
|
+
"individual_patterns": extractor.individual_patterns,
|
|
353
|
+
"empty_native_result": not bool(result),
|
|
354
|
+
},
|
|
355
|
+
)
|
|
356
|
+
_save(root / "patterns.json", [asdict(p) for p in extractor.consolidated_patterns])
|
|
357
|
+
verify_checkout(source, policy)
|
|
358
|
+
if _canonical_json(backend.fingerprint()) != _canonical_json(
|
|
359
|
+
backend_config.fingerprint
|
|
360
|
+
):
|
|
361
|
+
raise ValidationError("ReFormeR training backend changed identity")
|
|
362
|
+
patterns = _load_patterns(root / "patterns.json")
|
|
363
|
+
meta = {
|
|
364
|
+
"schema_version": "agentinputlab.reformer.pattern_artifact.v1",
|
|
365
|
+
"release_id": RELEASE_ID,
|
|
366
|
+
"upstream_commit": UPSTREAM_COMMIT,
|
|
367
|
+
"source_hashes": dict(policy.source_hashes),
|
|
368
|
+
"split_audit": audit,
|
|
369
|
+
"backend": dict(backend_config.fingerprint),
|
|
370
|
+
"controls": asdict(c),
|
|
371
|
+
"usage": tracker.as_dict(),
|
|
372
|
+
"pattern_count": len(patterns),
|
|
373
|
+
"pattern_sha256": _sha256_file(root / "patterns.json"),
|
|
374
|
+
"held_out_acceptance_complete": False,
|
|
375
|
+
"paper_result_parity_claimed": False,
|
|
376
|
+
}
|
|
377
|
+
meta["artifact_id"] = _canonical_hash(meta)
|
|
378
|
+
_save(root / "artifact.json", meta)
|
|
379
|
+
_save(
|
|
380
|
+
root / "fit-terminal.json",
|
|
381
|
+
{
|
|
382
|
+
"status": "candidate_generated",
|
|
383
|
+
"artifact_id": meta["artifact_id"],
|
|
384
|
+
"usage": tracker.as_dict(),
|
|
385
|
+
"model_trace": tracker.stages,
|
|
386
|
+
"automatic_retry": False,
|
|
387
|
+
"held_out_acceptance_complete": False,
|
|
388
|
+
},
|
|
389
|
+
)
|
|
390
|
+
return ReFormeRPatternArtifact.load(root)
|
|
391
|
+
except Exception as exc:
|
|
392
|
+
terminal = {
|
|
393
|
+
"status": "failed_fit" if tracker.model_calls else "entry_failure",
|
|
394
|
+
"error_type": type(exc).__name__,
|
|
395
|
+
"error_code": exc.code if isinstance(exc, DriverError) else None,
|
|
396
|
+
"usage": tracker.as_dict(),
|
|
397
|
+
"model_trace": tracker.stages,
|
|
398
|
+
"provider_usage_unknown": tracker.model_calls > len(tracker.stages)
|
|
399
|
+
or any(
|
|
400
|
+
"failure_code" in stage and stage.get("provider_usage") is None
|
|
401
|
+
for stage in tracker.stages
|
|
402
|
+
),
|
|
403
|
+
"automatic_retry": False,
|
|
404
|
+
"held_out_acceptance_complete": False,
|
|
405
|
+
}
|
|
406
|
+
if not (root / "fit-terminal.json").exists():
|
|
407
|
+
_save(root / "fit-terminal.json", terminal)
|
|
408
|
+
raise
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
def main(argv: Sequence[str] | None = None) -> int:
|
|
412
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
413
|
+
parser.add_argument("--checkout", required=True)
|
|
414
|
+
parser.add_argument(
|
|
415
|
+
"--pairs", required=True, type=Path, help="JSON list of declared split pairs"
|
|
416
|
+
)
|
|
417
|
+
parser.add_argument("--backend-config", required=True, type=Path)
|
|
418
|
+
parser.add_argument("--output", required=True, type=Path)
|
|
419
|
+
parser.add_argument("--acknowledge-external-source", action="store_true")
|
|
420
|
+
parser.add_argument("--batch-size", type=int, default=2)
|
|
421
|
+
parser.add_argument("--max-patterns", type=int, default=25)
|
|
422
|
+
parser.add_argument("--max-model-calls", type=int, default=8)
|
|
423
|
+
parser.add_argument("--max-tokens", type=int, default=4096)
|
|
424
|
+
parser.add_argument("--seed", type=int, default=17)
|
|
425
|
+
args = parser.parse_args(argv)
|
|
426
|
+
pairs = [ReFormeRQueryPair(**row) for row in _loads_strict_json(args.pairs.read_text())]
|
|
427
|
+
config = BackendConfig.from_json(args.backend_config.read_text(encoding="utf-8"))
|
|
428
|
+
controls = ReFormeRInductionControls(
|
|
429
|
+
batch_size=args.batch_size,
|
|
430
|
+
max_patterns=args.max_patterns,
|
|
431
|
+
max_model_calls=args.max_model_calls,
|
|
432
|
+
max_tokens=args.max_tokens,
|
|
433
|
+
seed=args.seed,
|
|
434
|
+
)
|
|
435
|
+
artifact = ReFormeRPatternInduction(controls).fit(
|
|
436
|
+
checkout=args.checkout,
|
|
437
|
+
training_pairs=[p for p in pairs if p.split == "train"],
|
|
438
|
+
held_out_pairs=[p for p in pairs if p.split != "train"],
|
|
439
|
+
output_root=args.output,
|
|
440
|
+
backend_config=config,
|
|
441
|
+
backend=OpenAICompatibleBackend(config),
|
|
442
|
+
source_license_acknowledged=args.acknowledge_external_source,
|
|
443
|
+
)
|
|
444
|
+
print(
|
|
445
|
+
_canonical_json(
|
|
446
|
+
{
|
|
447
|
+
"status": "candidate_generated",
|
|
448
|
+
"artifact_id": artifact.artifact_id,
|
|
449
|
+
"pattern_sha256": artifact.pattern_sha256,
|
|
450
|
+
}
|
|
451
|
+
)
|
|
452
|
+
)
|
|
453
|
+
return 0
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
if __name__ == "__main__":
|
|
457
|
+
raise SystemExit(main())
|
workers/rrr/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Rewrite-Retrieve-Read quarantined inference worker
|
|
2
|
+
|
|
3
|
+
The toolkit's recommended RRR entrypoint is
|
|
4
|
+
[`rewrite.rrr.common_support_prompt`](../../docs/rrr-controlled.md), which uses
|
|
5
|
+
the configured backbone and shared retriever. It runs through the Python core
|
|
6
|
+
without this external worker or an author warm-up/PPO checkpoint. This document
|
|
7
|
+
covers the separately selected external-worker profiles.
|
|
8
|
+
|
|
9
|
+
This worker supports the separable inference chain from
|
|
10
|
+
[`xbmxb/RAG-query-rewriting`](https://github.com/xbmxb/RAG-query-rewriting) at
|
|
11
|
+
commit `6bab6243e60c7f3e526b6ee44f95381b1024d471`:
|
|
12
|
+
|
|
13
|
+
`rewrite prompt/model -> parsed query -> fixed search artifact -> snippets -> frozen reader`
|
|
14
|
+
|
|
15
|
+
It remains `external_only`. The repository has no root license file, its
|
|
16
|
+
published `complete()` function is an empty stub, and a redacted security scan
|
|
17
|
+
of the pinned tarball reports credential-risk assignments in seven source
|
|
18
|
+
paths. AgentInputLab therefore never vendors, extracts, imports, or echoes the
|
|
19
|
+
upstream source or any suspected value. The tarball is used only for commit,
|
|
20
|
+
byte-hash, absent-license, AST-symbol, and risk-count evidence. Output evidence
|
|
21
|
+
is `pinned_tarball_compatible_chain`, not native execution or paper parity.
|
|
22
|
+
|
|
23
|
+
## Mandatory gates
|
|
24
|
+
|
|
25
|
+
Execution requires all of the following:
|
|
26
|
+
|
|
27
|
+
1. the adapter sets `source_license_acknowledged=True`;
|
|
28
|
+
2. the adapter sets `checkpoint_license_acknowledged=True`;
|
|
29
|
+
3. the worker receives `--acknowledge-noassertion-source`;
|
|
30
|
+
4. the worker receives `--acknowledge-noassertion-checkpoints`;
|
|
31
|
+
5. the operator explicitly keeps the risky tarball quarantined with
|
|
32
|
+
`--acknowledge-credential-quarantine`.
|
|
33
|
+
|
|
34
|
+
Source, rewriter, reader, prompt, search cache, and dataset licenses are
|
|
35
|
+
independent. Both checkpoint manifests must retain `license: "NOASSERTION"`.
|
|
36
|
+
No upstream data, cache, source, or weights are included in wheels/sdists.
|
|
37
|
+
|
|
38
|
+
## Frozen comparison identity
|
|
39
|
+
|
|
40
|
+
Every request binds the two prompt byte hashes; prompt/warm-up/PPO rewriter
|
|
41
|
+
checkpoint revision; frozen-reader revision; model-deployment fingerprints;
|
|
42
|
+
search-cache or controlled-retriever artifact; corpus/index revisions; top-k;
|
|
43
|
+
search time window; seed; input character limits; generation token limits; and
|
|
44
|
+
the complete input hash. Successful requests report two model calls and one
|
|
45
|
+
search; failures retain only the calls and usage actually consumed. Local
|
|
46
|
+
encoder-decoder output accounting excludes the supplied decoder-start prefix,
|
|
47
|
+
while decoded output and generation limits stay unchanged.
|
|
48
|
+
Requests cannot choose paths, modules, URLs, environment variables, or
|
|
49
|
+
credentials.
|
|
50
|
+
|
|
51
|
+
The official single-query parser boundary is preserved: generation ends at
|
|
52
|
+
`**`, queries use `;`, and this release accepts exactly one query. Search uses
|
|
53
|
+
the rewritten query; the frozen reader receives the original task query plus
|
|
54
|
+
the joined snippets, matching the upstream `rewrite -> rewrite2` data flow.
|
|
55
|
+
|
|
56
|
+
`bing_cache` is a `controlled_adapter` with `search_profile=bing_cache`. It
|
|
57
|
+
replays a frozen Bing result artifact; the worker never calls the
|
|
58
|
+
credential-bearing Bing code.
|
|
59
|
+
`controlled_static` requires a matching retriever fingerprint and is always
|
|
60
|
+
labelled `controlled_adapter`, never native.
|
|
61
|
+
|
|
62
|
+
## Checkpoint inference only
|
|
63
|
+
|
|
64
|
+
The rewriter checkpoint manifest supports `prompt`, `warmup_checkpoint`, and
|
|
65
|
+
`ppo_checkpoint`; these are inference profiles. The reader uses
|
|
66
|
+
`frozen_reader`. Local loading uses Hugging Face with
|
|
67
|
+
`local_files_only=True`, `trust_remote_code=False`, and deterministic greedy
|
|
68
|
+
generation. There is no PPO training command or code path.
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"schema_version": "agentinputlab.rrr.checkpoint.v1",
|
|
73
|
+
"role": "rewriter",
|
|
74
|
+
"profile": "ppo_checkpoint",
|
|
75
|
+
"revision": "immutable-checkpoint-revision",
|
|
76
|
+
"model_type": "seq2seq",
|
|
77
|
+
"license": "NOASSERTION",
|
|
78
|
+
"files": {
|
|
79
|
+
"config.json": "<sha256>",
|
|
80
|
+
"model.safetensors": "<sha256>"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Search cache and commands
|
|
86
|
+
|
|
87
|
+
The JSON search artifact uses schema `agentinputlab.rrr.search-cache.v1` and
|
|
88
|
+
records `mode`, corpus/index revisions, ISO date window, and exact query-to-row
|
|
89
|
+
entries. Its raw SHA-256 is `search_artifact_hash`.
|
|
90
|
+
|
|
91
|
+
Source/symbol/security smoke test (never imports source):
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python workers/rrr/driver.py \
|
|
95
|
+
--source-tarball /mounted/6bab6243.tar.gz \
|
|
96
|
+
--smoke-source
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Inference:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
python workers/rrr/driver.py \
|
|
103
|
+
--source-tarball /mounted/6bab6243.tar.gz \
|
|
104
|
+
--prompt /mounted/rewrite-prompt.txt \
|
|
105
|
+
--reader-prompt /mounted/reader-prompt.txt \
|
|
106
|
+
--search-cache /mounted/search-cache.json \
|
|
107
|
+
--rewriter-checkpoint /mounted/rewriter \
|
|
108
|
+
--rewriter-manifest /mounted/rewriter-manifest.json \
|
|
109
|
+
--reader-checkpoint /mounted/reader \
|
|
110
|
+
--reader-manifest /mounted/reader-manifest.json \
|
|
111
|
+
--acknowledge-noassertion-source \
|
|
112
|
+
--acknowledge-noassertion-checkpoints \
|
|
113
|
+
--acknowledge-credential-quarantine
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Fake-tarball tests prove transport, trajectory, redaction, identity, fairness,
|
|
117
|
+
budgets, and license gates only. The opt-in real-tarball test proves byte and
|
|
118
|
+
source-symbol evidence. Neither is a benchmark-result parity claim.
|
|
119
|
+
|
|
120
|
+
An existing pinned Git checkout can replace the archive for the same inference
|
|
121
|
+
chain. Use `--source-checkout /mounted/RAG-query-rewriting` instead of
|
|
122
|
+
`--source-tarball`. This verifies the exact commit/root, the manifest's required
|
|
123
|
+
file SHA-256 locks, tracked Python Git blobs, AST symbols and credential-risk
|
|
124
|
+
inventory without reading bundled datasets or downloading the archive. It never
|
|
125
|
+
imports the checkout. Evidence is `pinned_checkout_compatible_chain`; the complete
|
|
126
|
+
archive checksum and historical Bing/checkpoint parity are not claimed.
|
workers/rrr/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Pinned Rewrite-Retrieve-Read worker package."""
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "agentinputlab.rrr.compatibility.v1",
|
|
3
|
+
"evidence_level": "pinned_tarball_compatible_chain",
|
|
4
|
+
"upstream": {
|
|
5
|
+
"repository": "https://github.com/xbmxb/RAG-query-rewriting",
|
|
6
|
+
"commit": "6bab6243e60c7f3e526b6ee44f95381b1024d471",
|
|
7
|
+
"archive_root": "RAG-query-rewriting-6bab6243e60c7f3e526b6ee44f95381b1024d471",
|
|
8
|
+
"tarball_sha256": "1fc4e570e00cb6be98914ec8e59f575864d5808db1cca463d9de1d1f7929b2fb",
|
|
9
|
+
"license_spdx": "NOASSERTION",
|
|
10
|
+
"license_file_present": false
|
|
11
|
+
},
|
|
12
|
+
"source_files": {
|
|
13
|
+
"README.md": "09c104d796416cdf24089cae5fbfaf2d348cccb39f525b5e1a3cb85f0eff2cb9",
|
|
14
|
+
"generate/inference.py": "9ef3486c2abf7091dd7173a0f3fe3f35aebecd4679eae47ef8c447bddcfea95d",
|
|
15
|
+
"generate/main-0514.py": "aad3c565e5fcf7185c4cb0cc66ee4a14661e634a715aaca8f31ed2e0b7f09aad",
|
|
16
|
+
"generate/bingenv.py": "7a7e61f3111c06db61e9e67b30f85b30cb164b2f6ad5631aee08fb4d496d50ec",
|
|
17
|
+
"generate/bing.py": "d1b1cb3c9c0041adb31163d714e95f5525137957e057be2ffc841e56cb81e045",
|
|
18
|
+
"generate/interllama.py": "9f78e03af4f7258b20d3429055cce6aaf2a63e8fd9107ca30e02fc74e0ae9fd6",
|
|
19
|
+
"generate/inprompts/myprompt.jsonl": "1483b80e5b81a26b97641cc2a5c4535c045eb39394d2b88651aade0d4afa5fb4",
|
|
20
|
+
"result_models/README.md": "f207247939fd65d359a5c3821047ec4db1df5757d2b7aac0bc22a6726c0f9dfd",
|
|
21
|
+
"rl/RL4LMs/rl4lms/envs/text_generation/warm_start.py": "0ee13eebfe1cc17cfad6c3d343cd06771e445db33a3c7014884b02381cd3c920"
|
|
22
|
+
},
|
|
23
|
+
"required_symbols": {
|
|
24
|
+
"generate/inference.py": ["add_prompt", "run_main", "run_searchre"],
|
|
25
|
+
"generate/main-0514.py": ["rewrite", "rewrite2"],
|
|
26
|
+
"generate/bingenv.py": ["BingEnv"],
|
|
27
|
+
"rl/RL4LMs/rl4lms/envs/text_generation/warm_start.py": ["ActorOnlyWarmStartMixin"]
|
|
28
|
+
},
|
|
29
|
+
"credential_risk_paths": [
|
|
30
|
+
"datasets/tasks/mmlu/evaluate.py",
|
|
31
|
+
"generate/bing.py",
|
|
32
|
+
"generate/bing_utils/bing.py",
|
|
33
|
+
"rl/RL4LMs/rl4lms/envs/text_generation/bing.py",
|
|
34
|
+
"rl/RL4LMs/rl4lms/envs/text_generation/bing_utils/bing.py",
|
|
35
|
+
"rl/RL4LMs/rl4lms/envs/text_generation/llm_utils.py",
|
|
36
|
+
"rl/RL4LMs/rl4lms/envs/text_generation/vicuna_utils.py"
|
|
37
|
+
],
|
|
38
|
+
"runtime_contract": {
|
|
39
|
+
"stage_order": ["rewrite", "retrieve", "snippet", "reader"],
|
|
40
|
+
"query_separator": ";",
|
|
41
|
+
"generation_terminator": "**",
|
|
42
|
+
"search_wrapper": "search[{query}]",
|
|
43
|
+
"snippet_joiner": " ",
|
|
44
|
+
"supported_rewriter_profiles": ["prompt", "warmup_checkpoint", "ppo_checkpoint"],
|
|
45
|
+
"supported_search_modes": ["bing_cache", "controlled_static"],
|
|
46
|
+
"imports_upstream_runtime": false,
|
|
47
|
+
"trains_ppo": false
|
|
48
|
+
},
|
|
49
|
+
"artifact_policy": {
|
|
50
|
+
"checkpoint_license": "NOASSERTION",
|
|
51
|
+
"bundle_source": false,
|
|
52
|
+
"bundle_checkpoints": false,
|
|
53
|
+
"bundle_search_cache": false,
|
|
54
|
+
"local_files_only": true,
|
|
55
|
+
"trust_remote_code": false
|
|
56
|
+
}
|
|
57
|
+
}
|