benchflow 0.6.7.dev1843__tar.gz → 0.6.7.dev1845__tar.gz
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.
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/live_activity.py +7 -4
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_live_progress.py +19 -9
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/contracts/planes.py +16 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_runtime.py +56 -1
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/runtime.py +9 -2
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/__init__.py +60 -2
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_live_progress.py +98 -1
- benchflow-0.6.7.dev1845/tests/test_live_llm_trajectory.py +437 -0
- benchflow-0.6.7.dev1843/tests/test_live_llm_trajectory.py +0 -238
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/.gitignore +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/LICENSE +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/README.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_job.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_tree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.7.
|
|
3
|
+
Version: 0.6.7.dev1845
|
|
4
4
|
Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
|
|
5
5
|
Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
|
|
6
6
|
Project-URL: Repository, https://github.com/benchflow-ai/benchflow
|
|
@@ -18,10 +18,13 @@ from typing import Any, NamedTuple
|
|
|
18
18
|
class SessionCounters(NamedTuple):
|
|
19
19
|
"""The live ACP session counters the console heartbeat logs.
|
|
20
20
|
|
|
21
|
-
``total_tokens`` is None until
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
``total_tokens`` is None until a live usage signal exists: the producer
|
|
22
|
+
(``Rollout.activity_snapshot``) fills it with max(ACP prompt-completion
|
|
23
|
+
snapshot, LiteLLM gateway live-capture total), so it becomes non-None as
|
|
24
|
+
soon as the gateway has mirrored a usage-bearing record — mid-prompt —
|
|
25
|
+
even when no ACP prompt has completed yet. ``distinct_tools`` counts
|
|
26
|
+
distinct tool display titles seen this session; None means unknown, which
|
|
27
|
+
renderers treat like varied (keep the ``last:`` cell).
|
|
25
28
|
"""
|
|
26
29
|
|
|
27
30
|
tool_calls: int
|
|
@@ -162,9 +162,12 @@ def _activity_cell(snap: live_activity.ActivitySnapshot | None) -> str:
|
|
|
162
162
|
which the Live display otherwise mutes. Until the agent session exists
|
|
163
163
|
(and after it is closed for the verifier) the cell shows the rollout's
|
|
164
164
|
lifecycle phase as a label instead, and a registry miss (None) shows the
|
|
165
|
-
fallback label, so the row is never blank. Tokens appear
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
fallback label, so the row is never blank. Tokens appear as soon as
|
|
166
|
+
either live signal exists — the gateway's live callback capture (per
|
|
167
|
+
completed LLM request, i.e. mid-prompt) or the ACP usage snapshot (per
|
|
168
|
+
completed prompt); ``Rollout.activity_snapshot`` reconciles the two as
|
|
169
|
+
max(). Once tokens are present, a single-tool agent's cell is
|
|
170
|
+
``38 calls · 412.0k tok`` (no ``last:``).
|
|
168
171
|
"""
|
|
169
172
|
if snap is None:
|
|
170
173
|
return _PHASE_FALLBACK
|
|
@@ -379,12 +382,19 @@ class LiveEvalProgress:
|
|
|
379
382
|
parts.append(tbl)
|
|
380
383
|
|
|
381
384
|
# Footer: pass-rate (excl errors) + token/cost economics. Tokens sum
|
|
382
|
-
# the completed tasks' trusted telemetry PLUS the running
|
|
383
|
-
# live
|
|
384
|
-
#
|
|
385
|
-
#
|
|
386
|
-
#
|
|
387
|
-
#
|
|
385
|
+
# the completed tasks' trusted telemetry PLUS the running rollouts'
|
|
386
|
+
# live usage — per running task, max(ACP prompt-completion snapshot,
|
|
387
|
+
# gateway live-capture total): the gateway side steps forward per
|
|
388
|
+
# completed LLM *request*, so a single-prompt agent phase shows its
|
|
389
|
+
# spend while the prompt runs, not only at scoring (the ACP side
|
|
390
|
+
# alone stays empty until the prompt completes). Reconciliation
|
|
391
|
+
# (documented at Rollout.activity_snapshot): max() keeps the running
|
|
392
|
+
# figure monotonic whichever signal leads, and degrades to the
|
|
393
|
+
# ACP-only value when the gateway capture is unavailable. The total
|
|
394
|
+
# is still NOT monotonic across a task's completion boundary: scoring
|
|
395
|
+
# swaps the live figure for the trusted gateway import (which can be
|
|
396
|
+
# lower than either live signal — untracked discards, cache
|
|
397
|
+
# accounting, ACP over-report), and a task completing with
|
|
388
398
|
# untrusted/absent telemetry drops its live contribution entirely —
|
|
389
399
|
# a sole-task footer can collapse back to "— tokens". Clamping would
|
|
390
400
|
# falsify the trusted sum, so the dip is intended. Show "—" (not 0 /
|
|
@@ -13,6 +13,22 @@ from typing import Any, Protocol, runtime_checkable
|
|
|
13
13
|
from benchflow.environment.manifest import EnvironmentManifest
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
class LiveUsageGateway(Protocol):
|
|
17
|
+
"""A provider gateway process that reports live cumulative token usage.
|
|
18
|
+
|
|
19
|
+
The eval dashboard's mid-prompt token signal reads this accessor through
|
|
20
|
+
the rollout kernel (``Rollout.activity_snapshot`` →
|
|
21
|
+
``_gateway_live_tokens``), which cannot import the concrete provider
|
|
22
|
+
plane — so the NAME is agreed here, at the contract boundary.
|
|
23
|
+
``LiteLLMProcess`` asserts static conformance in
|
|
24
|
+
``benchflow.providers.litellm_runtime``; renaming the accessor on either
|
|
25
|
+
side fails the type checker there instead of silently blanking the
|
|
26
|
+
dashboard signal.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def live_usage_tokens(self) -> int | None: ...
|
|
30
|
+
|
|
31
|
+
|
|
16
32
|
@runtime_checkable
|
|
17
33
|
class RolloutPlanes(Protocol):
|
|
18
34
|
"""Concrete-plane operations the rollout kernel needs."""
|
{benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_runtime.py
RENAMED
|
@@ -19,7 +19,7 @@ import tempfile
|
|
|
19
19
|
from collections.abc import Awaitable, Callable, Mapping
|
|
20
20
|
from dataclasses import dataclass
|
|
21
21
|
from pathlib import Path
|
|
22
|
-
from typing import Any, NoReturn, cast
|
|
22
|
+
from typing import TYPE_CHECKING, Any, NoReturn, cast
|
|
23
23
|
from uuid import uuid4
|
|
24
24
|
|
|
25
25
|
import httpx
|
|
@@ -54,6 +54,9 @@ from benchflow.trajectories._llm_capture import LiveLLMTrajectoryWriter
|
|
|
54
54
|
from benchflow.trajectories.types import Trajectory
|
|
55
55
|
from benchflow.usage_tracking import UsageTrackingConfig, usage_unavailable
|
|
56
56
|
|
|
57
|
+
if TYPE_CHECKING:
|
|
58
|
+
from benchflow.contracts.planes import LiveUsageGateway
|
|
59
|
+
|
|
57
60
|
logger = logging.getLogger(__name__)
|
|
58
61
|
|
|
59
62
|
LITELLM_VERSION_SPEC = "litellm[proxy]==1.89.0"
|
|
@@ -99,6 +102,10 @@ class LiteLLMProcess:
|
|
|
99
102
|
trajectory: Trajectory | None
|
|
100
103
|
session_id: str
|
|
101
104
|
agent_name: str
|
|
105
|
+
# Live-capture token counter (class-level defaults so reads are plain
|
|
106
|
+
# attribute access even before start_live_capture ever runs).
|
|
107
|
+
_live_usage_total_tokens: int = 0
|
|
108
|
+
_live_usage_seen: bool = False
|
|
102
109
|
|
|
103
110
|
@property
|
|
104
111
|
def base_url(self) -> str:
|
|
@@ -126,8 +133,30 @@ class LiteLLMProcess:
|
|
|
126
133
|
)
|
|
127
134
|
self._live_callback_offset = 0
|
|
128
135
|
self._live_callback_remainder = b""
|
|
136
|
+
# Clear ``seen`` BEFORE the total so a racing render-thread read can
|
|
137
|
+
# only observe None (fresh capture) — never a transient "0 tokens".
|
|
138
|
+
self._live_usage_seen = False
|
|
139
|
+
self._live_usage_total_tokens = 0
|
|
129
140
|
self._live_capture_task = asyncio.create_task(self._live_capture_loop())
|
|
130
141
|
|
|
142
|
+
def live_usage_tokens(self) -> int | None:
|
|
143
|
+
"""Cumulative provider tokens the live callback capture has mirrored.
|
|
144
|
+
|
|
145
|
+
Read-only, O(1) — safe to call from the dashboard's render thread while
|
|
146
|
+
the capture loop appends on the event loop (two monotonic attribute
|
|
147
|
+
reads; a torn read is at worst one record stale). None until a
|
|
148
|
+
usage-bearing gateway record has been parsed, so callers can tell "no
|
|
149
|
+
signal yet" from a genuine zero. The value updates per completed LLM
|
|
150
|
+
*request* — mid-prompt — which is exactly the granularity the ACP
|
|
151
|
+
per-completed-prompt snapshots lack (a single-prompt rollout otherwise
|
|
152
|
+
shows no tokens until scoring). It may lag the gateway log by the
|
|
153
|
+
capture cadence/backlog and is display-only: trusted usage still comes
|
|
154
|
+
from the full log import at ``stop()``.
|
|
155
|
+
"""
|
|
156
|
+
if not self._live_usage_seen:
|
|
157
|
+
return None
|
|
158
|
+
return self._live_usage_total_tokens
|
|
159
|
+
|
|
131
160
|
async def _read_callback_chunk(self, offset: int, limit: int) -> bytes:
|
|
132
161
|
raise NotImplementedError
|
|
133
162
|
|
|
@@ -157,6 +186,19 @@ class LiteLLMProcess:
|
|
|
157
186
|
)
|
|
158
187
|
if parsed.exchanges:
|
|
159
188
|
trajectory.exchanges.extend(parsed.exchanges)
|
|
189
|
+
# Live token counter for the eval dashboard: accumulate the
|
|
190
|
+
# same canonical per-exchange accounting scoring sums at
|
|
191
|
+
# stop() (Trajectory.total_provider_tokens over the same
|
|
192
|
+
# parser's output), so the live figure converges to the
|
|
193
|
+
# trusted total as the capture catches up. Failure records
|
|
194
|
+
# carry no usage and leave the counter untouched.
|
|
195
|
+
if parsed.has_provider_usage:
|
|
196
|
+
# Total before ``seen``: a racing reader can never
|
|
197
|
+
# observe seen=True with a not-yet-updated total.
|
|
198
|
+
self._live_usage_total_tokens += int(
|
|
199
|
+
parsed.total_provider_tokens
|
|
200
|
+
)
|
|
201
|
+
self._live_usage_seen = True
|
|
160
202
|
changed = True
|
|
161
203
|
if len(chunk) < _LIVE_CAPTURE_CHUNK_BYTES:
|
|
162
204
|
break
|
|
@@ -189,6 +231,19 @@ class LiteLLMProcess:
|
|
|
189
231
|
writer.reconcile(self.trajectory)
|
|
190
232
|
|
|
191
233
|
|
|
234
|
+
def _live_usage_gateway_conformance(process: LiteLLMProcess) -> LiveUsageGateway:
|
|
235
|
+
"""Static assertion: LiteLLMProcess satisfies the contract the rollout
|
|
236
|
+
kernel's dashboard read binds to (``contracts.planes.LiveUsageGateway``).
|
|
237
|
+
|
|
238
|
+
The kernel cannot import this module (#515 architecture invariant), so
|
|
239
|
+
its ``server.live_usage_tokens()`` call is dynamically typed there; this
|
|
240
|
+
return-type check is what makes a rename of the accessor — on either the
|
|
241
|
+
protocol or the process side — fail ``ty`` instead of silently blanking
|
|
242
|
+
the live token signal. Never called at runtime.
|
|
243
|
+
"""
|
|
244
|
+
return process
|
|
245
|
+
|
|
246
|
+
|
|
192
247
|
class HostLiteLLMProcess(LiteLLMProcess):
|
|
193
248
|
def __init__(
|
|
194
249
|
self,
|
|
@@ -9,10 +9,13 @@ from __future__ import annotations
|
|
|
9
9
|
|
|
10
10
|
from dataclasses import dataclass
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import Any
|
|
12
|
+
from typing import TYPE_CHECKING, Any
|
|
13
13
|
|
|
14
14
|
from benchflow.usage_tracking import UsageTrackingConfig
|
|
15
15
|
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from benchflow.providers.litellm_runtime import LiteLLMProcess
|
|
18
|
+
|
|
16
19
|
|
|
17
20
|
@dataclass
|
|
18
21
|
class ProviderRuntime:
|
|
@@ -21,7 +24,11 @@ class ProviderRuntime:
|
|
|
21
24
|
kind: str
|
|
22
25
|
agent_base_url: str
|
|
23
26
|
backend_model: str | None = None
|
|
24
|
-
|
|
27
|
+
# Typed (not Any) so cross-module reads of the server's accessors —
|
|
28
|
+
# e.g. the dashboard's live_usage_tokens dig in rollout — are bound by
|
|
29
|
+
# the type checker: a rename on LiteLLMProcess breaks ty, not silently
|
|
30
|
+
# blanks a signal behind a getattr default.
|
|
31
|
+
server: LiteLLMProcess | None = None
|
|
25
32
|
config_key: str | None = None
|
|
26
33
|
master_key: str | None = None
|
|
27
34
|
|
|
@@ -581,6 +581,43 @@ async def _run_environment_healthcheck(env: Any, task: Any) -> None:
|
|
|
581
581
|
await asyncio.sleep(delay)
|
|
582
582
|
|
|
583
583
|
|
|
584
|
+
def _gateway_live_tokens(runtime: Any) -> int | None:
|
|
585
|
+
"""Cumulative provider tokens from the LiteLLM gateway's live capture.
|
|
586
|
+
|
|
587
|
+
Piggybacks on the llm_trajectory.jsonl mirror the proxy runtime already
|
|
588
|
+
runs for every rollout (``LiteLLMProcess.start_live_capture``, wired in
|
|
589
|
+
``connect()`` and cancelled by the proxy's ``stop()`` in cleanup) — this
|
|
590
|
+
read generates no additional sandbox exec traffic, at any concurrency.
|
|
591
|
+
|
|
592
|
+
``runtime`` stays ``Any`` because the rollout kernel must not import the
|
|
593
|
+
concrete provider plane (``benchflow.providers.runtime``; the #515
|
|
594
|
+
architecture test forbids even a TYPE_CHECKING import, and the planes
|
|
595
|
+
contract is deliberately Any-typed). Rename-safety for the
|
|
596
|
+
``server.live_usage_tokens`` accessor lives where typing IS allowed: the
|
|
597
|
+
name is agreed in ``contracts.planes.LiveUsageGateway``, LiteLLMProcess
|
|
598
|
+
statically asserts conformance in the providers plane
|
|
599
|
+
(``_live_usage_gateway_conformance`` — a rename on either side fails
|
|
600
|
+
ty), and ``test_gateway_live_tokens_reach_rollout_activity_snapshot``
|
|
601
|
+
pins THIS call site to the real classes end-to-end (a drift here fails
|
|
602
|
+
pytest). The attribute access is direct (no getattr default) so the
|
|
603
|
+
failure mode under a fake without the accessor is the caught exception
|
|
604
|
+
below, not a permanent silent None.
|
|
605
|
+
Best-effort by the dashboard contract: any absence (no runtime, no
|
|
606
|
+
server, the accessor raising, a non-int value) degrades to None —
|
|
607
|
+
#963's ACP-only behavior — never to a render error.
|
|
608
|
+
"""
|
|
609
|
+
if runtime is None:
|
|
610
|
+
return None
|
|
611
|
+
try:
|
|
612
|
+
server = runtime.server
|
|
613
|
+
if server is None:
|
|
614
|
+
return None
|
|
615
|
+
tokens = server.live_usage_tokens()
|
|
616
|
+
except Exception:
|
|
617
|
+
return None
|
|
618
|
+
return tokens if isinstance(tokens, int) else None
|
|
619
|
+
|
|
620
|
+
|
|
584
621
|
class Rollout:
|
|
585
622
|
"""Decomposed trial lifecycle with independently-callable phases."""
|
|
586
623
|
|
|
@@ -765,17 +802,38 @@ class Rollout:
|
|
|
765
802
|
("creating sandbox…", "verifying…"), so a 90s sandbox create is not
|
|
766
803
|
indistinguishable from a hang.
|
|
767
804
|
|
|
805
|
+
``total_tokens`` reconciles two cumulative live signals as
|
|
806
|
+
``max(acp_snapshot, gateway_live)``: the ACP session's self-reported
|
|
807
|
+
usage (updates only when a *prompt* completes — a single-prompt
|
|
808
|
+
rollout stays None for the whole agent phase) and the LiteLLM
|
|
809
|
+
gateway's live callback capture (updates per completed LLM *request*,
|
|
810
|
+
mid-prompt). max() because both inputs are non-decreasing counters, so
|
|
811
|
+
the cell/footer never step down mid-run whichever signal leads —
|
|
812
|
+
gateway-live can exceed the ACP self-report (requests the agent
|
|
813
|
+
discarded, cache accounting) and vice versa (capture lag behind large
|
|
814
|
+
log records) — and a dead gateway signal (None) degrades to exactly
|
|
815
|
+
the ACP-only behavior. The winner is display-only: at completion the
|
|
816
|
+
trusted scoring total replaces it (see the footer contract in
|
|
817
|
+
cli/_live_progress.py for the sanctioned non-monotonic boundary).
|
|
818
|
+
|
|
768
819
|
Rollout owns the client/session dig so a rename breaks here — in
|
|
769
820
|
typed, tested code — instead of silently blanking the dashboard cell
|
|
770
821
|
(see benchflow._utils.live_activity). Session-factory agents have no
|
|
771
|
-
ACP client and always report counter-less snapshots
|
|
822
|
+
ACP client and always report counter-less snapshots (their
|
|
823
|
+
gateway-live tokens are not surfaced — the counters seam is the only
|
|
824
|
+
token carrier).
|
|
772
825
|
"""
|
|
773
826
|
session = self._acp_client.session if self._acp_client else None
|
|
774
827
|
if session is None:
|
|
775
828
|
return ActivitySnapshot(self._phase, None)
|
|
776
829
|
calls, last_title = session.progress_snapshot()
|
|
777
830
|
usage = session.latest_usage_totals()
|
|
778
|
-
|
|
831
|
+
acp_tokens = usage.get("total_tokens") if usage else None
|
|
832
|
+
gateway_tokens = _gateway_live_tokens(self._usage_runtime)
|
|
833
|
+
if acp_tokens is None and gateway_tokens is None:
|
|
834
|
+
tokens = None
|
|
835
|
+
else:
|
|
836
|
+
tokens = max(acp_tokens or 0, gateway_tokens or 0)
|
|
779
837
|
return ActivitySnapshot(
|
|
780
838
|
self._phase,
|
|
781
839
|
SessionCounters(calls, last_title, tokens, session.distinct_tool_titles),
|
|
@@ -265,7 +265,9 @@ def test_rollout_activity_snapshot_reads_acp_session():
|
|
|
265
265
|
from benchflow.rollout import Rollout
|
|
266
266
|
|
|
267
267
|
connected = SimpleNamespace(
|
|
268
|
-
_acp_client=SimpleNamespace(session=_FakeSession()),
|
|
268
|
+
_acp_client=SimpleNamespace(session=_FakeSession()),
|
|
269
|
+
_phase="connected",
|
|
270
|
+
_usage_runtime=None,
|
|
269
271
|
)
|
|
270
272
|
assert Rollout.activity_snapshot(connected) == ActivitySnapshot(
|
|
271
273
|
"connected", SessionCounters(38, "file_editor", 1500, 4)
|
|
@@ -277,6 +279,101 @@ def test_rollout_activity_snapshot_reads_acp_session():
|
|
|
277
279
|
) == ActivitySnapshot("setup", None)
|
|
278
280
|
|
|
279
281
|
|
|
282
|
+
class _NoUsageSession(_FakeSession):
|
|
283
|
+
"""An ACP session mid-first-prompt: counters exist, usage doesn't yet."""
|
|
284
|
+
|
|
285
|
+
def latest_usage_totals(self):
|
|
286
|
+
return None
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def _gateway_server(tokens):
|
|
290
|
+
if isinstance(tokens, Exception):
|
|
291
|
+
|
|
292
|
+
def _boom():
|
|
293
|
+
raise tokens
|
|
294
|
+
|
|
295
|
+
return SimpleNamespace(live_usage_tokens=_boom)
|
|
296
|
+
return SimpleNamespace(live_usage_tokens=lambda: tokens)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def _rollout_ns(session, gateway):
|
|
300
|
+
return SimpleNamespace(
|
|
301
|
+
_acp_client=SimpleNamespace(session=session),
|
|
302
|
+
_phase="connected",
|
|
303
|
+
_usage_runtime=SimpleNamespace(server=_gateway_server(gateway)),
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
@pytest.mark.parametrize(
|
|
308
|
+
("session", "gateway", "expected_tokens"),
|
|
309
|
+
[
|
|
310
|
+
# The round-7 failure case: a single-prompt rollout has NO ACP usage
|
|
311
|
+
# snapshot until the prompt completes — the gateway live capture is
|
|
312
|
+
# the only mid-run signal and must carry the counters.
|
|
313
|
+
(_NoUsageSession(), 412_000, 412_000),
|
|
314
|
+
# Both signals: max() — whichever cumulative counter leads wins, so
|
|
315
|
+
# the footer never steps down mid-run (documented at
|
|
316
|
+
# Rollout.activity_snapshot).
|
|
317
|
+
(_FakeSession(), 900, 1500),
|
|
318
|
+
(_FakeSession(), 2_000, 2_000),
|
|
319
|
+
# Gateway signal dead (no usage-bearing record yet / reader raising /
|
|
320
|
+
# garbage): degrade to exactly #963's ACP-only behavior.
|
|
321
|
+
(_FakeSession(), None, 1500),
|
|
322
|
+
(_FakeSession(), RuntimeError("teardown race"), 1500),
|
|
323
|
+
(_FakeSession(), "not-an-int", 1500),
|
|
324
|
+
(_NoUsageSession(), None, None),
|
|
325
|
+
(_NoUsageSession(), RuntimeError("teardown race"), None),
|
|
326
|
+
],
|
|
327
|
+
)
|
|
328
|
+
def test_rollout_activity_snapshot_reconciles_acp_and_gateway_usage(
|
|
329
|
+
session, gateway, expected_tokens
|
|
330
|
+
):
|
|
331
|
+
from benchflow.rollout import Rollout
|
|
332
|
+
|
|
333
|
+
snap = Rollout.activity_snapshot(_rollout_ns(session, gateway))
|
|
334
|
+
assert snap.counters is not None
|
|
335
|
+
assert snap.counters.total_tokens == expected_tokens
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def test_rollout_activity_snapshot_without_usage_runtime_matches_963():
|
|
339
|
+
# A rollout whose proxy never started (oracle, native-subscription auth)
|
|
340
|
+
# has no _usage_runtime server — the ACP-only path must be untouched.
|
|
341
|
+
from benchflow.rollout import Rollout
|
|
342
|
+
|
|
343
|
+
ns = SimpleNamespace(
|
|
344
|
+
_acp_client=SimpleNamespace(session=_NoUsageSession()),
|
|
345
|
+
_phase="connected",
|
|
346
|
+
_usage_runtime=None,
|
|
347
|
+
)
|
|
348
|
+
snap = Rollout.activity_snapshot(ns)
|
|
349
|
+
assert snap.counters is not None
|
|
350
|
+
assert snap.counters.total_tokens is None
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def test_footer_and_cell_render_gateway_live_tokens_mid_prompt():
|
|
354
|
+
# End-to-end through __rich__ with the REAL Rollout.activity_snapshot dig:
|
|
355
|
+
# a single-prompt run mid-prompt (no ACP usage) whose gateway capture has
|
|
356
|
+
# tokens must light BOTH the footer sum and the activity cell — the
|
|
357
|
+
# e2e acceptance criterion, unit-shaped.
|
|
358
|
+
from benchflow.rollout import Rollout
|
|
359
|
+
|
|
360
|
+
session = _NoUsageSession()
|
|
361
|
+
session.distinct_tool_titles = 1 # single-tool agent (prime-agent shape)
|
|
362
|
+
ns = _rollout_ns(session, 412_000)
|
|
363
|
+
rollout = SimpleNamespace(activity_snapshot=lambda: Rollout.activity_snapshot(ns))
|
|
364
|
+
live_activity.register("dialogue-parser", rollout)
|
|
365
|
+
try:
|
|
366
|
+
d = _dash()
|
|
367
|
+
d.on_plan(total=1, done=0, remaining=1)
|
|
368
|
+
d.on_task_start("dialogue-parser")
|
|
369
|
+
text = _rendered(d)
|
|
370
|
+
finally:
|
|
371
|
+
live_activity.unregister("dialogue-parser")
|
|
372
|
+
assert "412.0k tokens" in text # footer live sum
|
|
373
|
+
assert "38 calls · 412.0k tok" in text # constant-tool activity cell
|
|
374
|
+
assert "— tokens" not in text
|
|
375
|
+
|
|
376
|
+
|
|
280
377
|
def test_dashboard_renders_activity_for_registered_running_task():
|
|
281
378
|
# End-to-end through __rich__: a registered running task's activity must
|
|
282
379
|
# appear in the rendered panel — reverting the table wiring fails this.
|