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.
Files changed (438) hide show
  1. {eval_protocol-0.2.62/eval_protocol.egg-info → eval_protocol-0.2.63}/PKG-INFO +1 -1
  2. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/_version.py +3 -3
  3. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/upload.py +108 -42
  4. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/evaluation.py +272 -7
  5. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/manager.py +1 -1
  6. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/exception_config.py +7 -1
  7. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/svg_agent/vercel_svg_server/api/init.py +34 -10
  8. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/evaluation_row_utils.py +22 -0
  9. {eval_protocol-0.2.62 → eval_protocol-0.2.63/eval_protocol.egg-info}/PKG-INFO +1 -1
  10. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/SOURCES.txt +1 -0
  11. eval_protocol-0.2.63/tests/test_ep_upload_e2e.py +646 -0
  12. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation.py +71 -34
  13. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation_integration.py +123 -29
  14. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation_preview_integration.py +113 -53
  15. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/LICENSE +0 -0
  16. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/README.md +0 -0
  17. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/__init__.py +0 -0
  18. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/normalize_sandbox_fusion.py +0 -0
  19. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/utils/__init__.py +0 -0
  20. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/utils/generate_api_key.py +0 -0
  21. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/development/utils/subprocess_manager.py +0 -0
  22. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/__init__.py +0 -0
  23. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/__main__.py +0 -0
  24. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/__init__.py +0 -0
  25. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/base.py +0 -0
  26. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/bigquery.py +0 -0
  27. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/braintrust.py +0 -0
  28. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/fireworks_tracing.py +0 -0
  29. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/huggingface.py +0 -0
  30. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/langchain.py +0 -0
  31. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/langfuse.py +0 -0
  32. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/langsmith.py +0 -0
  33. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/openai_responses.py +0 -0
  34. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/trl.py +0 -0
  35. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/utils.py +0 -0
  36. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/adapters/weave.py +0 -0
  37. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/__init__.py +0 -0
  38. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/models.py +0 -0
  39. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/orchestrator.py +0 -0
  40. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resource_abc.py +0 -0
  41. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resource_pool.py +0 -0
  42. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/__init__.py +0 -0
  43. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/__init__.py +0 -0
  44. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/gorilla_file_system.py +0 -0
  45. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/math_api.py +0 -0
  46. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_envs/posting_api.py +0 -0
  47. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/bfcl_sim_api_resource.py +0 -0
  48. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/docker_resource.py +0 -0
  49. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/filesystem_resource.py +0 -0
  50. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/python_state_resource.py +0 -0
  51. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/resources/sql_resource.py +0 -0
  52. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/task_manager.py +0 -0
  53. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/agent/tool_registry.py +0 -0
  54. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/auth.py +0 -0
  55. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/__init__.py +0 -0
  56. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/data/airline_dataset.jsonl +0 -0
  57. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/data/retail_dataset.jsonl +0 -0
  58. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_aime25.py +0 -0
  59. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_frozen_lake.py +0 -0
  60. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_gpqa.py +0 -0
  61. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_livebench_data_analysis.py +0 -0
  62. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_tau_bench_airline.py +0 -0
  63. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/benchmarks/test_tau_bench_retail.py +0 -0
  64. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli.py +0 -0
  65. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/__init__.py +0 -0
  66. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/agent_eval_cmd.py +0 -0
  67. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/common.py +0 -0
  68. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/deploy.py +0 -0
  69. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/deploy_mcp.py +0 -0
  70. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/logs.py +0 -0
  71. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/preview.py +0 -0
  72. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/cli_commands/run_eval_cmd.py +0 -0
  73. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/common_utils.py +0 -0
  74. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/config.py +0 -0
  75. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/__init__.py +0 -0
  76. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/dynamic_data_loader.py +0 -0
  77. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/factory_data_loader.py +0 -0
  78. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/inline_data_loader.py +0 -0
  79. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/data_loader/models.py +0 -0
  80. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/__init__.py +0 -0
  81. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/dataset_logger.py +0 -0
  82. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/local_fs_dataset_logger_adapter.py +0 -0
  83. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/sqlite_dataset_logger_adapter.py +0 -0
  84. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/dataset_logger/sqlite_evaluation_row_store.py +0 -0
  85. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/datasets/__init__.py +0 -0
  86. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/datasets/loader.py +0 -0
  87. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/directory_utils.py +0 -0
  88. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/__init__.py +0 -0
  89. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/event_bus.py +0 -0
  90. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/logger.py +0 -0
  91. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/sqlite_event_bus.py +0 -0
  92. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/event_bus/sqlite_event_bus_database.py +0 -0
  93. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/execution/__init__.py +0 -0
  94. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/execution/pipeline.py +0 -0
  95. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/gcp_tools.py +0 -0
  96. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generation/cache.py +0 -0
  97. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generation/clients/base.py +0 -0
  98. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generation/clients.py +0 -0
  99. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/generic_server.py +0 -0
  100. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/get_pep440_version.py +0 -0
  101. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/human_id/__init__.py +0 -0
  102. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/human_id/dictionary.py +0 -0
  103. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/__init__.py +0 -0
  104. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/deepeval.py +0 -0
  105. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/openeval.py +0 -0
  106. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/integrations/trl.py +0 -0
  107. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/__init__.py +0 -0
  108. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/elasticsearch_client.py +0 -0
  109. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/elasticsearch_direct_http_handler.py +0 -0
  110. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/elasticsearch_index_manager.py +0 -0
  111. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/fireworks_tracing_http_handler.py +0 -0
  112. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/init.py +0 -0
  113. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/rollout_context.py +0 -0
  114. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/rollout_id_filter.py +0 -0
  115. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/log_utils/util.py +0 -0
  116. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/logging_utils.py +0 -0
  117. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/__init__.py +0 -0
  118. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/adapter.py +0 -0
  119. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/client/__init__.py +0 -0
  120. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/client/connection.py +0 -0
  121. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/clients.py +0 -0
  122. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/__init__.py +0 -0
  123. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/base_policy.py +0 -0
  124. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/execution/policy.py +0 -0
  125. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/grid_renderer.py +0 -0
  126. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/mcp_multi_client.py +0 -0
  127. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/mcpgym.py +0 -0
  128. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/process_manager.py +0 -0
  129. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/session/__init__.py +0 -0
  130. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/session/manager.py +0 -0
  131. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/simple_process_manager.py +0 -0
  132. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp/simulation_server.py +0 -0
  133. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/__init__.py +0 -0
  134. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/config.py +0 -0
  135. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/main.py +0 -0
  136. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/__init__.py +0 -0
  137. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/base_client.py +0 -0
  138. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/local_docker_client.py +0 -0
  139. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_agent/orchestration/stdio_mcp_client_helper.py +0 -0
  140. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_env.py +0 -0
  141. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/__init__.py +0 -0
  142. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/frozen_lake/frozen_lake_adapter.py +0 -0
  143. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/frozen_lake/frozen_lake_mcp.py +0 -0
  144. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/frozen_lake/server.py +0 -0
  145. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/README.md +0 -0
  146. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/__init__.py +0 -0
  147. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/airplane_environment/airline_environment.py +0 -0
  148. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/mock_environment/mock_environment.py +0 -0
  149. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/retail_environment/retail_environment.py +0 -0
  150. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/server.py +0 -0
  151. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/tau2_mcp.py +0 -0
  152. {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
  153. {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
  154. {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
  155. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/mcp_servers/tau2/tests/test_tau2_e2e.py +0 -0
  156. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/models.py +0 -0
  157. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/packaging.py +0 -0
  158. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/platform_api.py +0 -0
  159. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/playback_policy.py +0 -0
  160. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/__init__.py +0 -0
  161. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/__init__.py +0 -0
  162. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/app.py +0 -0
  163. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/auth.py +0 -0
  164. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/langfuse.py +0 -0
  165. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/litellm.py +0 -0
  166. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/main.py +0 -0
  167. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/models.py +0 -0
  168. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/proxy/proxy_core/redis_utils.py +0 -0
  169. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/__init__.py +0 -0
  170. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_agent_rollout_processor.py +0 -0
  171. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_dataset_adapter.py +0 -0
  172. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_langchain_rollout_processor.py +0 -0
  173. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_mcp_gym_rollout_processor.py +0 -0
  174. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_no_op_rollout_processor.py +0 -0
  175. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_pydantic_ai_rollout_processor.py +0 -0
  176. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/default_single_turn_rollout_process.py +0 -0
  177. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/dual_mode_wrapper.py +0 -0
  178. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/elasticsearch_setup.py +0 -0
  179. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/evaluation_test.py +0 -0
  180. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/evaluation_test_postprocess.py +0 -0
  181. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/evaluation_test_utils.py +0 -0
  182. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/execution.py +0 -0
  183. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/generate_parameter_combinations.py +0 -0
  184. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/github_action_rollout_processor.py +0 -0
  185. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/handle_persist_flow.py +0 -0
  186. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/parameterize.py +0 -0
  187. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/plugin.py +0 -0
  188. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/remote_rollout_processor.py +0 -0
  189. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/rollout_processor.py +0 -0
  190. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/store_experiment_link.py +0 -0
  191. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/store_results_url.py +0 -0
  192. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/tracing_utils.py +0 -0
  193. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/types.py +0 -0
  194. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/pytest/validate_signature.py +0 -0
  195. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/__init__.py +0 -0
  196. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/__init__.py +0 -0
  197. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge.py +0 -0
  198. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_braintrust.py +0 -0
  199. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_langfuse.py +0 -0
  200. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_langsmith.py +0 -0
  201. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/llm_judge_openai_responses.py +0 -0
  202. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/aha_judge/utils.py +0 -0
  203. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/llm_judge.py +0 -0
  204. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/llm_judge_braintrust.py +0 -0
  205. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/quickstart/utils.py +0 -0
  206. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/resources.py +0 -0
  207. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/reward_function.py +0 -0
  208. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/__init__.py +0 -0
  209. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/accuracy.py +0 -0
  210. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/accuracy_length.py +0 -0
  211. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/apps_coding_reward.py +0 -0
  212. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/apps_execution_utils.py +0 -0
  213. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/apps_testing_util.py +0 -0
  214. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/bfcl_reward.py +0 -0
  215. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/code_execution.py +0 -0
  216. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/code_execution_utils.py +0 -0
  217. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/cpp_code.py +0 -0
  218. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/deepcoder_reward.py +0 -0
  219. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/format.py +0 -0
  220. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/function_calling.py +0 -0
  221. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/json_schema.py +0 -0
  222. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/language_consistency.py +0 -0
  223. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/lean_prover.py +0 -0
  224. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/length.py +0 -0
  225. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/list_comparison_math_reward.py +0 -0
  226. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/math.py +0 -0
  227. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/multiple_choice_math_reward.py +0 -0
  228. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/reasoning_steps.py +0 -0
  229. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/repetition.py +0 -0
  230. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rewards/tag_count.py +0 -0
  231. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/rl_processing.py +0 -0
  232. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/server.py +0 -0
  233. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/stats/__init__.py +0 -0
  234. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/stats/confidence_intervals.py +0 -0
  235. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/typed_interface.py +0 -0
  236. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/__init__.py +0 -0
  237. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/errors.py +0 -0
  238. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/remote_rollout_processor.py +0 -0
  239. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/types/types.py +0 -0
  240. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/__init__.py +0 -0
  241. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/batch_evaluation.py +0 -0
  242. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/batch_transformation.py +0 -0
  243. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/browser_utils.py +0 -0
  244. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/check_server_status.py +0 -0
  245. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/dataset_helpers.py +0 -0
  246. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/logs_models.py +0 -0
  247. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/logs_server.py +0 -0
  248. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/module_loader.py +0 -0
  249. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/packaging_utils.py +0 -0
  250. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/show_results_url.py +0 -0
  251. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/static_policy.py +0 -0
  252. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/subprocess_utils.py +0 -0
  253. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol/utils/vite_server.py +0 -0
  254. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/dependency_links.txt +0 -0
  255. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/entry_points.txt +0 -0
  256. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/requires.txt +0 -0
  257. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/eval_protocol.egg-info/top_level.txt +0 -0
  258. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/pyproject.toml +0 -0
  259. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/setup.cfg +0 -0
  260. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/setup.py +0 -0
  261. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_accuracy.py +0 -0
  262. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_accuracy_length.py +0 -0
  263. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_adapters_e2e.py +0 -0
  264. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_agent_orchestrator.py +0 -0
  265. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_agent_resources.py +0 -0
  266. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_auth.py +0 -0
  267. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_batch_evaluation.py +0 -0
  268. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cli.py +0 -0
  269. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cli_agent.py +0 -0
  270. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cli_args.py +0 -0
  271. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_code_execution.py +0 -0
  272. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_config.py +0 -0
  273. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_control_plane_separation.py +0 -0
  274. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_cpp_code.py +0 -0
  275. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_data_driven_task_manager.py +0 -0
  276. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_deepcoder_reward.py +0 -0
  277. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_deepeval_integration.py +0 -0
  278. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_deploy_integration.py +0 -0
  279. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_directory_utils.py +0 -0
  280. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_e2b_integration.py +0 -0
  281. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_e2b_js_integration.py +0 -0
  282. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_edge_cases.py +0 -0
  283. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_eval_protocol_import.py +0 -0
  284. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_evaluation_postprocess.py +0 -0
  285. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_event_bus.py +0 -0
  286. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_event_bus_helper.py +0 -0
  287. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_examples_end_to_end.py +0 -0
  288. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_fireworks_api.py +0 -0
  289. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_format.py +0 -0
  290. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_fractional_code.py +0 -0
  291. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_function_calling.py +0 -0
  292. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_gcp_tools.py +0 -0
  293. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_generic_server.py +0 -0
  294. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_human_id.py +0 -0
  295. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_integration.py +0 -0
  296. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_json_schema.py +0 -0
  297. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_kwargs_validation.py +0 -0
  298. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_language_consistency.py +0 -0
  299. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_lean_prover.py +0 -0
  300. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_lean_prover_runner.py +0 -0
  301. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_length.py +0 -0
  302. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_list_comparison_math_reward.py +0 -0
  303. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_logs_server.py +0 -0
  304. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_logs_server_simple.py +0 -0
  305. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_math.py +0 -0
  306. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_minimal.py +0 -0
  307. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_models.py +0 -0
  308. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_models_rl.py +0 -0
  309. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_multiple_choice_math_reward.py +0 -0
  310. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_n_variant_batch_integration.py +0 -0
  311. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_n_variant_integration.py +0 -0
  312. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_openai_compatibility.py +0 -0
  313. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_openeval_integration.py +0 -0
  314. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_packaging.py +0 -0
  315. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_parallel_rollouts.py +0 -0
  316. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_platform_api.py +0 -0
  317. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_quickstart_utils.py +0 -0
  318. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_readiness.py +0 -0
  319. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_reasoning_steps.py +0 -0
  320. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_repetition.py +0 -0
  321. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_repetition_debug.py +0 -0
  322. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_retry_mechanism.py +0 -0
  323. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_reward_function.py +0 -0
  324. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_reward_protocol_import.py +0 -0
  325. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_rl_processing.py +0 -0
  326. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_rollout_control_plane_integration.py +0 -0
  327. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_server.py +0 -0
  328. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_show_results_url.py +0 -0
  329. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_status_migration_changes.py +0 -0
  330. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_status_migration_integration.py +0 -0
  331. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_status_model.py +0 -0
  332. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_tag_count.py +0 -0
  333. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_tau_bench_airline_smoke.py +0 -0
  334. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_typed_interface.py +0 -0
  335. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_typed_interface_rl.py +0 -0
  336. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_upload_entrypoint.py +0 -0
  337. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_url_handling.py +0 -0
  338. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/tests/test_vite_server.py +0 -0
  339. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/__init__.py +0 -0
  340. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/agent/__init__.py +0 -0
  341. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/agent/base.py +0 -0
  342. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/agent/llm_agent.py +0 -0
  343. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/__init__.py +0 -0
  344. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/api_config.py +0 -0
  345. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/data_model.py +0 -0
  346. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/api_service/simulation_service.py +0 -0
  347. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/cli.py +0 -0
  348. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/config.py +0 -0
  349. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/airline/policy.md +0 -0
  350. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/mock/policy.md +0 -0
  351. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/mock/policy_solo.md +0 -0
  352. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/retail/policy.md +0 -0
  353. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/main_policy.md +0 -0
  354. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/main_policy_solo.md +0 -0
  355. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/tech_support_manual.md +0 -0
  356. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/tech_support_workflow.md +0 -0
  357. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/domains/telecom/tech_support_workflow_solo.md +0 -0
  358. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/user_simulator/simulation_guidelines.md +0 -0
  359. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data/user_simulator/simulation_guidelines_tools.md +0 -0
  360. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/__init__.py +0 -0
  361. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/message.py +0 -0
  362. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/simulation.py +0 -0
  363. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/data_model/tasks.py +0 -0
  364. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/__init__.py +0 -0
  365. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/__init__.py +0 -0
  366. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/data_model.py +0 -0
  367. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/environment.py +0 -0
  368. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/tools.py +0 -0
  369. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/airline/utils.py +0 -0
  370. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/__init__.py +0 -0
  371. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/data_model.py +0 -0
  372. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/environment.py +0 -0
  373. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/tools.py +0 -0
  374. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/mock/utils.py +0 -0
  375. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/__init__.py +0 -0
  376. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/data_model.py +0 -0
  377. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/environment.py +0 -0
  378. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/tools.py +0 -0
  379. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/retail/utils.py +0 -0
  380. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/__init__.py +0 -0
  381. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/data_model.py +0 -0
  382. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/environment.py +0 -0
  383. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/__init__.py +0 -0
  384. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/const.py +0 -0
  385. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/create_tasks.py +0 -0
  386. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/manager.py +0 -0
  387. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/mms_issues.py +0 -0
  388. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/mobile_data_issues.py +0 -0
  389. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/service_issues.py +0 -0
  390. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tasks/utils.py +0 -0
  391. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/tools.py +0 -0
  392. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/user_data_model.py +0 -0
  393. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/user_tools.py +0 -0
  394. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/domains/telecom/utils.py +0 -0
  395. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/__init__.py +0 -0
  396. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/db.py +0 -0
  397. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/environment.py +0 -0
  398. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/server.py +0 -0
  399. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/tool.py +0 -0
  400. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/toolkit.py +0 -0
  401. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/environment/utils/interface_agent.py +0 -0
  402. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/__init__.py +0 -0
  403. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator.py +0 -0
  404. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_action.py +0 -0
  405. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_base.py +0 -0
  406. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_communicate.py +0 -0
  407. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_env.py +0 -0
  408. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/evaluator/evaluator_nl_assertions.py +0 -0
  409. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/metrics/__init__.py +0 -0
  410. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/metrics/agent_metrics.py +0 -0
  411. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/metrics/break_down_metrics.py +0 -0
  412. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/__init__.py +0 -0
  413. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/environment_manager.py +0 -0
  414. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/orchestrator.py +0 -0
  415. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/orchestrator/utils.py +0 -0
  416. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/registry.py +0 -0
  417. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/run.py +0 -0
  418. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/__init__.py +0 -0
  419. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/check_data.py +0 -0
  420. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/show_domain_doc.py +0 -0
  421. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/start_servers.py +0 -0
  422. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/scripts/view_simulations.py +0 -0
  423. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/user/__init__.py +0 -0
  424. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/user/base.py +0 -0
  425. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/user/user_simulator.py +0 -0
  426. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/__init__.py +0 -0
  427. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/display.py +0 -0
  428. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/io_utils.py +0 -0
  429. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/llm_utils.py +0 -0
  430. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/pydantic_utils.py +0 -0
  431. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vendor/tau2/utils/utils.py +0 -0
  432. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/versioneer.py +0 -0
  433. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/favicon-BkAAWQga.png +0 -0
  434. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/index-BnDJont9.css +0 -0
  435. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/index-Cu9t0G5i.js +0 -0
  436. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/index-Cu9t0G5i.js.map +0 -0
  437. {eval_protocol-0.2.62 → eval_protocol-0.2.63}/vite-app/dist/assets/logo-light-BprIBJQW.png +0 -0
  438. {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.62
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-24T00:58:57-0700",
11
+ "date": "2025-10-25T15:18:19-0700",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "e68248b5edf8e6f977c94ecd01f9972ef14b4b40",
15
- "version": "0.2.62"
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
- # Collect all test functions from Python files
135
- for file_path in _iter_python_files(root):
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
- unique_name = "ep_upload_" + re.sub(r"[^a-zA-Z0-9_]", "_", os.path.abspath(file_path))
138
- spec = importlib.util.spec_from_file_location(unique_name, file_path)
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
- continue
213
+ src_file, lineno = str(item.path), None
147
214
 
148
- for name, obj in inspect.getmembers(module):
149
- if _is_eval_protocol_test(obj):
150
- origin = getattr(obj, "_origin_func", obj)
151
- try:
152
- src_file = inspect.getsourcefile(origin) or file_path
153
- _, lineno = inspect.getsourcelines(origin)
154
- except Exception:
155
- src_file, lineno = file_path, None
156
-
157
- # Extract parametrization info from marks
158
- has_parametrize, param_count, param_ids = _extract_param_info_from_marks(obj)
159
-
160
- # Generate synthetic nodeids for display
161
- base_nodeid = f"{os.path.basename(file_path)}::{name}"
162
- if has_parametrize and param_ids:
163
- nodeids = [f"{base_nodeid}[{pid}]" for pid in param_ids]
164
- else:
165
- nodeids = [base_nodeid]
166
-
167
- discovered.append(
168
- DiscoveredTest(
169
- module_path=module.__name__,
170
- module_name=module.__name__,
171
- qualname=f"{module.__name__}.{name}",
172
- file_path=os.path.abspath(src_file),
173
- lineno=lineno,
174
- has_parametrize=has_parametrize,
175
- param_count=param_count,
176
- nodeids=nodeids,
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
- print("show payload", payload)
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
- # "rewardFunctionMode": self.reward_function_mode, # How input is processed by user func
547
- "criteria": self._construct_criteria(criteria_data={}),
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/accounts/{account_id}/evaluators"
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"{base_url}/{evaluator_id}"
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"{base_url}/{evaluator_id}"
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
- return result
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"🏁 Environmnet indicates rollout {rollout_idx} terminated at step {step} (reward: {trajectory.total_reward}) in thread {threading.current_thread().name}"
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
- # Attach Fireworks tracing handler to root logger
20
- fireworks_handler = FireworksTracingHttpHandler()
21
- logging.getLogger().addHandler(fireworks_handler)
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
- **req.completion_params,
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: