braintrust 0.3.10__tar.gz → 0.3.11__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 (121) hide show
  1. {braintrust-0.3.10 → braintrust-0.3.11}/PKG-INFO +1 -1
  2. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/test_server_integration.py +4 -5
  3. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/oai.py +1 -1
  4. braintrust-0.3.11/src/braintrust/version.py +4 -0
  5. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_openai.py +32 -0
  6. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust.egg-info/PKG-INFO +1 -1
  7. braintrust-0.3.10/src/braintrust/version.py +0 -4
  8. {braintrust-0.3.10 → braintrust-0.3.11}/README.md +0 -0
  9. {braintrust-0.3.10 → braintrust-0.3.11}/setup.cfg +0 -0
  10. {braintrust-0.3.10 → braintrust-0.3.11}/setup.py +0 -0
  11. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/__init__.py +0 -0
  12. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/_generated_types.py +0 -0
  13. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/audit.py +0 -0
  14. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/aws.py +0 -0
  15. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/bt_json.py +0 -0
  16. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/__init__.py +0 -0
  17. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/__main__.py +0 -0
  18. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/eval.py +0 -0
  19. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/install/__init__.py +0 -0
  20. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/install/api.py +0 -0
  21. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/install/bump_versions.py +0 -0
  22. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/install/logs.py +0 -0
  23. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/install/redshift.py +0 -0
  24. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/install/run_migrations.py +0 -0
  25. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/cli/push.py +0 -0
  26. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/conftest.py +0 -0
  27. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/context.py +0 -0
  28. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/contrib/__init__.py +0 -0
  29. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/contrib/temporal/__init__.py +0 -0
  30. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/contrib/temporal/test_temporal.py +0 -0
  31. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/db_fields.py +0 -0
  32. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/__init__.py +0 -0
  33. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/auth.py +0 -0
  34. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/cache.py +0 -0
  35. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/cors.py +0 -0
  36. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/dataset.py +0 -0
  37. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/eval_hooks.py +0 -0
  38. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/schemas.py +0 -0
  39. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/server.py +0 -0
  40. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/test_cached_login.py +0 -0
  41. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/devserver/test_lru_cache.py +0 -0
  42. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/framework.py +0 -0
  43. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/framework2.py +0 -0
  44. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/functions/__init__.py +0 -0
  45. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/functions/constants.py +0 -0
  46. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/functions/invoke.py +0 -0
  47. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/functions/stream.py +0 -0
  48. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/generated_types.py +0 -0
  49. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/git_fields.py +0 -0
  50. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/gitutil.py +0 -0
  51. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/graph_util.py +0 -0
  52. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/http_headers.py +0 -0
  53. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/id_gen.py +0 -0
  54. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/logger.py +0 -0
  55. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/merge_row_batch.py +0 -0
  56. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/object.py +0 -0
  57. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/otel/__init__.py +0 -0
  58. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/otel/context.py +0 -0
  59. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/otel/test_distributed_tracing.py +0 -0
  60. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/otel/test_otel_bt_integration.py +0 -0
  61. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/parameters.py +0 -0
  62. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt.py +0 -0
  63. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt_cache/__init__.py +0 -0
  64. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt_cache/disk_cache.py +0 -0
  65. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt_cache/lru_cache.py +0 -0
  66. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt_cache/prompt_cache.py +0 -0
  67. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt_cache/test_disk_cache.py +0 -0
  68. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt_cache/test_lru_cache.py +0 -0
  69. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/prompt_cache/test_prompt_cache.py +0 -0
  70. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/py.typed +0 -0
  71. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/queue.py +0 -0
  72. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/resource_manager.py +0 -0
  73. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/score.py +0 -0
  74. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/serializable_data_class.py +0 -0
  75. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/span_identifier_v1.py +0 -0
  76. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/span_identifier_v2.py +0 -0
  77. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/span_identifier_v3.py +0 -0
  78. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/span_identifier_v4.py +0 -0
  79. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/span_types.py +0 -0
  80. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_framework.py +0 -0
  81. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_framework2.py +0 -0
  82. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_helpers.py +0 -0
  83. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_id_gen.py +0 -0
  84. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_logger.py +0 -0
  85. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_otel.py +0 -0
  86. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_queue.py +0 -0
  87. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_serializable_data_class.py +0 -0
  88. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_span_components.py +0 -0
  89. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_util.py +0 -0
  90. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/test_version.py +0 -0
  91. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/util.py +0 -0
  92. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/__init__.py +0 -0
  93. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/_anthropic_utils.py +0 -0
  94. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/agno/__init__.py +0 -0
  95. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/agno/agent.py +0 -0
  96. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/agno/function_call.py +0 -0
  97. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/agno/model.py +0 -0
  98. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/agno/team.py +0 -0
  99. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/agno/utils.py +0 -0
  100. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/anthropic.py +0 -0
  101. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/claude_agent_sdk/__init__.py +0 -0
  102. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/claude_agent_sdk/_wrapper.py +0 -0
  103. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/claude_agent_sdk/test_wrapper.py +0 -0
  104. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/dspy.py +0 -0
  105. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/google_genai/__init__.py +0 -0
  106. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/langchain.py +0 -0
  107. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/litellm.py +0 -0
  108. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/openai.py +0 -0
  109. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_agno.py +0 -0
  110. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_anthropic.py +0 -0
  111. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_dspy.py +0 -0
  112. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_google_genai.py +0 -0
  113. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_litellm.py +0 -0
  114. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_pydantic_ai.py +0 -0
  115. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/wrappers/test_utils.py +0 -0
  116. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust/xact_ids.py +0 -0
  117. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust.egg-info/SOURCES.txt +0 -0
  118. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust.egg-info/dependency_links.txt +0 -0
  119. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust.egg-info/entry_points.txt +0 -0
  120. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust.egg-info/requires.txt +0 -0
  121. {braintrust-0.3.10 → braintrust-0.3.11}/src/braintrust.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braintrust
3
- Version: 0.3.10
3
+ Version: 0.3.11
4
4
  Summary: SDK for integrating Braintrust
5
5
  Home-page: https://www.braintrust.dev
6
6
  Author: Braintrust
@@ -4,7 +4,6 @@ from pathlib import Path
4
4
  from typing import Any
5
5
 
6
6
  import pytest
7
-
8
7
  from braintrust.framework import _evals
9
8
  from braintrust.test_helpers import has_devserver_installed
10
9
 
@@ -28,9 +27,8 @@ def client():
28
27
  pytest.skip("Devserver dependencies not installed (requires .[cli])")
29
28
 
30
29
  # Import CLI dependencies inside the fixture
31
- from starlette.testclient import TestClient
32
-
33
30
  from braintrust.devserver.server import create_app
31
+ from starlette.testclient import TestClient
34
32
 
35
33
  # Use the real simple_eval.py example
36
34
  eval_file = Path(__file__).parent.parent.parent.parent / "examples" / "evals" / "simple_eval.py"
@@ -39,8 +37,8 @@ def client():
39
37
  _evals.clear()
40
38
 
41
39
  # Load the eval file to register evaluators (but don't run them)
42
- spec = __import__('importlib.util').util.spec_from_file_location("simple_eval", str(eval_file))
43
- module = __import__('importlib.util').util.module_from_spec(spec)
40
+ spec = __import__("importlib.util").util.spec_from_file_location("simple_eval", str(eval_file))
41
+ module = __import__("importlib.util").util.module_from_spec(spec)
44
42
 
45
43
  # Get evaluators from the module without executing Eval()
46
44
  # We need to parse the file and extract the Evaluator definition
@@ -134,6 +132,7 @@ def parse_sse_events(response_text: str) -> list[dict[str, Any]]:
134
132
  return events
135
133
 
136
134
 
135
+ @pytest.mark.skip
137
136
  @pytest.mark.vcr
138
137
  def test_eval_sse_streaming(client, api_key, org_name):
139
138
  """
@@ -845,7 +845,7 @@ def _parse_metrics_from_usage(usage: Any) -> Dict[str, Any]:
845
845
 
846
846
 
847
847
  def _is_numeric(v):
848
- return isinstance(v, (int, float, complex))
848
+ return isinstance(v, (int, float, complex)) and not isinstance(v, bool)
849
849
 
850
850
 
851
851
  def prettify_params(params: Dict[str, Any]) -> Dict[str, Any]:
@@ -0,0 +1,4 @@
1
+ VERSION = "0.3.11"
2
+
3
+ # this will be templated during the build
4
+ GIT_COMMIT = "7cffe54f8b960931055ae20f5983b4ea34515eff"
@@ -1690,3 +1690,35 @@ def test_braintrust_tracing_processor_trace_metadata_logging(memory_logger):
1690
1690
  spans = memory_logger.pop()
1691
1691
  root_span = spans[0]
1692
1692
  assert root_span["metadata"]["conversation_id"] == "test-12345", "Should log trace metadata"
1693
+
1694
+
1695
+ def test_parse_metrics_excludes_booleans():
1696
+ """Test that boolean fields in usage objects are excluded from metrics.
1697
+
1698
+ Reproduces issue where OpenRouter returns is_byok (a boolean) in the usage
1699
+ object, which caused API validation errors: "Expected number, received boolean".
1700
+
1701
+ In Python, bool is a subclass of int, so isinstance(True, int) returns True.
1702
+ The fix ensures _is_numeric explicitly excludes booleans.
1703
+ """
1704
+ from braintrust.oai import _parse_metrics_from_usage
1705
+
1706
+ # Simulate OpenRouter's usage object with boolean field
1707
+ usage = {
1708
+ "completion_tokens": 11,
1709
+ "prompt_tokens": 8,
1710
+ "total_tokens": 19,
1711
+ "cost": 0.000104,
1712
+ "is_byok": False, # This boolean should be filtered out
1713
+ }
1714
+
1715
+ metrics = _parse_metrics_from_usage(usage)
1716
+
1717
+ # Numeric fields should be included
1718
+ assert metrics["completion_tokens"] == 11
1719
+ assert metrics["prompt_tokens"] == 8
1720
+ assert metrics["tokens"] == 19 # total_tokens gets renamed
1721
+ assert metrics["cost"] == 0.000104
1722
+
1723
+ # Boolean field should NOT be in metrics (this was the bug)
1724
+ assert "is_byok" not in metrics
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braintrust
3
- Version: 0.3.10
3
+ Version: 0.3.11
4
4
  Summary: SDK for integrating Braintrust
5
5
  Home-page: https://www.braintrust.dev
6
6
  Author: Braintrust
@@ -1,4 +0,0 @@
1
- VERSION = "0.3.10"
2
-
3
- # this will be templated during the build
4
- GIT_COMMIT = "160c352d87c121ef1ea43e49831453b9e8d4d0f8"
File without changes
File without changes
File without changes