eval-protocol 0.3.29__tar.gz → 0.3.31__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.3.29/eval_protocol.egg-info → eval_protocol-0.3.31}/PKG-INFO +2 -1
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/_version.py +3 -3
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/fireworks_tracing.py +74 -1
- eval_protocol-0.3.31/eval_protocol/adapters/lp_deserializer.py +41 -0
- eval_protocol-0.3.31/eval_protocol/adapters/r3_deserializer.py +41 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/remote_rollout_processor.py +44 -37
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/tracing_utils.py +67 -6
- eval_protocol-0.3.31/eval_protocol/tracing/__init__.py +31 -0
- eval_protocol-0.3.31/eval_protocol/tracing/logprobs.py +126 -0
- eval_protocol-0.3.31/eval_protocol/tracing/prompt_token_ids.py +34 -0
- eval_protocol-0.3.31/eval_protocol/tracing/registry.py +88 -0
- eval_protocol-0.3.31/eval_protocol/tracing/router_replay.py +202 -0
- eval_protocol-0.3.31/eval_protocol/tracing/types.py +41 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/types/remote_rollout_processor.py +1 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31/eval_protocol.egg-info}/PKG-INFO +2 -1
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol.egg-info/SOURCES.txt +8 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol.egg-info/requires.txt +1 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/pyproject.toml +1 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/LICENSE +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/README.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/development/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/development/normalize_sandbox_fusion.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/development/utils/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/development/utils/generate_api_key.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/development/utils/subprocess_manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/__main__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/base.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/bigquery.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/braintrust.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/dataframe.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/huggingface.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/langchain.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/langfuse.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/langsmith.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/openai_responses.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/trl.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/adapters/weave.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/models.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/orchestrator.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resource_abc.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resource_pool.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/bfcl_envs/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/bfcl_envs/gorilla_file_system.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/bfcl_envs/math_api.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/bfcl_envs/posting_api.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/bfcl_sim_api_resource.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/docker_resource.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/filesystem_resource.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/python_state_resource.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/resources/sql_resource.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/task_manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/agent/tool_registry.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/auth.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/data/airline_dataset.jsonl +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/data/retail_dataset.jsonl +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/test_aime25.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/test_frozen_lake.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/test_glm_streaming_compliance.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/test_gpqa.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/test_livebench_data_analysis.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/test_tau_bench_airline.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/benchmarks/test_tau_bench_retail.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/agent_eval_cmd.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/common.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/create_rft.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/export_docs.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/local_test.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/logs.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/run_eval_cmd.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/upload.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/cli_commands/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/common_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/config.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/data_loader/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/data_loader/dynamic_data_loader.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/data_loader/factory_data_loader.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/data_loader/inline_data_loader.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/data_loader/jsonl_data_loader.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/data_loader/models.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/dataset_logger/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/dataset_logger/dataset_logger.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/dataset_logger/local_fs_dataset_logger_adapter.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/dataset_logger/sqlite_dataset_logger_adapter.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/dataset_logger/sqlite_evaluation_row_store.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/datasets/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/datasets/loader.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/directory_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/evaluation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/event_bus/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/event_bus/event_bus.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/event_bus/logger.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/event_bus/sqlite_event_bus.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/event_bus/sqlite_event_bus_database.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/exceptions.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/execution/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/execution/pipeline.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/fireworks_rft.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/gcp_tools.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/generation/cache.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/generation/clients/base.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/generation/clients.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/generic_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/get_pep440_version.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/human_id/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/human_id/dictionary.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/deepeval.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/fireworks_v1_completions_client.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/openai_rft.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/openeval.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/tinker_cookbook.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/tinker_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/integrations/trl.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/elasticsearch_client.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/elasticsearch_direct_http_handler.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/elasticsearch_index_manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/fireworks_tracing_http_handler.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/init.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/rollout_context.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/rollout_id_filter.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/log_utils/util.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/logging_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/adapter.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/client/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/client/connection.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/clients.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/execution/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/execution/base_policy.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/execution/manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/execution/policy.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/execution/vllm_policy.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/grid_renderer.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/mcp_multi_client.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/mcpgym.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/process_manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/session/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/session/manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/simple_process_manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp/simulation_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_agent/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_agent/config.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_agent/main.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_agent/orchestration/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_agent/orchestration/base_client.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_agent/orchestration/local_docker_client.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_agent/orchestration/stdio_mcp_client_helper.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_env.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/frozen_lake/frozen_lake_adapter.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/frozen_lake/frozen_lake_mcp.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/frozen_lake/server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/README.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/airplane_environment/airline_environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/mock_environment/mock_environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/retail_environment/retail_environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/tau2_mcp.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/tests/system_prompts/airline_agent_system_prompt.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/tests/system_prompts/mock_agent_system_prompt.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/tests/system_prompts/retail_agent_system_prompt.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/mcp_servers/tau2/tests/test_tau2_e2e.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/models.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/packaging.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/platform_api.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/playback_policy.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/app.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/auth.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/langfuse.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/litellm.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/main.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/models.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/proxy/proxy_core/redis_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/buffer.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_agent_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_dataset_adapter.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_klavis_sandbox_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_langchain_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_mcp_gym_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_no_op_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_pydantic_ai_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/default_single_turn_rollout_process.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/dual_mode_wrapper.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/elasticsearch_setup.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/evaluation_test.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/evaluation_test_postprocess.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/evaluation_test_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/exception_config.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/execution.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/generate_parameter_combinations.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/github_action_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/handle_persist_flow.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/integrations/openenv_trl_vllm.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/openenv_rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/parameterize.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/plugin.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/priority_scheduler.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/rollout_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/rollout_result_post_processor.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/store_experiment_link.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/store_results_url.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/types.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/validate_signature.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/aha_judge/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/aha_judge/llm_judge.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/aha_judge/llm_judge_braintrust.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/aha_judge/llm_judge_langfuse.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/aha_judge/llm_judge_langsmith.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/aha_judge/llm_judge_openai_responses.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/aha_judge/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/llm_judge.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/llm_judge_braintrust.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/svg_agent/evaluator/test_svgagent.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/svg_agent/evaluator/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/svg_agent/vercel_svg_server/api/init.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/quickstart/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/resources.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/reward_function.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/accuracy.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/accuracy_length.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/apps_coding_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/apps_execution_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/apps_testing_util.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/bfcl_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/code_execution.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/code_execution_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/cpp_code.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/deepcoder_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/format.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/function_calling.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/json_schema.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/language_consistency.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/lean_prover.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/length.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/list_comparison_math_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/math.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/multiple_choice_math_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/reasoning_steps.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/repetition.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rewards/tag_count.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/rl_processing.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/stats/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/stats/confidence_intervals.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/training/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/training/gepa_trainer.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/training/gepa_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/training/trainer.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/training/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/typed_interface.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/types/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/types/errors.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/types/types.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/batch_evaluation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/batch_transformation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/browser_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/check_server_status.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/dataset_helpers.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/evaluation_row_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/logs_models.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/logs_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/module_loader.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/packaging_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/show_results_url.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/static_policy.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/subprocess_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/utils/vite_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol.egg-info/dependency_links.txt +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol.egg-info/entry_points.txt +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol.egg-info/top_level.txt +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/setup.cfg +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/setup.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_accuracy.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_accuracy_length.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_adapters_e2e.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_agent_orchestrator.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_agent_resources.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_auth.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_batch_evaluation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_cli_agent.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_cli_args.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_cli_create_rft.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_cli_local_test.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_cli_startup_benchmark.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_code_execution.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_config.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_control_plane_separation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_cpp_code.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_data_driven_task_manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_deepcoder_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_deepeval_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_directory_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_e2b_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_e2b_js_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_edge_cases.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_ep_upload_e2e.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_eval_protocol_import.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_evaluation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_evaluation_postprocess.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_event_bus.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_event_bus_helper.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_examples_end_to_end.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_exception_config.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_exceptions.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_fireworks_api.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_fireworks_v1_completions_client.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_format.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_fractional_code.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_function_calling.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_gcp_tools.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_generic_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_human_id.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_json_schema.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_kwargs_validation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_language_consistency.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_lean_prover.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_lean_prover_runner.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_length.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_list_comparison_math_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_litellm_policy_provider_fields.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_logs_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_logs_server_simple.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_math.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_message_field_filtering.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_minimal.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_models.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_models_rl.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_multiple_choice_math_reward.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_n_variant_batch_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_n_variant_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_no_implicit_dotenv.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_openai_compatibility.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_openai_rft_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_openeval_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_packaging.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_parallel_rollouts.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_platform_api.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_priority_scheduler.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_quickstart_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_readiness.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_reasoning_steps.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_repetition.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_repetition_debug.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_retry_mechanism.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_reward_function.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_reward_protocol_import.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_rl_processing.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_rollout_control_plane_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_rollout_logprobs.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_show_results_url.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_sqlite_hardening.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_status_migration_changes.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_status_migration_integration.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_status_model.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_tag_count.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_tau_bench_airline_smoke.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_training_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_typed_interface.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_typed_interface_rl.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_upload_entrypoint.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_url_handling.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/tests/test_vite_server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/agent/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/agent/base.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/agent/llm_agent.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/api_service/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/api_service/api_config.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/api_service/data_model.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/api_service/simulation_service.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/cli.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/config.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/airline/policy.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/mock/policy.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/mock/policy_solo.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/retail/policy.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/telecom/main_policy.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/telecom/main_policy_solo.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/telecom/tech_support_manual.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/telecom/tech_support_workflow.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/domains/telecom/tech_support_workflow_solo.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/user_simulator/simulation_guidelines.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data/user_simulator/simulation_guidelines_tools.md +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data_model/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data_model/message.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data_model/simulation.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/data_model/tasks.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/airline/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/airline/data_model.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/airline/environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/airline/tools.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/airline/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/mock/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/mock/data_model.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/mock/environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/mock/tools.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/mock/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/retail/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/retail/data_model.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/retail/environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/retail/tools.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/retail/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/data_model.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/const.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/create_tasks.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/mms_issues.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/mobile_data_issues.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/service_issues.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tasks/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/tools.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/user_data_model.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/user_tools.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/domains/telecom/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/environment/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/environment/db.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/environment/environment.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/environment/server.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/environment/tool.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/environment/toolkit.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/environment/utils/interface_agent.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/evaluator/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/evaluator/evaluator.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/evaluator/evaluator_action.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/evaluator/evaluator_base.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/evaluator/evaluator_communicate.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/evaluator/evaluator_env.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/evaluator/evaluator_nl_assertions.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/metrics/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/metrics/agent_metrics.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/metrics/break_down_metrics.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/orchestrator/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/orchestrator/environment_manager.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/orchestrator/orchestrator.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/orchestrator/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/registry.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/run.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/scripts/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/scripts/check_data.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/scripts/show_domain_doc.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/scripts/start_servers.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/scripts/view_simulations.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/user/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/user/base.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/user/user_simulator.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/utils/__init__.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/utils/display.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/utils/io_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/utils/llm_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/utils/pydantic_utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vendor/tau2/utils/utils.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/versioneer.py +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vite-app/dist/assets/favicon-BkAAWQga.png +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vite-app/dist/assets/index-DFeF7AG_.js +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vite-app/dist/assets/index-DFeF7AG_.js.map +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vite-app/dist/assets/index-DvKW7FQL.css +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/vite-app/dist/assets/logo-light-BprIBJQW.png +0 -0
- {eval_protocol-0.3.29 → eval_protocol-0.3.31}/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.3.
|
|
3
|
+
Version: 0.3.31
|
|
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
|
|
@@ -40,6 +40,7 @@ Requires-Dist: addict>=2.4.0
|
|
|
40
40
|
Requires-Dist: deepdiff>=6.0.0
|
|
41
41
|
Requires-Dist: websockets>=15.0.1
|
|
42
42
|
Requires-Dist: fastapi>=0.116.1
|
|
43
|
+
Requires-Dist: zstandard>=0.19.0
|
|
43
44
|
Provides-Extra: dev
|
|
44
45
|
Requires-Dist: build; extra == "dev"
|
|
45
46
|
Requires-Dist: twine; extra == "dev"
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-
|
|
11
|
+
"date": "2026-06-19T13:02:26-0700",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.3.
|
|
14
|
+
"full-revisionid": "08e9b85f0315f420f5977c04549b56a406a826d5",
|
|
15
|
+
"version": "0.3.31"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -15,6 +15,7 @@ from typing import Any, Dict, List, Optional, Protocol
|
|
|
15
15
|
import os
|
|
16
16
|
|
|
17
17
|
from eval_protocol.models import EvaluationRow, InputMetadata, ExecutionMetadata, Message
|
|
18
|
+
from eval_protocol.tracing import PayloadType, decode_payloads
|
|
18
19
|
from .base import BaseAdapter
|
|
19
20
|
from .utils import extract_messages_from_data
|
|
20
21
|
from ..common_utils import get_user_agent
|
|
@@ -100,13 +101,50 @@ def convert_trace_dict_to_evaluation_row(
|
|
|
100
101
|
):
|
|
101
102
|
break # Break early if we've found all the metadata we need
|
|
102
103
|
|
|
104
|
+
# Decoding lives in eval_protocol.tracing; here we only map results onto the row.
|
|
105
|
+
payloads = trace.get("payloads")
|
|
106
|
+
if isinstance(payloads, dict):
|
|
107
|
+
decoded = decode_payloads(
|
|
108
|
+
payloads,
|
|
109
|
+
on_error=lambda pt, e: logger.warning(
|
|
110
|
+
"Failed to decode %s payload for trace %s: %s", pt.value, trace.get("id"), e
|
|
111
|
+
),
|
|
112
|
+
)
|
|
113
|
+
if decoded and execution_metadata.extra is None:
|
|
114
|
+
execution_metadata.extra = {}
|
|
115
|
+
|
|
116
|
+
if (dp := decoded.get(PayloadType.ROUTER_REPLAY)) is not None:
|
|
117
|
+
execution_metadata.extra["routing_matrices"] = dp.value
|
|
118
|
+
execution_metadata.extra["routing_metadata"] = dp.metadata
|
|
119
|
+
|
|
120
|
+
if (dp := decoded.get(PayloadType.LOGPROBS)) is not None:
|
|
121
|
+
logprobs = dp.value
|
|
122
|
+
token_ids = dp.token_ids
|
|
123
|
+
execution_metadata.extra["completion_logprobs"] = logprobs
|
|
124
|
+
if token_ids is not None:
|
|
125
|
+
execution_metadata.extra["completion_token_ids"] = token_ids
|
|
126
|
+
execution_metadata.extra["logprobs_metadata"] = dp.metadata
|
|
127
|
+
|
|
128
|
+
for i in range(len(messages) - 1, -1, -1):
|
|
129
|
+
if messages[i].role == "assistant":
|
|
130
|
+
content_entries = [{"logprob": lp} for lp in logprobs]
|
|
131
|
+
if token_ids is not None:
|
|
132
|
+
for entry, tid in zip(content_entries, token_ids):
|
|
133
|
+
entry["token_id"] = tid
|
|
134
|
+
messages[i].logprobs = {"content": content_entries}
|
|
135
|
+
break
|
|
136
|
+
|
|
137
|
+
if (dp := decoded.get(PayloadType.PROMPT_TOKEN_IDS)) is not None:
|
|
138
|
+
execution_metadata.extra["prompt_token_ids"] = dp.value
|
|
139
|
+
execution_metadata.extra["prompt_token_ids_metadata"] = dp.metadata
|
|
140
|
+
|
|
103
141
|
return EvaluationRow(
|
|
104
142
|
messages=messages,
|
|
105
143
|
tools=tools,
|
|
106
144
|
input_metadata=InputMetadata(
|
|
107
145
|
row_id=row_id,
|
|
108
146
|
session_data={
|
|
109
|
-
"langfuse_trace_id": trace.get("id"),
|
|
147
|
+
"langfuse_trace_id": trace.get("id"),
|
|
110
148
|
},
|
|
111
149
|
),
|
|
112
150
|
execution_metadata=execution_metadata,
|
|
@@ -375,6 +413,37 @@ class FireworksTracingAdapter(BaseAdapter):
|
|
|
375
413
|
)
|
|
376
414
|
return results
|
|
377
415
|
|
|
416
|
+
async def async_get_status(self, session: aiohttp.ClientSession, rollout_id: str) -> Optional[Dict[str, Any]]:
|
|
417
|
+
"""Fetch rollout status from the lightweight /status endpoint.
|
|
418
|
+
|
|
419
|
+
Returns the parsed JSON response or None if the status is not yet available.
|
|
420
|
+
Response shape: {"rollout_id": "...", "status": {"code": ...} | null, "extras": {...} | null}
|
|
421
|
+
"""
|
|
422
|
+
headers = {
|
|
423
|
+
"Authorization": f"Bearer {self._get_api_key()}",
|
|
424
|
+
"User-Agent": get_user_agent(),
|
|
425
|
+
}
|
|
426
|
+
params: Dict[str, Any] = {"rollout_id": rollout_id}
|
|
427
|
+
timeout = aiohttp.ClientTimeout(total=self.timeout)
|
|
428
|
+
|
|
429
|
+
urls_to_try = [f"{self.base_url}/v1/status", f"{self.base_url}/status"]
|
|
430
|
+
last_error: Optional[str] = None
|
|
431
|
+
for url in urls_to_try:
|
|
432
|
+
try:
|
|
433
|
+
async with session.get(url, params=params, headers=headers, timeout=timeout) as resp:
|
|
434
|
+
if resp.status == 404:
|
|
435
|
+
last_error = f"404 for {url}"
|
|
436
|
+
continue
|
|
437
|
+
resp.raise_for_status()
|
|
438
|
+
return (await resp.json(content_type=None)) or {}
|
|
439
|
+
except (aiohttp.ClientError, asyncio.TimeoutError, json.JSONDecodeError) as e:
|
|
440
|
+
last_error = str(e)
|
|
441
|
+
continue
|
|
442
|
+
|
|
443
|
+
if last_error:
|
|
444
|
+
logger.error("Failed to fetch status from Fireworks (tried %s): %s", urls_to_try, last_error)
|
|
445
|
+
return None
|
|
446
|
+
|
|
378
447
|
def get_evaluation_rows(
|
|
379
448
|
self,
|
|
380
449
|
tags: List[str],
|
|
@@ -395,6 +464,7 @@ class FireworksTracingAdapter(BaseAdapter):
|
|
|
395
464
|
max_retries: int = 3,
|
|
396
465
|
span_name: Optional[str] = None,
|
|
397
466
|
converter: Optional[TraceDictConverter] = None,
|
|
467
|
+
include_payloads: bool = False,
|
|
398
468
|
) -> List[EvaluationRow]:
|
|
399
469
|
"""Pull traces from Langfuse via proxy and convert to EvaluationRow format.
|
|
400
470
|
|
|
@@ -418,6 +488,8 @@ class FireworksTracingAdapter(BaseAdapter):
|
|
|
418
488
|
max_retries: Max retry attempts used by proxy (default: 3)
|
|
419
489
|
converter: Optional custom converter implementing TraceDictConverter protocol.
|
|
420
490
|
If provided, this will be used instead of the default conversion logic.
|
|
491
|
+
include_payloads: If True, request payload data (e.g., router replay)
|
|
492
|
+
from the gateway and decompress it into the returned EvaluationRows.
|
|
421
493
|
|
|
422
494
|
Returns:
|
|
423
495
|
List[EvaluationRow]: Converted evaluation rows
|
|
@@ -448,6 +520,7 @@ class FireworksTracingAdapter(BaseAdapter):
|
|
|
448
520
|
"to_timestamp": to_timestamp.isoformat() if to_timestamp else None,
|
|
449
521
|
"sleep_between_gets": sleep_between_gets,
|
|
450
522
|
"max_retries": max_retries,
|
|
523
|
+
"include_payloads": include_payloads if include_payloads else None,
|
|
451
524
|
}
|
|
452
525
|
|
|
453
526
|
# Remove None values
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""Deprecated compatibility shim for ``eval_protocol.tracing.logprobs``.
|
|
2
|
+
|
|
3
|
+
Import from ``eval_protocol.tracing.logprobs`` (or ``decode_payloads`` from
|
|
4
|
+
``eval_protocol.tracing``) instead. This module re-exports the LP/v1 helpers
|
|
5
|
+
that lived here before the tracing package refactor.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import warnings
|
|
11
|
+
|
|
12
|
+
warnings.warn(
|
|
13
|
+
"eval_protocol.adapters.lp_deserializer is deprecated; "
|
|
14
|
+
"import from eval_protocol.tracing.logprobs instead.",
|
|
15
|
+
DeprecationWarning,
|
|
16
|
+
stacklevel=2,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from eval_protocol.tracing.logprobs import ( # noqa: E402
|
|
20
|
+
ENTRY_FORMAT,
|
|
21
|
+
ENTRY_SIZE,
|
|
22
|
+
HEADER_FORMAT,
|
|
23
|
+
HEADER_SIZE,
|
|
24
|
+
HEADER_VERSION,
|
|
25
|
+
MAGIC,
|
|
26
|
+
MISSING_TOKEN_ID,
|
|
27
|
+
decompress_and_parse_lp,
|
|
28
|
+
parse_logprobs,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
__all__ = [
|
|
32
|
+
"ENTRY_FORMAT",
|
|
33
|
+
"ENTRY_SIZE",
|
|
34
|
+
"HEADER_FORMAT",
|
|
35
|
+
"HEADER_SIZE",
|
|
36
|
+
"HEADER_VERSION",
|
|
37
|
+
"MAGIC",
|
|
38
|
+
"MISSING_TOKEN_ID",
|
|
39
|
+
"decompress_and_parse_lp",
|
|
40
|
+
"parse_logprobs",
|
|
41
|
+
]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""Deprecated compatibility shim for ``eval_protocol.tracing.router_replay``.
|
|
2
|
+
|
|
3
|
+
Import from ``eval_protocol.tracing.router_replay`` (or ``decode_payloads`` from
|
|
4
|
+
``eval_protocol.tracing``) instead. This module re-exports the R3/v1 helpers
|
|
5
|
+
that lived here before the tracing package refactor.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import warnings
|
|
11
|
+
|
|
12
|
+
warnings.warn(
|
|
13
|
+
"eval_protocol.adapters.r3_deserializer is deprecated; "
|
|
14
|
+
"import from eval_protocol.tracing.router_replay instead.",
|
|
15
|
+
DeprecationWarning,
|
|
16
|
+
stacklevel=2,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from eval_protocol.tracing.router_replay import ( # noqa: E402
|
|
20
|
+
BITS_PER_BYTE,
|
|
21
|
+
HEADER_FORMAT,
|
|
22
|
+
HEADER_SIZE,
|
|
23
|
+
MAGIC,
|
|
24
|
+
_RoutingDtype,
|
|
25
|
+
_SelectorMode,
|
|
26
|
+
_parse_header,
|
|
27
|
+
_read_bitmap_positions,
|
|
28
|
+
decompress_and_parse_r3,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
__all__ = [
|
|
32
|
+
"BITS_PER_BYTE",
|
|
33
|
+
"HEADER_FORMAT",
|
|
34
|
+
"HEADER_SIZE",
|
|
35
|
+
"MAGIC",
|
|
36
|
+
"_RoutingDtype",
|
|
37
|
+
"_SelectorMode",
|
|
38
|
+
"_parse_header",
|
|
39
|
+
"_read_bitmap_positions",
|
|
40
|
+
"decompress_and_parse_r3",
|
|
41
|
+
]
|
{eval_protocol-0.3.29 → eval_protocol-0.3.31}/eval_protocol/pytest/remote_rollout_processor.py
RENAMED
|
@@ -35,11 +35,13 @@ class RemoteRolloutProcessor(RolloutProcessor):
|
|
|
35
35
|
model_base_url: str = "https://tracing.fireworks.ai",
|
|
36
36
|
poll_interval: float = 1.0,
|
|
37
37
|
timeout_seconds: float = 120.0,
|
|
38
|
+
include_payloads: bool = False,
|
|
38
39
|
):
|
|
39
40
|
# Prefer constructor-provided configuration. These can be overridden via
|
|
40
41
|
# config.kwargs at call time for backward compatibility.
|
|
41
42
|
self._remote_base_url = remote_base_url
|
|
42
43
|
self._model_base_url = model_base_url
|
|
44
|
+
self._include_payloads = include_payloads
|
|
43
45
|
if os.getenv("EP_REMOTE_ROLLOUT_PROCESSOR_BASE_URL"):
|
|
44
46
|
self._remote_base_url = os.getenv("EP_REMOTE_ROLLOUT_PROCESSOR_BASE_URL")
|
|
45
47
|
_ep_model_base_url = os.getenv("EP_MODEL_BASE_URL")
|
|
@@ -122,45 +124,46 @@ class RemoteRolloutProcessor(RolloutProcessor):
|
|
|
122
124
|
|
|
123
125
|
while time.time() < deadline:
|
|
124
126
|
session = self._get_or_create_session()
|
|
125
|
-
|
|
126
|
-
session,
|
|
127
|
+
status_result = await self._tracing_adapter.async_get_status(
|
|
128
|
+
session,
|
|
129
|
+
rollout_id=row.execution_metadata.rollout_id,
|
|
127
130
|
)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if status_logs:
|
|
136
|
-
if len(status_logs) > 1:
|
|
137
|
-
logger.warning(
|
|
138
|
-
"Found %s status logs for rollout %s; expected at most 1. Using the first one: %s",
|
|
139
|
-
len(status_logs),
|
|
140
|
-
row.execution_metadata.rollout_id,
|
|
141
|
-
status_logs[0],
|
|
142
|
-
)
|
|
143
|
-
# Use the first log with status information
|
|
144
|
-
status_log = status_logs[0]
|
|
145
|
-
status_dict = status_log.get("status")
|
|
146
|
-
raw_extras = status_log.get("extras") or {}
|
|
147
|
-
status_extras = {
|
|
148
|
-
k: v for k, v in raw_extras.items() if k not in ("logger_name", "level", "timestamp")
|
|
149
|
-
}
|
|
131
|
+
status = (status_result or {}).get("status")
|
|
132
|
+
if isinstance(status, dict) and "code" in status:
|
|
133
|
+
status_code = status["code"]
|
|
134
|
+
if status_code == Status.Code.RUNNING:
|
|
135
|
+
await asyncio.sleep(poll_interval)
|
|
136
|
+
continue
|
|
150
137
|
|
|
151
138
|
logger.info(
|
|
152
|
-
|
|
139
|
+
"Found status for rollout %s with code %s",
|
|
140
|
+
row.execution_metadata.rollout_id,
|
|
141
|
+
status_code,
|
|
153
142
|
)
|
|
154
143
|
|
|
155
|
-
|
|
156
|
-
status_message =
|
|
157
|
-
status_details =
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
f"
|
|
144
|
+
# /status only returns the code; backfill message/details/extras from Logs once.
|
|
145
|
+
status_message: str = ""
|
|
146
|
+
status_details: list = []
|
|
147
|
+
status_extras: dict = {}
|
|
148
|
+
completed_logs = await self._tracing_adapter.async_search_logs(
|
|
149
|
+
session, tags=[f"rollout_id:{row.execution_metadata.rollout_id}"]
|
|
161
150
|
)
|
|
151
|
+
# Pick the log row whose status code matches the terminal
|
|
152
|
+
# code from /status, so intermediate RUNNING checkpoints
|
|
153
|
+
# don't poison the backfill.
|
|
154
|
+
for log in completed_logs:
|
|
155
|
+
sd = log.get("status")
|
|
156
|
+
if isinstance(sd, dict) and sd.get("code") == status_code:
|
|
157
|
+
status_message = sd.get("message", "") or ""
|
|
158
|
+
status_details = sd.get("details", []) or []
|
|
159
|
+
raw_extras = log.get("extras") or {}
|
|
160
|
+
status_extras = {
|
|
161
|
+
k: v
|
|
162
|
+
for k, v in raw_extras.items()
|
|
163
|
+
if k not in ("logger_name", "level", "timestamp")
|
|
164
|
+
}
|
|
165
|
+
break
|
|
162
166
|
|
|
163
|
-
# Create and raise exception if appropriate, preserving original message
|
|
164
167
|
exception = exception_for_status_code(status_code, status_message)
|
|
165
168
|
if exception is not None:
|
|
166
169
|
raise exception
|
|
@@ -171,10 +174,11 @@ class RemoteRolloutProcessor(RolloutProcessor):
|
|
|
171
174
|
details=status_details,
|
|
172
175
|
)
|
|
173
176
|
|
|
174
|
-
if
|
|
175
|
-
row.execution_metadata.extra
|
|
176
|
-
|
|
177
|
-
|
|
177
|
+
if status_extras:
|
|
178
|
+
if row.execution_metadata.extra:
|
|
179
|
+
row.execution_metadata.extra.update(status_extras)
|
|
180
|
+
else:
|
|
181
|
+
row.execution_metadata.extra = status_extras
|
|
178
182
|
|
|
179
183
|
logger.info("Stopping polling for rollout %s", row.execution_metadata.rollout_id)
|
|
180
184
|
break
|
|
@@ -192,7 +196,10 @@ class RemoteRolloutProcessor(RolloutProcessor):
|
|
|
192
196
|
row.execution_metadata.rollout_duration_seconds = time.perf_counter() - start_time
|
|
193
197
|
|
|
194
198
|
def _update_with_trace() -> None:
|
|
195
|
-
return update_row_with_remote_trace(
|
|
199
|
+
return update_row_with_remote_trace(
|
|
200
|
+
row, default_fireworks_output_data_loader, model_base_url,
|
|
201
|
+
include_payloads=self._include_payloads,
|
|
202
|
+
)
|
|
196
203
|
|
|
197
204
|
await asyncio.to_thread(_update_with_trace) # Update row with remote trace in-place
|
|
198
205
|
return row
|
|
@@ -22,9 +22,63 @@ def default_fireworks_output_data_loader(config: DataLoaderConfig) -> DynamicDat
|
|
|
22
22
|
# Use EP_REMOTE_API_KEY for fetching remote traces, falling back to FIREWORKS_API_KEY
|
|
23
23
|
api_key = os.environ.get("EP_REMOTE_API_KEY") or os.environ.get("FIREWORKS_API_KEY")
|
|
24
24
|
adapter = FireworksTracingAdapter(base_url=base_url, api_key=api_key)
|
|
25
|
-
return adapter.get_evaluation_rows(
|
|
25
|
+
return adapter.get_evaluation_rows(
|
|
26
|
+
tags=[f"rollout_id:{config.rollout_id}"],
|
|
27
|
+
max_retries=5,
|
|
28
|
+
include_payloads=config.include_payloads,
|
|
29
|
+
)
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
def preprocess_traces(rows: List[EvaluationRow]) -> List[EvaluationRow]:
|
|
32
|
+
filtered_rows = filter_longest_conversation(rows)
|
|
33
|
+
if config.include_payloads and filtered_rows:
|
|
34
|
+
_merge_payloads_into_longest_row(filtered_rows[0], rows)
|
|
35
|
+
return filtered_rows
|
|
36
|
+
|
|
37
|
+
return DynamicDataLoader(generators=[fetch_traces], preprocess_fn=preprocess_traces)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _merge_payloads_into_longest_row(longest_row: EvaluationRow, rows: List[EvaluationRow]) -> None:
|
|
41
|
+
"""
|
|
42
|
+
Preserve per-turn payload-derived metadata after selecting the longest trace row.
|
|
43
|
+
|
|
44
|
+
Each trace row carries payloads for its final assistant turn. The longest row
|
|
45
|
+
keeps the full conversation, while its top-level execution metadata remains
|
|
46
|
+
the payload metadata for the final completion for backward compatibility.
|
|
47
|
+
"""
|
|
48
|
+
target_assistants = longest_row.get_assistant_messages()
|
|
49
|
+
assistant_turn_payloads = []
|
|
50
|
+
|
|
51
|
+
for row in sorted(rows, key=lambda item: len(item.messages)):
|
|
52
|
+
source = row.last_assistant_message()
|
|
53
|
+
source_turn_index = len(row.get_assistant_messages()) - 1
|
|
54
|
+
if source_turn_index < 0 or source_turn_index >= len(target_assistants):
|
|
55
|
+
continue
|
|
56
|
+
|
|
57
|
+
if source and source.logprobs and not target_assistants[source_turn_index].logprobs:
|
|
58
|
+
target_assistants[source_turn_index].logprobs = source.logprobs
|
|
59
|
+
|
|
60
|
+
extra = row.execution_metadata.extra or {}
|
|
61
|
+
turn_payload = {
|
|
62
|
+
key: extra[key]
|
|
63
|
+
for key in (
|
|
64
|
+
"completion_logprobs",
|
|
65
|
+
"completion_token_ids",
|
|
66
|
+
"prompt_token_ids",
|
|
67
|
+
"prompt_token_ids_metadata",
|
|
68
|
+
"logprobs_metadata",
|
|
69
|
+
"routing_matrices",
|
|
70
|
+
"routing_metadata",
|
|
71
|
+
)
|
|
72
|
+
if key in extra
|
|
73
|
+
}
|
|
74
|
+
if turn_payload:
|
|
75
|
+
turn_payload["assistant_turn_index"] = source_turn_index
|
|
76
|
+
assistant_turn_payloads.append(turn_payload)
|
|
77
|
+
|
|
78
|
+
if assistant_turn_payloads:
|
|
79
|
+
if longest_row.execution_metadata.extra is None:
|
|
80
|
+
longest_row.execution_metadata.extra = {}
|
|
81
|
+
longest_row.execution_metadata.extra["assistant_turn_payloads"] = assistant_turn_payloads
|
|
28
82
|
|
|
29
83
|
|
|
30
84
|
def build_fireworks_tracing_url(
|
|
@@ -99,7 +153,7 @@ def build_init_request(
|
|
|
99
153
|
if not completion_params_dict.get("model"):
|
|
100
154
|
raise ValueError("Model must be provided in completion_params")
|
|
101
155
|
|
|
102
|
-
# Extract base_url from completion_params
|
|
156
|
+
# Extract base_url from completion_params for tracing-gateway URL encoding
|
|
103
157
|
completion_params_base_url: Optional[str] = completion_params_dict.get("base_url")
|
|
104
158
|
|
|
105
159
|
# Strip non-OpenAI fields from messages
|
|
@@ -129,7 +183,7 @@ def build_init_request(
|
|
|
129
183
|
|
|
130
184
|
# Build final model base URL with tracing metadata
|
|
131
185
|
final_model_base_url = model_base_url
|
|
132
|
-
if model_base_url and ("tracing.fireworks.ai" in model_base_url or model_base_url.startswith("http://localhost")):
|
|
186
|
+
if model_base_url and ("tracing.fireworks.ai" in model_base_url or model_base_url.startswith("http://localhost") or "litellm-gateway" in model_base_url):
|
|
133
187
|
final_model_base_url = build_fireworks_tracing_url(model_base_url, meta, completion_params_base_url)
|
|
134
188
|
|
|
135
189
|
# Extract API key from environment or completion_params
|
|
@@ -148,13 +202,20 @@ def build_init_request(
|
|
|
148
202
|
|
|
149
203
|
|
|
150
204
|
def update_row_with_remote_trace(
|
|
151
|
-
row: EvaluationRow,
|
|
205
|
+
row: EvaluationRow,
|
|
206
|
+
output_data_loader: Callable[[DataLoaderConfig], DynamicDataLoader],
|
|
207
|
+
model_base_url: str,
|
|
208
|
+
include_payloads: bool = False,
|
|
152
209
|
) -> None:
|
|
153
210
|
"""Update row with remote trace data using output_data_loader (shared logic)."""
|
|
154
211
|
if not row.execution_metadata.rollout_id:
|
|
155
212
|
return None
|
|
156
213
|
|
|
157
|
-
loader_config = DataLoaderConfig(
|
|
214
|
+
loader_config = DataLoaderConfig(
|
|
215
|
+
rollout_id=row.execution_metadata.rollout_id,
|
|
216
|
+
model_base_url=model_base_url,
|
|
217
|
+
include_payloads=include_payloads,
|
|
218
|
+
)
|
|
158
219
|
data_loader = output_data_loader(loader_config)
|
|
159
220
|
results = data_loader.load()
|
|
160
221
|
output_rows: List[EvaluationRow] = [r for result in results for r in result.rows]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Decode Fireworks tracing-gateway payloads.
|
|
2
|
+
|
|
3
|
+
Standalone, dependency-light helpers (stdlib + ``zstandard`` only) for turning
|
|
4
|
+
the binary/JSON ``payloads`` returned by the Fireworks tracing gateway
|
|
5
|
+
(``GET /traces?include_payloads=true``) into Python values. No EvaluationRow or
|
|
6
|
+
rollout machinery required -- usable on its own.
|
|
7
|
+
|
|
8
|
+
Typical use::
|
|
9
|
+
|
|
10
|
+
from eval_protocol.tracing import decode_payloads, PayloadType
|
|
11
|
+
|
|
12
|
+
decoded = decode_payloads(trace["payloads"])
|
|
13
|
+
decoded[PayloadType.PROMPT_TOKEN_IDS].value # List[int]
|
|
14
|
+
decoded[PayloadType.LOGPROBS].value # List[float]
|
|
15
|
+
decoded[PayloadType.ROUTER_REPLAY].value # List[Optional[str]]
|
|
16
|
+
|
|
17
|
+
See ``README.md`` in this package for details.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from .registry import decode_payload, decode_payloads, decode_trace
|
|
23
|
+
from .types import DecodedPayload, PayloadType
|
|
24
|
+
|
|
25
|
+
__all__ = [
|
|
26
|
+
"PayloadType",
|
|
27
|
+
"DecodedPayload",
|
|
28
|
+
"decode_payloads",
|
|
29
|
+
"decode_payload",
|
|
30
|
+
"decode_trace",
|
|
31
|
+
]
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""LP/v1 binary deserializer for per-token logprobs payloads.
|
|
2
|
+
|
|
3
|
+
Implements the inverse of the tracing gateway's ``logprobs_serializer.serialize_logprobs``.
|
|
4
|
+
See that module for the full header specification.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import base64
|
|
10
|
+
import struct
|
|
11
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
12
|
+
|
|
13
|
+
import zstandard as zstd
|
|
14
|
+
|
|
15
|
+
from .types import DecodedPayload, PayloadType
|
|
16
|
+
|
|
17
|
+
MAGIC = b"LP01"
|
|
18
|
+
HEADER_VERSION = 1
|
|
19
|
+
MISSING_TOKEN_ID = -1
|
|
20
|
+
ENTRY_FORMAT = "<if"
|
|
21
|
+
ENTRY_SIZE = struct.calcsize(ENTRY_FORMAT) # 8 bytes
|
|
22
|
+
HEADER_FORMAT = "<4sBBHIIQ"
|
|
23
|
+
HEADER_SIZE = struct.calcsize(HEADER_FORMAT) # 24 bytes
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _parse_header(raw: bytes) -> Dict[str, Any]:
|
|
27
|
+
if len(raw) < HEADER_SIZE:
|
|
28
|
+
raise ValueError(f"Payload too short for lp/v1 header: {len(raw)} < {HEADER_SIZE}")
|
|
29
|
+
|
|
30
|
+
(
|
|
31
|
+
magic,
|
|
32
|
+
version,
|
|
33
|
+
flags,
|
|
34
|
+
reserved_u16,
|
|
35
|
+
token_count,
|
|
36
|
+
body_byte_length,
|
|
37
|
+
reserved_u64,
|
|
38
|
+
) = struct.unpack(HEADER_FORMAT, raw[:HEADER_SIZE])
|
|
39
|
+
|
|
40
|
+
if magic != MAGIC:
|
|
41
|
+
raise ValueError(f"Bad LP/v1 magic: {magic!r}")
|
|
42
|
+
if version != HEADER_VERSION:
|
|
43
|
+
raise ValueError(f"Unsupported lp/v1 header version: {version}")
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
"flags": flags,
|
|
47
|
+
"reserved_u16": reserved_u16,
|
|
48
|
+
"token_count": token_count,
|
|
49
|
+
"body_byte_length": body_byte_length,
|
|
50
|
+
"reserved_u64": reserved_u64,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def parse_logprobs(raw: bytes) -> Tuple[List[float], Optional[List[int]], Dict[str, Any]]:
|
|
55
|
+
"""Parse uncompressed LP/v1 bytes into logprobs, optional token ids, and metadata."""
|
|
56
|
+
header = _parse_header(raw)
|
|
57
|
+
token_count = header["token_count"]
|
|
58
|
+
body_byte_length = header["body_byte_length"]
|
|
59
|
+
|
|
60
|
+
if token_count == 0:
|
|
61
|
+
raise ValueError("LP/v1 token_count must be > 0")
|
|
62
|
+
if body_byte_length != token_count * ENTRY_SIZE:
|
|
63
|
+
raise ValueError(
|
|
64
|
+
f"body_byte_length ({body_byte_length}) != token_count * {ENTRY_SIZE} "
|
|
65
|
+
f"({token_count * ENTRY_SIZE})"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
expected_len = HEADER_SIZE + body_byte_length
|
|
69
|
+
if len(raw) != expected_len:
|
|
70
|
+
raise ValueError(f"LP/v1 payload length mismatch: {len(raw)} != {expected_len}")
|
|
71
|
+
|
|
72
|
+
logprobs: List[float] = []
|
|
73
|
+
token_ids: List[int] = []
|
|
74
|
+
all_token_ids_valid = True
|
|
75
|
+
offset = HEADER_SIZE
|
|
76
|
+
for _ in range(token_count):
|
|
77
|
+
wire_id, logprob = struct.unpack(ENTRY_FORMAT, raw[offset : offset + ENTRY_SIZE])
|
|
78
|
+
offset += ENTRY_SIZE
|
|
79
|
+
logprobs.append(logprob)
|
|
80
|
+
if wire_id == MISSING_TOKEN_ID:
|
|
81
|
+
all_token_ids_valid = False
|
|
82
|
+
token_ids.append(wire_id)
|
|
83
|
+
else:
|
|
84
|
+
token_ids.append(wire_id)
|
|
85
|
+
|
|
86
|
+
metadata: Dict[str, Any] = {
|
|
87
|
+
"scope": "completion_only",
|
|
88
|
+
"completion_token_count": token_count,
|
|
89
|
+
"all_token_ids_valid": all_token_ids_valid,
|
|
90
|
+
}
|
|
91
|
+
header.update(metadata)
|
|
92
|
+
ids_out: Optional[List[int]] = token_ids if all_token_ids_valid else None
|
|
93
|
+
return logprobs, ids_out, header
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def decompress_and_parse_lp(data_b64: str) -> Tuple[List[float], Optional[List[int]], Dict[str, Any]]:
|
|
97
|
+
"""Decompress and unpack an LP/v1 payload into completion logprobs and token ids.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
data_b64: Base64-encoded zstd-compressed LP binary blob from
|
|
101
|
+
``payloads.logprobs.data``.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
``(logprobs, token_ids, metadata)`` where ``logprobs`` is per-completion-token
|
|
105
|
+
scalars, ``token_ids`` is ``None`` if any wire id was ``MISSING_TOKEN_ID``,
|
|
106
|
+
and ``metadata`` includes ``all_token_ids_valid`` and ``completion_token_count``.
|
|
107
|
+
"""
|
|
108
|
+
compressed = base64.b64decode(data_b64)
|
|
109
|
+
decompressor = zstd.ZstdDecompressor()
|
|
110
|
+
raw = decompressor.decompress(compressed)
|
|
111
|
+
return parse_logprobs(raw)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def decode_logprobs(data_b64: str) -> DecodedPayload:
|
|
115
|
+
"""Decode a gateway ``payloads.logprobs.data`` blob into a ``DecodedPayload``.
|
|
116
|
+
|
|
117
|
+
``value`` is the per-completion-token logprob list; per-token ids (when all
|
|
118
|
+
valid) are available under ``token_ids``.
|
|
119
|
+
"""
|
|
120
|
+
logprobs, token_ids, metadata = decompress_and_parse_lp(data_b64)
|
|
121
|
+
return DecodedPayload(
|
|
122
|
+
payload_type=PayloadType.LOGPROBS,
|
|
123
|
+
value=logprobs,
|
|
124
|
+
metadata=metadata,
|
|
125
|
+
token_ids=token_ids,
|
|
126
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""``pti/v1`` decoder for prompt token ID payloads.
|
|
2
|
+
|
|
3
|
+
Inverse of the tracing gateway's ``serialize_prompt_token_ids``: the gateway
|
|
4
|
+
stores prompt token IDs as ``base64(zstd(json.dumps(token_ids)))`` -- a compact
|
|
5
|
+
JSON int array, no bespoke binary header.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import base64
|
|
11
|
+
import json
|
|
12
|
+
from typing import Any, Dict, List, Tuple
|
|
13
|
+
|
|
14
|
+
import zstandard as zstd
|
|
15
|
+
|
|
16
|
+
from .types import DecodedPayload, PayloadType
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def parse_prompt_token_ids(raw: bytes) -> Tuple[List[int], Dict[str, Any]]:
|
|
20
|
+
"""Parse uncompressed ``pti/v1`` bytes (a JSON int array) into ids + metadata."""
|
|
21
|
+
token_ids = json.loads(raw)
|
|
22
|
+
metadata: Dict[str, Any] = {"scope": "prompt_only", "token_count": len(token_ids)}
|
|
23
|
+
return token_ids, metadata
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def decode_prompt_token_ids(data_b64: str) -> DecodedPayload:
|
|
27
|
+
"""Decode a gateway ``payloads.prompt_token_ids.data`` blob."""
|
|
28
|
+
raw = zstd.ZstdDecompressor().decompress(base64.b64decode(data_b64))
|
|
29
|
+
token_ids, metadata = parse_prompt_token_ids(raw)
|
|
30
|
+
return DecodedPayload(
|
|
31
|
+
payload_type=PayloadType.PROMPT_TOKEN_IDS,
|
|
32
|
+
value=token_ids,
|
|
33
|
+
metadata=metadata,
|
|
34
|
+
)
|