eval-protocol 0.2.62__tar.gz → 0.2.63__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.
- {eval_protocol-0.2.62/eval_protocol.egg-info → eval_protocol-0.2.63}/PKG-INFO +1 -1
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/_version.py +3 -3
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/upload.py +108 -42
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/evaluation.py +272 -7
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/manager.py +1 -1
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/exception_config.py +7 -1
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/svg_agent/vercel_svg_server/api/init.py +34 -10
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/evaluation_row_utils.py +22 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63/eval_protocol.egg-info}/PKG-INFO +1 -1
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/SOURCES.txt +1 -0
- eval_protocol-0.2.63/tests/test_ep_upload_e2e.py +646 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation.py +71 -34
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation_integration.py +123 -29
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation_preview_integration.py +113 -53
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/LICENSE +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/README.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/normalize_sandbox_fusion.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/utils/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/utils/generate_api_key.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/utils/subprocess_manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/__main__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/base.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/bigquery.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/braintrust.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/fireworks_tracing.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/huggingface.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/langchain.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/langfuse.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/langsmith.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/openai_responses.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/trl.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/weave.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/models.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/orchestrator.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resource_abc.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resource_pool.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/gorilla_file_system.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/math_api.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/posting_api.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_sim_api_resource.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/docker_resource.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/filesystem_resource.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/python_state_resource.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/sql_resource.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/task_manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/tool_registry.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/auth.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/data/airline_dataset.jsonl +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/data/retail_dataset.jsonl +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_aime25.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_frozen_lake.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_gpqa.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_livebench_data_analysis.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_tau_bench_airline.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_tau_bench_retail.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/agent_eval_cmd.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/common.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/deploy.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/deploy_mcp.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/logs.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/preview.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/run_eval_cmd.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/common_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/config.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/dynamic_data_loader.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/factory_data_loader.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/inline_data_loader.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/models.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/dataset_logger.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/local_fs_dataset_logger_adapter.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/sqlite_dataset_logger_adapter.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/sqlite_evaluation_row_store.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/datasets/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/datasets/loader.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/directory_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/event_bus.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/logger.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/sqlite_event_bus.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/sqlite_event_bus_database.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/execution/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/execution/pipeline.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/gcp_tools.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generation/cache.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generation/clients/base.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generation/clients.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generic_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/get_pep440_version.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/human_id/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/human_id/dictionary.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/deepeval.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/openeval.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/trl.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/elasticsearch_client.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/elasticsearch_direct_http_handler.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/elasticsearch_index_manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/fireworks_tracing_http_handler.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/init.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/rollout_context.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/rollout_id_filter.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/util.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/logging_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/adapter.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/client/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/client/connection.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/clients.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/base_policy.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/policy.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/grid_renderer.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/mcp_multi_client.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/mcpgym.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/process_manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/session/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/session/manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/simple_process_manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/simulation_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/config.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/main.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/base_client.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/local_docker_client.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/stdio_mcp_client_helper.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_env.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/frozen_lake/frozen_lake_adapter.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/frozen_lake/frozen_lake_mcp.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/frozen_lake/server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/README.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/airplane_environment/airline_environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/mock_environment/mock_environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/retail_environment/retail_environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/tau2_mcp.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/tests/system_prompts/airline_agent_system_prompt.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/tests/system_prompts/mock_agent_system_prompt.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/tests/system_prompts/retail_agent_system_prompt.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/tests/test_tau2_e2e.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/models.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/packaging.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/platform_api.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/playback_policy.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/app.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/auth.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/langfuse.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/litellm.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/main.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/models.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/redis_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_agent_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_dataset_adapter.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_langchain_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_mcp_gym_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_no_op_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_pydantic_ai_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_single_turn_rollout_process.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/dual_mode_wrapper.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/elasticsearch_setup.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/evaluation_test.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/evaluation_test_postprocess.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/evaluation_test_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/execution.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/generate_parameter_combinations.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/github_action_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/handle_persist_flow.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/parameterize.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/plugin.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/remote_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/store_experiment_link.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/store_results_url.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/tracing_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/types.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/validate_signature.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_braintrust.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_langfuse.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_langsmith.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_openai_responses.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/llm_judge.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/llm_judge_braintrust.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/resources.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/reward_function.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/accuracy.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/accuracy_length.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/apps_coding_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/apps_execution_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/apps_testing_util.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/bfcl_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/code_execution.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/code_execution_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/cpp_code.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/deepcoder_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/format.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/function_calling.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/json_schema.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/language_consistency.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/lean_prover.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/length.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/list_comparison_math_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/math.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/multiple_choice_math_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/reasoning_steps.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/repetition.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/tag_count.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rl_processing.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/stats/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/stats/confidence_intervals.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/typed_interface.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/errors.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/remote_rollout_processor.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/types.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/batch_evaluation.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/batch_transformation.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/browser_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/check_server_status.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/dataset_helpers.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/logs_models.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/logs_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/module_loader.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/packaging_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/show_results_url.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/static_policy.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/subprocess_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/vite_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/dependency_links.txt +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/entry_points.txt +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/requires.txt +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/top_level.txt +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/pyproject.toml +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/setup.cfg +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/setup.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_accuracy.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_accuracy_length.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_adapters_e2e.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_agent_orchestrator.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_agent_resources.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_auth.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_batch_evaluation.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cli.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cli_agent.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cli_args.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_code_execution.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_config.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_control_plane_separation.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cpp_code.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_data_driven_task_manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_deepcoder_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_deepeval_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_deploy_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_directory_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_e2b_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_e2b_js_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_edge_cases.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_eval_protocol_import.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation_postprocess.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_event_bus.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_event_bus_helper.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_examples_end_to_end.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_fireworks_api.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_format.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_fractional_code.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_function_calling.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_gcp_tools.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_generic_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_human_id.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_json_schema.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_kwargs_validation.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_language_consistency.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_lean_prover.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_lean_prover_runner.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_length.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_list_comparison_math_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_logs_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_logs_server_simple.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_math.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_minimal.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_models.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_models_rl.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_multiple_choice_math_reward.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_n_variant_batch_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_n_variant_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_openai_compatibility.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_openeval_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_packaging.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_parallel_rollouts.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_platform_api.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_quickstart_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_readiness.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_reasoning_steps.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_repetition.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_repetition_debug.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_retry_mechanism.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_reward_function.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_reward_protocol_import.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_rl_processing.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_rollout_control_plane_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_show_results_url.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_status_migration_changes.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_status_migration_integration.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_status_model.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_tag_count.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_tau_bench_airline_smoke.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_typed_interface.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_typed_interface_rl.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_upload_entrypoint.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_url_handling.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_vite_server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/agent/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/agent/base.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/agent/llm_agent.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/api_config.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/data_model.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/simulation_service.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/cli.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/config.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/airline/policy.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/mock/policy.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/mock/policy_solo.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/retail/policy.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/main_policy.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/main_policy_solo.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/tech_support_manual.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/tech_support_workflow.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/tech_support_workflow_solo.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/user_simulator/simulation_guidelines.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/user_simulator/simulation_guidelines_tools.md +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/message.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/simulation.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/tasks.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/data_model.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/tools.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/data_model.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/tools.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/data_model.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/tools.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/data_model.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/const.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/create_tasks.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/mms_issues.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/mobile_data_issues.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/service_issues.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tools.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/user_data_model.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/user_tools.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/db.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/environment.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/server.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/tool.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/toolkit.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/utils/interface_agent.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_action.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_base.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_communicate.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_env.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_nl_assertions.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/metrics/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/metrics/agent_metrics.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/metrics/break_down_metrics.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/environment_manager.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/orchestrator.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/registry.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/run.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/check_data.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/show_domain_doc.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/start_servers.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/view_simulations.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/user/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/user/base.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/user/user_simulator.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/__init__.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/display.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/io_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/llm_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/pydantic_utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/utils.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/versioneer.py +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/favicon-BkAAWQga.png +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/index-BnDJont9.css +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/index-Cu9t0G5i.js +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/index-Cu9t0G5i.js.map +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/logo-light-BprIBJQW.png +0 -0
- {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/index.html +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: eval-protocol
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.63
|
|
4
4
|
Summary: The official Python SDK for Eval Protocol (EP.) EP is an open protocol that standardizes how developers author evals for large language model (LLM) applications.
|
|
5
5
|
Author-email: Fireworks AI <info@fireworks.ai>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-10-
|
|
11
|
+
"date": "2025-10-25T15:18:19-0700",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.2.
|
|
14
|
+
"full-revisionid": "8ad7d26db059270502fbee55189421d884f0b13e",
|
|
15
|
+
"version": "0.2.63"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -81,6 +81,12 @@ def _is_eval_protocol_test(obj: Any) -> bool:
|
|
|
81
81
|
return False
|
|
82
82
|
# Must have pytest marks from evaluation_test
|
|
83
83
|
marks = getattr(obj, "pytestmark", [])
|
|
84
|
+
# Handle pytest proxy objects (APIRemovedInV1Proxy)
|
|
85
|
+
if not isinstance(marks, (list, tuple)):
|
|
86
|
+
try:
|
|
87
|
+
marks = list(marks) if marks else []
|
|
88
|
+
except (TypeError, AttributeError):
|
|
89
|
+
return False
|
|
84
90
|
return len(marks) > 0
|
|
85
91
|
|
|
86
92
|
|
|
@@ -91,6 +97,14 @@ def _extract_param_info_from_marks(obj: Any) -> tuple[bool, int, list[str]]:
|
|
|
91
97
|
(has_parametrize, param_count, param_ids)
|
|
92
98
|
"""
|
|
93
99
|
marks = getattr(obj, "pytestmark", [])
|
|
100
|
+
|
|
101
|
+
# Handle pytest proxy objects (APIRemovedInV1Proxy) - same as _is_eval_protocol_test
|
|
102
|
+
if not isinstance(marks, (list, tuple)):
|
|
103
|
+
try:
|
|
104
|
+
marks = list(marks) if marks else []
|
|
105
|
+
except (TypeError, AttributeError):
|
|
106
|
+
marks = []
|
|
107
|
+
|
|
94
108
|
has_parametrize = False
|
|
95
109
|
total_combinations = 0
|
|
96
110
|
all_param_ids: list[str] = []
|
|
@@ -131,51 +145,103 @@ def _discover_tests(root: str) -> list[DiscoveredTest]:
|
|
|
131
145
|
|
|
132
146
|
discovered: list[DiscoveredTest] = []
|
|
133
147
|
|
|
134
|
-
|
|
135
|
-
|
|
148
|
+
class CollectionPlugin:
|
|
149
|
+
"""Plugin to capture collected items without running code."""
|
|
150
|
+
|
|
151
|
+
def __init__(self):
|
|
152
|
+
self.items = []
|
|
153
|
+
|
|
154
|
+
def pytest_ignore_collect(self, collection_path, config):
|
|
155
|
+
"""Ignore problematic files before pytest tries to import them."""
|
|
156
|
+
# Ignore specific files
|
|
157
|
+
ignored_files = ["setup.py", "versioneer.py", "conf.py", "__main__.py"]
|
|
158
|
+
if collection_path.name in ignored_files:
|
|
159
|
+
return True
|
|
160
|
+
|
|
161
|
+
# Ignore hidden files (starting with .)
|
|
162
|
+
if collection_path.name.startswith("."):
|
|
163
|
+
return True
|
|
164
|
+
|
|
165
|
+
# Ignore test_discovery files
|
|
166
|
+
if collection_path.name.startswith("test_discovery"):
|
|
167
|
+
return True
|
|
168
|
+
|
|
169
|
+
return None
|
|
170
|
+
|
|
171
|
+
def pytest_collection_modifyitems(self, items):
|
|
172
|
+
"""Hook called after collection is done."""
|
|
173
|
+
self.items = items
|
|
174
|
+
|
|
175
|
+
plugin = CollectionPlugin()
|
|
176
|
+
|
|
177
|
+
# Run pytest collection only (--collect-only prevents code execution)
|
|
178
|
+
# Override python_files to collect from ANY .py file
|
|
179
|
+
args = [
|
|
180
|
+
abs_root,
|
|
181
|
+
"--collect-only",
|
|
182
|
+
"-q",
|
|
183
|
+
"--pythonwarnings=ignore",
|
|
184
|
+
"-o",
|
|
185
|
+
"python_files=*.py", # Override to collect all .py files
|
|
186
|
+
]
|
|
187
|
+
|
|
188
|
+
try:
|
|
189
|
+
# Suppress pytest output
|
|
190
|
+
import io
|
|
191
|
+
import contextlib
|
|
192
|
+
|
|
193
|
+
with contextlib.redirect_stdout(io.StringIO()), contextlib.redirect_stderr(io.StringIO()):
|
|
194
|
+
pytest.main(args, plugins=[plugin])
|
|
195
|
+
except Exception:
|
|
196
|
+
# If pytest collection fails, fall back to empty list
|
|
197
|
+
return []
|
|
198
|
+
|
|
199
|
+
# Process collected items
|
|
200
|
+
for item in plugin.items:
|
|
201
|
+
if not hasattr(item, "obj"):
|
|
202
|
+
continue
|
|
203
|
+
|
|
204
|
+
obj = item.obj
|
|
205
|
+
if not _is_eval_protocol_test(obj):
|
|
206
|
+
continue
|
|
207
|
+
|
|
208
|
+
origin = getattr(obj, "_origin_func", obj)
|
|
136
209
|
try:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if spec and spec.loader:
|
|
140
|
-
module = importlib.util.module_from_spec(spec)
|
|
141
|
-
sys.modules[spec.name] = module
|
|
142
|
-
spec.loader.exec_module(module) # type: ignore[attr-defined]
|
|
143
|
-
else:
|
|
144
|
-
continue
|
|
210
|
+
src_file = inspect.getsourcefile(origin) or str(item.path)
|
|
211
|
+
_, lineno = inspect.getsourcelines(origin)
|
|
145
212
|
except Exception:
|
|
146
|
-
|
|
213
|
+
src_file, lineno = str(item.path), None
|
|
147
214
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
)
|
|
215
|
+
# Extract parametrization info from marks
|
|
216
|
+
has_parametrize, param_count, param_ids = _extract_param_info_from_marks(obj)
|
|
217
|
+
|
|
218
|
+
# Get module name and function name
|
|
219
|
+
module_name = (
|
|
220
|
+
item.module.__name__
|
|
221
|
+
if hasattr(item, "module")
|
|
222
|
+
else item.nodeid.split("::")[0].replace("/", ".").replace(".py", "")
|
|
223
|
+
)
|
|
224
|
+
func_name = item.name.split("[")[0] if "[" in item.name else item.name
|
|
225
|
+
|
|
226
|
+
# Generate nodeids
|
|
227
|
+
base_nodeid = f"{os.path.basename(src_file)}::{func_name}"
|
|
228
|
+
if param_ids:
|
|
229
|
+
nodeids = [f"{base_nodeid}[{pid}]" for pid in param_ids]
|
|
230
|
+
else:
|
|
231
|
+
nodeids = [base_nodeid]
|
|
232
|
+
|
|
233
|
+
discovered.append(
|
|
234
|
+
DiscoveredTest(
|
|
235
|
+
module_path=module_name,
|
|
236
|
+
module_name=module_name,
|
|
237
|
+
qualname=f"{module_name}.{func_name}",
|
|
238
|
+
file_path=os.path.abspath(src_file),
|
|
239
|
+
lineno=lineno,
|
|
240
|
+
has_parametrize=has_parametrize,
|
|
241
|
+
param_count=param_count,
|
|
242
|
+
nodeids=nodeids,
|
|
243
|
+
)
|
|
244
|
+
)
|
|
179
245
|
|
|
180
246
|
# Deduplicate by qualname (in case same test appears multiple times)
|
|
181
247
|
by_qual: dict[str, DiscoveredTest] = {}
|
|
@@ -22,6 +22,8 @@ from eval_protocol.auth import (
|
|
|
22
22
|
)
|
|
23
23
|
from eval_protocol.typed_interface import EvaluationMode
|
|
24
24
|
|
|
25
|
+
from eval_protocol.get_pep440_version import get_pep440_version
|
|
26
|
+
|
|
25
27
|
logger = logging.getLogger(__name__)
|
|
26
28
|
|
|
27
29
|
# Flag to track if the preview API was successfully used
|
|
@@ -395,7 +397,7 @@ class Evaluator:
|
|
|
395
397
|
}
|
|
396
398
|
|
|
397
399
|
api_base = os.environ.get("FIREWORKS_API_BASE", "https://api.fireworks.ai")
|
|
398
|
-
|
|
400
|
+
|
|
399
401
|
if "dev.api.fireworks.ai" in api_base and account_id == "fireworks":
|
|
400
402
|
account_id = "pyroworks-dev"
|
|
401
403
|
|
|
@@ -518,6 +520,135 @@ class Evaluator:
|
|
|
518
520
|
preview_result.total_runtime_ms = max(1, int((end_time - start_time) * 1000))
|
|
519
521
|
return preview_result
|
|
520
522
|
|
|
523
|
+
def _build_minimal_criteria(self) -> List[Dict[str, str]]:
|
|
524
|
+
"""Build minimal criteria (name, type, description) without code snippets."""
|
|
525
|
+
|
|
526
|
+
# Remote URL mode
|
|
527
|
+
if self.remote_url:
|
|
528
|
+
return [
|
|
529
|
+
{
|
|
530
|
+
"name": "remote_eval_proxy",
|
|
531
|
+
"type": "CODE_SNIPPETS",
|
|
532
|
+
"description": f"Proxies evaluation to remote URL: {self.remote_url}",
|
|
533
|
+
}
|
|
534
|
+
]
|
|
535
|
+
|
|
536
|
+
# TS mode (direct code snippet)
|
|
537
|
+
elif self.ts_mode_config:
|
|
538
|
+
criterion_name = self.ts_mode_config.get("criterion_name", "default_code_criterion")
|
|
539
|
+
description = self.ts_mode_config.get("description", "Python code execution")
|
|
540
|
+
return [
|
|
541
|
+
{
|
|
542
|
+
"name": criterion_name,
|
|
543
|
+
"type": "CODE_SNIPPETS",
|
|
544
|
+
"description": description,
|
|
545
|
+
}
|
|
546
|
+
]
|
|
547
|
+
|
|
548
|
+
# Multi-metrics mode
|
|
549
|
+
elif self.multi_metrics:
|
|
550
|
+
return [
|
|
551
|
+
{
|
|
552
|
+
"name": "eval",
|
|
553
|
+
"type": "CODE_SNIPPETS",
|
|
554
|
+
"description": self.description or "Multi-metric evaluation",
|
|
555
|
+
}
|
|
556
|
+
]
|
|
557
|
+
|
|
558
|
+
# Single metric folders
|
|
559
|
+
else:
|
|
560
|
+
criteria = []
|
|
561
|
+
for metric_name in self.metric_folders:
|
|
562
|
+
criteria.append(
|
|
563
|
+
{
|
|
564
|
+
"name": metric_name,
|
|
565
|
+
"type": "CODE_SNIPPETS",
|
|
566
|
+
"description": self.description or f"Evaluation metric: {metric_name}",
|
|
567
|
+
}
|
|
568
|
+
)
|
|
569
|
+
return criteria
|
|
570
|
+
|
|
571
|
+
@staticmethod
|
|
572
|
+
def _parse_ignore_file(ignore_path: str) -> List[str]:
|
|
573
|
+
"""Parse .gitignore or .dockerignore and return patterns."""
|
|
574
|
+
patterns = []
|
|
575
|
+
if not os.path.exists(ignore_path):
|
|
576
|
+
return patterns
|
|
577
|
+
|
|
578
|
+
try:
|
|
579
|
+
with open(ignore_path, "r") as f:
|
|
580
|
+
for line in f:
|
|
581
|
+
line = line.strip()
|
|
582
|
+
if line and not line.startswith("#"):
|
|
583
|
+
patterns.append(line)
|
|
584
|
+
except Exception:
|
|
585
|
+
pass
|
|
586
|
+
|
|
587
|
+
return patterns
|
|
588
|
+
|
|
589
|
+
@staticmethod
|
|
590
|
+
def _ensure_requirements_present(source_dir: str) -> None:
|
|
591
|
+
req_path = os.path.join(source_dir, "requirements.txt")
|
|
592
|
+
if not os.path.isfile(req_path):
|
|
593
|
+
logger.error("Missing requirements.txt in upload directory: %s", source_dir)
|
|
594
|
+
raise ValueError(
|
|
595
|
+
"Upload requires requirements.txt in the project root. "
|
|
596
|
+
"Please add requirements.txt and re-run ep upload."
|
|
597
|
+
)
|
|
598
|
+
|
|
599
|
+
@staticmethod
|
|
600
|
+
def _should_ignore(path: str, ignore_patterns: List[str]) -> bool:
|
|
601
|
+
"""Check if path matches any ignore pattern."""
|
|
602
|
+
from pathlib import Path
|
|
603
|
+
import fnmatch
|
|
604
|
+
|
|
605
|
+
default_ignores = [".git", "__pycache__", "*.pyc", ".venv", "venv", "node_modules", "*.egg-info"]
|
|
606
|
+
all_patterns = default_ignores + ignore_patterns
|
|
607
|
+
|
|
608
|
+
path_obj = Path(path)
|
|
609
|
+
for pattern in all_patterns:
|
|
610
|
+
if pattern.endswith("/"):
|
|
611
|
+
if path_obj.is_dir() and fnmatch.fnmatch(path_obj.name, pattern.rstrip("/")):
|
|
612
|
+
return True
|
|
613
|
+
elif fnmatch.fnmatch(path_obj.name, pattern) or fnmatch.fnmatch(str(path_obj), pattern):
|
|
614
|
+
return True
|
|
615
|
+
|
|
616
|
+
return False
|
|
617
|
+
|
|
618
|
+
@staticmethod
|
|
619
|
+
def _create_tar_gz_with_ignores(output_path: str, source_dir: str) -> int:
|
|
620
|
+
"""Create tar.gz of source_dir with parent directory included."""
|
|
621
|
+
import tarfile
|
|
622
|
+
from pathlib import Path
|
|
623
|
+
|
|
624
|
+
source_path = Path(source_dir)
|
|
625
|
+
gitignore_patterns = Evaluator._parse_ignore_file(str(source_path / ".gitignore"))
|
|
626
|
+
dockerignore_patterns = Evaluator._parse_ignore_file(str(source_path / ".dockerignore"))
|
|
627
|
+
all_ignore_patterns = gitignore_patterns + dockerignore_patterns
|
|
628
|
+
|
|
629
|
+
logger.info(f"Creating tar.gz with {len(all_ignore_patterns)} ignore patterns")
|
|
630
|
+
|
|
631
|
+
# Get directory name for the archive root
|
|
632
|
+
dir_name = os.path.basename(source_dir)
|
|
633
|
+
parent_dir = os.path.dirname(source_dir)
|
|
634
|
+
|
|
635
|
+
with tarfile.open(output_path, "w:gz") as tar:
|
|
636
|
+
for root, dirs, files in os.walk(source_dir):
|
|
637
|
+
dirs[:] = [d for d in dirs if not Evaluator._should_ignore(os.path.join(root, d), all_ignore_patterns)]
|
|
638
|
+
|
|
639
|
+
for file in files:
|
|
640
|
+
file_path = os.path.join(root, file)
|
|
641
|
+
if Evaluator._should_ignore(file_path, all_ignore_patterns):
|
|
642
|
+
continue
|
|
643
|
+
|
|
644
|
+
# Include parent directory in archive path
|
|
645
|
+
rel_path = os.path.relpath(file_path, parent_dir) # Relative to parent
|
|
646
|
+
tar.add(file_path, arcname=rel_path) # Keeps "python-sdk/..." structure
|
|
647
|
+
|
|
648
|
+
size_bytes = os.path.getsize(output_path)
|
|
649
|
+
logger.info(f"Created {output_path} ({size_bytes:,} bytes)")
|
|
650
|
+
return size_bytes
|
|
651
|
+
|
|
521
652
|
def create(self, evaluator_id, display_name=None, description=None, force=False):
|
|
522
653
|
if not self.remote_url and not self.ts_mode_config and not self.code_files:
|
|
523
654
|
raise ValueError("No code files loaded. Load metric folder(s) or provide ts_mode_config/remote_url first.")
|
|
@@ -537,14 +668,21 @@ class Evaluator:
|
|
|
537
668
|
# Keep multiMetrics/rollupSettings for backward compatibility with tests
|
|
538
669
|
payload_multi_metrics = True
|
|
539
670
|
payload_rollup_settings = {"skipRollup": True}
|
|
671
|
+
parent = f"accounts/{account_id}"
|
|
672
|
+
|
|
673
|
+
try:
|
|
674
|
+
version_str = get_pep440_version()
|
|
675
|
+
except Exception:
|
|
676
|
+
version_str = None
|
|
540
677
|
|
|
541
678
|
payload_data = {
|
|
679
|
+
"parent": parent,
|
|
542
680
|
"evaluator": {
|
|
543
681
|
"displayName": self.display_name,
|
|
544
682
|
"description": self.description,
|
|
545
683
|
"multiMetrics": payload_multi_metrics,
|
|
546
|
-
|
|
547
|
-
"criteria": self.
|
|
684
|
+
"commitHash": version_str,
|
|
685
|
+
"criteria": self._build_minimal_criteria(),
|
|
548
686
|
"requirements": "",
|
|
549
687
|
"rollupSettings": payload_rollup_settings,
|
|
550
688
|
},
|
|
@@ -566,21 +704,26 @@ class Evaluator:
|
|
|
566
704
|
if "dev.api.fireworks.ai" in self.api_base and account_id == "fireworks":
|
|
567
705
|
account_id = "pyroworks-dev"
|
|
568
706
|
|
|
569
|
-
base_url = f"{self.api_base}/v1/
|
|
707
|
+
base_url = f"{self.api_base}/v1/{parent}/evaluatorsV2"
|
|
570
708
|
headers = {
|
|
571
709
|
"Authorization": f"Bearer {auth_token}",
|
|
572
710
|
"Content-Type": "application/json",
|
|
573
711
|
}
|
|
712
|
+
|
|
713
|
+
self._ensure_requirements_present(os.getcwd())
|
|
714
|
+
|
|
574
715
|
logger.info(f"Creating evaluator '{evaluator_id}' for account '{account_id}'...")
|
|
575
716
|
|
|
576
717
|
try:
|
|
577
718
|
if force:
|
|
578
|
-
check_url = f"{
|
|
719
|
+
check_url = f"{self.api_base}/v1/{parent}/evaluators/{evaluator_id}"
|
|
579
720
|
try:
|
|
721
|
+
logger.info(f"Checking if evaluator exists: {check_url}")
|
|
580
722
|
check_response = requests.get(check_url, headers=headers)
|
|
723
|
+
|
|
581
724
|
if check_response.status_code == 200:
|
|
582
725
|
logger.info(f"Evaluator '{evaluator_id}' already exists, deleting and recreating...")
|
|
583
|
-
delete_url = f"{
|
|
726
|
+
delete_url = f"{self.api_base}/v1/{parent}/evaluators/{evaluator_id}"
|
|
584
727
|
try:
|
|
585
728
|
delete_response = requests.delete(delete_url, headers=headers)
|
|
586
729
|
if delete_response.status_code < 400:
|
|
@@ -597,12 +740,134 @@ class Evaluator:
|
|
|
597
740
|
except requests.exceptions.RequestException:
|
|
598
741
|
response = requests.post(base_url, json=payload_data, headers=headers)
|
|
599
742
|
else:
|
|
743
|
+
logger.info(f"Creating evaluator at: {base_url}")
|
|
600
744
|
response = requests.post(base_url, json=payload_data, headers=headers)
|
|
601
745
|
|
|
602
746
|
response.raise_for_status()
|
|
603
747
|
result = response.json()
|
|
604
748
|
logger.info(f"Successfully created evaluator '{evaluator_id}'")
|
|
605
|
-
|
|
749
|
+
|
|
750
|
+
# Upload code as tar.gz to GCS
|
|
751
|
+
evaluator_name = result.get("name") # e.g., "accounts/pyroworks/evaluators/test-123"
|
|
752
|
+
|
|
753
|
+
if not evaluator_name:
|
|
754
|
+
raise ValueError(
|
|
755
|
+
"Create evaluator response missing 'name' field. "
|
|
756
|
+
f"Cannot proceed with code upload. Response: {result}"
|
|
757
|
+
)
|
|
758
|
+
|
|
759
|
+
try:
|
|
760
|
+
# Create tar.gz of current directory
|
|
761
|
+
cwd = os.getcwd()
|
|
762
|
+
dir_name = os.path.basename(cwd)
|
|
763
|
+
tar_filename = f"{dir_name}.tar.gz"
|
|
764
|
+
tar_path = os.path.join(cwd, tar_filename)
|
|
765
|
+
|
|
766
|
+
tar_size = self._create_tar_gz_with_ignores(tar_path, cwd)
|
|
767
|
+
|
|
768
|
+
# Call GetEvaluatorUploadEndpoint
|
|
769
|
+
upload_endpoint_url = f"{self.api_base}/v1/{evaluator_name}:getUploadEndpoint"
|
|
770
|
+
upload_payload = {"name": evaluator_name, "filename_to_size": {tar_filename: tar_size}}
|
|
771
|
+
|
|
772
|
+
logger.info(f"Requesting upload endpoint for {tar_filename}")
|
|
773
|
+
upload_response = requests.post(upload_endpoint_url, json=upload_payload, headers=headers)
|
|
774
|
+
upload_response.raise_for_status()
|
|
775
|
+
|
|
776
|
+
# Check for signed URLs
|
|
777
|
+
upload_response_data = upload_response.json()
|
|
778
|
+
signed_urls = upload_response_data.get("filenameToSignedUrls", {})
|
|
779
|
+
|
|
780
|
+
if not signed_urls:
|
|
781
|
+
raise ValueError(f"GetUploadEndpoint returned no signed URLs. Response: {upload_response_data}")
|
|
782
|
+
|
|
783
|
+
signed_url = signed_urls.get(tar_filename)
|
|
784
|
+
|
|
785
|
+
if not signed_url:
|
|
786
|
+
raise ValueError(
|
|
787
|
+
f"No signed URL received for {tar_filename}. Available files: {list(signed_urls.keys())}"
|
|
788
|
+
)
|
|
789
|
+
|
|
790
|
+
# Upload to GCS
|
|
791
|
+
logger.info(f"Uploading {tar_filename} to GCS...")
|
|
792
|
+
|
|
793
|
+
file_size = os.path.getsize(tar_path)
|
|
794
|
+
|
|
795
|
+
# Retry configuration
|
|
796
|
+
max_retries = 3
|
|
797
|
+
retry_delay = 2 # seconds
|
|
798
|
+
|
|
799
|
+
for attempt in range(max_retries):
|
|
800
|
+
try:
|
|
801
|
+
with open(tar_path, "rb") as f:
|
|
802
|
+
# Create request exactly like Golang
|
|
803
|
+
req = requests.Request(
|
|
804
|
+
"PUT",
|
|
805
|
+
signed_url,
|
|
806
|
+
data=f,
|
|
807
|
+
headers={
|
|
808
|
+
"Content-Type": "application/octet-stream",
|
|
809
|
+
"X-Goog-Content-Length-Range": f"{file_size},{file_size}",
|
|
810
|
+
},
|
|
811
|
+
)
|
|
812
|
+
prepared = req.prepare()
|
|
813
|
+
|
|
814
|
+
# Don't let requests add extra headers
|
|
815
|
+
session = requests.Session()
|
|
816
|
+
gcs_response = session.send(prepared, timeout=600)
|
|
817
|
+
gcs_response.raise_for_status()
|
|
818
|
+
|
|
819
|
+
logger.info(f"Successfully uploaded {tar_filename}")
|
|
820
|
+
break # Success, exit retry loop
|
|
821
|
+
|
|
822
|
+
except (requests.exceptions.RequestException, IOError) as e:
|
|
823
|
+
if attempt < max_retries - 1:
|
|
824
|
+
# Check if it's a retryable error
|
|
825
|
+
is_retryable = False
|
|
826
|
+
if isinstance(e, requests.exceptions.RequestException):
|
|
827
|
+
if hasattr(e, "response") and e.response is not None:
|
|
828
|
+
# Retry on 5xx errors or 408 (timeout)
|
|
829
|
+
is_retryable = e.response.status_code >= 500 or e.response.status_code == 408
|
|
830
|
+
else:
|
|
831
|
+
# Network errors (no response) are retryable
|
|
832
|
+
is_retryable = True
|
|
833
|
+
else:
|
|
834
|
+
# IOError is retryable
|
|
835
|
+
is_retryable = True
|
|
836
|
+
|
|
837
|
+
if is_retryable:
|
|
838
|
+
wait_time = retry_delay * (2**attempt) # Exponential backoff
|
|
839
|
+
logger.warning(
|
|
840
|
+
f"Upload attempt {attempt + 1}/{max_retries} failed: {e}. "
|
|
841
|
+
f"Retrying in {wait_time}s..."
|
|
842
|
+
)
|
|
843
|
+
time.sleep(wait_time)
|
|
844
|
+
else:
|
|
845
|
+
# Non-retryable error, raise immediately
|
|
846
|
+
raise
|
|
847
|
+
else:
|
|
848
|
+
# Last attempt failed
|
|
849
|
+
logger.error(f"Upload failed after {max_retries} attempts")
|
|
850
|
+
raise
|
|
851
|
+
|
|
852
|
+
# Step 3: Validate upload
|
|
853
|
+
validate_url = f"{self.api_base}/v1/{evaluator_name}:validateUpload"
|
|
854
|
+
validate_payload = {"name": evaluator_name}
|
|
855
|
+
validate_response = requests.post(validate_url, json=validate_payload, headers=headers)
|
|
856
|
+
validate_response.raise_for_status()
|
|
857
|
+
|
|
858
|
+
validate_data = validate_response.json()
|
|
859
|
+
|
|
860
|
+
logger.info("Upload validated successfully")
|
|
861
|
+
|
|
862
|
+
# Clean up tar file
|
|
863
|
+
if os.path.exists(tar_path):
|
|
864
|
+
os.remove(tar_path)
|
|
865
|
+
|
|
866
|
+
except Exception as upload_error:
|
|
867
|
+
logger.warning(f"Code upload failed (evaluator created but code not uploaded): {upload_error}")
|
|
868
|
+
# Don't fail - evaluator is created, just code upload failed
|
|
869
|
+
|
|
870
|
+
return result # Return after attempting upload
|
|
606
871
|
except Exception as e:
|
|
607
872
|
logger.error(f"Error creating evaluator: {str(e)}")
|
|
608
873
|
if isinstance(e, requests.exceptions.HTTPError) and hasattr(e, "response"):
|
|
@@ -504,7 +504,7 @@ class ExecutionManager:
|
|
|
504
504
|
)
|
|
505
505
|
|
|
506
506
|
logger.info(
|
|
507
|
-
f"🏁
|
|
507
|
+
f"🏁 Environment indicates rollout {rollout_idx} terminated at step {step} (reward: {trajectory.total_reward}) in thread {threading.current_thread().name}"
|
|
508
508
|
)
|
|
509
509
|
break
|
|
510
510
|
|
|
@@ -8,7 +8,7 @@ from typing import Callable, Set, Type, Union
|
|
|
8
8
|
|
|
9
9
|
import backoff
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
import litellm
|
|
12
12
|
import requests
|
|
13
13
|
import httpx
|
|
14
14
|
|
|
@@ -28,6 +28,12 @@ DEFAULT_RETRYABLE_EXCEPTIONS: Set[Type[Exception]] = {
|
|
|
28
28
|
httpx.TimeoutException,
|
|
29
29
|
httpx.NetworkError,
|
|
30
30
|
httpx.RemoteProtocolError,
|
|
31
|
+
litellm.exceptions.RateLimitError,
|
|
32
|
+
litellm.exceptions.InternalServerError,
|
|
33
|
+
litellm.exceptions.Timeout,
|
|
34
|
+
litellm.exceptions.NotFoundError,
|
|
35
|
+
litellm.exceptions.BadRequestError, # remove this once we have a long term solution
|
|
36
|
+
litellm.exceptions.ServiceUnavailableError,
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
|
|
@@ -8,6 +8,7 @@ The SVG evaluation logic remains in the test client.
|
|
|
8
8
|
import json
|
|
9
9
|
import os
|
|
10
10
|
import logging
|
|
11
|
+
import sys
|
|
11
12
|
from http.server import BaseHTTPRequestHandler
|
|
12
13
|
from openai import OpenAI
|
|
13
14
|
from dotenv import load_dotenv
|
|
@@ -16,9 +17,32 @@ from eval_protocol import Status, InitRequest, FireworksTracingHttpHandler, Roll
|
|
|
16
17
|
|
|
17
18
|
load_dotenv()
|
|
18
19
|
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
logging.getLogger()
|
|
20
|
+
# Configure logging so INFO and below go to stdout, WARNING+ to stderr.
|
|
21
|
+
# This avoids Vercel marking INFO logs as [error] (stderr).
|
|
22
|
+
root_logger = logging.getLogger()
|
|
23
|
+
root_logger.handlers.clear()
|
|
24
|
+
root_logger.setLevel(logging.INFO)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class _InfoOnly(logging.Filter):
|
|
28
|
+
def filter(self, record: logging.LogRecord) -> bool:
|
|
29
|
+
return record.levelno <= logging.INFO
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
formatter = logging.Formatter("%(levelname)s:%(name)s:%(message)s")
|
|
33
|
+
|
|
34
|
+
stdout_handler = logging.StreamHandler(sys.stdout)
|
|
35
|
+
stdout_handler.addFilter(_InfoOnly())
|
|
36
|
+
stdout_handler.setFormatter(formatter)
|
|
37
|
+
root_logger.addHandler(stdout_handler)
|
|
38
|
+
|
|
39
|
+
stderr_handler = logging.StreamHandler(sys.stderr)
|
|
40
|
+
stderr_handler.setLevel(logging.WARNING)
|
|
41
|
+
stderr_handler.setFormatter(formatter)
|
|
42
|
+
root_logger.addHandler(stderr_handler)
|
|
43
|
+
|
|
44
|
+
# Attach Fireworks tracing handler to root logger (non-stream HTTP sink)
|
|
45
|
+
root_logger.addHandler(FireworksTracingHttpHandler())
|
|
22
46
|
|
|
23
47
|
|
|
24
48
|
class handler(BaseHTTPRequestHandler):
|
|
@@ -43,22 +67,22 @@ class handler(BaseHTTPRequestHandler):
|
|
|
43
67
|
self._send_error(400, error_msg)
|
|
44
68
|
return
|
|
45
69
|
|
|
70
|
+
model = req.completion_params.get("model")
|
|
71
|
+
if model and isinstance(model, str) and model.startswith("fireworks_ai/"):
|
|
72
|
+
model = model[len("fireworks_ai/") :]
|
|
73
|
+
|
|
46
74
|
# Prepare completion arguments
|
|
47
75
|
completion_kwargs = {
|
|
48
76
|
"messages": req.messages,
|
|
49
|
-
|
|
77
|
+
"model": model,
|
|
78
|
+
"temperature": req.completion_params.get("temperature"),
|
|
79
|
+
"max_tokens": req.completion_params.get("max_tokens"),
|
|
50
80
|
}
|
|
51
81
|
|
|
52
82
|
# Add tools if present
|
|
53
83
|
if req.tools:
|
|
54
84
|
completion_kwargs["tools"] = req.tools
|
|
55
85
|
|
|
56
|
-
# Add completion parameters if they exist
|
|
57
|
-
# if hasattr(req, 'completion_params') and req.completion_params:
|
|
58
|
-
# # Filter out any model override
|
|
59
|
-
# params = {k: v for k, v in req.completion_params.items() if k != 'model'}
|
|
60
|
-
# completion_kwargs.update(params)
|
|
61
|
-
|
|
62
86
|
# Get API key (prefer request api_key, fallback to environment)
|
|
63
87
|
api_key = req.api_key or os.environ.get("FIREWORKS_API_KEY")
|
|
64
88
|
if not api_key:
|