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,427 @@
|
|
|
1
|
+
"""Bounded, source-verifiable TREC passage samples, never a full-corpus download."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import gzip
|
|
6
|
+
import hashlib
|
|
7
|
+
import io
|
|
8
|
+
import json
|
|
9
|
+
import time
|
|
10
|
+
import urllib.parse
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
from agentinputlab.contracts import ArtifactError, ValidationError
|
|
15
|
+
|
|
16
|
+
from .downloader import DownloadPolicy, DownloadTransport, _validate_peer, validate_download_url
|
|
17
|
+
from .http import PinnedHTTPSDownloadTransport
|
|
18
|
+
from .storage import require_storage_capacity
|
|
19
|
+
|
|
20
|
+
_HOSTS = (
|
|
21
|
+
"trec.nist.gov",
|
|
22
|
+
"msmarco.z22.web.core.windows.net",
|
|
23
|
+
"huggingface.co",
|
|
24
|
+
"datasets-server.huggingface.co",
|
|
25
|
+
)
|
|
26
|
+
_BUNDLE_LIMIT = 16 * 1024 * 1024
|
|
27
|
+
_COMPONENT_LIMIT = 256 * 1024
|
|
28
|
+
_REPO = "BeIR/msmarco"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _sha(raw: bytes) -> str:
|
|
32
|
+
return hashlib.sha256(raw).hexdigest()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _json(raw: bytes) -> Any:
|
|
36
|
+
try:
|
|
37
|
+
value = json.loads(raw)
|
|
38
|
+
except (ValueError, UnicodeError) as exc:
|
|
39
|
+
raise ArtifactError("TREC source returned invalid JSON") from exc
|
|
40
|
+
if not isinstance(value, dict):
|
|
41
|
+
raise ArtifactError("TREC source JSON must be an object")
|
|
42
|
+
return value
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _write(path: Path, raw: bytes) -> None:
|
|
46
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
47
|
+
if path.is_symlink():
|
|
48
|
+
raise ArtifactError("TREC cache component must not be a symlink")
|
|
49
|
+
if path.exists():
|
|
50
|
+
if path.read_bytes() != raw:
|
|
51
|
+
raise ArtifactError("TREC cache differs; original bytes were not overwritten")
|
|
52
|
+
return
|
|
53
|
+
with path.open("xb") as stream:
|
|
54
|
+
stream.write(raw)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _dump(value: Any) -> bytes:
|
|
58
|
+
return json.dumps(value, sort_keys=True, ensure_ascii=False, allow_nan=False).encode()
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def prepare_trec_dl_sample(
|
|
62
|
+
root: str | Path,
|
|
63
|
+
*,
|
|
64
|
+
year: int,
|
|
65
|
+
query_count: int = 2,
|
|
66
|
+
query_offset: int = 0,
|
|
67
|
+
background_count: int = 32,
|
|
68
|
+
offline: bool = False,
|
|
69
|
+
accept_license_review: bool = False,
|
|
70
|
+
max_download_bytes: int = _BUNDLE_LIMIT,
|
|
71
|
+
expected_corpus_revision: str | None = None,
|
|
72
|
+
source_sample_root: str | Path | None = None,
|
|
73
|
+
source_manifest_sha256: str | None = None,
|
|
74
|
+
transport: DownloadTransport | None = None,
|
|
75
|
+
) -> dict[str, Any]:
|
|
76
|
+
"""Prepare or reuse a small official-source compatibility sample.
|
|
77
|
+
|
|
78
|
+
Queries are selected lexicographically before any model output. ``query_offset``
|
|
79
|
+
permits independent fitting groups without modifying a saved test sample.
|
|
80
|
+
Candidate passages are explicitly gold-enriched: these are compatibility
|
|
81
|
+
inputs, not full TREC performance estimates. All source bytes/revisions and
|
|
82
|
+
original grades are retained; binary metrics continue to use grade >= 2.
|
|
83
|
+
|
|
84
|
+
Missing components use a DNS-pinned HTTPS transport. ``offline=True`` never
|
|
85
|
+
performs network IO. A supplied source sample must carry its pinned manifest;
|
|
86
|
+
its verified query/qrel/row resources may be reused, never modified. Partial
|
|
87
|
+
preparation resumes from verified components, without redownloading them.
|
|
88
|
+
"""
|
|
89
|
+
if type(year) is not int or year not in (2019, 2020):
|
|
90
|
+
raise ValidationError("TREC sample year must be 2019 or 2020")
|
|
91
|
+
for name, value, low, high in (
|
|
92
|
+
("query_count", query_count, 1, 8),
|
|
93
|
+
("query_offset", query_offset, 0, 10000),
|
|
94
|
+
("background_count", background_count, 1, 32),
|
|
95
|
+
("max_download_bytes", max_download_bytes, 1, _BUNDLE_LIMIT),
|
|
96
|
+
):
|
|
97
|
+
if type(value) is not int or not low <= value <= high:
|
|
98
|
+
raise ValidationError(f"TREC {name} must be between {low} and {high}")
|
|
99
|
+
if type(offline) is not bool or accept_license_review is not True:
|
|
100
|
+
raise ValidationError("review TREC/MS MARCO data terms and set accept_license_review=True")
|
|
101
|
+
if expected_corpus_revision is not None and (
|
|
102
|
+
not isinstance(expected_corpus_revision, str)
|
|
103
|
+
or len(expected_corpus_revision) != 40
|
|
104
|
+
or any(c not in "0123456789abcdef" for c in expected_corpus_revision)
|
|
105
|
+
):
|
|
106
|
+
raise ValidationError("expected_corpus_revision must be a full lowercase Hub commit SHA")
|
|
107
|
+
if (source_sample_root is None) != (source_manifest_sha256 is None):
|
|
108
|
+
raise ValidationError("a reusable source sample requires its manifest SHA-256")
|
|
109
|
+
from agentinputlab.benchmarks.trec_dl_sample import TRECDLSampleAdapter
|
|
110
|
+
|
|
111
|
+
reused: dict[str, bytes] = {}
|
|
112
|
+
reused_revisions: dict[str, str | None] = {}
|
|
113
|
+
if source_sample_root is not None:
|
|
114
|
+
old = TRECDLSampleAdapter(
|
|
115
|
+
source_sample_root, manifest_sha256=source_manifest_sha256, license_acknowledged=True
|
|
116
|
+
)
|
|
117
|
+
for item in old.manifest["resources"]:
|
|
118
|
+
path = old.root / item["path"]
|
|
119
|
+
if path.is_symlink() or path.stat().st_size != item["size_bytes"]:
|
|
120
|
+
raise ArtifactError("reusable TREC source component changed")
|
|
121
|
+
raw = path.read_bytes()
|
|
122
|
+
if _sha(raw) != item["sha256"]:
|
|
123
|
+
raise ArtifactError("reusable TREC source checksum changed")
|
|
124
|
+
reused[item["url"]] = raw
|
|
125
|
+
reused_revisions[item["url"]] = (
|
|
126
|
+
item["source_revision"] if item["role"] == "corpus_rows" else None
|
|
127
|
+
)
|
|
128
|
+
destination = Path(root).expanduser()
|
|
129
|
+
if destination.is_symlink():
|
|
130
|
+
raise ArtifactError("TREC sample destination must not be a symlink")
|
|
131
|
+
destination.mkdir(parents=True, exist_ok=True)
|
|
132
|
+
destination = destination.resolve()
|
|
133
|
+
for name in ("resources", "requests"):
|
|
134
|
+
if (destination / name).is_symlink():
|
|
135
|
+
raise ArtifactError("TREC cache directories must not be symlinks")
|
|
136
|
+
lock = destination / ".prepare-lock"
|
|
137
|
+
deadline = time.monotonic() + 120
|
|
138
|
+
while True:
|
|
139
|
+
try:
|
|
140
|
+
lock.mkdir()
|
|
141
|
+
break
|
|
142
|
+
except FileExistsError:
|
|
143
|
+
if lock.is_symlink() or not lock.is_dir():
|
|
144
|
+
raise ArtifactError("unsafe TREC preparation lock") from None
|
|
145
|
+
if time.monotonic() >= deadline:
|
|
146
|
+
raise ArtifactError(
|
|
147
|
+
"another TREC preparation holds the lock; cache was not modified"
|
|
148
|
+
) from None
|
|
149
|
+
time.sleep(0.02)
|
|
150
|
+
lock_identity = lock.stat().st_ino
|
|
151
|
+
try:
|
|
152
|
+
controls = dict(
|
|
153
|
+
year=year,
|
|
154
|
+
query_count=query_count,
|
|
155
|
+
query_offset=query_offset,
|
|
156
|
+
background_count=background_count,
|
|
157
|
+
expected_corpus_revision=expected_corpus_revision,
|
|
158
|
+
)
|
|
159
|
+
plan = destination / "preparation.json"
|
|
160
|
+
if not plan.exists() and any(p != lock for p in destination.iterdir()):
|
|
161
|
+
raise ArtifactError("destination is not an empty toolkit sample cache")
|
|
162
|
+
_write(plan, _dump(controls))
|
|
163
|
+
manifest_path = destination / "manifest.json"
|
|
164
|
+
if manifest_path.exists():
|
|
165
|
+
if manifest_path.is_symlink():
|
|
166
|
+
raise ArtifactError("unsafe TREC sample manifest")
|
|
167
|
+
digest = _sha(manifest_path.read_bytes())
|
|
168
|
+
adapter = TRECDLSampleAdapter(
|
|
169
|
+
destination, manifest_sha256=digest, license_acknowledged=True
|
|
170
|
+
)
|
|
171
|
+
return dict(
|
|
172
|
+
root=str(destination.resolve()),
|
|
173
|
+
manifest_sha256=digest,
|
|
174
|
+
counts=dict(adapter.manifest["counts"]),
|
|
175
|
+
acquired_from="verified_cache",
|
|
176
|
+
corpus_scope="fixed_gold_enriched_compatibility_subset",
|
|
177
|
+
full_dataset_score=False,
|
|
178
|
+
downloaded_bytes=0,
|
|
179
|
+
)
|
|
180
|
+
require_storage_capacity([(destination, max_download_bytes + _BUNDLE_LIMIT)])
|
|
181
|
+
client = transport if transport is not None else PinnedHTTPSDownloadTransport()
|
|
182
|
+
policy = DownloadPolicy(
|
|
183
|
+
allow_network=not offline,
|
|
184
|
+
allowed_hosts=_HOSTS,
|
|
185
|
+
max_bytes=max_download_bytes,
|
|
186
|
+
timeout_seconds=60,
|
|
187
|
+
max_redirects=3,
|
|
188
|
+
)
|
|
189
|
+
downloaded = [0]
|
|
190
|
+
|
|
191
|
+
def get(
|
|
192
|
+
url: str, *, revision: str | None = None, discovery: bool = False
|
|
193
|
+
) -> tuple[bytes, str]:
|
|
194
|
+
key = _sha(url.encode())
|
|
195
|
+
if discovery:
|
|
196
|
+
if offline:
|
|
197
|
+
candidates = sorted((destination / "requests").glob(key + "-*.json"))
|
|
198
|
+
if not candidates:
|
|
199
|
+
raise ArtifactError("TREC corpus identity is not cached for offline use")
|
|
200
|
+
key = candidates[-1].stem
|
|
201
|
+
else:
|
|
202
|
+
key += "-" + str(time.time_ns())
|
|
203
|
+
meta = destination / "requests" / (key + ".json")
|
|
204
|
+
name = "resources/" + key + ".raw"
|
|
205
|
+
path = destination / name
|
|
206
|
+
if meta.exists():
|
|
207
|
+
if meta.is_symlink() or path.is_symlink():
|
|
208
|
+
raise ArtifactError("unsafe TREC source cache")
|
|
209
|
+
record = _json(meta.read_bytes())
|
|
210
|
+
raw = path.read_bytes()
|
|
211
|
+
expected = dict(url=url, path=name, sha256=_sha(raw), size_bytes=len(raw))
|
|
212
|
+
if revision is not None:
|
|
213
|
+
expected["corpus_revision"] = revision
|
|
214
|
+
if record != expected:
|
|
215
|
+
raise ArtifactError("TREC source cache integrity differs")
|
|
216
|
+
return raw, name
|
|
217
|
+
if url in reused and reused_revisions[url] == revision:
|
|
218
|
+
raw = reused[url]
|
|
219
|
+
else:
|
|
220
|
+
if offline:
|
|
221
|
+
raise ArtifactError(
|
|
222
|
+
"TREC source component is not cached; offline mode forbids download"
|
|
223
|
+
)
|
|
224
|
+
target = validate_download_url(url, policy)
|
|
225
|
+
remaining = max_download_bytes - downloaded[0]
|
|
226
|
+
if remaining < 1:
|
|
227
|
+
raise ArtifactError("TREC source download allowance exhausted")
|
|
228
|
+
for hop in range(policy.max_redirects + 1):
|
|
229
|
+
response = client.request(target, timeout_seconds=60, max_bytes=remaining)
|
|
230
|
+
_validate_peer(response.peer_address, target)
|
|
231
|
+
headers = {k.lower(): v for k, v in response.headers.items()}
|
|
232
|
+
if headers.get("content-encoding", "identity").lower() != "identity":
|
|
233
|
+
raise ArtifactError("TREC source transport must return identity encoding")
|
|
234
|
+
try:
|
|
235
|
+
declared = int(headers.get("content-length", len(response.body)))
|
|
236
|
+
except (ValueError, TypeError) as exc:
|
|
237
|
+
raise ArtifactError("TREC source Content-Length is invalid") from exc
|
|
238
|
+
if declared < 0 or declared > remaining:
|
|
239
|
+
raise ArtifactError("TREC source declared size exceeds download allowance")
|
|
240
|
+
if 300 <= response.status_code < 400:
|
|
241
|
+
location = next(
|
|
242
|
+
(v for k, v in response.headers.items() if k.lower() == "location"),
|
|
243
|
+
None,
|
|
244
|
+
)
|
|
245
|
+
if not location or hop == policy.max_redirects:
|
|
246
|
+
raise ArtifactError("TREC source redirect is absent or exceeds limit")
|
|
247
|
+
target = validate_download_url(
|
|
248
|
+
urllib.parse.urljoin(target.url, location), policy
|
|
249
|
+
)
|
|
250
|
+
continue
|
|
251
|
+
if response.status_code != 200:
|
|
252
|
+
raise ArtifactError(f"TREC source returned HTTP {response.status_code}")
|
|
253
|
+
break
|
|
254
|
+
raw = response.body
|
|
255
|
+
if not isinstance(raw, bytes) or len(raw) > remaining:
|
|
256
|
+
raise ArtifactError("TREC source exceeds bounded download allowance")
|
|
257
|
+
downloaded[0] += len(raw)
|
|
258
|
+
if len(raw) > _BUNDLE_LIMIT:
|
|
259
|
+
raise ArtifactError("TREC source component exceeds sample bound")
|
|
260
|
+
_write(path, raw)
|
|
261
|
+
record = dict(url=url, path=name, sha256=_sha(raw), size_bytes=len(raw))
|
|
262
|
+
if revision is not None:
|
|
263
|
+
record["corpus_revision"] = revision
|
|
264
|
+
_write(meta, _dump(record))
|
|
265
|
+
return raw, name
|
|
266
|
+
|
|
267
|
+
resources = []
|
|
268
|
+
|
|
269
|
+
def resource(url: str, role: str, revision: str | None = None) -> bytes:
|
|
270
|
+
raw, name = get(url, revision=revision)
|
|
271
|
+
if len(raw) > _COMPONENT_LIMIT:
|
|
272
|
+
raise ArtifactError("TREC native source component exceeds 256 KiB")
|
|
273
|
+
resources.append(
|
|
274
|
+
dict(
|
|
275
|
+
path=name,
|
|
276
|
+
role=role,
|
|
277
|
+
url=url,
|
|
278
|
+
sha256=_sha(raw),
|
|
279
|
+
size_bytes=len(raw),
|
|
280
|
+
source_revision=revision or _sha(raw),
|
|
281
|
+
)
|
|
282
|
+
)
|
|
283
|
+
return raw
|
|
284
|
+
|
|
285
|
+
metadata = _json(get("https://huggingface.co/api/datasets/BeIR/msmarco", discovery=True)[0])
|
|
286
|
+
revision = metadata.get("sha")
|
|
287
|
+
if (
|
|
288
|
+
not isinstance(revision, str)
|
|
289
|
+
or len(revision) != 40
|
|
290
|
+
or any(c not in "0123456789abcdef" for c in revision)
|
|
291
|
+
or (expected_corpus_revision is not None and revision != expected_corpus_revision)
|
|
292
|
+
):
|
|
293
|
+
raise ArtifactError("TREC corpus Hub revision differs from the explicit pin")
|
|
294
|
+
splits = _json(
|
|
295
|
+
get("https://datasets-server.huggingface.co/splits?dataset=BeIR%2Fmsmarco")[0]
|
|
296
|
+
)
|
|
297
|
+
if not any(
|
|
298
|
+
s.get("config") == "corpus" and s.get("split") == "corpus"
|
|
299
|
+
for s in splits.get("splits", [])
|
|
300
|
+
):
|
|
301
|
+
raise ArtifactError("Dataset Viewer did not expose the native corpus split")
|
|
302
|
+
qrel_raw = resource(f"https://trec.nist.gov/data/deep/{year}qrels-pass.txt", "qrels")
|
|
303
|
+
query_raw = resource(
|
|
304
|
+
"https://msmarco.z22.web.core.windows.net/msmarcoranking/"
|
|
305
|
+
f"msmarco-test{year}-queries.tsv.gz",
|
|
306
|
+
"queries_gzip",
|
|
307
|
+
)
|
|
308
|
+
with gzip.GzipFile(fileobj=io.BytesIO(query_raw)) as stream:
|
|
309
|
+
plain = stream.read(_COMPONENT_LIMIT + 1)
|
|
310
|
+
if len(plain) > _COMPONENT_LIMIT:
|
|
311
|
+
raise ArtifactError("decoded TREC query source exceeds bound")
|
|
312
|
+
queries = {}
|
|
313
|
+
for line in plain.decode().splitlines():
|
|
314
|
+
qid, text = line.split("\t", 1)
|
|
315
|
+
if qid in queries:
|
|
316
|
+
raise ArtifactError("duplicate official TREC query")
|
|
317
|
+
queries[qid] = text
|
|
318
|
+
qrels: dict[str, dict[str, int]] = {}
|
|
319
|
+
for line in qrel_raw.decode().splitlines():
|
|
320
|
+
qid, unused, did, label = line.split()
|
|
321
|
+
grade = int(label)
|
|
322
|
+
if (
|
|
323
|
+
unused not in ("0", "Q0")
|
|
324
|
+
or grade not in range(4)
|
|
325
|
+
or did in qrels.setdefault(qid, {})
|
|
326
|
+
):
|
|
327
|
+
raise ArtifactError("official TREC qrel duplicate or grade differs")
|
|
328
|
+
qrels[qid][did] = grade
|
|
329
|
+
chosen = sorted(set(qrels) & set(queries))[query_offset : query_offset + query_count]
|
|
330
|
+
if len(chosen) != query_count:
|
|
331
|
+
raise ArtifactError("insufficient independent official TREC queries")
|
|
332
|
+
wanted = set()
|
|
333
|
+
for qid in chosen:
|
|
334
|
+
if not any(g >= 2 for g in qrels[qid].values()):
|
|
335
|
+
raise ArtifactError("selected TREC query has no relevant official judgement")
|
|
336
|
+
for grade, count in ((0, 2), (1, 1), (2, 2), (3, 1)):
|
|
337
|
+
wanted.update(sorted(d for d, g in qrels[qid].items() if g == grade)[:count])
|
|
338
|
+
corpus: dict[str, dict] = {}
|
|
339
|
+
|
|
340
|
+
def rows(offset: int, length: int) -> None:
|
|
341
|
+
url = "https://datasets-server.huggingface.co/rows?" + urllib.parse.urlencode(
|
|
342
|
+
dict(dataset=_REPO, config="corpus", split="corpus", offset=offset, length=length)
|
|
343
|
+
)
|
|
344
|
+
raw = resource(url, "corpus_rows", revision)
|
|
345
|
+
value = _json(raw)
|
|
346
|
+
if len(value.get("rows", [])) != length:
|
|
347
|
+
raise ArtifactError("Dataset Viewer returned a partial source row range")
|
|
348
|
+
for index, entry in enumerate(value["rows"]):
|
|
349
|
+
row = entry["row"]
|
|
350
|
+
did = str(row["_id"])
|
|
351
|
+
if entry.get("truncated_cells") != [] or did != str(offset + index):
|
|
352
|
+
raise ArtifactError("Dataset Viewer returned truncated/different passage IDs")
|
|
353
|
+
corpus[did] = dict(id=did, title=row.get("title", ""), text=row["text"], forum="")
|
|
354
|
+
|
|
355
|
+
rows(0, background_count)
|
|
356
|
+
for did in sorted(wanted - corpus.keys()):
|
|
357
|
+
if not did.isdecimal():
|
|
358
|
+
raise ArtifactError("TREC passage ID is not a native numeric row ID")
|
|
359
|
+
rows(int(did), 1)
|
|
360
|
+
normalized = {
|
|
361
|
+
"inputs.jsonl": [
|
|
362
|
+
dict(
|
|
363
|
+
id=qid,
|
|
364
|
+
query=queries[qid],
|
|
365
|
+
instruction="Retrieve passages.",
|
|
366
|
+
visible_metadata=dict(
|
|
367
|
+
benchmark_cell=f"trec_dl.{year}", source_split="test", forum=""
|
|
368
|
+
),
|
|
369
|
+
)
|
|
370
|
+
for qid in chosen
|
|
371
|
+
],
|
|
372
|
+
"gold.jsonl": [
|
|
373
|
+
dict(id=qid, relevance={d: g for d, g in qrels[qid].items() if d in corpus})
|
|
374
|
+
for qid in chosen
|
|
375
|
+
],
|
|
376
|
+
"corpus.jsonl": list(corpus.values()),
|
|
377
|
+
}
|
|
378
|
+
files = {}
|
|
379
|
+
for name, records in normalized.items():
|
|
380
|
+
raw = b"".join(_dump(r) + b"\n" for r in records)
|
|
381
|
+
_write(destination / name, raw)
|
|
382
|
+
files[name] = dict(sha256=_sha(raw), size_bytes=len(raw))
|
|
383
|
+
manifest = dict(
|
|
384
|
+
schema_version="agentinputlab.trec_dl.sample.v1",
|
|
385
|
+
benchmark_id=f"trec_dl.{year}",
|
|
386
|
+
split="test",
|
|
387
|
+
corpus_scope="fixed_gold_enriched_compatibility_subset",
|
|
388
|
+
full_dataset_score=False,
|
|
389
|
+
full_benchmark_corpus_download=False,
|
|
390
|
+
binary_relevance_threshold=2,
|
|
391
|
+
corpus_repository=_REPO,
|
|
392
|
+
corpus_revision=revision,
|
|
393
|
+
license_ids={"microsoft/msmarco": "CC-BY-4.0", "BeIR/msmarco": "CC-BY-SA-4.0"},
|
|
394
|
+
files=files,
|
|
395
|
+
resources=resources,
|
|
396
|
+
counts=dict(inputs=len(chosen), gold=len(chosen), corpus=len(corpus)),
|
|
397
|
+
query_selection=f"lexicographic_judged_query_ids[{query_offset}:{query_offset + query_count}]",
|
|
398
|
+
candidate_selection="per_query_first2grade0_first1grade1_first2grade2_first1grade3_plus_background",
|
|
399
|
+
)
|
|
400
|
+
raw = _dump(manifest)
|
|
401
|
+
if (
|
|
402
|
+
len(raw)
|
|
403
|
+
+ sum(x["size_bytes"] for x in resources)
|
|
404
|
+
+ sum(x["size_bytes"] for x in files.values())
|
|
405
|
+
> _BUNDLE_LIMIT
|
|
406
|
+
):
|
|
407
|
+
raise ArtifactError("TREC normalized sample exceeds native 16 MiB bundle bound")
|
|
408
|
+
_write(manifest_path, raw)
|
|
409
|
+
digest = _sha(raw)
|
|
410
|
+
adapter = TRECDLSampleAdapter(
|
|
411
|
+
destination, manifest_sha256=digest, license_acknowledged=True
|
|
412
|
+
)
|
|
413
|
+
return dict(
|
|
414
|
+
root=str(destination.resolve()),
|
|
415
|
+
manifest_sha256=digest,
|
|
416
|
+
counts=dict(adapter.manifest["counts"]),
|
|
417
|
+
acquired_from="bounded_source_preparation",
|
|
418
|
+
corpus_scope="fixed_gold_enriched_compatibility_subset",
|
|
419
|
+
full_dataset_score=False,
|
|
420
|
+
downloaded_bytes=downloaded[0],
|
|
421
|
+
)
|
|
422
|
+
finally:
|
|
423
|
+
if lock.is_dir() and not lock.is_symlink() and lock.stat().st_ino == lock_identity:
|
|
424
|
+
lock.rmdir()
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
__all__ = ["prepare_trec_dl_sample"]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Outcome records used by paired analyses and the leaderboard."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
|
+
|
|
8
|
+
from agentinputlab.contracts.enums import StrEnum
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FailureCategory(StrEnum):
|
|
12
|
+
NONE = "none"
|
|
13
|
+
ASSET_MISSING = "asset_missing"
|
|
14
|
+
LICENSE_NOT_ACCEPTED = "license_not_accepted"
|
|
15
|
+
ENVIRONMENT_BOOT_FAILURE = "environment_boot_failure"
|
|
16
|
+
CAPABILITY_MISMATCH = "capability_mismatch"
|
|
17
|
+
PARSER_FAILURE = "parser_failure"
|
|
18
|
+
BUDGET_EXHAUSTED = "budget_exhausted"
|
|
19
|
+
FALLBACK = "fallback"
|
|
20
|
+
INTENT_DRIFT = "intent_drift"
|
|
21
|
+
BALANCE_FAILURE = "balance_failure"
|
|
22
|
+
UPSTREAM_ERROR = "upstream_error"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass(frozen=True, slots=True)
|
|
26
|
+
class Outcome:
|
|
27
|
+
example_id: str
|
|
28
|
+
release_id: str
|
|
29
|
+
success: bool
|
|
30
|
+
score: float | None
|
|
31
|
+
failure: FailureCategory = FailureCategory.NONE
|
|
32
|
+
metrics: Mapping[str, float] = field(default_factory=dict)
|