From 9cf3941d2f664e590d7fc72c85df19528fb86fe1 Mon Sep 17 00:00:00 2001 From: "Nova (SFK)" Date: Mon, 27 Apr 2026 19:31:46 +0000 Subject: [PATCH 01/13] feat(llamaindex): add native LlamaIndex SDK integration Co-Authored-By: Claude Opus 4.6 --- py/noxfile.py | 12 + py/pyproject.toml | 10 + py/src/braintrust/auto.py | 5 + py/src/braintrust/integrations/__init__.py | 2 + .../integrations/llamaindex/__init__.py | 52 ++ .../integrations/llamaindex/event_handler.py | 211 ++++++++ .../integrations/llamaindex/helpers.py | 69 +++ .../integrations/llamaindex/integration.py | 19 + .../integrations/llamaindex/patchers.py | 51 ++ .../integrations/llamaindex/span_handler.py | 505 ++++++++++++++++++ .../llamaindex/test_llamaindex.py | 346 ++++++++++++ 11 files changed, 1282 insertions(+) create mode 100644 py/src/braintrust/integrations/llamaindex/__init__.py create mode 100644 py/src/braintrust/integrations/llamaindex/event_handler.py create mode 100644 py/src/braintrust/integrations/llamaindex/helpers.py create mode 100644 py/src/braintrust/integrations/llamaindex/integration.py create mode 100644 py/src/braintrust/integrations/llamaindex/patchers.py create mode 100644 py/src/braintrust/integrations/llamaindex/span_handler.py create mode 100644 py/src/braintrust/integrations/llamaindex/test_llamaindex.py diff --git a/py/noxfile.py b/py/noxfile.py index cdebfb78..9f717d68 100644 --- a/py/noxfile.py +++ b/py/noxfile.py @@ -397,6 +397,18 @@ def test_langchain(session, version): _run_tests(session, f"{INTEGRATION_DIR}/langchain/test_anthropic.py", version=version) +LLAMAINDEX_VERSIONS = _get_matrix_versions("llama-index-core") + + +@nox.session() +@nox.parametrize("version", LLAMAINDEX_VERSIONS, ids=LLAMAINDEX_VERSIONS) +def test_llamaindex(session, version): + _install_test_deps(session) + _install_matrix_dep(session, "llama-index-core", version) + _install_group_locked(session, "test-llamaindex") + _run_tests(session, f"{INTEGRATION_DIR}/llamaindex/test_llamaindex.py", version=version) + + OPENROUTER_VERSIONS = _get_matrix_versions("openrouter") diff --git a/py/pyproject.toml b/py/pyproject.toml index c202ec95..552c3210 100644 --- a/py/pyproject.toml +++ b/py/pyproject.toml @@ -157,6 +157,12 @@ test-crewai = [ "litellm==1.83.10", ] +test-llamaindex = [ + {include-group = "test"}, + "llama-index-llms-openai==0.7.5", + "llama-index-embeddings-openai==0.6.0", +] + test-cli = [ {include-group = "test"}, "httpx==0.28.1", @@ -351,6 +357,9 @@ latest = "google-adk==1.31.1" latest = "langchain-core==1.3.1" "0.3.28" = "langchain-core==0.3.28" +[tool.braintrust.matrix.llama-index-core] +latest = "llama-index-core==0.14.21" + [tool.braintrust.matrix.openrouter] latest = "openrouter==0.9.1" "0.6.0" = "openrouter==0.6.0" @@ -401,6 +410,7 @@ dspy = ["dspy"] google_genai = ["google-genai"] langchain = ["langchain-core"] litellm = ["litellm"] +llamaindex = ["llama-index-core"] mistral = ["mistralai"] openai = ["openai"] openai_agents = ["openai-agents"] diff --git a/py/src/braintrust/auto.py b/py/src/braintrust/auto.py index 4929f133..117afeac 100644 --- a/py/src/braintrust/auto.py +++ b/py/src/braintrust/auto.py @@ -20,6 +20,7 @@ GoogleGenAIIntegration, LangChainIntegration, LiteLLMIntegration, + LlamaIndexIntegration, MistralIntegration, OpenAIAgentsIntegration, OpenAIIntegration, @@ -61,6 +62,7 @@ def auto_instrument( dspy: bool = True, adk: bool = True, langchain: bool = True, + llamaindex: bool = True, openai_agents: bool = True, cohere: bool = True, autogen: bool = True, @@ -90,6 +92,7 @@ def auto_instrument( dspy: Enable DSPy instrumentation (default: True) adk: Enable Google ADK instrumentation (default: True) langchain: Enable LangChain instrumentation (default: True) + llamaindex: Enable LlamaIndex instrumentation (default: True) openai_agents: Enable OpenAI Agents SDK instrumentation (default: True) cohere: Enable Cohere instrumentation (default: True) autogen: Enable AutoGen instrumentation (default: True) @@ -168,6 +171,8 @@ def auto_instrument( results["adk"] = _instrument_integration(ADKIntegration) if langchain: results["langchain"] = _instrument_integration(LangChainIntegration) + if llamaindex: + results["llamaindex"] = _instrument_integration(LlamaIndexIntegration) if openai_agents: results["openai_agents"] = _instrument_integration(OpenAIAgentsIntegration) if cohere: diff --git a/py/src/braintrust/integrations/__init__.py b/py/src/braintrust/integrations/__init__.py index 6ea53305..417dd09d 100644 --- a/py/src/braintrust/integrations/__init__.py +++ b/py/src/braintrust/integrations/__init__.py @@ -10,6 +10,7 @@ from .google_genai import GoogleGenAIIntegration from .langchain import LangChainIntegration from .litellm import LiteLLMIntegration +from .llamaindex import LlamaIndexIntegration from .mistral import MistralIntegration from .openai import OpenAIIntegration from .openai_agents import OpenAIAgentsIntegration @@ -31,6 +32,7 @@ "GoogleGenAIIntegration", "LiteLLMIntegration", "LangChainIntegration", + "LlamaIndexIntegration", "MistralIntegration", "OpenAIIntegration", "OpenAIAgentsIntegration", diff --git a/py/src/braintrust/integrations/llamaindex/__init__.py b/py/src/braintrust/integrations/llamaindex/__init__.py new file mode 100644 index 00000000..59d0a0ce --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/__init__.py @@ -0,0 +1,52 @@ +"""Braintrust integration for LlamaIndex.""" + +from braintrust.logger import NOOP_SPAN, current_span, init_logger + +from .integration import LlamaIndexIntegration + + +try: + from .event_handler import BraintrustEventHandler + from .span_handler import BraintrustSpanHandler +except ImportError as exc: + _IMPORT_ERROR = exc + + class BraintrustSpanHandler: # type: ignore[no-redef] + def __init__(self, *args, **kwargs): + raise ImportError("llama-index-core is required for braintrust.integrations.llamaindex") from _IMPORT_ERROR + + class BraintrustEventHandler: # type: ignore[no-redef] + def __init__(self, *args, **kwargs): + raise ImportError("llama-index-core is required for braintrust.integrations.llamaindex") from _IMPORT_ERROR + + +__all__ = [ + "BraintrustEventHandler", + "BraintrustSpanHandler", + "LlamaIndexIntegration", + "setup_llamaindex", +] + + +def setup_llamaindex( + api_key: str | None = None, + project_id: str | None = None, + project_name: str | None = None, +) -> bool: + """Setup Braintrust integration with LlamaIndex. + + Registers Braintrust span and event handlers on LlamaIndex's root + dispatcher, enabling automatic tracing of all LlamaIndex operations. + + Args: + api_key: Braintrust API key. If not provided, uses BRAINTRUST_API_KEY env var. + project_id: Braintrust project ID. + project_name: Braintrust project name. + + Returns: + True if the integration was successfully set up. + """ + if current_span() == NOOP_SPAN: + init_logger(project=project_name, api_key=api_key, project_id=project_id) + + return LlamaIndexIntegration.setup() diff --git a/py/src/braintrust/integrations/llamaindex/event_handler.py b/py/src/braintrust/integrations/llamaindex/event_handler.py new file mode 100644 index 00000000..75cc1ac4 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/event_handler.py @@ -0,0 +1,211 @@ +"""Braintrust event handler for LlamaIndex instrumentation. + +Enriches Braintrust spans with detailed event data that goes beyond what +OTEL-based integrations capture: LLM model configuration, token usage details, +retrieval scores, synthesis context chunks, reranking parameters, and more. +""" + +import logging +from typing import Any + +from braintrust.logger import current_span + + +_logger = logging.getLogger("braintrust.integrations.llamaindex") + + +def _safe_model_dict(model_dict: Any) -> dict[str, Any] | None: + """Safely extract model configuration dict.""" + if not model_dict or not isinstance(model_dict, dict): + return None + safe = {} + for k, v in model_dict.items(): + if isinstance(v, (str, int, float, bool, type(None))): + safe[k] = v + return safe if safe else None + + +def _extract_node_details(nodes: Any) -> list[dict[str, Any]] | None: + """Extract detailed node information including scores and metadata.""" + if not nodes: + return None + result = [] + for nws in nodes: + entry: dict[str, Any] = {} + if hasattr(nws, "score") and nws.score is not None: + entry["score"] = nws.score + node = nws.node if hasattr(nws, "node") else nws + if hasattr(node, "text"): + text = node.text + entry["text"] = text[:500] + "..." if len(text) > 500 else text + if hasattr(node, "id_"): + entry["node_id"] = node.id_ + if hasattr(node, "metadata") and node.metadata: + entry["metadata"] = node.metadata + if hasattr(node, "start_char_idx"): + entry["start_char_idx"] = node.start_char_idx + if hasattr(node, "end_char_idx"): + entry["end_char_idx"] = node.end_char_idx + result.append(entry) + return result if result else None + + +try: + from llama_index_instrumentation.event_handlers.base import BaseEventHandler + from llama_index.core.instrumentation.events import BaseEvent + + class BraintrustEventHandler(BaseEventHandler): + """Enriches Braintrust spans with LlamaIndex event-level detail. + + Captures data that standard OTEL instrumentors miss: + - LLM model configuration (model_dict) at call time + - Detailed retrieval results with scores and node metadata + - Synthesis context chunks + - Reranking parameters and results + - Embedding model configuration + """ + + @classmethod + def class_name(cls) -> str: + return "BraintrustEventHandler" + + def handle(self, event: "BaseEvent", **kwargs: Any) -> None: + span = current_span() + if not span or str(span) == "NOOP_SPAN": + return + + event_cls_name = type(event).__name__ + + try: + self._handle_event(event, event_cls_name, span) + except Exception: + _logger.debug("Failed to handle event %s", event_cls_name, exc_info=True) + + def _handle_event(self, event: Any, cls_name: str, span: Any) -> None: + # ── LLM events ── + if cls_name == "LLMChatStartEvent": + metadata: dict[str, Any] = {} + model_config = _safe_model_dict(getattr(event, "model_dict", None)) + if model_config: + metadata["model_config"] = model_config + additional = getattr(event, "additional_kwargs", None) + if additional: + metadata["additional_kwargs"] = additional + if metadata: + span.log(metadata=metadata) + + elif cls_name == "LLMChatEndEvent": + response = getattr(event, "response", None) + if response: + self._log_llm_response_metrics(response, span) + + elif cls_name == "LLMCompletionStartEvent": + metadata = {} + model_config = _safe_model_dict(getattr(event, "model_dict", None)) + if model_config: + metadata["model_config"] = model_config + additional = getattr(event, "additional_kwargs", None) + if additional: + metadata["additional_kwargs"] = additional + if metadata: + span.log(metadata=metadata) + + elif cls_name == "LLMCompletionEndEvent": + response = getattr(event, "response", None) + if response: + self._log_llm_response_metrics(response, span) + + # ── Retrieval events ── + elif cls_name == "RetrievalEndEvent": + nodes = getattr(event, "nodes", None) + if nodes: + node_details = _extract_node_details(nodes) + if node_details: + metadata = { + "retrieved_nodes": node_details, + "num_nodes_retrieved": len(nodes), + } + scores = [n.get("score") for n in node_details if n.get("score") is not None] + if scores: + metadata["retrieval_scores"] = { + "min": min(scores), + "max": max(scores), + "mean": sum(scores) / len(scores), + } + span.log(metadata=metadata) + + # ── Synthesis events ── + elif cls_name == "GetResponseStartEvent": + query_str = getattr(event, "query_str", None) + text_chunks = getattr(event, "text_chunks", None) + if text_chunks: + metadata = {"num_text_chunks": len(text_chunks)} + total_chars = sum(len(c) for c in text_chunks) + metadata["total_context_chars"] = total_chars + span.log(metadata=metadata) + + # ── Embedding events ── + elif cls_name == "EmbeddingStartEvent": + model_config = _safe_model_dict(getattr(event, "model_dict", None)) + if model_config: + span.log(metadata={"embedding_model_config": model_config}) + + elif cls_name == "EmbeddingEndEvent": + chunks = getattr(event, "chunks", None) + embeddings = getattr(event, "embeddings", None) + if chunks and embeddings: + span.log( + metadata={ + "num_chunks_embedded": len(chunks), + "embedding_dimensions": len(embeddings[0]) if embeddings else None, + } + ) + + # ── Rerank events ── + elif cls_name == "ReRankStartEvent": + metadata = {} + top_n = getattr(event, "top_n", None) + model_name = getattr(event, "model_name", None) + nodes = getattr(event, "nodes", None) + if top_n is not None: + metadata["rerank_top_n"] = top_n + if model_name: + metadata["rerank_model"] = model_name + if nodes: + metadata["rerank_input_count"] = len(nodes) + if metadata: + span.log(metadata=metadata) + + elif cls_name == "ReRankEndEvent": + nodes = getattr(event, "nodes", None) + if nodes: + node_details = _extract_node_details(nodes) + if node_details: + span.log( + metadata={ + "reranked_nodes": node_details, + "rerank_output_count": len(nodes), + } + ) + + def _log_llm_response_metrics(self, response: Any, span: Any) -> None: + """Extract and log metrics from an LLM response.""" + raw = getattr(response, "raw", None) + if raw is None: + return + + from braintrust.integrations.llamaindex.span_handler import _extract_token_usage + + metrics = _extract_token_usage(raw) + if metrics: + span.log(metrics=metrics) + + # Extract model name from raw response + model = getattr(raw, "model", None) + if model is None and isinstance(raw, dict): + model = raw.get("model") + if model: + span.log(metadata={"model": model}) + +except ImportError: + BraintrustEventHandler = None # type: ignore[assignment,misc] diff --git a/py/src/braintrust/integrations/llamaindex/helpers.py b/py/src/braintrust/integrations/llamaindex/helpers.py new file mode 100644 index 00000000..31ba99fd --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/helpers.py @@ -0,0 +1,69 @@ +"""Test helpers for LlamaIndex integration tests.""" + +from typing import Any, Sequence +from unittest.mock import ANY + + +PrimitiveValue = str | int | float | bool | None +RecursiveValue = PrimitiveValue | dict[str, Any] | Sequence[Any] + + +def assert_matches_object( + actual: RecursiveValue, + expected: RecursiveValue, + ignore_order: bool = False, +) -> None: + """Assert that actual contains all key-value pairs from expected. + + For lists, each item in expected must match the corresponding item in actual. + For dicts, all key-value pairs in expected must exist in actual. + """ + if isinstance(expected, (list, tuple)): + assert isinstance(actual, (list, tuple)), f"Expected sequence but got {type(actual)}" + assert len(actual) >= len(expected), ( + f"Expected sequence of length >= {len(expected)} but got length {len(actual)}" + ) + if not ignore_order: + for i, expected_item in enumerate(expected): + assert_matches_object(actual[i], expected_item) + else: + for expected_item in expected: + matched = False + for actual_item in actual: + try: + assert_matches_object(actual_item, expected_item) + matched = True + except Exception: + pass + assert matched, f"Expected {expected_item} in unordered sequence but couldn't find match in {actual}" + + elif isinstance(expected, dict): + assert isinstance(actual, dict), f"Expected dict but got {type(actual)}" + actual_dict: dict[str, Any] = actual + for k, v in expected.items(): + assert k in actual_dict, f"Missing key {k}" + if v is ANY: + continue + if isinstance(v, (dict, list, tuple)): + assert_matches_object(actual_dict[k], v) + else: + assert actual_dict[k] == v, f"Key {k}: expected {v} but got {actual_dict[k]}" + else: + assert actual == expected, f"Expected {expected} but got {actual}" + + +def find_spans_by_attributes(spans: list[Any], **attributes: Any) -> list[Any]: + """Find all spans that match the given span_attributes.""" + matching_spans: list[Any] = [] + for span in spans: + if "span_attributes" not in span: + continue + span_attrs = span.get("span_attributes") or {} + matches = True + for key, value in attributes.items(): + if key not in span_attrs or span_attrs.get(key) != value: + matches = False + break + if matches: + matching_spans.append(span) + return matching_spans diff --git a/py/src/braintrust/integrations/llamaindex/integration.py b/py/src/braintrust/integrations/llamaindex/integration.py new file mode 100644 index 00000000..0f0cfd73 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/integration.py @@ -0,0 +1,19 @@ +"""LlamaIndex integration definition.""" + +from braintrust.integrations.base import BaseIntegration + +from .patchers import DispatcherHandlerPatcher + + +class LlamaIndexIntegration(BaseIntegration): + """Braintrust instrumentation for LlamaIndex via dispatcher handlers. + + Registers a BraintrustSpanHandler and BraintrustEventHandler on + LlamaIndex's root dispatcher to automatically trace all instrumented + operations: LLM calls, query engines, retrievers, synthesizers, + agents, embeddings, and more. + """ + + name = "llamaindex" + import_names = ("llama_index.core",) + patchers = (DispatcherHandlerPatcher,) diff --git a/py/src/braintrust/integrations/llamaindex/patchers.py b/py/src/braintrust/integrations/llamaindex/patchers.py new file mode 100644 index 00000000..699c2dc1 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/patchers.py @@ -0,0 +1,51 @@ +"""LlamaIndex patchers. + +Registers Braintrust span and event handlers on LlamaIndex's root dispatcher +for automatic instrumentation of all LlamaIndex operations. +""" + +from braintrust.integrations.base import CallbackPatcher + + +try: + from .event_handler import BraintrustEventHandler + from .span_handler import BraintrustSpanHandler +except ImportError: + BraintrustSpanHandler = None + BraintrustEventHandler = None + + +def _has_braintrust_handlers() -> bool: + if BraintrustSpanHandler is None: + return False + try: + from llama_index.core.instrumentation import get_dispatcher + + dispatcher = get_dispatcher() + return any(isinstance(h, BraintrustSpanHandler) for h in dispatcher.span_handlers) + except Exception: + return False + + +def _register_braintrust_handlers() -> None: + if BraintrustSpanHandler is None or BraintrustEventHandler is None: + raise ImportError("llama-index-core is not installed") + + from llama_index.core.instrumentation import get_dispatcher + + dispatcher = get_dispatcher() + + if any(isinstance(h, BraintrustSpanHandler) for h in dispatcher.span_handlers): + return + + dispatcher.add_span_handler(BraintrustSpanHandler()) + dispatcher.add_event_handler(BraintrustEventHandler()) + + +class DispatcherHandlerPatcher(CallbackPatcher): + """Register Braintrust handlers on LlamaIndex's root dispatcher.""" + + name = "llamaindex.dispatcher_handler" + target_module = "llama_index.core.instrumentation" + callback = _register_braintrust_handlers + state_getter = _has_braintrust_handlers diff --git a/py/src/braintrust/integrations/llamaindex/span_handler.py b/py/src/braintrust/integrations/llamaindex/span_handler.py new file mode 100644 index 00000000..b090269b --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/span_handler.py @@ -0,0 +1,505 @@ +"""Braintrust span handler for LlamaIndex instrumentation. + +Implements LlamaIndex's BaseSpanHandler to capture all span lifecycle events +and map them to Braintrust spans with rich metadata extraction. +""" + +import inspect +import logging +import time +from typing import Any + +from braintrust.logger import NOOP_SPAN, Span, current_span, init_logger, start_span +from braintrust.span_types import SpanTypeAttribute +from braintrust.version import VERSION as sdk_version + + +_logger = logging.getLogger("braintrust.integrations.llamaindex") + +_INTEGRATION_NAME = "llamaindex-py" + + +def _safe_str(obj: Any) -> str | None: + """Safely convert object to string representation.""" + if obj is None: + return None + try: + return str(obj) + except Exception: + return None + + +def _extract_query_text(query: Any) -> str | None: + """Extract query text from a string or QueryBundle.""" + if isinstance(query, str): + return query + if hasattr(query, "query_str"): + return query.query_str + return _safe_str(query) + + +def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: + """Extract message dicts from LlamaIndex ChatMessage list.""" + if not messages: + return None + result = [] + for msg in messages: + entry: dict[str, Any] = {} + if hasattr(msg, "role"): + entry["role"] = str(msg.role.value) if hasattr(msg.role, "value") else str(msg.role) + if hasattr(msg, "content"): + entry["content"] = msg.content + elif hasattr(msg, "blocks"): + text_parts = [] + for block in msg.blocks: + if hasattr(block, "text"): + text_parts.append(block.text) + if text_parts: + entry["content"] = "\n".join(text_parts) + if hasattr(msg, "additional_kwargs") and msg.additional_kwargs: + entry["additional_kwargs"] = msg.additional_kwargs + result.append(entry) + return result + + +def _extract_response_output(result: Any) -> Any: + """Extract output from a LlamaIndex response object.""" + if result is None: + return None + + # ChatResponse + if hasattr(result, "message") and hasattr(result, "raw"): + output: dict[str, Any] = {} + msg = result.message + if msg: + output["role"] = str(msg.role.value) if hasattr(msg.role, "value") else str(msg.role) + if hasattr(msg, "content"): + output["content"] = msg.content + elif hasattr(msg, "blocks"): + text_parts = [] + for block in msg.blocks: + if hasattr(block, "text"): + text_parts.append(block.text) + if text_parts: + output["content"] = "\n".join(text_parts) + if hasattr(msg, "additional_kwargs") and msg.additional_kwargs: + output["additional_kwargs"] = msg.additional_kwargs + if hasattr(result, "logprobs") and result.logprobs: + output["logprobs"] = result.logprobs + return output + + # CompletionResponse + if hasattr(result, "text") and hasattr(result, "raw"): + output = {"text": result.text} + if hasattr(result, "logprobs") and result.logprobs: + output["logprobs"] = result.logprobs + if hasattr(result, "additional_kwargs") and result.additional_kwargs: + output["additional_kwargs"] = result.additional_kwargs + return output + + # Query Response (has response attribute with text) + if hasattr(result, "response") and hasattr(result, "source_nodes"): + output = {"response": result.response} + if result.source_nodes: + output["source_nodes"] = _extract_nodes(result.source_nodes) + if hasattr(result, "metadata") and result.metadata: + output["metadata"] = result.metadata + return output + + # List of NodeWithScore + if isinstance(result, list) and result and hasattr(result[0], "node"): + return _extract_nodes(result) + + # String + if isinstance(result, str): + return result + + return _safe_str(result) + + +def _extract_nodes(nodes: list[Any]) -> list[dict[str, Any]]: + """Extract structured data from NodeWithScore list.""" + result = [] + for nws in nodes: + entry: dict[str, Any] = {} + if hasattr(nws, "score") and nws.score is not None: + entry["score"] = nws.score + node = nws.node if hasattr(nws, "node") else nws + if hasattr(node, "text"): + entry["text"] = node.text + if hasattr(node, "id_"): + entry["node_id"] = node.id_ + if hasattr(node, "metadata") and node.metadata: + entry["metadata"] = node.metadata + result.append(entry) + return result + + +def _extract_token_usage(raw: Any) -> dict[str, int | float]: + """Extract token usage from the raw provider response. + + LlamaIndex stores the raw provider response in ChatResponse.raw / CompletionResponse.raw. + This contains the actual token counts that OTEL-based integrations often miss. + """ + metrics: dict[str, int | float] = {} + if raw is None: + return metrics + + # OpenAI-style: raw is a ChatCompletion or similar with .usage + usage = getattr(raw, "usage", None) + if usage is None and isinstance(raw, dict): + usage = raw.get("usage") + + if usage is not None: + if isinstance(usage, dict): + metrics.update( + { + k: v + for k, v in { + "prompt_tokens": usage.get("prompt_tokens"), + "completion_tokens": usage.get("completion_tokens"), + "total_tokens": usage.get("total_tokens"), + }.items() + if v is not None + } + ) + # Cache tokens (OpenAI) + prompt_details = usage.get("prompt_tokens_details") or {} + if isinstance(prompt_details, dict): + cached = prompt_details.get("cached_tokens") + if cached is not None: + metrics["prompt_cached_tokens"] = cached + else: + for attr in ("prompt_tokens", "completion_tokens", "total_tokens"): + val = getattr(usage, attr, None) + if val is not None: + metrics[attr] = val + # Cache tokens + prompt_details = getattr(usage, "prompt_tokens_details", None) + if prompt_details: + cached = getattr(prompt_details, "cached_tokens", None) + if cached is not None: + metrics["prompt_cached_tokens"] = cached + + # Anthropic-style: raw has input_tokens/output_tokens at top level + if not metrics: + for key_map in [ + ("input_tokens", "prompt_tokens"), + ("output_tokens", "completion_tokens"), + ]: + src, dst = key_map + val = getattr(raw, src, None) + if val is None and isinstance(raw, dict): + val = raw.get(src) + if val is not None: + metrics[dst] = val + if "prompt_tokens" in metrics and "completion_tokens" in metrics: + metrics["total_tokens"] = metrics["prompt_tokens"] + metrics["completion_tokens"] + + return metrics + + +def _classify_instance(instance: Any) -> tuple[SpanTypeAttribute, str]: + """Determine the Braintrust span type and name from a LlamaIndex instance. + + Returns (span_type, span_name). + """ + if instance is None: + return SpanTypeAttribute.TASK, "llamaindex" + + cls_name = type(instance).__name__ + + # Check class hierarchy using string names to avoid importing optional packages + mro_names = {c.__name__ for c in type(instance).__mro__} + + if "BaseLLM" in mro_names or "LLM" in mro_names: + model = getattr(instance, "model", None) or getattr(instance, "model_name", None) or "" + name = f"{cls_name}" if not model else f"{cls_name} ({model})" + return SpanTypeAttribute.LLM, name + + if "BaseEmbedding" in mro_names: + model = getattr(instance, "model_name", None) or getattr(instance, "model", None) or "" + name = f"{cls_name}" if not model else f"{cls_name} ({model})" + return SpanTypeAttribute.FUNCTION, name + + if "BaseRetriever" in mro_names: + return SpanTypeAttribute.FUNCTION, cls_name + + if "BaseSynthesizer" in mro_names: + return SpanTypeAttribute.FUNCTION, cls_name + + if "BaseQueryEngine" in mro_names: + return SpanTypeAttribute.TASK, cls_name + + if "BaseAgent" in mro_names or "AgentRunner" in mro_names: + return SpanTypeAttribute.TASK, cls_name + + if "BaseTool" in mro_names or "FunctionTool" in mro_names: + tool_name = getattr(instance, "name", None) or cls_name + return SpanTypeAttribute.TOOL, tool_name + + if "BaseNodeParser" in mro_names or "NodeParser" in mro_names or "SentenceSplitter" in mro_names: + return SpanTypeAttribute.FUNCTION, cls_name + + if "BaseNodePostprocessor" in mro_names: + return SpanTypeAttribute.FUNCTION, cls_name + + if "Workflow" in mro_names: + return SpanTypeAttribute.TASK, cls_name + + return SpanTypeAttribute.TASK, cls_name + + +def _extract_instance_metadata(instance: Any) -> dict[str, Any]: + """Extract useful metadata from a LlamaIndex instance.""" + if instance is None: + return {} + + metadata: dict[str, Any] = {"class": type(instance).__name__} + mro_names = {c.__name__ for c in type(instance).__mro__} + + if "BaseLLM" in mro_names or "LLM" in mro_names: + for attr in ("model", "model_name", "temperature", "max_tokens", "max_retries"): + val = getattr(instance, attr, None) + if val is not None: + metadata[attr] = val + + elif "BaseEmbedding" in mro_names: + for attr in ("model_name", "model", "embed_batch_size"): + val = getattr(instance, attr, None) + if val is not None: + metadata[attr] = val + + elif "BaseRetriever" in mro_names: + for attr in ("similarity_top_k",): + val = getattr(instance, attr, None) + if val is not None: + metadata[attr] = val + + return metadata + + +def _extract_input_from_bound_args(bound_args: "inspect.BoundArguments", instance: Any) -> Any: + """Extract meaningful input from function bound arguments.""" + args = bound_args.arguments + + # Remove 'self' if present + args = {k: v for k, v in args.items() if k != "self"} + + # Common input patterns + if "str_or_query_bundle" in args: + return _extract_query_text(args["str_or_query_bundle"]) + if "query_str" in args: + return args["query_str"] + if "query" in args: + return _extract_query_text(args["query"]) + if "prompt" in args: + return args["prompt"] + if "messages" in args: + return _extract_messages(args["messages"]) + if "nodes" in args: + return _extract_nodes(args["nodes"]) if args["nodes"] else None + + # For single-arg functions, return the arg directly + if len(args) == 1: + return next(iter(args.values())) + + # For multi-arg, return the dict (minus kwargs-style args) + if args: + return {k: _safe_str(v) if not isinstance(v, (str, int, float, bool, type(None))) else v for k, v in args.items()} + + return None + + +class _SpanRecord: + """Internal record tracking a LlamaIndex span mapped to a Braintrust span.""" + + __slots__ = ("bt_span", "start_time", "instance_type", "method_name") + + def __init__(self, bt_span: Span, start_time: float, instance_type: str, method_name: str): + self.bt_span = bt_span + self.start_time = start_time + self.instance_type = instance_type + self.method_name = method_name + + +try: + from llama_index.core.instrumentation.span import BaseSpan + from llama_index_instrumentation.span_handlers.base import BaseSpanHandler + + class BraintrustSpanHandler(BaseSpanHandler["BaseSpan"]): + """Maps LlamaIndex spans to Braintrust spans. + + Registered on LlamaIndex's root dispatcher to capture all instrumented + operations (LLM calls, retrieval, query engines, agents, etc.) and + create corresponding Braintrust spans with rich metadata. + """ + + _bt_spans: dict[str, _SpanRecord] = {} + + def model_post_init(self, __context: Any) -> None: + super().model_post_init(__context) + self._bt_spans = {} + + @classmethod + def class_name(cls) -> str: + return "BraintrustSpanHandler" + + def new_span( + self, + id_: str, + bound_args: "inspect.BoundArguments", + instance: Any | None = None, + parent_span_id: str | None = None, + tags: dict[str, Any] | None = None, + **kwargs: Any, + ) -> BaseSpan | None: + start_time = time.time() + span_type, span_name = _classify_instance(instance) + + # Determine method name from span id (format: "ClassName.method-uuid") + method_name = "" + if id_ and "-" in id_: + prefix = id_.rsplit("-", 5)[0] if id_.count("-") >= 5 else id_.split("-")[0] + if "." in prefix: + method_name = prefix.split(".", 1)[1] if "." in prefix else prefix + + instance_metadata = _extract_instance_metadata(instance) + input_data = _extract_input_from_bound_args(bound_args, instance) + + metadata: dict[str, Any] = { + **instance_metadata, + "braintrust": { + "integration_name": _INTEGRATION_NAME, + "sdk_version": sdk_version, + "language": "python", + }, + } + if method_name: + metadata["method"] = method_name + if tags: + metadata["tags"] = tags + + # Find parent Braintrust span + parent_bt_span = None + if parent_span_id and parent_span_id in self._bt_spans: + parent_bt_span = self._bt_spans[parent_span_id].bt_span + else: + cs = current_span() + if cs != NOOP_SPAN: + parent_bt_span = cs + + event: dict[str, Any] = {"metadata": metadata} + if input_data is not None: + event["input"] = input_data + + try: + if parent_bt_span is not None: + bt_span = parent_bt_span.start_span( + name=span_name, + type=span_type, + start_time=start_time, + **event, + ) + else: + bt_span = start_span( + name=span_name, + type=span_type, + start_time=start_time, + **event, + ) + + if bt_span == NOOP_SPAN: + bt_span = init_logger().start_span( + name=span_name, + type=span_type, + start_time=start_time, + **event, + ) + + bt_span.set_current() + + record = _SpanRecord( + bt_span=bt_span, + start_time=start_time, + instance_type=type(instance).__name__ if instance else "unknown", + method_name=method_name, + ) + self._bt_spans[id_] = record + + except Exception: + _logger.debug("Failed to create Braintrust span for %s", id_, exc_info=True) + + return BaseSpan(id_=id_, parent_id=parent_span_id) + + def prepare_to_exit_span( + self, + id_: str, + bound_args: "inspect.BoundArguments", + instance: Any | None = None, + result: Any | None = None, + **kwargs: Any, + ) -> BaseSpan | None: + record = self._bt_spans.pop(id_, None) + if record is None: + return None + + bt_span = record.bt_span + + output = _extract_response_output(result) + + # Extract token metrics from raw provider response + metrics: dict[str, int | float] = {} + raw = getattr(result, "raw", None) + if raw is not None: + metrics.update(_extract_token_usage(raw)) + + log_kwargs: dict[str, Any] = {} + if output is not None: + log_kwargs["output"] = output + if metrics: + log_kwargs["metrics"] = metrics + + if log_kwargs: + bt_span.log(**log_kwargs) + + try: + bt_span.unset_current() + except ValueError as e: + if "was created in a different Context" not in str(e): + raise + + bt_span.end() + + span_obj = self.open_spans.get(id_) + return span_obj + + def prepare_to_drop_span( + self, + id_: str, + bound_args: "inspect.BoundArguments", + instance: Any | None = None, + err: BaseException | None = None, + **kwargs: Any, + ) -> BaseSpan | None: + record = self._bt_spans.pop(id_, None) + if record is None: + return None + + bt_span = record.bt_span + + bt_span.log(error=str(err) if err else "Unknown error") + + try: + bt_span.unset_current() + except ValueError as e: + if "was created in a different Context" not in str(e): + raise + + bt_span.end() + + span_obj = self.open_spans.get(id_) + return span_obj + +except ImportError: + BraintrustSpanHandler = None # type: ignore[assignment,misc] diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py new file mode 100644 index 00000000..257d026f --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -0,0 +1,346 @@ +"""Tests for the LlamaIndex integration. + +These tests verify that LlamaIndex operations produce correct Braintrust spans +with proper hierarchy, input/output data, and metrics extraction. +""" + +import pytest +from unittest.mock import ANY + +from braintrust import logger +from braintrust.integrations.llamaindex import LlamaIndexIntegration, BraintrustSpanHandler +from braintrust.test_helpers import init_test_logger + +from .helpers import assert_matches_object, find_spans_by_attributes + + +PROJECT_NAME = "llamaindex-py" + + +@pytest.fixture +def logger_memory_logger(): + test_logger = init_test_logger(PROJECT_NAME) + with logger._internal_with_memory_background_logger() as bgl: + yield (test_logger, bgl) + + +@pytest.fixture(autouse=True) +def setup_and_cleanup(): + """Ensure handlers are registered for each test and cleaned up after.""" + from llama_index.core.instrumentation import get_dispatcher + + LlamaIndexIntegration.setup() + + yield + + # Clean up handlers to avoid cross-test interference + dispatcher = get_dispatcher() + dispatcher.span_handlers = [ + h for h in dispatcher.span_handlers if not isinstance(h, BraintrustSpanHandler) + ] + from braintrust.integrations.llamaindex.event_handler import BraintrustEventHandler + + dispatcher.event_handlers = [ + h for h in dispatcher.event_handlers if not isinstance(h, BraintrustEventHandler) + ] + + +def test_integration_setup(): + """Test that setup registers handlers on the dispatcher.""" + from llama_index.core.instrumentation import get_dispatcher + + dispatcher = get_dispatcher() + handler_types = [type(h).__name__ for h in dispatcher.span_handlers] + assert "BraintrustSpanHandler" in handler_types + + event_handler_types = [type(h).__name__ for h in dispatcher.event_handlers] + assert "BraintrustEventHandler" in event_handler_types + + +def test_integration_idempotent(): + """Calling setup() twice doesn't register duplicate handlers.""" + from llama_index.core.instrumentation import get_dispatcher + + LlamaIndexIntegration.setup() + LlamaIndexIntegration.setup() + + dispatcher = get_dispatcher() + bt_handlers = [h for h in dispatcher.span_handlers if isinstance(h, BraintrustSpanHandler)] + assert len(bt_handlers) == 1 + + +def test_auto_instrument_includes_llamaindex(): + """auto_instrument() should include llamaindex.""" + from braintrust.auto import auto_instrument + + result = auto_instrument() + assert "llamaindex" in result + assert result["llamaindex"] is True + + +@pytest.mark.vcr +def test_llm_complete(logger_memory_logger): + """Test that LLM.complete() creates a span with input/output.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.llms.openai import OpenAI + + llm = OpenAI(model="gpt-4o-mini", temperature=0) + + with test_logger.start_span(name="test-complete") as parent: + response = llm.complete("What is 2+2? Answer with just the number.") + + spans = memory_logger.pop() + assert len(spans) >= 2 + + # Find the LLM span + llm_spans = find_spans_by_attributes(spans, type="llm") + assert len(llm_spans) >= 1 + + llm_span = llm_spans[0] + assert llm_span["input"] is not None + assert llm_span["output"] is not None + assert "metadata" in llm_span + assert llm_span["metadata"]["class"] == "OpenAI" + + +@pytest.mark.vcr +def test_llm_chat(logger_memory_logger): + """Test that LLM.chat() creates a span with messages.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.core.base.llms.types import ChatMessage, MessageRole + from llama_index.llms.openai import OpenAI + + llm = OpenAI(model="gpt-4o-mini", temperature=0) + messages = [ + ChatMessage(role=MessageRole.SYSTEM, content="You are a helpful assistant."), + ChatMessage(role=MessageRole.USER, content="What is the capital of France?"), + ] + + with test_logger.start_span(name="test-chat") as parent: + response = llm.chat(messages) + + spans = memory_logger.pop() + assert len(spans) >= 2 + + llm_spans = find_spans_by_attributes(spans, type="llm") + assert len(llm_spans) >= 1 + + llm_span = llm_spans[0] + assert llm_span["input"] is not None + assert llm_span["output"] is not None + + # Output should contain the response content + output = llm_span["output"] + assert isinstance(output, dict) + assert "content" in output or "role" in output + + +@pytest.mark.vcr +def test_llm_chat_metrics(logger_memory_logger): + """Test that token metrics are extracted from LLM responses.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.llms.openai import OpenAI + + llm = OpenAI(model="gpt-4o-mini", temperature=0) + + with test_logger.start_span(name="test-metrics") as parent: + response = llm.complete("Say hello") + + spans = memory_logger.pop() + llm_spans = find_spans_by_attributes(spans, type="llm") + assert len(llm_spans) >= 1 + + llm_span = llm_spans[0] + metrics = llm_span.get("metrics", {}) + # Token metrics should be present (extracted from raw response) + assert "prompt_tokens" in metrics or "total_tokens" in metrics or "completion_tokens" in metrics + + +@pytest.mark.vcr +def test_document_processing(logger_memory_logger): + """Test that document splitting creates spans.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.core import Document + from llama_index.core.node_parser import SentenceSplitter + + docs = [ + Document(text="Paris is the capital of France. The Eiffel Tower is in Paris."), + Document(text="Berlin is the capital of Germany. The Brandenburg Gate is in Berlin."), + ] + + splitter = SentenceSplitter(chunk_size=64, chunk_overlap=10) + + with test_logger.start_span(name="test-docproc") as parent: + nodes = splitter.get_nodes_from_documents(docs) + + spans = memory_logger.pop() + # Should have parent span + at least one SentenceSplitter span + assert len(spans) >= 2 + + # Find function spans (SentenceSplitter spans) + func_spans = find_spans_by_attributes(spans, type="function") + assert len(func_spans) >= 1 + + func_span = func_spans[0] + assert "SentenceSplitter" in func_span["span_attributes"]["name"] + + +@pytest.mark.vcr +def test_embedding(logger_memory_logger): + """Test that embedding calls create spans with metadata.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.embeddings.openai import OpenAIEmbedding + + embed_model = OpenAIEmbedding(model="text-embedding-3-small") + + with test_logger.start_span(name="test-embedding") as parent: + embedding = embed_model.get_text_embedding("Hello world") + + spans = memory_logger.pop() + assert len(spans) >= 2 + + # Should have an embedding span + func_spans = find_spans_by_attributes(spans, type="function") + assert len(func_spans) >= 1 + + embed_span = func_spans[0] + assert "OpenAIEmbedding" in embed_span["span_attributes"]["name"] + + +@pytest.mark.vcr +def test_query_engine(logger_memory_logger): + """Test that a query engine creates a full span hierarchy.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.core import Document, VectorStoreIndex + from llama_index.embeddings.openai import OpenAIEmbedding + from llama_index.llms.openai import OpenAI + + docs = [ + Document(text="The capital of France is Paris. Paris has a population of 2.1 million."), + Document(text="The Eiffel Tower is located in Paris, France. It was built in 1889."), + ] + + embed_model = OpenAIEmbedding(model="text-embedding-3-small") + llm = OpenAI(model="gpt-4o-mini", temperature=0) + + with test_logger.start_span(name="test-query-engine") as parent: + index = VectorStoreIndex.from_documents(docs, embed_model=embed_model) + query_engine = index.as_query_engine(llm=llm) + response = query_engine.query("What is the capital of France?") + + spans = memory_logger.pop() + # Should have many spans: parent, query engine, retriever, synthesizer, LLM, embeddings + assert len(spans) >= 4 + + # Verify span types present + span_types = {s.get("span_attributes", {}).get("type") for s in spans} + assert "task" in span_types # query engine and/or parent + assert "llm" in span_types or "function" in span_types # LLM call or embedding + + +@pytest.mark.vcr +def test_span_hierarchy(logger_memory_logger): + """Test that spans maintain proper parent-child relationships.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.core import Document + from llama_index.core.node_parser import SentenceSplitter + + docs = [Document(text="Hello world. This is a test document with some content.")] + splitter = SentenceSplitter(chunk_size=256, chunk_overlap=10) + + with test_logger.start_span(name="test-hierarchy") as parent: + nodes = splitter.get_nodes_from_documents(docs) + + spans = memory_logger.pop() + assert len(spans) >= 2 + + # The manually created parent span + parent_span = spans[0] + root_span_id = parent_span["root_span_id"] + + # All spans should share the same root + for span in spans: + assert span["root_span_id"] == root_span_id + + +def test_llm_error_handling(logger_memory_logger): + """Test that errors in LLM calls are captured.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.llms.openai import OpenAI + + llm = OpenAI(model="gpt-4o-mini", api_key="sk-invalid-key") + + with test_logger.start_span(name="test-error") as parent: + try: + response = llm.complete("Hello") + except Exception: + pass + + spans = memory_logger.pop() + assert len(spans) >= 2 + + # Find LLM span - should have error + llm_spans = find_spans_by_attributes(spans, type="llm") + if llm_spans: + llm_span = llm_spans[0] + assert llm_span.get("error") is not None + + +@pytest.mark.vcr +async def test_async_llm_complete(logger_memory_logger): + """Test that async LLM.acomplete() creates spans.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.llms.openai import OpenAI + + llm = OpenAI(model="gpt-4o-mini", temperature=0) + + with test_logger.start_span(name="test-async-complete") as parent: + response = await llm.acomplete("What is 2+2? Answer with just the number.") + + spans = memory_logger.pop() + assert len(spans) >= 2 + + llm_spans = find_spans_by_attributes(spans, type="llm") + assert len(llm_spans) >= 1 + + +@pytest.mark.vcr +async def test_async_llm_chat(logger_memory_logger): + """Test that async LLM.achat() creates spans.""" + test_logger, memory_logger = logger_memory_logger + assert not memory_logger.pop() + + from llama_index.core.base.llms.types import ChatMessage, MessageRole + from llama_index.llms.openai import OpenAI + + llm = OpenAI(model="gpt-4o-mini", temperature=0) + messages = [ + ChatMessage(role=MessageRole.USER, content="Say hello"), + ] + + with test_logger.start_span(name="test-async-chat") as parent: + response = await llm.achat(messages) + + spans = memory_logger.pop() + assert len(spans) >= 2 + + llm_spans = find_spans_by_attributes(spans, type="llm") + assert len(llm_spans) >= 1 From 3d72c17c581967566ccf613fa01f6058ec680f2f Mon Sep 17 00:00:00 2001 From: "Nova (SFK)" Date: Mon, 27 Apr 2026 19:43:19 +0000 Subject: [PATCH 02/13] simplify llamaindex integration Remove event handler (redundant with span handler data extraction), remove separate helpers module, flatten classify/extract logic, drop per-span integration metadata noise, fix VCR markers on tests that make no HTTP calls. Co-Authored-By: Claude Opus 4.6 --- .../integrations/llamaindex/__init__.py | 19 - .../integrations/llamaindex/event_handler.py | 211 ----------- .../integrations/llamaindex/helpers.py | 69 ---- .../integrations/llamaindex/patchers.py | 13 +- .../integrations/llamaindex/span_handler.py | 327 +++--------------- .../llamaindex/test_llamaindex.py | 140 +++----- 6 files changed, 106 insertions(+), 673 deletions(-) delete mode 100644 py/src/braintrust/integrations/llamaindex/event_handler.py delete mode 100644 py/src/braintrust/integrations/llamaindex/helpers.py diff --git a/py/src/braintrust/integrations/llamaindex/__init__.py b/py/src/braintrust/integrations/llamaindex/__init__.py index 59d0a0ce..7128a6d4 100644 --- a/py/src/braintrust/integrations/llamaindex/__init__.py +++ b/py/src/braintrust/integrations/llamaindex/__init__.py @@ -6,7 +6,6 @@ try: - from .event_handler import BraintrustEventHandler from .span_handler import BraintrustSpanHandler except ImportError as exc: _IMPORT_ERROR = exc @@ -15,13 +14,8 @@ class BraintrustSpanHandler: # type: ignore[no-redef] def __init__(self, *args, **kwargs): raise ImportError("llama-index-core is required for braintrust.integrations.llamaindex") from _IMPORT_ERROR - class BraintrustEventHandler: # type: ignore[no-redef] - def __init__(self, *args, **kwargs): - raise ImportError("llama-index-core is required for braintrust.integrations.llamaindex") from _IMPORT_ERROR - __all__ = [ - "BraintrustEventHandler", "BraintrustSpanHandler", "LlamaIndexIntegration", "setup_llamaindex", @@ -33,19 +27,6 @@ def setup_llamaindex( project_id: str | None = None, project_name: str | None = None, ) -> bool: - """Setup Braintrust integration with LlamaIndex. - - Registers Braintrust span and event handlers on LlamaIndex's root - dispatcher, enabling automatic tracing of all LlamaIndex operations. - - Args: - api_key: Braintrust API key. If not provided, uses BRAINTRUST_API_KEY env var. - project_id: Braintrust project ID. - project_name: Braintrust project name. - - Returns: - True if the integration was successfully set up. - """ if current_span() == NOOP_SPAN: init_logger(project=project_name, api_key=api_key, project_id=project_id) diff --git a/py/src/braintrust/integrations/llamaindex/event_handler.py b/py/src/braintrust/integrations/llamaindex/event_handler.py deleted file mode 100644 index 75cc1ac4..00000000 --- a/py/src/braintrust/integrations/llamaindex/event_handler.py +++ /dev/null @@ -1,211 +0,0 @@ -"""Braintrust event handler for LlamaIndex instrumentation. - -Enriches Braintrust spans with detailed event data that goes beyond what -OTEL-based integrations capture: LLM model configuration, token usage details, -retrieval scores, synthesis context chunks, reranking parameters, and more. -""" - -import logging -from typing import Any - -from braintrust.logger import current_span - - -_logger = logging.getLogger("braintrust.integrations.llamaindex") - - -def _safe_model_dict(model_dict: Any) -> dict[str, Any] | None: - """Safely extract model configuration dict.""" - if not model_dict or not isinstance(model_dict, dict): - return None - safe = {} - for k, v in model_dict.items(): - if isinstance(v, (str, int, float, bool, type(None))): - safe[k] = v - return safe if safe else None - - -def _extract_node_details(nodes: Any) -> list[dict[str, Any]] | None: - """Extract detailed node information including scores and metadata.""" - if not nodes: - return None - result = [] - for nws in nodes: - entry: dict[str, Any] = {} - if hasattr(nws, "score") and nws.score is not None: - entry["score"] = nws.score - node = nws.node if hasattr(nws, "node") else nws - if hasattr(node, "text"): - text = node.text - entry["text"] = text[:500] + "..." if len(text) > 500 else text - if hasattr(node, "id_"): - entry["node_id"] = node.id_ - if hasattr(node, "metadata") and node.metadata: - entry["metadata"] = node.metadata - if hasattr(node, "start_char_idx"): - entry["start_char_idx"] = node.start_char_idx - if hasattr(node, "end_char_idx"): - entry["end_char_idx"] = node.end_char_idx - result.append(entry) - return result if result else None - - -try: - from llama_index_instrumentation.event_handlers.base import BaseEventHandler - from llama_index.core.instrumentation.events import BaseEvent - - class BraintrustEventHandler(BaseEventHandler): - """Enriches Braintrust spans with LlamaIndex event-level detail. - - Captures data that standard OTEL instrumentors miss: - - LLM model configuration (model_dict) at call time - - Detailed retrieval results with scores and node metadata - - Synthesis context chunks - - Reranking parameters and results - - Embedding model configuration - """ - - @classmethod - def class_name(cls) -> str: - return "BraintrustEventHandler" - - def handle(self, event: "BaseEvent", **kwargs: Any) -> None: - span = current_span() - if not span or str(span) == "NOOP_SPAN": - return - - event_cls_name = type(event).__name__ - - try: - self._handle_event(event, event_cls_name, span) - except Exception: - _logger.debug("Failed to handle event %s", event_cls_name, exc_info=True) - - def _handle_event(self, event: Any, cls_name: str, span: Any) -> None: - # ── LLM events ── - if cls_name == "LLMChatStartEvent": - metadata: dict[str, Any] = {} - model_config = _safe_model_dict(getattr(event, "model_dict", None)) - if model_config: - metadata["model_config"] = model_config - additional = getattr(event, "additional_kwargs", None) - if additional: - metadata["additional_kwargs"] = additional - if metadata: - span.log(metadata=metadata) - - elif cls_name == "LLMChatEndEvent": - response = getattr(event, "response", None) - if response: - self._log_llm_response_metrics(response, span) - - elif cls_name == "LLMCompletionStartEvent": - metadata = {} - model_config = _safe_model_dict(getattr(event, "model_dict", None)) - if model_config: - metadata["model_config"] = model_config - additional = getattr(event, "additional_kwargs", None) - if additional: - metadata["additional_kwargs"] = additional - if metadata: - span.log(metadata=metadata) - - elif cls_name == "LLMCompletionEndEvent": - response = getattr(event, "response", None) - if response: - self._log_llm_response_metrics(response, span) - - # ── Retrieval events ── - elif cls_name == "RetrievalEndEvent": - nodes = getattr(event, "nodes", None) - if nodes: - node_details = _extract_node_details(nodes) - if node_details: - metadata = { - "retrieved_nodes": node_details, - "num_nodes_retrieved": len(nodes), - } - scores = [n.get("score") for n in node_details if n.get("score") is not None] - if scores: - metadata["retrieval_scores"] = { - "min": min(scores), - "max": max(scores), - "mean": sum(scores) / len(scores), - } - span.log(metadata=metadata) - - # ── Synthesis events ── - elif cls_name == "GetResponseStartEvent": - query_str = getattr(event, "query_str", None) - text_chunks = getattr(event, "text_chunks", None) - if text_chunks: - metadata = {"num_text_chunks": len(text_chunks)} - total_chars = sum(len(c) for c in text_chunks) - metadata["total_context_chars"] = total_chars - span.log(metadata=metadata) - - # ── Embedding events ── - elif cls_name == "EmbeddingStartEvent": - model_config = _safe_model_dict(getattr(event, "model_dict", None)) - if model_config: - span.log(metadata={"embedding_model_config": model_config}) - - elif cls_name == "EmbeddingEndEvent": - chunks = getattr(event, "chunks", None) - embeddings = getattr(event, "embeddings", None) - if chunks and embeddings: - span.log( - metadata={ - "num_chunks_embedded": len(chunks), - "embedding_dimensions": len(embeddings[0]) if embeddings else None, - } - ) - - # ── Rerank events ── - elif cls_name == "ReRankStartEvent": - metadata = {} - top_n = getattr(event, "top_n", None) - model_name = getattr(event, "model_name", None) - nodes = getattr(event, "nodes", None) - if top_n is not None: - metadata["rerank_top_n"] = top_n - if model_name: - metadata["rerank_model"] = model_name - if nodes: - metadata["rerank_input_count"] = len(nodes) - if metadata: - span.log(metadata=metadata) - - elif cls_name == "ReRankEndEvent": - nodes = getattr(event, "nodes", None) - if nodes: - node_details = _extract_node_details(nodes) - if node_details: - span.log( - metadata={ - "reranked_nodes": node_details, - "rerank_output_count": len(nodes), - } - ) - - def _log_llm_response_metrics(self, response: Any, span: Any) -> None: - """Extract and log metrics from an LLM response.""" - raw = getattr(response, "raw", None) - if raw is None: - return - - from braintrust.integrations.llamaindex.span_handler import _extract_token_usage - - metrics = _extract_token_usage(raw) - if metrics: - span.log(metrics=metrics) - - # Extract model name from raw response - model = getattr(raw, "model", None) - if model is None and isinstance(raw, dict): - model = raw.get("model") - if model: - span.log(metadata={"model": model}) - -except ImportError: - BraintrustEventHandler = None # type: ignore[assignment,misc] diff --git a/py/src/braintrust/integrations/llamaindex/helpers.py b/py/src/braintrust/integrations/llamaindex/helpers.py deleted file mode 100644 index 31ba99fd..00000000 --- a/py/src/braintrust/integrations/llamaindex/helpers.py +++ /dev/null @@ -1,69 +0,0 @@ -"""Test helpers for LlamaIndex integration tests.""" - -from typing import Any, Sequence -from unittest.mock import ANY - - -PrimitiveValue = str | int | float | bool | None -RecursiveValue = PrimitiveValue | dict[str, Any] | Sequence[Any] - - -def assert_matches_object( - actual: RecursiveValue, - expected: RecursiveValue, - ignore_order: bool = False, -) -> None: - """Assert that actual contains all key-value pairs from expected. - - For lists, each item in expected must match the corresponding item in actual. - For dicts, all key-value pairs in expected must exist in actual. - """ - if isinstance(expected, (list, tuple)): - assert isinstance(actual, (list, tuple)), f"Expected sequence but got {type(actual)}" - assert len(actual) >= len(expected), ( - f"Expected sequence of length >= {len(expected)} but got length {len(actual)}" - ) - if not ignore_order: - for i, expected_item in enumerate(expected): - assert_matches_object(actual[i], expected_item) - else: - for expected_item in expected: - matched = False - for actual_item in actual: - try: - assert_matches_object(actual_item, expected_item) - matched = True - except Exception: - pass - assert matched, f"Expected {expected_item} in unordered sequence but couldn't find match in {actual}" - - elif isinstance(expected, dict): - assert isinstance(actual, dict), f"Expected dict but got {type(actual)}" - actual_dict: dict[str, Any] = actual - for k, v in expected.items(): - assert k in actual_dict, f"Missing key {k}" - if v is ANY: - continue - if isinstance(v, (dict, list, tuple)): - assert_matches_object(actual_dict[k], v) - else: - assert actual_dict[k] == v, f"Key {k}: expected {v} but got {actual_dict[k]}" - else: - assert actual == expected, f"Expected {expected} but got {actual}" - - -def find_spans_by_attributes(spans: list[Any], **attributes: Any) -> list[Any]: - """Find all spans that match the given span_attributes.""" - matching_spans: list[Any] = [] - for span in spans: - if "span_attributes" not in span: - continue - span_attrs = span.get("span_attributes") or {} - matches = True - for key, value in attributes.items(): - if key not in span_attrs or span_attrs.get(key) != value: - matches = False - break - if matches: - matching_spans.append(span) - return matching_spans diff --git a/py/src/braintrust/integrations/llamaindex/patchers.py b/py/src/braintrust/integrations/llamaindex/patchers.py index 699c2dc1..acfec5e7 100644 --- a/py/src/braintrust/integrations/llamaindex/patchers.py +++ b/py/src/braintrust/integrations/llamaindex/patchers.py @@ -1,18 +1,12 @@ -"""LlamaIndex patchers. - -Registers Braintrust span and event handlers on LlamaIndex's root dispatcher -for automatic instrumentation of all LlamaIndex operations. -""" +"""LlamaIndex patchers.""" from braintrust.integrations.base import CallbackPatcher try: - from .event_handler import BraintrustEventHandler from .span_handler import BraintrustSpanHandler except ImportError: BraintrustSpanHandler = None - BraintrustEventHandler = None def _has_braintrust_handlers() -> bool: @@ -28,7 +22,7 @@ def _has_braintrust_handlers() -> bool: def _register_braintrust_handlers() -> None: - if BraintrustSpanHandler is None or BraintrustEventHandler is None: + if BraintrustSpanHandler is None: raise ImportError("llama-index-core is not installed") from llama_index.core.instrumentation import get_dispatcher @@ -39,12 +33,9 @@ def _register_braintrust_handlers() -> None: return dispatcher.add_span_handler(BraintrustSpanHandler()) - dispatcher.add_event_handler(BraintrustEventHandler()) class DispatcherHandlerPatcher(CallbackPatcher): - """Register Braintrust handlers on LlamaIndex's root dispatcher.""" - name = "llamaindex.dispatcher_handler" target_module = "llama_index.core.instrumentation" callback = _register_braintrust_handlers diff --git a/py/src/braintrust/integrations/llamaindex/span_handler.py b/py/src/braintrust/integrations/llamaindex/span_handler.py index b090269b..5fe73735 100644 --- a/py/src/braintrust/integrations/llamaindex/span_handler.py +++ b/py/src/braintrust/integrations/llamaindex/span_handler.py @@ -1,45 +1,18 @@ -"""Braintrust span handler for LlamaIndex instrumentation. - -Implements LlamaIndex's BaseSpanHandler to capture all span lifecycle events -and map them to Braintrust spans with rich metadata extraction. -""" +"""Braintrust span handler for LlamaIndex instrumentation.""" import inspect import logging import time from typing import Any -from braintrust.logger import NOOP_SPAN, Span, current_span, init_logger, start_span +from braintrust.logger import NOOP_SPAN, Span, current_span, start_span from braintrust.span_types import SpanTypeAttribute -from braintrust.version import VERSION as sdk_version _logger = logging.getLogger("braintrust.integrations.llamaindex") -_INTEGRATION_NAME = "llamaindex-py" - - -def _safe_str(obj: Any) -> str | None: - """Safely convert object to string representation.""" - if obj is None: - return None - try: - return str(obj) - except Exception: - return None - - -def _extract_query_text(query: Any) -> str | None: - """Extract query text from a string or QueryBundle.""" - if isinstance(query, str): - return query - if hasattr(query, "query_str"): - return query.query_str - return _safe_str(query) - def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: - """Extract message dicts from LlamaIndex ChatMessage list.""" if not messages: return None result = [] @@ -50,75 +23,48 @@ def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: if hasattr(msg, "content"): entry["content"] = msg.content elif hasattr(msg, "blocks"): - text_parts = [] - for block in msg.blocks: - if hasattr(block, "text"): - text_parts.append(block.text) + text_parts = [block.text for block in msg.blocks if hasattr(block, "text")] if text_parts: entry["content"] = "\n".join(text_parts) - if hasattr(msg, "additional_kwargs") and msg.additional_kwargs: - entry["additional_kwargs"] = msg.additional_kwargs result.append(entry) return result def _extract_response_output(result: Any) -> Any: - """Extract output from a LlamaIndex response object.""" if result is None: return None - # ChatResponse if hasattr(result, "message") and hasattr(result, "raw"): - output: dict[str, Any] = {} msg = result.message - if msg: - output["role"] = str(msg.role.value) if hasattr(msg.role, "value") else str(msg.role) - if hasattr(msg, "content"): - output["content"] = msg.content - elif hasattr(msg, "blocks"): - text_parts = [] - for block in msg.blocks: - if hasattr(block, "text"): - text_parts.append(block.text) - if text_parts: - output["content"] = "\n".join(text_parts) - if hasattr(msg, "additional_kwargs") and msg.additional_kwargs: - output["additional_kwargs"] = msg.additional_kwargs - if hasattr(result, "logprobs") and result.logprobs: - output["logprobs"] = result.logprobs + if not msg: + return None + output: dict[str, Any] = {} + output["role"] = str(msg.role.value) if hasattr(msg.role, "value") else str(msg.role) + if hasattr(msg, "content"): + output["content"] = msg.content + elif hasattr(msg, "blocks"): + text_parts = [b.text for b in msg.blocks if hasattr(b, "text")] + if text_parts: + output["content"] = "\n".join(text_parts) return output - # CompletionResponse if hasattr(result, "text") and hasattr(result, "raw"): - output = {"text": result.text} - if hasattr(result, "logprobs") and result.logprobs: - output["logprobs"] = result.logprobs - if hasattr(result, "additional_kwargs") and result.additional_kwargs: - output["additional_kwargs"] = result.additional_kwargs - return output - - # Query Response (has response attribute with text) + return {"text": result.text} + # Query response if hasattr(result, "response") and hasattr(result, "source_nodes"): output = {"response": result.response} if result.source_nodes: output["source_nodes"] = _extract_nodes(result.source_nodes) - if hasattr(result, "metadata") and result.metadata: - output["metadata"] = result.metadata return output - # List of NodeWithScore if isinstance(result, list) and result and hasattr(result[0], "node"): return _extract_nodes(result) - - # String if isinstance(result, str): return result - - return _safe_str(result) + return str(result) def _extract_nodes(nodes: list[Any]) -> list[dict[str, Any]]: - """Extract structured data from NodeWithScore list.""" result = [] for nws in nodes: entry: dict[str, Any] = {} @@ -136,58 +82,23 @@ def _extract_nodes(nodes: list[Any]) -> list[dict[str, Any]]: def _extract_token_usage(raw: Any) -> dict[str, int | float]: - """Extract token usage from the raw provider response. - - LlamaIndex stores the raw provider response in ChatResponse.raw / CompletionResponse.raw. - This contains the actual token counts that OTEL-based integrations often miss. - """ metrics: dict[str, int | float] = {} if raw is None: return metrics - # OpenAI-style: raw is a ChatCompletion or similar with .usage usage = getattr(raw, "usage", None) if usage is None and isinstance(raw, dict): usage = raw.get("usage") if usage is not None: - if isinstance(usage, dict): - metrics.update( - { - k: v - for k, v in { - "prompt_tokens": usage.get("prompt_tokens"), - "completion_tokens": usage.get("completion_tokens"), - "total_tokens": usage.get("total_tokens"), - }.items() - if v is not None - } - ) - # Cache tokens (OpenAI) - prompt_details = usage.get("prompt_tokens_details") or {} - if isinstance(prompt_details, dict): - cached = prompt_details.get("cached_tokens") - if cached is not None: - metrics["prompt_cached_tokens"] = cached - else: - for attr in ("prompt_tokens", "completion_tokens", "total_tokens"): - val = getattr(usage, attr, None) - if val is not None: - metrics[attr] = val - # Cache tokens - prompt_details = getattr(usage, "prompt_tokens_details", None) - if prompt_details: - cached = getattr(prompt_details, "cached_tokens", None) - if cached is not None: - metrics["prompt_cached_tokens"] = cached - - # Anthropic-style: raw has input_tokens/output_tokens at top level + for key in ("prompt_tokens", "completion_tokens", "total_tokens"): + val = usage.get(key) if isinstance(usage, dict) else getattr(usage, key, None) + if val is not None: + metrics[key] = val + + # Anthropic-style fallback if not metrics: - for key_map in [ - ("input_tokens", "prompt_tokens"), - ("output_tokens", "completion_tokens"), - ]: - src, dst = key_map + for src, dst in [("input_tokens", "prompt_tokens"), ("output_tokens", "completion_tokens")]: val = getattr(raw, src, None) if val is None and isinstance(raw, dict): val = raw.get(src) @@ -200,127 +111,51 @@ def _extract_token_usage(raw: Any) -> dict[str, int | float]: def _classify_instance(instance: Any) -> tuple[SpanTypeAttribute, str]: - """Determine the Braintrust span type and name from a LlamaIndex instance. - - Returns (span_type, span_name). - """ if instance is None: return SpanTypeAttribute.TASK, "llamaindex" cls_name = type(instance).__name__ - - # Check class hierarchy using string names to avoid importing optional packages mro_names = {c.__name__ for c in type(instance).__mro__} if "BaseLLM" in mro_names or "LLM" in mro_names: - model = getattr(instance, "model", None) or getattr(instance, "model_name", None) or "" - name = f"{cls_name}" if not model else f"{cls_name} ({model})" - return SpanTypeAttribute.LLM, name - - if "BaseEmbedding" in mro_names: - model = getattr(instance, "model_name", None) or getattr(instance, "model", None) or "" - name = f"{cls_name}" if not model else f"{cls_name} ({model})" - return SpanTypeAttribute.FUNCTION, name - - if "BaseRetriever" in mro_names: - return SpanTypeAttribute.FUNCTION, cls_name - - if "BaseSynthesizer" in mro_names: - return SpanTypeAttribute.FUNCTION, cls_name - - if "BaseQueryEngine" in mro_names: - return SpanTypeAttribute.TASK, cls_name - - if "BaseAgent" in mro_names or "AgentRunner" in mro_names: - return SpanTypeAttribute.TASK, cls_name + model = getattr(instance, "model", None) or getattr(instance, "model_name", None) + return SpanTypeAttribute.LLM, f"{cls_name} ({model})" if model else cls_name if "BaseTool" in mro_names or "FunctionTool" in mro_names: - tool_name = getattr(instance, "name", None) or cls_name - return SpanTypeAttribute.TOOL, tool_name - - if "BaseNodeParser" in mro_names or "NodeParser" in mro_names or "SentenceSplitter" in mro_names: - return SpanTypeAttribute.FUNCTION, cls_name + return SpanTypeAttribute.TOOL, getattr(instance, "name", None) or cls_name - if "BaseNodePostprocessor" in mro_names: - return SpanTypeAttribute.FUNCTION, cls_name - - if "Workflow" in mro_names: + if any(name in mro_names for name in ("BaseQueryEngine", "BaseAgent", "AgentRunner", "Workflow")): return SpanTypeAttribute.TASK, cls_name - return SpanTypeAttribute.TASK, cls_name - - -def _extract_instance_metadata(instance: Any) -> dict[str, Any]: - """Extract useful metadata from a LlamaIndex instance.""" - if instance is None: - return {} - - metadata: dict[str, Any] = {"class": type(instance).__name__} - mro_names = {c.__name__ for c in type(instance).__mro__} - - if "BaseLLM" in mro_names or "LLM" in mro_names: - for attr in ("model", "model_name", "temperature", "max_tokens", "max_retries"): - val = getattr(instance, attr, None) - if val is not None: - metadata[attr] = val - - elif "BaseEmbedding" in mro_names: - for attr in ("model_name", "model", "embed_batch_size"): - val = getattr(instance, attr, None) - if val is not None: - metadata[attr] = val - - elif "BaseRetriever" in mro_names: - for attr in ("similarity_top_k",): - val = getattr(instance, attr, None) - if val is not None: - metadata[attr] = val - - return metadata + return SpanTypeAttribute.FUNCTION, cls_name -def _extract_input_from_bound_args(bound_args: "inspect.BoundArguments", instance: Any) -> Any: - """Extract meaningful input from function bound arguments.""" - args = bound_args.arguments +def _extract_input(bound_args: "inspect.BoundArguments") -> Any: + args = {k: v for k, v in bound_args.arguments.items() if k != "self"} - # Remove 'self' if present - args = {k: v for k, v in args.items() if k != "self"} - - # Common input patterns - if "str_or_query_bundle" in args: - return _extract_query_text(args["str_or_query_bundle"]) - if "query_str" in args: - return args["query_str"] - if "query" in args: - return _extract_query_text(args["query"]) - if "prompt" in args: - return args["prompt"] if "messages" in args: return _extract_messages(args["messages"]) - if "nodes" in args: - return _extract_nodes(args["nodes"]) if args["nodes"] else None - # For single-arg functions, return the arg directly + for key in ("str_or_query_bundle", "query_str", "query", "prompt"): + if key in args: + val = args[key] + return val.query_str if hasattr(val, "query_str") else val + + if "nodes" in args and args["nodes"]: + return _extract_nodes(args["nodes"]) + if len(args) == 1: return next(iter(args.values())) - # For multi-arg, return the dict (minus kwargs-style args) - if args: - return {k: _safe_str(v) if not isinstance(v, (str, int, float, bool, type(None))) else v for k, v in args.items()} - return None class _SpanRecord: - """Internal record tracking a LlamaIndex span mapped to a Braintrust span.""" + __slots__ = ("bt_span", "start_time") - __slots__ = ("bt_span", "start_time", "instance_type", "method_name") - - def __init__(self, bt_span: Span, start_time: float, instance_type: str, method_name: str): + def __init__(self, bt_span: Span, start_time: float): self.bt_span = bt_span self.start_time = start_time - self.instance_type = instance_type - self.method_name = method_name try: @@ -328,13 +163,6 @@ def __init__(self, bt_span: Span, start_time: float, instance_type: str, method_ from llama_index_instrumentation.span_handlers.base import BaseSpanHandler class BraintrustSpanHandler(BaseSpanHandler["BaseSpan"]): - """Maps LlamaIndex spans to Braintrust spans. - - Registered on LlamaIndex's root dispatcher to capture all instrumented - operations (LLM calls, retrieval, query engines, agents, etc.) and - create corresponding Braintrust spans with rich metadata. - """ - _bt_spans: dict[str, _SpanRecord] = {} def model_post_init(self, __context: Any) -> None: @@ -356,29 +184,15 @@ def new_span( ) -> BaseSpan | None: start_time = time.time() span_type, span_name = _classify_instance(instance) + input_data = _extract_input(bound_args) - # Determine method name from span id (format: "ClassName.method-uuid") - method_name = "" - if id_ and "-" in id_: - prefix = id_.rsplit("-", 5)[0] if id_.count("-") >= 5 else id_.split("-")[0] - if "." in prefix: - method_name = prefix.split(".", 1)[1] if "." in prefix else prefix - - instance_metadata = _extract_instance_metadata(instance) - input_data = _extract_input_from_bound_args(bound_args, instance) - - metadata: dict[str, Any] = { - **instance_metadata, - "braintrust": { - "integration_name": _INTEGRATION_NAME, - "sdk_version": sdk_version, - "language": "python", - }, - } - if method_name: - metadata["method"] = method_name - if tags: - metadata["tags"] = tags + metadata: dict[str, Any] = {} + if instance is not None: + metadata["class"] = type(instance).__name__ + for attr in ("model", "model_name", "temperature", "max_tokens"): + val = getattr(instance, attr, None) + if val is not None: + metadata[attr] = val # Find parent Braintrust span parent_bt_span = None @@ -389,46 +203,27 @@ def new_span( if cs != NOOP_SPAN: parent_bt_span = cs - event: dict[str, Any] = {"metadata": metadata} + event: dict[str, Any] = {} + if metadata: + event["metadata"] = metadata if input_data is not None: event["input"] = input_data try: if parent_bt_span is not None: bt_span = parent_bt_span.start_span( - name=span_name, - type=span_type, - start_time=start_time, - **event, + name=span_name, type=span_type, start_time=start_time, **event ) else: bt_span = start_span( - name=span_name, - type=span_type, - start_time=start_time, - **event, - ) - - if bt_span == NOOP_SPAN: - bt_span = init_logger().start_span( - name=span_name, - type=span_type, - start_time=start_time, - **event, + name=span_name, type=span_type, start_time=start_time, **event ) bt_span.set_current() - - record = _SpanRecord( - bt_span=bt_span, - start_time=start_time, - instance_type=type(instance).__name__ if instance else "unknown", - method_name=method_name, - ) - self._bt_spans[id_] = record + self._bt_spans[id_] = _SpanRecord(bt_span=bt_span, start_time=start_time) except Exception: - _logger.debug("Failed to create Braintrust span for %s", id_, exc_info=True) + _logger.debug("Failed to create span for %s", id_, exc_info=True) return BaseSpan(id_=id_, parent_id=parent_span_id) @@ -445,10 +240,8 @@ def prepare_to_exit_span( return None bt_span = record.bt_span - output = _extract_response_output(result) - # Extract token metrics from raw provider response metrics: dict[str, int | float] = {} raw = getattr(result, "raw", None) if raw is not None: @@ -459,7 +252,6 @@ def prepare_to_exit_span( log_kwargs["output"] = output if metrics: log_kwargs["metrics"] = metrics - if log_kwargs: bt_span.log(**log_kwargs) @@ -470,9 +262,7 @@ def prepare_to_exit_span( raise bt_span.end() - - span_obj = self.open_spans.get(id_) - return span_obj + return self.open_spans.get(id_) def prepare_to_drop_span( self, @@ -487,7 +277,6 @@ def prepare_to_drop_span( return None bt_span = record.bt_span - bt_span.log(error=str(err) if err else "Unknown error") try: @@ -497,9 +286,7 @@ def prepare_to_drop_span( raise bt_span.end() - - span_obj = self.open_spans.get(id_) - return span_obj + return self.open_spans.get(id_) except ImportError: BraintrustSpanHandler = None # type: ignore[assignment,misc] diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py index 257d026f..7fcccd36 100644 --- a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -1,22 +1,24 @@ -"""Tests for the LlamaIndex integration. - -These tests verify that LlamaIndex operations produce correct Braintrust spans -with proper hierarchy, input/output data, and metrics extraction. -""" +"""Tests for the LlamaIndex integration.""" import pytest -from unittest.mock import ANY from braintrust import logger from braintrust.integrations.llamaindex import LlamaIndexIntegration, BraintrustSpanHandler from braintrust.test_helpers import init_test_logger -from .helpers import assert_matches_object, find_spans_by_attributes - PROJECT_NAME = "llamaindex-py" +def _find_spans_by_attributes(spans, **attributes): + result = [] + for span in spans: + span_attrs = span.get("span_attributes") or {} + if all(span_attrs.get(k) == v for k, v in attributes.items()): + result.append(span) + return result + + @pytest.fixture def logger_memory_logger(): test_logger = init_test_logger(PROJECT_NAME) @@ -26,39 +28,26 @@ def logger_memory_logger(): @pytest.fixture(autouse=True) def setup_and_cleanup(): - """Ensure handlers are registered for each test and cleaned up after.""" from llama_index.core.instrumentation import get_dispatcher LlamaIndexIntegration.setup() - yield - # Clean up handlers to avoid cross-test interference dispatcher = get_dispatcher() dispatcher.span_handlers = [ h for h in dispatcher.span_handlers if not isinstance(h, BraintrustSpanHandler) ] - from braintrust.integrations.llamaindex.event_handler import BraintrustEventHandler - - dispatcher.event_handlers = [ - h for h in dispatcher.event_handlers if not isinstance(h, BraintrustEventHandler) - ] def test_integration_setup(): - """Test that setup registers handlers on the dispatcher.""" from llama_index.core.instrumentation import get_dispatcher dispatcher = get_dispatcher() handler_types = [type(h).__name__ for h in dispatcher.span_handlers] assert "BraintrustSpanHandler" in handler_types - event_handler_types = [type(h).__name__ for h in dispatcher.event_handlers] - assert "BraintrustEventHandler" in event_handler_types - def test_integration_idempotent(): - """Calling setup() twice doesn't register duplicate handlers.""" from llama_index.core.instrumentation import get_dispatcher LlamaIndexIntegration.setup() @@ -70,7 +59,6 @@ def test_integration_idempotent(): def test_auto_instrument_includes_llamaindex(): - """auto_instrument() should include llamaindex.""" from braintrust.auto import auto_instrument result = auto_instrument() @@ -80,7 +68,6 @@ def test_auto_instrument_includes_llamaindex(): @pytest.mark.vcr def test_llm_complete(logger_memory_logger): - """Test that LLM.complete() creates a span with input/output.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -88,26 +75,23 @@ def test_llm_complete(logger_memory_logger): llm = OpenAI(model="gpt-4o-mini", temperature=0) - with test_logger.start_span(name="test-complete") as parent: - response = llm.complete("What is 2+2? Answer with just the number.") + with test_logger.start_span(name="test-complete"): + llm.complete("What is 2+2? Answer with just the number.") spans = memory_logger.pop() assert len(spans) >= 2 - # Find the LLM span - llm_spans = find_spans_by_attributes(spans, type="llm") + llm_spans = _find_spans_by_attributes(spans, type="llm") assert len(llm_spans) >= 1 llm_span = llm_spans[0] assert llm_span["input"] is not None assert llm_span["output"] is not None - assert "metadata" in llm_span assert llm_span["metadata"]["class"] == "OpenAI" @pytest.mark.vcr def test_llm_chat(logger_memory_logger): - """Test that LLM.chat() creates a span with messages.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -120,28 +104,24 @@ def test_llm_chat(logger_memory_logger): ChatMessage(role=MessageRole.USER, content="What is the capital of France?"), ] - with test_logger.start_span(name="test-chat") as parent: - response = llm.chat(messages) + with test_logger.start_span(name="test-chat"): + llm.chat(messages) spans = memory_logger.pop() assert len(spans) >= 2 - llm_spans = find_spans_by_attributes(spans, type="llm") + llm_spans = _find_spans_by_attributes(spans, type="llm") assert len(llm_spans) >= 1 llm_span = llm_spans[0] assert llm_span["input"] is not None assert llm_span["output"] is not None - - # Output should contain the response content - output = llm_span["output"] - assert isinstance(output, dict) - assert "content" in output or "role" in output + assert isinstance(llm_span["output"], dict) + assert "content" in llm_span["output"] or "role" in llm_span["output"] @pytest.mark.vcr def test_llm_chat_metrics(logger_memory_logger): - """Test that token metrics are extracted from LLM responses.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -149,22 +129,18 @@ def test_llm_chat_metrics(logger_memory_logger): llm = OpenAI(model="gpt-4o-mini", temperature=0) - with test_logger.start_span(name="test-metrics") as parent: - response = llm.complete("Say hello") + with test_logger.start_span(name="test-metrics"): + llm.complete("Say hello") spans = memory_logger.pop() - llm_spans = find_spans_by_attributes(spans, type="llm") + llm_spans = _find_spans_by_attributes(spans, type="llm") assert len(llm_spans) >= 1 - llm_span = llm_spans[0] - metrics = llm_span.get("metrics", {}) - # Token metrics should be present (extracted from raw response) + metrics = llm_spans[0].get("metrics", {}) assert "prompt_tokens" in metrics or "total_tokens" in metrics or "completion_tokens" in metrics -@pytest.mark.vcr def test_document_processing(logger_memory_logger): - """Test that document splitting creates spans.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -178,24 +154,19 @@ def test_document_processing(logger_memory_logger): splitter = SentenceSplitter(chunk_size=64, chunk_overlap=10) - with test_logger.start_span(name="test-docproc") as parent: - nodes = splitter.get_nodes_from_documents(docs) + with test_logger.start_span(name="test-docproc"): + splitter.get_nodes_from_documents(docs) spans = memory_logger.pop() - # Should have parent span + at least one SentenceSplitter span assert len(spans) >= 2 - # Find function spans (SentenceSplitter spans) - func_spans = find_spans_by_attributes(spans, type="function") + func_spans = _find_spans_by_attributes(spans, type="function") assert len(func_spans) >= 1 - - func_span = func_spans[0] - assert "SentenceSplitter" in func_span["span_attributes"]["name"] + assert "SentenceSplitter" in func_spans[0]["span_attributes"]["name"] @pytest.mark.vcr def test_embedding(logger_memory_logger): - """Test that embedding calls create spans with metadata.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -203,23 +174,19 @@ def test_embedding(logger_memory_logger): embed_model = OpenAIEmbedding(model="text-embedding-3-small") - with test_logger.start_span(name="test-embedding") as parent: - embedding = embed_model.get_text_embedding("Hello world") + with test_logger.start_span(name="test-embedding"): + embed_model.get_text_embedding("Hello world") spans = memory_logger.pop() assert len(spans) >= 2 - # Should have an embedding span - func_spans = find_spans_by_attributes(spans, type="function") + func_spans = _find_spans_by_attributes(spans, type="function") assert len(func_spans) >= 1 - - embed_span = func_spans[0] - assert "OpenAIEmbedding" in embed_span["span_attributes"]["name"] + assert "OpenAIEmbedding" in func_spans[0]["span_attributes"]["name"] @pytest.mark.vcr def test_query_engine(logger_memory_logger): - """Test that a query engine creates a full span hierarchy.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -235,24 +202,20 @@ def test_query_engine(logger_memory_logger): embed_model = OpenAIEmbedding(model="text-embedding-3-small") llm = OpenAI(model="gpt-4o-mini", temperature=0) - with test_logger.start_span(name="test-query-engine") as parent: + with test_logger.start_span(name="test-query-engine"): index = VectorStoreIndex.from_documents(docs, embed_model=embed_model) query_engine = index.as_query_engine(llm=llm) - response = query_engine.query("What is the capital of France?") + query_engine.query("What is the capital of France?") spans = memory_logger.pop() - # Should have many spans: parent, query engine, retriever, synthesizer, LLM, embeddings assert len(spans) >= 4 - # Verify span types present span_types = {s.get("span_attributes", {}).get("type") for s in spans} - assert "task" in span_types # query engine and/or parent - assert "llm" in span_types or "function" in span_types # LLM call or embedding + assert "task" in span_types + assert "llm" in span_types or "function" in span_types -@pytest.mark.vcr def test_span_hierarchy(logger_memory_logger): - """Test that spans maintain proper parent-child relationships.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -262,23 +225,18 @@ def test_span_hierarchy(logger_memory_logger): docs = [Document(text="Hello world. This is a test document with some content.")] splitter = SentenceSplitter(chunk_size=256, chunk_overlap=10) - with test_logger.start_span(name="test-hierarchy") as parent: - nodes = splitter.get_nodes_from_documents(docs) + with test_logger.start_span(name="test-hierarchy"): + splitter.get_nodes_from_documents(docs) spans = memory_logger.pop() assert len(spans) >= 2 - # The manually created parent span - parent_span = spans[0] - root_span_id = parent_span["root_span_id"] - - # All spans should share the same root + root_span_id = spans[0]["root_span_id"] for span in spans: assert span["root_span_id"] == root_span_id def test_llm_error_handling(logger_memory_logger): - """Test that errors in LLM calls are captured.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -286,25 +244,22 @@ def test_llm_error_handling(logger_memory_logger): llm = OpenAI(model="gpt-4o-mini", api_key="sk-invalid-key") - with test_logger.start_span(name="test-error") as parent: + with test_logger.start_span(name="test-error"): try: - response = llm.complete("Hello") + llm.complete("Hello") except Exception: pass spans = memory_logger.pop() assert len(spans) >= 2 - # Find LLM span - should have error - llm_spans = find_spans_by_attributes(spans, type="llm") + llm_spans = _find_spans_by_attributes(spans, type="llm") if llm_spans: - llm_span = llm_spans[0] - assert llm_span.get("error") is not None + assert llm_spans[0].get("error") is not None @pytest.mark.vcr async def test_async_llm_complete(logger_memory_logger): - """Test that async LLM.acomplete() creates spans.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -312,19 +267,18 @@ async def test_async_llm_complete(logger_memory_logger): llm = OpenAI(model="gpt-4o-mini", temperature=0) - with test_logger.start_span(name="test-async-complete") as parent: - response = await llm.acomplete("What is 2+2? Answer with just the number.") + with test_logger.start_span(name="test-async-complete"): + await llm.acomplete("What is 2+2? Answer with just the number.") spans = memory_logger.pop() assert len(spans) >= 2 - llm_spans = find_spans_by_attributes(spans, type="llm") + llm_spans = _find_spans_by_attributes(spans, type="llm") assert len(llm_spans) >= 1 @pytest.mark.vcr async def test_async_llm_chat(logger_memory_logger): - """Test that async LLM.achat() creates spans.""" test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -336,11 +290,11 @@ async def test_async_llm_chat(logger_memory_logger): ChatMessage(role=MessageRole.USER, content="Say hello"), ] - with test_logger.start_span(name="test-async-chat") as parent: - response = await llm.achat(messages) + with test_logger.start_span(name="test-async-chat"): + await llm.achat(messages) spans = memory_logger.pop() assert len(spans) >= 2 - llm_spans = find_spans_by_attributes(spans, type="llm") + llm_spans = _find_spans_by_attributes(spans, type="llm") assert len(llm_spans) >= 1 From 5522979ad206de3d5b963c56b6aa9cdf1c3e9970 Mon Sep 17 00:00:00 2001 From: "Nova (SFK)" Date: Mon, 27 Apr 2026 19:50:49 +0000 Subject: [PATCH 03/13] rename span_handler.py to tracing.py to match convention Co-Authored-By: Claude Opus 4.6 --- py/src/braintrust/integrations/llamaindex/__init__.py | 2 +- py/src/braintrust/integrations/llamaindex/patchers.py | 2 +- .../integrations/llamaindex/{span_handler.py => tracing.py} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename py/src/braintrust/integrations/llamaindex/{span_handler.py => tracing.py} (100%) diff --git a/py/src/braintrust/integrations/llamaindex/__init__.py b/py/src/braintrust/integrations/llamaindex/__init__.py index 7128a6d4..6485b0b9 100644 --- a/py/src/braintrust/integrations/llamaindex/__init__.py +++ b/py/src/braintrust/integrations/llamaindex/__init__.py @@ -6,7 +6,7 @@ try: - from .span_handler import BraintrustSpanHandler + from .tracing import BraintrustSpanHandler except ImportError as exc: _IMPORT_ERROR = exc diff --git a/py/src/braintrust/integrations/llamaindex/patchers.py b/py/src/braintrust/integrations/llamaindex/patchers.py index acfec5e7..df48d16b 100644 --- a/py/src/braintrust/integrations/llamaindex/patchers.py +++ b/py/src/braintrust/integrations/llamaindex/patchers.py @@ -4,7 +4,7 @@ try: - from .span_handler import BraintrustSpanHandler + from .tracing import BraintrustSpanHandler except ImportError: BraintrustSpanHandler = None diff --git a/py/src/braintrust/integrations/llamaindex/span_handler.py b/py/src/braintrust/integrations/llamaindex/tracing.py similarity index 100% rename from py/src/braintrust/integrations/llamaindex/span_handler.py rename to py/src/braintrust/integrations/llamaindex/tracing.py From d6a12dfd104ed1103969aba2ffb22e17b686be87 Mon Sep 17 00:00:00 2001 From: "Nova (SFK)" Date: Mon, 27 Apr 2026 19:54:26 +0000 Subject: [PATCH 04/13] remove defensive try/excepts around braintrust SDK calls Co-Authored-By: Claude Opus 4.6 --- .../integrations/llamaindex/tracing.py | 42 ++++++------------- 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/py/src/braintrust/integrations/llamaindex/tracing.py b/py/src/braintrust/integrations/llamaindex/tracing.py index 5fe73735..aab05205 100644 --- a/py/src/braintrust/integrations/llamaindex/tracing.py +++ b/py/src/braintrust/integrations/llamaindex/tracing.py @@ -1,7 +1,6 @@ """Braintrust span handler for LlamaIndex instrumentation.""" import inspect -import logging import time from typing import Any @@ -9,9 +8,6 @@ from braintrust.span_types import SpanTypeAttribute -_logger = logging.getLogger("braintrust.integrations.llamaindex") - - def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: if not messages: return None @@ -209,21 +205,17 @@ def new_span( if input_data is not None: event["input"] = input_data - try: - if parent_bt_span is not None: - bt_span = parent_bt_span.start_span( - name=span_name, type=span_type, start_time=start_time, **event - ) - else: - bt_span = start_span( - name=span_name, type=span_type, start_time=start_time, **event - ) - - bt_span.set_current() - self._bt_spans[id_] = _SpanRecord(bt_span=bt_span, start_time=start_time) + if parent_bt_span is not None: + bt_span = parent_bt_span.start_span( + name=span_name, type=span_type, start_time=start_time, **event + ) + else: + bt_span = start_span( + name=span_name, type=span_type, start_time=start_time, **event + ) - except Exception: - _logger.debug("Failed to create span for %s", id_, exc_info=True) + bt_span.set_current() + self._bt_spans[id_] = _SpanRecord(bt_span=bt_span, start_time=start_time) return BaseSpan(id_=id_, parent_id=parent_span_id) @@ -255,12 +247,7 @@ def prepare_to_exit_span( if log_kwargs: bt_span.log(**log_kwargs) - try: - bt_span.unset_current() - except ValueError as e: - if "was created in a different Context" not in str(e): - raise - + bt_span.unset_current() bt_span.end() return self.open_spans.get(id_) @@ -279,12 +266,7 @@ def prepare_to_drop_span( bt_span = record.bt_span bt_span.log(error=str(err) if err else "Unknown error") - try: - bt_span.unset_current() - except ValueError as e: - if "was created in a different Context" not in str(e): - raise - + bt_span.unset_current() bt_span.end() return self.open_spans.get(id_) From 9775821c0245983b9ba56630aadfd0414ce56acb Mon Sep 17 00:00:00 2001 From: "Nova (SFK)" Date: Mon, 27 Apr 2026 20:04:47 +0000 Subject: [PATCH 05/13] add llama-index-core 0.13.0 to version matrix and set min_version - Test against both latest (0.14.21) and 0.13.0 (first version with llama_index_instrumentation as a separate package) - Set min_version="0.13.0" on LlamaIndexIntegration - Install llms/embeddings packages unpinned in nox since they are tightly version-coupled to llama-index-core Co-Authored-By: Claude Opus 4.6 --- py/noxfile.py | 5 +- py/pyproject.toml | 3 +- .../integrations/llamaindex/integration.py | 1 + py/uv.lock | 368 ++++++++++-------- 4 files changed, 219 insertions(+), 158 deletions(-) diff --git a/py/noxfile.py b/py/noxfile.py index 9f717d68..f08d3153 100644 --- a/py/noxfile.py +++ b/py/noxfile.py @@ -404,8 +404,11 @@ def test_langchain(session, version): @nox.parametrize("version", LLAMAINDEX_VERSIONS, ids=LLAMAINDEX_VERSIONS) def test_llamaindex(session, version): _install_test_deps(session) - _install_matrix_dep(session, "llama-index-core", version) _install_group_locked(session, "test-llamaindex") + _install_matrix_dep(session, "llama-index-core", version) + # These packages are tightly version-coupled to llama-index-core, so we + # install them unpinned and let pip resolve compatible versions. + session.install("llama-index-llms-openai", "llama-index-embeddings-openai", silent=SILENT_INSTALLS) _run_tests(session, f"{INTEGRATION_DIR}/llamaindex/test_llamaindex.py", version=version) diff --git a/py/pyproject.toml b/py/pyproject.toml index 552c3210..528a7018 100644 --- a/py/pyproject.toml +++ b/py/pyproject.toml @@ -159,8 +159,6 @@ test-crewai = [ test-llamaindex = [ {include-group = "test"}, - "llama-index-llms-openai==0.7.5", - "llama-index-embeddings-openai==0.6.0", ] test-cli = [ @@ -359,6 +357,7 @@ latest = "langchain-core==1.3.1" [tool.braintrust.matrix.llama-index-core] latest = "llama-index-core==0.14.21" +"0.13.0" = "llama-index-core==0.13.0" [tool.braintrust.matrix.openrouter] latest = "openrouter==0.9.1" diff --git a/py/src/braintrust/integrations/llamaindex/integration.py b/py/src/braintrust/integrations/llamaindex/integration.py index 0f0cfd73..62371b20 100644 --- a/py/src/braintrust/integrations/llamaindex/integration.py +++ b/py/src/braintrust/integrations/llamaindex/integration.py @@ -16,4 +16,5 @@ class LlamaIndexIntegration(BaseIntegration): name = "llamaindex" import_names = ("llama_index.core",) + min_version = "0.13.0" patchers = (DispatcherHandlerPatcher,) diff --git a/py/uv.lock b/py/uv.lock index 16c51e44..29bc65d4 100644 --- a/py/uv.lock +++ b/py/uv.lock @@ -126,7 +126,8 @@ dependencies = [ { name = "python-dotenv", version = "1.2.2", source = { registry = "https://pypi.org/simple" } }, { name = "python-multipart" }, { name = "pyyaml" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "typer", version = "0.24.2", source = { registry = "https://pypi.org/simple" } }, { name = "typing-extensions" }, ] @@ -489,8 +490,8 @@ dependencies = [ { name = "distro" }, { name = "docstring-parser" }, { name = "httpx" }, - { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands')" }, + { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "sniffio" }, @@ -948,6 +949,11 @@ test-litellm = [ { name = "pytest-asyncio" }, { name = "pytest-vcr" }, ] +test-llamaindex = [ + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-vcr" }, +] test-openai-agents = [ { name = "openai", version = "2.31.0", source = { registry = "https://pypi.org/simple" } }, { name = "pytest" }, @@ -1105,6 +1111,11 @@ test-litellm = [ { name = "pytest-asyncio", specifier = "==1.3.0" }, { name = "pytest-vcr", specifier = "==1.0.2" }, ] +test-llamaindex = [ + { name = "pytest", specifier = "==9.0.2" }, + { name = "pytest-asyncio", specifier = "==1.3.0" }, + { name = "pytest-vcr", specifier = "==1.0.2" }, +] test-openai-agents = [ { name = "openai", specifier = "==2.31.0" }, { name = "pytest", specifier = "==9.0.2" }, @@ -1151,10 +1162,10 @@ name = "build" version = "1.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "os_name == 'nt'" }, + { name = "colorama", marker = "python_full_version < '3.14' and os_name == 'nt'" }, { name = "importlib-metadata", version = "8.7.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10.2'" }, - { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" } }, - { name = "pyproject-hooks" }, + { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "pyproject-hooks", marker = "python_full_version < '3.14'" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/02/ec/bf5ae0a7e5ab57abe8aabdd0759c971883895d1a20c49ae99f8146840c3c/build-1.4.4.tar.gz", hash = "sha256:f832ae053061f3fb524af812dc94b8b84bac6880cd587630e3b5d91a6a9c1703", size = 89220, upload-time = "2026-04-22T20:53:44.807Z" } @@ -1428,35 +1439,35 @@ name = "chromadb" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "bcrypt" }, - { name = "build" }, - { name = "grpcio" }, - { name = "httpx" }, - { name = "importlib-resources" }, - { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" } }, - { name = "kubernetes" }, - { name = "mmh3" }, + { name = "bcrypt", marker = "python_full_version < '3.14'" }, + { name = "build", marker = "python_full_version < '3.14'" }, + { name = "grpcio", marker = "python_full_version < '3.14'" }, + { name = "httpx", marker = "python_full_version < '3.14'" }, + { name = "importlib-resources", marker = "python_full_version < '3.14'" }, + { name = "jsonschema", version = "4.26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "kubernetes", marker = "python_full_version < '3.14'" }, + { name = "mmh3", marker = "python_full_version < '3.14'" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "onnxruntime" }, - { name = "opentelemetry-api" }, - { name = "opentelemetry-exporter-otlp-proto-grpc" }, - { name = "opentelemetry-sdk" }, - { name = "orjson" }, - { name = "overrides" }, - { name = "posthog" }, - { name = "pybase64" }, - { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pypika" }, - { name = "pyyaml" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, - { name = "tenacity", version = "8.5.0", source = { registry = "https://pypi.org/simple" } }, - { name = "tokenizers" }, - { name = "tqdm" }, - { name = "typer", version = "0.24.2", source = { registry = "https://pypi.org/simple" } }, - { name = "typing-extensions" }, - { name = "uvicorn", extra = ["standard"], marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "onnxruntime", marker = "python_full_version < '3.14'" }, + { name = "opentelemetry-api", marker = "python_full_version < '3.14'" }, + { name = "opentelemetry-exporter-otlp-proto-grpc", marker = "python_full_version < '3.14'" }, + { name = "opentelemetry-sdk", marker = "python_full_version < '3.14'" }, + { name = "orjson", marker = "python_full_version < '3.14'" }, + { name = "overrides", marker = "python_full_version < '3.14'" }, + { name = "posthog", marker = "python_full_version < '3.14'" }, + { name = "pybase64", marker = "python_full_version < '3.14'" }, + { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pypika", marker = "python_full_version < '3.14'" }, + { name = "pyyaml", marker = "python_full_version < '3.14'" }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "tenacity", version = "8.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "tokenizers", marker = "python_full_version < '3.14'" }, + { name = "tqdm", marker = "python_full_version < '3.14'" }, + { name = "typer", version = "0.24.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "typing-extensions", marker = "python_full_version < '3.14'" }, + { name = "uvicorn", extra = ["standard"], marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7f/48/11851dddeadad6abe36ee071fedc99b5bdd2c324df3afa8cb952ae02798b/chromadb-1.1.1.tar.gz", hash = "sha256:ebfce0122753e306a76f1e291d4ddaebe5f01b5979b97ae0bc80b1d4024ff223", size = 1338109, upload-time = "2025-10-05T02:49:14.834Z" } wheels = [ @@ -1610,7 +1621,7 @@ name = "coloredlogs" version = "15.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "humanfriendly" }, + { name = "humanfriendly", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520, upload-time = "2021-06-11T10:22:45.202Z" } wheels = [ @@ -1634,31 +1645,31 @@ name = "crewai" version = "1.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "appdirs" }, - { name = "chromadb" }, - { name = "click", version = "8.3.3", source = { registry = "https://pypi.org/simple" } }, - { name = "instructor" }, - { name = "json-repair" }, - { name = "json5" }, - { name = "jsonref" }, - { name = "mcp" }, - { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" } }, - { name = "openpyxl" }, - { name = "opentelemetry-api" }, - { name = "opentelemetry-exporter-otlp-proto-http" }, - { name = "opentelemetry-sdk" }, - { name = "pdfplumber" }, - { name = "portalocker" }, - { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pydantic-settings" }, - { name = "pyjwt" }, - { name = "python-dotenv", version = "1.2.2", source = { registry = "https://pypi.org/simple" } }, - { name = "regex" }, - { name = "tokenizers" }, - { name = "tomli" }, - { name = "tomli-w" }, - { name = "uv" }, + { name = "appdirs", marker = "python_full_version < '3.14'" }, + { name = "chromadb", marker = "python_full_version < '3.14'" }, + { name = "click", version = "8.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "instructor", marker = "python_full_version < '3.14'" }, + { name = "json-repair", marker = "python_full_version < '3.14'" }, + { name = "json5", marker = "python_full_version < '3.14'" }, + { name = "jsonref", marker = "python_full_version < '3.14'" }, + { name = "mcp", marker = "python_full_version < '3.14'" }, + { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "openpyxl", marker = "python_full_version < '3.14'" }, + { name = "opentelemetry-api", marker = "python_full_version < '3.14'" }, + { name = "opentelemetry-exporter-otlp-proto-http", marker = "python_full_version < '3.14'" }, + { name = "opentelemetry-sdk", marker = "python_full_version < '3.14'" }, + { name = "pdfplumber", marker = "python_full_version < '3.14'" }, + { name = "portalocker", marker = "python_full_version < '3.14'" }, + { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic-settings", marker = "python_full_version < '3.14'" }, + { name = "pyjwt", marker = "python_full_version < '3.14'" }, + { name = "python-dotenv", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "regex", marker = "python_full_version < '3.14'" }, + { name = "tokenizers", marker = "python_full_version < '3.14'" }, + { name = "tomli", marker = "python_full_version < '3.14'" }, + { name = "tomli-w", marker = "python_full_version < '3.14'" }, + { name = "uv", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1e/c4/37f5e8e0ccb2804a3e2acc0ccf58f82dc9415a08fad71a3868cdf830c669/crewai-1.6.1.tar.gz", hash = "sha256:b7d73a8a333abf71b30ab20c54086004cd0c016dfd86bba9c035ad5eb31e22a7", size = 4177912, upload-time = "2025-11-29T01:58:25.573Z" } wheels = [ @@ -1732,7 +1743,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "docstring-parser" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "rich-rst" }, { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, @@ -2043,7 +2055,8 @@ dependencies = [ { name = "pyperclip" }, { name = "python-dotenv", version = "1.2.2", source = { registry = "https://pypi.org/simple" } }, { name = "pyyaml" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "uncalled-for" }, { name = "uvicorn" }, { name = "watchfiles" }, @@ -3262,7 +3275,7 @@ name = "humanfriendly" version = "10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyreadline3", marker = "sys_platform == 'win32'" }, + { name = "pyreadline3", marker = "python_full_version < '3.14' and sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702, upload-time = "2021-09-17T21:40:43.31Z" } wheels = [ @@ -3363,7 +3376,7 @@ resolution-markers = [ "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", ] dependencies = [ - { name = "zipp" }, + { name = "zipp", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra != 'group-10-braintrust-test-crewai' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ @@ -3393,19 +3406,19 @@ name = "instructor" version = "1.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp", version = "3.13.5", source = { registry = "https://pypi.org/simple" } }, - { name = "docstring-parser" }, - { name = "jinja2" }, - { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" } }, - { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" } }, - { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pydantic-core", version = "2.41.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pydantic-core", version = "2.46.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "requests" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, - { name = "tenacity", version = "8.5.0", source = { registry = "https://pypi.org/simple" } }, - { name = "typer", version = "0.24.2", source = { registry = "https://pypi.org/simple" } }, + { name = "aiohttp", version = "3.13.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "docstring-parser", marker = "python_full_version < '3.14'" }, + { name = "jinja2", marker = "python_full_version < '3.14'" }, + { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic-core", version = "2.41.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic-core", version = "2.46.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "requests", marker = "python_full_version < '3.14'" }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "tenacity", version = "8.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "typer", version = "0.24.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dc/a4/832cfb15420360e26d2d85bd9d5fe1e4b839d52587574d389bc31284bf6f/instructor-1.15.1.tar.gz", hash = "sha256:c72406469d9025b742e83cf0c13e914b317db2089d08d889944e74fcd659ef94", size = 69948370, upload-time = "2026-04-03T01:51:30.107Z" } wheels = [ @@ -3492,9 +3505,6 @@ name = "jiter" version = "0.13.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", @@ -3604,9 +3614,33 @@ name = "jiter" version = "0.14.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-pydantic-ai-logfire' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-pydantic-ai-logfire' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-pydantic-ai-logfire' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", ] sdist = { url = "https://files.pythonhosted.org/packages/6e/c1/0cddc6eb17d4c53a99840953f95dd3accdc5cfc7a337b0e9b26476276be9/jiter-0.14.0.tar.gz", hash = "sha256:e8a39e66dac7153cf3f964a12aad515afa8d74938ec5cc0018adcdae5367c79e", size = 165725, upload-time = "2026-04-10T14:28:42.01Z" } wheels = [ @@ -3855,10 +3889,10 @@ resolution-markers = [ "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", ] dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py" }, + { name = "attrs", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra != 'group-10-braintrust-test-crewai' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands')" }, + { name = "jsonschema-specifications", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra != 'group-10-braintrust-test-crewai' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands')" }, + { name = "referencing", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra != 'group-10-braintrust-test-crewai' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rpds-py", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra != 'group-10-braintrust-test-crewai' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ @@ -3914,15 +3948,15 @@ name = "kubernetes" version = "35.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "durationpy" }, - { name = "python-dateutil" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "requests-oauthlib" }, - { name = "six" }, - { name = "urllib3" }, - { name = "websocket-client" }, + { name = "certifi", marker = "python_full_version < '3.14'" }, + { name = "durationpy", marker = "python_full_version < '3.14'" }, + { name = "python-dateutil", marker = "python_full_version < '3.14'" }, + { name = "pyyaml", marker = "python_full_version < '3.14'" }, + { name = "requests", marker = "python_full_version < '3.14'" }, + { name = "requests-oauthlib", marker = "python_full_version < '3.14'" }, + { name = "six", marker = "python_full_version < '3.14'" }, + { name = "urllib3", marker = "python_full_version < '3.14'" }, + { name = "websocket-client", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2c/8f/85bf51ad4150f64e8c665daf0d9dfe9787ae92005efb9a4d1cba592bd79d/kubernetes-35.0.0.tar.gz", hash = "sha256:3d00d344944239821458b9efd484d6df9f011da367ecb155dadf9513f05f09ee", size = 1094642, upload-time = "2026-01-16T01:05:27.76Z" } wheels = [ @@ -4260,8 +4294,8 @@ dependencies = [ { name = "opentelemetry-instrumentation" }, { name = "opentelemetry-sdk" }, { name = "protobuf" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-crewai' or extra == 'group-10-braintrust-test-langchain' or extra == 'group-10-braintrust-test-litellm' or extra == 'group-10-braintrust-test-openai-agents' or extra == 'group-10-braintrust-test-pydantic-ai-logfire' or extra == 'group-10-braintrust-test-strands' or extra != 'group-10-braintrust-lint'" }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14' or extra != 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands')" }, { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "typing-extensions" }, ] @@ -5042,13 +5076,13 @@ name = "onnxruntime" version = "1.23.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coloredlogs" }, - { name = "flatbuffers" }, + { name = "coloredlogs", marker = "python_full_version < '3.14'" }, + { name = "flatbuffers", marker = "python_full_version < '3.14'" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" } }, - { name = "protobuf" }, - { name = "sympy" }, + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version >= '3.14' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "protobuf", marker = "python_full_version < '3.14'" }, + { name = "sympy", marker = "python_full_version < '3.14'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/35/d6/311b1afea060015b56c742f3531168c1644650767f27ef40062569960587/onnxruntime-1.23.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a7730122afe186a784660f6ec5807138bf9d792fa1df76556b27307ea9ebcbe3", size = 17195934, upload-time = "2025-10-27T23:06:14.143Z" }, @@ -5176,16 +5210,16 @@ resolution-markers = [ "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", ] dependencies = [ - { name = "anyio" }, - { name = "distro" }, - { name = "httpx" }, - { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-test-langchain' or extra == 'group-10-braintrust-test-strands' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, + { name = "anyio", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, + { name = "distro", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, + { name = "httpx", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, + { name = "jiter", version = "0.13.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "jiter", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, - { name = "sniffio" }, - { name = "tqdm" }, - { name = "typing-extensions" }, + { name = "sniffio", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, + { name = "tqdm", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, + { name = "typing-extensions", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ed/59/bdcc6b759b8c42dd73afaf5bf8f902c04b37987a5514dbc1c64dba390fef/openai-2.32.0.tar.gz", hash = "sha256:c54b27a9e4cb8d51f0dd94972ffd1a04437efeb259a9e60d8922b8bd26fe55e0", size = 693286, upload-time = "2026-04-15T22:28:19.434Z" } wheels = [ @@ -5276,16 +5310,16 @@ resolution-markers = [ "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", ] dependencies = [ - { name = "griffelib" }, + { name = "griffelib", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm')" }, { name = "mcp", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm')" }, { name = "openai", version = "2.31.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-openai-agents' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents')" }, { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm')" }, - { name = "requests" }, - { name = "types-requests" }, - { name = "typing-extensions" }, - { name = "websockets" }, + { name = "requests", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm')" }, + { name = "types-requests", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm')" }, + { name = "typing-extensions", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm')" }, + { name = "websockets", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-langchain' or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1d/c9/59c68a3ebf6180c503a37c5265cd32774ec53972d1f7a573199624cd40d2/openai_agents-0.14.5.tar.gz", hash = "sha256:018a9e880450f920fa7c3cd5ae299841f8665f9d1fbce6ef6eb2b807cde24844", size = 5307763, upload-time = "2026-04-23T02:21:20.892Z" } wheels = [ @@ -5310,7 +5344,7 @@ name = "openpyxl" version = "3.1.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "et-xmlfile" }, + { name = "et-xmlfile", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } wheels = [ @@ -5925,8 +5959,8 @@ name = "pdfminer-six" version = "20251230" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "charset-normalizer" }, - { name = "cryptography" }, + { name = "charset-normalizer", marker = "python_full_version < '3.14'" }, + { name = "cryptography", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/46/9a/d79d8fa6d47a0338846bb558b39b9963b8eb2dfedec61867c138c1b17eeb/pdfminer_six-20251230.tar.gz", hash = "sha256:e8f68a14c57e00c2d7276d26519ea64be1b48f91db1cdc776faa80528ca06c1e", size = 8511285, upload-time = "2025-12-30T15:49:13.104Z" } wheels = [ @@ -5938,9 +5972,9 @@ name = "pdfplumber" version = "0.11.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pdfminer-six" }, - { name = "pillow" }, - { name = "pypdfium2" }, + { name = "pdfminer-six", marker = "python_full_version < '3.14'" }, + { name = "pillow", marker = "python_full_version < '3.14'" }, + { name = "pypdfium2", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/37/9ca3519e92a8434eb93be570b131476cc0a4e840bb39c62ddb7813a39d53/pdfplumber-0.11.9.tar.gz", hash = "sha256:481224b678b2bbdbf376e2c39bf914144eef7c3d301b4a28eebf0f7f6109d6dc", size = 102768, upload-time = "2026-01-05T08:10:29.072Z" } wheels = [ @@ -6130,7 +6164,7 @@ name = "portalocker" version = "2.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "pywin32", marker = "python_full_version < '3.14' and sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/f8/969e6f280201b40b31bcb62843c619f343dcc351dff83a5891530c9dd60e/portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51", size = 20183, upload-time = "2023-01-18T23:36:14.436Z" } wheels = [ @@ -6142,11 +6176,11 @@ name = "posthog" version = "5.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "backoff" }, - { name = "distro" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "six" }, + { name = "backoff", marker = "python_full_version < '3.14'" }, + { name = "distro", marker = "python_full_version < '3.14'" }, + { name = "python-dateutil", marker = "python_full_version < '3.14'" }, + { name = "requests", marker = "python_full_version < '3.14'" }, + { name = "six", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/48/20/60ae67bb9d82f00427946218d49e2e7e80fb41c15dc5019482289ec9ce8d/posthog-5.4.0.tar.gz", hash = "sha256:701669261b8d07cdde0276e5bc096b87f9e200e3b9589c5ebff14df658c5893c", size = 88076, upload-time = "2025-06-20T23:19:23.485Z" } wheels = [ @@ -6763,11 +6797,11 @@ cli = [ { name = "prompt-toolkit" }, { name = "pyperclip" }, { name = "pyyaml" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, ] cohere = [ - { name = "cohere", version = "5.21.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "cohere", version = "6.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "cohere", version = "6.1.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten'" }, ] evals = [ { name = "pydantic-evals" }, @@ -7104,7 +7138,8 @@ dependencies = [ { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "pydantic-ai-slim" }, { name = "pyyaml" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/64/dd/109412f597d278ac2ac19c9bae27ce2916b2db8382539849b92e32231220/pydantic_evals-1.75.0.tar.gz", hash = "sha256:789ef1a52af6bf5b7a2ad48490f04925f59ebccb5844ae795b94d190a6f5927e", size = 65846, upload-time = "2026-04-01T00:38:24.498Z" } wheels = [ @@ -7763,8 +7798,8 @@ name = "requests-oauthlib" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "oauthlib" }, - { name = "requests" }, + { name = "oauthlib", marker = "python_full_version < '3.14'" }, + { name = "requests", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } wheels = [ @@ -7788,9 +7823,6 @@ name = "rich" version = "14.3.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", @@ -7803,8 +7835,8 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "markdown-it-py", marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "pygments", marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "markdown-it-py", marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pygments", marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e9/67/cae617f1351490c25a4b8ac3b8b63a4dda609295d8222bad12242dfdc629/rich-14.3.4.tar.gz", hash = "sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9", size = 230524, upload-time = "2026-04-11T02:57:45.419Z" } wheels = [ @@ -7816,13 +7848,37 @@ name = "rich" version = "15.0.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version < '3.11'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-pydantic-ai-logfire' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-pydantic-ai-logfire' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-pydantic-ai-logfire' and extra != 'group-10-braintrust-test-strands'", + "python_full_version >= '3.12' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version == '3.11.*' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", + "python_full_version < '3.11' and extra != 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-langchain' and extra != 'group-10-braintrust-test-litellm' and extra != 'group-10-braintrust-test-openai-agents' and extra != 'group-10-braintrust-test-strands'", ] dependencies = [ - { name = "markdown-it-py", marker = "extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-crewai' or extra == 'group-10-braintrust-test-langchain' or extra == 'group-10-braintrust-test-litellm' or extra == 'group-10-braintrust-test-openai-agents' or extra == 'group-10-braintrust-test-pydantic-ai-logfire' or extra == 'group-10-braintrust-test-strands' or extra != 'group-10-braintrust-lint'" }, - { name = "pygments", marker = "extra == 'group-10-braintrust-test-agentscope' or extra == 'group-10-braintrust-test-agno' or extra == 'group-10-braintrust-test-crewai' or extra == 'group-10-braintrust-test-langchain' or extra == 'group-10-braintrust-test-litellm' or extra == 'group-10-braintrust-test-openai-agents' or extra == 'group-10-braintrust-test-pydantic-ai-logfire' or extra == 'group-10-braintrust-test-strands' or extra != 'group-10-braintrust-lint'" }, + { name = "markdown-it-py", marker = "python_full_version >= '3.14' or extra != 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pygments", marker = "python_full_version >= '3.14' or extra != 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } wheels = [ @@ -7835,7 +7891,8 @@ version = "1.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docutils" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" } }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bc/6d/a506aaa4a9eaa945ed8ab2b7347859f53593864289853c5d6d62b77246e0/rich_rst-1.3.2.tar.gz", hash = "sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4", size = 14936, upload-time = "2025-10-14T16:49:45.332Z" } wheels = [ @@ -8295,7 +8352,7 @@ name = "sympy" version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mpmath" }, + { name = "mpmath", marker = "python_full_version < '3.14'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } wheels = [ @@ -8586,7 +8643,8 @@ resolution-markers = [ dependencies = [ { name = "annotated-doc", marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "click", version = "8.3.3", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, - { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "14.3.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "rich", version = "15.0.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, { name = "shellingham", marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/83/b8/9ebb531b6c2d377af08ac6746a5df3425b21853a5d2260876919b58a2a4a/typer-0.24.2.tar.gz", hash = "sha256:ec070dcfca1408e85ee203c6365001e818c3b7fffe686fd07ff2d68095ca0480", size = 119849, upload-time = "2026-04-22T17:45:34.413Z" } @@ -8841,13 +8899,13 @@ wheels = [ [package.optional-dependencies] standard = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "httptools" }, - { name = "python-dotenv", version = "1.2.2", source = { registry = "https://pypi.org/simple" } }, - { name = "pyyaml" }, - { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, - { name = "watchfiles" }, - { name = "websockets" }, + { name = "colorama", marker = "python_full_version < '3.14' and sys_platform == 'win32'" }, + { name = "httptools", marker = "python_full_version < '3.14'" }, + { name = "python-dotenv", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "pyyaml", marker = "python_full_version < '3.14'" }, + { name = "uvloop", marker = "python_full_version < '3.14' and platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, + { name = "watchfiles", marker = "python_full_version < '3.14'" }, + { name = "websockets", marker = "python_full_version < '3.14'" }, ] [[package]] From 3bc7e1d50eeb6921e6f2ccb8f387b29adb354059 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 27 Apr 2026 16:10:10 -0400 Subject: [PATCH 06/13] test: record llamaindex cassettes --- .../cassettes/0.13.0/test_async_llm_chat.yaml | 108 +++ .../0.13.0/test_async_llm_complete.yaml | 109 ++++ .../cassettes/0.13.0/test_embedding.yaml | 98 +++ .../cassettes/0.13.0/test_llm_chat.yaml | 109 ++++ .../0.13.0/test_llm_chat_metrics.yaml | 108 +++ .../cassettes/0.13.0/test_llm_complete.yaml | 109 ++++ .../cassettes/0.13.0/test_query_engine.yaml | 308 +++++++++ .../cassettes/latest/test_async_llm_chat.yaml | 108 +++ .../latest/test_async_llm_complete.yaml | 109 ++++ .../cassettes/latest/test_embedding.yaml | 194 ++++++ .../cassettes/latest/test_llm_chat.yaml | 216 ++++++ .../latest/test_llm_chat_metrics.yaml | 214 ++++++ .../cassettes/latest/test_llm_complete.yaml | 216 ++++++ .../cassettes/latest/test_query_engine.yaml | 614 ++++++++++++++++++ .../llamaindex/test_llamaindex.py | 9 +- 15 files changed, 2624 insertions(+), 5 deletions(-) create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_chat.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_complete.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_embedding.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_complete.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_query_engine.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_chat.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_complete.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_embedding.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_complete.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_query_engine.yaml diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_chat.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_chat.yaml new file mode 100644 index 00000000..3d4133fb --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_chat.yaml @@ -0,0 +1,108 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '107' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - AsyncOpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - async:asyncio + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXgzDrRYSWAgIsCaDSh9YR44sVv\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320504,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3075808c288bf1-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:24 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '398' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=mjyBnpKLMI5D5WS40p8E1mQN7oHy_1jBrgFsvBqOkjU-1777320504.4091883-1.0.1.1-lvUez.SCj3y88biMJrRYWMfbn_h5skCWrne3feI6DevrpBzvCwQfRad2AqWQTlIlJGR8UqIBJcFH2PkX1uwo5ovDaUM9LSE6FCmq8vFh7NoyYLXP60YPb3h3qHmvY9Up; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:24 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999995' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_a9760521835e41508e5577e15c0dc217 + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_complete.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_complete.yaml new file mode 100644 index 00000000..7d422722 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_async_llm_complete.yaml @@ -0,0 +1,109 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"What is 2+2? Answer with just the + number."}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '139' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - AsyncOpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - async:asyncio + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXfWx4wLvRTTbDwT4aYxE16VLi1\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320503,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"4\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 20,\n \"completion_tokens\": + 1,\n \"total_tokens\": 21,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_95c773cefe\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f30757b89474b56-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:23 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '807' + openai-organization: + - braintrust-data + openai-processing-ms: + - '298' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=Z1H21QeOBc5MN5OPwV78HGNSVsdkZ7k2Dz7729JQb4E-1777320503.6097643-1.0.1.1-YDKDOkUoACtCFMil6JFNS7DCb7I9_Pj6yHrgA9M.J3D6o8e0_7wAotsHBbUDSNkJz3dlky.WUcftNVJxarpSU4Uvjw7M7YaTy74jCXMucnCkgJgVHdEfqg_ZGYAz78cC; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:23 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999987' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_de7aefdec129478bb854cea81ffebe5c + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_embedding.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_embedding.yaml new file mode 100644 index 00000000..db47e3b4 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_embedding.yaml @@ -0,0 +1,98 @@ +interactions: +- request: + body: '{"input":["Hello world"],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '85' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AEAMuwAASb0AgKs8AGAAPQDgOb0AINi8ACDtvAAAdz0AwNK8AMByvABAfTwA4PW8AMCmvADgCL0AoNM8AKBpPABgj70AIEs8AGByPABASD0AwKk8AGARvAAgeLwAQIi8AGDUPAAgObsA4Me8AADHPABg7ToAQGS9ACC9PABgOr0AIA68ACBJOwBglTsA4O46AKDaPAAAJjwAQEW8AEA8vABAdLwAoL28AEDQPADAFj0AgBG9AECuPABAgb0AgCU9AEBbPQAgfD0AAAq9ACDauwDg0DwAgOA9ACCZuwDAIb0AYOk7ACBTPQAA2LwAQOQ8AED5PACgqDwAYI08ACBKPABgijoAIOg7AOAXvQDAwDwA4C68AEAnPQCACLsAYAA9ACAvvQDg3bsAoEG9ACCyvAAAO70AQIc6AEDMOACAQr0AAAe9AADAPACgWL0AQGa9AMC4vABAlDwAABO9AICbOgAAxbsAgKK8AEA4PABggDoAgKS8AAA5PQCgKT0AYLQ7AADvuwBgID0AwHQ9AAAOvACg5DwAwMS8AEDXPABgg7wAQBE8AEBAPACAFrkAID29ACDNvAAAlzsAwOW9AOB7vACAXDwAoP+8ACCpOwBgBz0AwKY9AEBrvQDAjTwAQIu9AKCqPACgMzsAwJC8AOBvvQCgbb0AQNi8ACAsvADAGT0A4Cq9AMDqOwCA7TwAYNs8AKCGPADA2LsAoEC9AEBRPAAAEr0AwLu8AAANvQAAIz0AQFw9ACBRvQCAMjsAICy9AGBhuwAgLL0AAAe7AEAHPQBAvrwAALg7AMAzPQDgbz0AgG29AOB6PACg8DwAgO+7AKAQPQCAD70A4DW8AEDyOwDgojwAoAI9AAAWvQBAhLwAoDq8AOBlOwCA/roAAIc7AIBDvQBg6DsAYI08AGBnPAAgvbwAQGa9AABevABgdjwAII88AOBWvQBAL7wAoCa9ACAqPQDggD0A4KU7AGCfPACAIb0AgGO8AECMOwAAqjwAgHa7AIDIPAAAR70A4Gg9AIDMPAAgc7wA4J08ACAcvQCglj0AYCY8AEAOvACAAT0AoGi8AAAqOwDA9LwAQGe8AIAMvQCAdb0AgAk8ACCbPQBASrwAgC+9AICTPQAgnrwAAMi8ACDduAAgCb0A4Pi7AGDRPAAghTwAgIu7AOAkvQBANL0AQJA9AMCYPQCguTsAQP08AKBwPADg5zsA4Ki7AGAfPQAAJDwAwIM8AABOPABgozwAQA69AOC9OgCAx7sAwB09AICmvAAAaLwAIH87AKBLvQDAAToAIJ88AEAVPQAALj0AgFq8AGAHvQBgT70AAHs8AKD1PABgjDwAQB89AMCmOwDgNTwAoA49AGAfOgDgDrwA4J07AOB0PQBAc7wAALm8AABKvQDgjrwAANe8AGCsvACgYrwAwMk6AABFuwAAKTwAQB69AMBRPQAAPrwAQII9ACCwvADABToAoMA8AIAkvABgSbwA4CO9AEAXPQCA67wAoCW8AMBCvADgNT0AQIK9ACCvugDAZj0AQJW8AOCIPADg67oAwIw8AKA5PQCgAj0AQEW8AEAWPABgUzwAwAE8AGCNvACA8DwAAL+8AMCYPQBACbwAgJA8AEB1PABAIbwAQA09AEDBPABgU70AwIs9AGCQPACADb0AwJM7AAA+PQCgyrwAoKK7AGAEvQDAk7sA4B29ACAovAAAP70AgOY8AABdvQAghLsAAHM7AODaPABAB7wAAFw9AAAZuwAAELwAAKi7AKB0PAAADL0A4E+8AMANPAAA4LoA4Fm8AGD9vABAOj0AwIq8AIBDPQDggbwAoKS8ACDuOwAAN7wAQCE8AEAVvABgIj0AwCO9AACaOwBgFjsAwOi6AMCBPADAVzwA4Fy8AKAKvACgr7wAQBg9ACCTvADATroAAMk8AEBtvAAgrLwA4NA6AMAcugBAUT0AgIU7AGCVvABga70AYNE6AAAdPQDAg7sAIP47AEABPQCAM7wA4Ay9AKDdvAAAWjwAAMO7ACBGPQCAHrwAQNc8AGC/uwDgiLwAQFW8ACA2PAAgi7wAwIA8AMBePACg2DoA4Fe6AGBePQCAT7wAYMg8ACAlPADADTwAwDq8AOACuwBgorwA4Ky7ACBivQCgNj0A4Ca9ACDoPACgjjwAAIS9AKA6vQCg5bsAYEA9AGClPADg4LwAwEs8AMApvQCgBz0AwPA8ACDsvADgArwAYFC8AAAJvQAg0zsAoHI8AIBOOwBgET0AwJa8AADdPACAMbwAwDQ9AEA8PQCg/LwA4Js6AGCIvQCAbbwA4FG8AKC0vACAdjwAwKq6ACAyvQCAcrwAYAC8ACAxPQDgmDwAwEQ8ACA2PACAu7sAoHO8AGAPvABgN70A4Am8AOAavADgDL0AYAG8ACCfPABgiL0AYGw8AOCUPADAn7sA4Fw8AMA2PADgILsAAGO8AGAKPQDgw7sAgFG7AKBVvQCgTT0AgHw8AKBavAAAi7sAoPU7ACDduwBAJr0AgFC8AIBrOwCAnDwAAFe8AED+vACAxbsAoPm8AMAVPADA3bwAQFi7AKBcPAAAErwA4Pg7AIDsOwBA5jsAAK09AOCEvQDg2ToAoBu9AMCIvADgsrwA4Ho9AADtPAAAqLwAAIg6AKAyvQBA2TsAINO8AEB1PADAO70AwJ47AABOvACAQbwAgME3AIA2PQBAobwAwCi9ACDavADA2TwAIM+8AAAcvQDASjwAQNQ6AGCEvAAARjwAQBO8AKAcOwAAmTwAIB68AIDMvAAgQzwAwBA9AECcvAAgBb0AIJ48AGArPADgBb0AQCu8AEBvuQCg2zwAALM7AKAXuwBgzTwA4OS7AIC2vABggbwAQLu6AEA8PAAAhbsA4Oa8AKA8PAAAoDwAYOo8AIAmPACAw7wAwAI8AMD/PACgPDwAQNW7AOAdPQCAsDsAgMS8AIC6vADAW7wA4AY9AICtuwBAt7wAQEW8AKABvACgKT0AILQ8ACAWOgBgwTwA4CE8AKA0OwDgAD0AYKq8AEAovQBgyrwAQB+9AGByvAAg4rwAIOW8AMChvACAhDsAYCA7ACCHPABgzDwAYBM8AGDtuwAAl7wAAL28AMDJvABAvDwA4Hy9AMBwPQDAiTwAILc8AKDYPADAwrwAQCc8AEAXPACgBT0AgL48ACB5vABg67wAANO6AECZugDAIb0AAEY8AIBOPACgyDsAAPo7AKBJvQCAhzwAQMe8AODOvACgKrwAwOY7AADwvACgBL0AYBw9AKAXvAAAOb0A4IK8AOABPQCgT7wAgJg7AECEuwAAo7wAoD68AGCGvQCA+DsAANA8AADIOQCAUTwAoE27AIDLuwCgCLwAgJk8AOATPQCAhDwAAJg8AABHvADgJbwAYHS7ACB4OwDgzrsAgD28AMDyvADAGT0AIFM7AEDUPAAA1LwAgEY9AOCrPADAjzwAgFM8AKDbOwCA6LsAoGY8AOCZPADA0DwA4BO8AGDPPADAsTsAoOe8AOCTvABgzLwAwPs7AGCDvAAgbT0AgGG8AIA2vACAvbwAgNi7AABMvADA8zwAQKu7AECHugDgdTsAAPW6AGAiPQDgh7sAAD89AADluwCgHbwA4D+9AKDQuwCgCL0AQNo7ACD5PABgJ70AQBO9AAAdPABAajwAgF88AGCWPAAgELsA4EO7AODgvACAiLwAgEs8AEDHPACgE7sAoOu8AEBWPABgeDoAYD28AABmvQDg6DwAAGe8AIBgvADA2TsAYC47AMAuvABAOTsAYM88AKAIPQDg2DoAgNW8AIAxvADgVbwAoMe7AIBSvQCAzDsAgBq8AMBEvQAAejwAwBo8AKA4vQDAdDwAoFm8ACBqOwCgM7wAIAW8AMAZPACgxbwAQOs8ACCVPACgwTwA4Ii8ACDWPADAAD0AQMw6AEB/uwAgTb0AgCq8AADOuwAACb0AIFC8AMBgPAAAiDwAABI9AEBSuwDgm7wAwL87AICQPAAg47wAQNE6AOCNOwAgVTwAoM28AMANvADAFDwAIBq9AEB7OwBAHToAAP67AKDPPAAA07sAYLU8AGABvACgJz0AAJu8ACA6PACAvTwAAKc7ACCcugAguTsAgCk9AKBOvADgKDwA4NU7AEDBuQBgHrwAoB+9AACvOwBgAb0AoAy7AKAavQAgrjsAQNG8AECIvAAg4DsAYBq9AKDTOwCglzwAAKA8AOAgvQAAsLwA4PW8ACBCvAAA+LwAYD+7ACBmPQAgVrwAQCm9AIAqPADgn7sAAEo8AED0vABA/DwAQMs8AAAFOwDgSrwAgAa8AEAZPAAA7LsAALm7AODSOwCgYz0AgIG8AOCnOwBAO7wAwE69AGBYPABgjrwAQBY8AAB6PACAUDwAgCq7AAAivQBgHL0AQIA9AOCaPABgk7wAoOk8AMBLPADgu7wA4GK8AABmPADA6rsAgC28AIBRPACALj0AwCA7AGDGvAAA7rwAIMO8AKCFPACAGrwAoEY8AEBOvABgcz0AoNe7AECLPADADLwAoD27AEDMPABgGrwAQM28AOD8PABglLwAIBK9AAAzPAAgOL0A4Eu7AIAdugAAJ70A4Be8AIA4PQDAhTwAwE48AGC/PACAybwA4OM7AOBmOgAACT0AIAM9AEC6PAAAxjoAQFm8AMDdvABg/DwAgD09AGCBvQDg2TwAgKi8ACBivACgrTwA4Ew8AODUOwAAS7wAILm8ACAyvAAAhbsAQKI8AEB+PADgkLsAACM6ACBvOwBAjjsAwPm7AADDOwCAujsAgCG7AKAUPQBg1DsAAKk8AGDAuwBAe7wAAA68AADgPACAyDsAgCq7AGDCugAAhzsA4DI8AACBOwCgR7sAAEO9AODDPAAAxTsA4D89AGByOwBgzroAwMg8AADDPAAg8rkAwKO8AOAdvQAAmLwAgHY8AMBIvADAYzwAICu9AICNPQBAWjwAgNc7ACAbPQAAejwAAOm8AMCWPADANzwA4JK8AGA7vQCACD0AIH68AKBnvABg87wAwH88AEA5PADgyDsA4I49AIB8PADAuDoAACa7AADJugBA+LsAoAm8AOCQuwBgOTwAIGG8AAASvQCghjsAoHI9AIAWvACgU7wAAAM6AGAtOwAgULsAoKW8AOB2ugCgFbwAoIG8AGAvvQDAmbwAwIG6AGByOwAgCjsAIP+7AEAxPQDASjwAIDi8AICTOwCAP7wAwKU8AOAFPQAgfjwAYLM8AGCbPADgaDwAoOO8AEAUvACA47sAYDA8AGDROwDACLwAYBm8AIBTugBgFrwAACC9AADvPABgzzwAQJq8AAC8vAAAMDwAANa8AKAxugBAMT0AoOA8AEC5PAAAkTwA4Lw8AMCEPADgXrsAILw8AKDduwDAFjwA4JE8AOCyPADAwrwAYBo7AABBPADghDwAIDi8AOClPACgdbsAIIa8AICVuwDAmrsAwDm8AAC6vADAaDsAANm7AMCvOwBACDoA4Ao8AMBEPQCgobwAAOc7ACAAuwBg9DwAAKI6AMASPQBg/bwAoNW8AOA9vQAAIbsAgAS8AAASvABgVLsAQJa7AMCyuQAgHroAwCK9AGDHPABA4boAgA+8ACCkvACg5DsAwJ+8AMABOwBgNjwAwK08AADTPABgTrsAID28AEAcPACALr0AYP28AGBUvQBgjTsAINg8AABxvADgNTwAgDk8AMBHPACgIz0AINq8AOBRPACADbwAwBc9ACDMuwAA27wAoD88AID4vACgqDwA4Kk7AIC5ugBAVbwAIHY8AKDWvABgurwAwEm8AKD8PADgPrwA4Lo8ACCbPACASTwAoCU6AEB1vABgObwAQN28AGCBPABgqzwAwN88AEATPQAgurwAIFo8AGAVPQCAHDwA4Ci8AKDmuwCA6DsAQAG8AGBCOwDAxrwAILU8AEABPADgTTsAoGS8AOCguwBg8jwAgNK7AIC3vACAXLwAgFM7AOD9uwBgHTwAANa8AGC+PABg/7sAIDy8AEDWOwBgGT0AoKo8AOA0vQCgTToAYJE8AEB8OwBg4TwAwC+9AODsOwDgNT0AwKS8AMArvADAvrwAQME8AIAJPQBAwbwA4Dc8AOA6vAAgSr0A4AW8AGB7PADACD4AoLe8AODhvACgrTwAQJQ8AMBIuwCAbbwAQAI8AICOuwBgB7wAwN66AADOvABAF70AIPC7AGBNvADAnzwAgKm7ACA2vQDAL7wAwMe8AKCUPACA+LwAgBC8AID8OwAgNzwAQLi8AMCDvABAQLwAwCo8AOBbPQBAGDwAQMc6AEAHPQDgCzwAAIi7AGD3PABgvbwAILW8ACDivACAQzwAYH68AMAKPADgND0AAGa8AGAdvAAAOrwAICM8ACBiuwDg7DgAoEu8AGABvQDgWD0AgH07ACACPACAODwAQAC8AOAIPQBADT0AwGY9AICRuwBg7rsAoA87AEBnPAAgwDwAIHc8AKBGuQBAnrwAIA89AOAkvAAgIT0A4AW8AKCJPABAfDwAoMk8AGCgPAAAGT0AANG8AGDSOQBgg7wAwPk8AKBfvADAQrwAwFY8AMCTPACAljwAgD88AADwOwAgozwAwFO8AADLvAAA8TsAgAU7AADRPADAS7wAALo6AMAEPQDASr0A4JE8AKDROwBAhDwAoHI8AMC9PACAlDsAgLU8AODSuwBgALwAIHw7ACBGvQCAM70AgJ07AMDoOgCAgLwAYBG7ACDUPAAgJz0AIIS9AIDrvABgzbwAYIq6AACyOwAAXz0A4KI8ACB1PAAgqrwAwB49AGCGugAAVz0AoKc8AGA5PQBgWrwAYP67AABpvABAijwAYBE8AKDTOwCgWTwAQCs8AKCPvABADjsA4IY8AKC5OgDAt7wAQDc8AEAivADgXrwAYNs7ACAYPQDAdLwA4AO9AEBcvQAAnbwAQEO8AIBZPACAk7wAANA7AGBFPABADr0AADC7AAAZuwCAwrwA4Bq9ACCQOwBg7jsAAEW7AIAevAAAUDwAoHu8AEDVOgCAtLwAQPe7AEAtPQAgTL0AILW8AAD9PABg3DwAAFq8AODEOwDAGzsAIPI8AOAoPABgOL0AANy8AAAKPQBAKbwAwMC8AKDJPADgkrwAYMm7AIDbuwAgLb0AgBo8AOB6vAAALbsAYJG8AEDXuwCA+7wAQKi8AEBZvQDgHLwAQCe8AACqvACgybwAgC48AKABOwDAZDwAYLc8AGB8vAAACzwAgGG7AGCWvAAgPDwAQAQ9AGDJOwBAxjsAwDM9AMCAPQAAibsAQKU8ACDJuACApTsAQIQ7AGApuwAAFD0AoG+8ACAnvACAezwAAII7AOCmvADAy7wAoIM7AMDOPABAAT0AQJo8AMAsPQBAf7sAwGE8AKCOuwBgITwAQKm7AKA2vACACrwAQNq8AED6uwAAMrwAwGm8AIA2PQBAIj0AQFm8AGA6OwDgHzoAwCM8AKAGPQDgj7wAYA68AKCKvAAA3rsAwIo7AKCDPACgiTwAYH67AIAUvQBgT7wAQL88AED6vABgyDsAYBC9AGA+PQDgqDwAQMe6AOAEPQCAjzsAYAu8AOCtPAAAZbwAwLu8AACwPACAAD0A4PK7AOCsPADAnrwAQJ28AEBevADgjrsAIMc7AKD1OwAgKbsAYD88AOAXvAAA4rwAAG86AOBpPQDgMrsA4M86AEDPPABAiDwAAMQ8AOCsvADgvDwAIAE9AKAIvAAA9rwAYGK6AMDAPAAgmLwA4Aw8AKDfPACgFD0A4Nw7AODFvAAggLwAoBe7AEB0PAAASroAANy8AIA6OwBgCTwA4Ka8ACD0PACAtLwA4BE9AKC5PACgEbkAoFY7AMAWPAAAkjwAILy8AOAKOwBghrwAYOk8AEDjvABgcjwAgIw8AEBZPQBg27wAgIo8AGC6vAAgfLwA4NM8AABaPADgebwAQNk8AEDYPABAKzsAQK08AECMPADgCjwA4Lg8AMDIuwDAorsAgCk8AEDbvACgSzwAgGg8AKBhPADgJL0AIKs8AACgvACgjrwAgC07AODbvACg4bwAQBG9AEBQvABgj7oAIMq8AIAXPQCAq7wAAKu5ACDaPADA57wAICy7ACAZOwAAtjwAwNi8AEByPACA3bwAwLa6AGCuvAAg9zwAoOM7ACC3uwCAkLwAoOc7AKCCOwAAmzwAYOs7AABpuwBAZbwAYMe7","index":0}],"model":"text-embedding-3-small","usage":{"prompt_tokens":2,"total_tokens":2}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f30754d6fcef41f-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:17 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '8344' + openai-organization: + - braintrust-data + openai-processing-ms: + - '903' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=B7xrIKYWfcSwzezlf6tzpu._uGglKHVFPjzizyDjLo0-1777320496.222181-1.0.1.1-9pryZL1HvCq6z328HeNH91C1UZXL2VD0g0sqeWmmkhfPUzoDE7rlBdLt_9iyaZBNBGTSDtn3VhI.5VZH37VdVWTHuSteIGjJ76WjYmuwK.WV0EGJFbp2ANmzgMWPQf6O; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:17 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999998' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_f977a844f9a14ddb893b1c50c2b0ac12 + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat.yaml new file mode 100644 index 00000000..89b85e61 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat.yaml @@ -0,0 +1,109 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What + is the capital of France?"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '187' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXWuS9XOIqbvewaLriRDeAQRkMV\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320494,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 24,\n \"completion_tokens\": 7,\n \"total_tokens\": 31,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_9490d6845c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3075445c91de74-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:15 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '837' + openai-organization: + - braintrust-data + openai-processing-ms: + - '401' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=PADf6TCUOubj9UM9p3t63z0GSPhBkQuImjAfhwqJyHU-1777320494.7733295-1.0.1.1-5uBHEbDX5cKJzKTfu.4J6GDXKcBtaUgOXLAotYZnzHkPoeYsT1a_9vA9hAiuuqA7MNGUzCGr6Dg_ldFwFvcVPjpyRkXQA9n1OlbxfjZvxsyrsLJl_7RYOxX40ZSTqyH5; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:15 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999980' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_3d41515082a649cd8edbc2a5e9a72be1 + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml new file mode 100644 index 00000000..2965588b --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml @@ -0,0 +1,108 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '107' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXXYADHyG1mx1uF6Gt1DcWz4Unw\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320495,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f307547f9f0713b-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:15 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '468' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=E.cn_VKHgI2ZFedl7T0FR5NpA5KZ56jKN2NWQS__7VI-1777320495.3573093-1.0.1.1-4NA4S2aSw0.iTUI2S_3AHt45Mtjw.eqbwqMvFH.LzF0uQd3izXvmS34kTJuuAfIst4po38sKho1MIlvvKDyHf.WJ5BbrD.9WPrdgKdksJrMEyqcAWiDN83vcvgxQeuWu; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:15 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999995' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_591a67412a7646ed897f4563f95b7f77 + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_complete.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_complete.yaml new file mode 100644 index 00000000..ec45bab5 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_complete.yaml @@ -0,0 +1,109 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"What is 2+2? Answer with just the + number."}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '139' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXWYiJFx56CijSBOGErd8f0jUkb\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320494,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"4\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 20,\n \"completion_tokens\": + 1,\n \"total_tokens\": 21,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_95c773cefe\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f307540c9844d63-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:14 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '807' + openai-organization: + - braintrust-data + openai-processing-ms: + - '355' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=y4Lz8kZrh3HXmWAYb0T7dsdHMq98dL8f_ZgkWs17IK8-1777320494.2009907-1.0.1.1-lbJjwJ7eaUX6sP6GXdyMwSwQjEGM_bkTo3SdGtY9dSx_QTxwLO4mrFY0Q_6muyaDGyyUtBUTBpIlSRlRE6J1wD5mo4Gew9U4AF9uaCS16oGPkGwDb7F4DpFCw1zqCWRC; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:14 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999987' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_d9094c67cc54435181fb1fd4907fde6c + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_query_engine.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_query_engine.yaml new file mode 100644 index 00000000..6757e745 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_query_engine.yaml @@ -0,0 +1,308 @@ +interactions: +- request: + body: '{"input":["The capital of France is Paris. Paris has a population of 2.1 + million.","The Eiffel Tower is located in Paris, France. It was built in 1889."],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '214' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AGCbPAAg1TwAIBc9ACDQuQDgHr0AoIe6AIA7vQDggbwAgAG8AGBQOwBggjwAwBC7AOA2vQDA6zwAgCy8AOAFuwAAxLwA4Is6AOBxPQDA5LwAICa6AGD/OgBgubwAwLM8AEBRPQDgozwAgDW9AIBXPAAglrwAANU8AOC0PACgXLsAYLi8AOArPABAkrwAoJy9AAA5vABg5bwAINI8AIApPABAubsAIBq8AOCWvAAAszwAQBK9AIC/vABAljsAIGi9AKAKvQCA4jwAQEM7AKAevAAgWDwAoEY8AACTuwDgED0AwIM8AID3PADASzwAQJc8AIBHPQBgcDwAYBU9AAASPQDgBjwAIGA8AEAEPACAyzwAYAQ9AIBQPQAAlrsAQD07AECzOgBA9TwAoMy8AEAmvACAg7wAgLm7AEADvQDA0LwAYLa8AMCyuwCg4bwAgAu8AEDPOwAgCL0AQCc8AOBaOwCgSb0AwDC9AKAuvABAuzwA4JM8AADYPACANrwAYJW7AEBCPQBgD7sA4HC9AEAbPQBgIT0AgM48AMDivACgpjoA4Iw8ACBtPABAkrsAIKK7AGAguwCgAr0AoLK8AIDuPACg9DwAoJo8AADEvABgLrwAYJg7AGC4vABAtjwA4Jm8AGAWPQCg0DwAAEK9AOAPPQCAljwAYI68AGCNOgCg7zoAIGs8AIB1uwCAQ7wA4Ge7AICFPAAAfT0A4Js8AKC+uwDABz0AoIS8AEBBOwAg1LkAoGO8AECmvADgHzsAwF89AEASvQAgDr0A4BC9AOAqPQDgvzoAAD69AABSPQCAdLwAAM47ACDzPAAAULsAIFa9AMDtPAAgHTsAQAE9AODQOwAA6LwAgPo8AODmuwDgSLwAQBM8AEB9PACgY70AIAW9AEC9uwBgnbwAIGw7AMCIOwAgjD0AIO28AMBAPAAAxLwAoCm9AKBcPQCAbDoAgF87AKDxvABgqLwAoHU9AEBbvABgiD0AwMG7AGCEOwDASr0AoKU7ACDMPABAjz0A4NO7AEBePQDgq7wAQKG9AIC4OwAg2jwAgCy8AABQtgCAZjoAAME7AMC3PABgUbwAQJi7AKBkvADAfbsAAA68AKAkvQBgpDwAgKI3AMBkvAAApDwAANK7AAC/PACABD0AIG08AKC9vACAOz0AYIQ8AEBmPABAFz0AYL88AMC3PAAADjwAIE69AEBxPQBADD0AgGY8AMDBOwCgrbwA4KM8AMA8vAAg3LkAQDK9AMAIvQAgJbwA4Ag9AKAkPQDAar0AwBU8AAAfvACAmjsAAPY8AGANPAAgcbsAAG67AGCEPABAPT0AwIw8AGCVOgDgJj0AoG28AIAJPQCA4LkA4Ey8AOCqOwDA8DsAgH+7AEA2vQDgrDsAABC8AEBLPABAxTsAQFW8AIBsvABgpbsAoFm8AIAEPABgibwAwJi8AMBtvADAz7wAQL48ACDcugAgnb0AIAA9AECnPAAgkzsAILa8AIDfuwBAWLwAoFI9AIAjPADAGz0AQIE6ACAqvADgSz0AwAE7AIDWvACA8jwAwOs8AEBGvAAggr0AgFS5AACFvADASLwAwJk7AGCfvACgCTwAICa8AIBFvAAAbjwAgFq8AMDOPAAgEL0AYOY8AECwvACAtz0AQMo8AEA0uwAgKL0AoDq9AGAoPQDg5bwAoA+9AADxPADA4bwA4L07AEDzPADApTwAAIU7AKBpOwCgPbsAwFw7AEASvQBg0DwAQKe8AODxPADgbrwAoFQ8AGCKPABgMj0AQIS7AICoPABAZ7wAgAS8AMDEOwDg5DwAYBa7AIAouwAgr7wA4BU9AMD5vAAgID0AQAw8AOAFvQDAJT0A4FU8AAASPQAAwLwAgLa8AACyvACg4bwA4Nk8AEC2vACgajwAwEI9ACA6PACgFb0A4Lo8AGATvQBgK70AIK28AKARvQDATL0AoMa7AMA9vQDgIT0AoKS8AKADPQAAOb0AAL07ACArPQDAZLwAYEI9AGCrvABA7zwAQPw7AEAnvACg2bwAQCy7AICavADAUD0AQDK9AABlPQDgJT0AgO88AEDxvACgHb0AYD88AKAWPQBgAb0AIDM9AKAGPQAAnL0AQD88AOAmPAAAgTwAoJq7AGAhvAAgRj0AYGm9ACCWvABAdL0AQJc9AKDZOwDAiTwAwNW7AKD4PAAA2bsAQMk8ACAnvQAgxrgAgK48AGCIPACANj0AwF89AGCdvABAjDwAgBq9AGCkPAAgHDwAoMC7AKAUPQDAyrsAQM47AOCCvABAp7wAQAO9ACAXPQCAAb0A4Bs9ACBkOgCgADsA4Ac8ACANvAAgDz0A4Ea8AOBmOwBgyjsAAKI7AGAEvQAghrwAAMS7AMA0vABgmTwAYPg8AOADPQAgPLwAACI9AAAivQDASTwAYDa8AIAEvQCgSroAwMs7AIBvOwBAST0AoAA9AGAjuwAACr0AoA09AOC9vADAcrsAQMA8AKDfPAAAEz0AQNI8AMBkvABgxbwAINA7AACbPAAAfjwAoPo8AMDFuwDAt7wAoBa9AKAjPAAgEr0AoFO8AAABvQDAxTwAQHk8AAC1OwDAxb0AgIC9AMDkPADgHT0AoKa8AODqPADAkTwAAAe8AMBBPQDAdLoA4AM9AOAnvQCgKb0AQO86AGDYuwCARL0A4Lm7AEAwPACgnzwAwDc8ACBFPADAXD0AYI49ACAQvACAs7wAoM87ACBJOQBA0jsAQPQ8AIB1uwDgvzsAoNs7ACDXOwAg8TwAIFy8AGAeuwBAPD0AYBw9AAC/OwAgbTwA4Lc8AGCEPACgBL0AINi7AEBHPQCgU70AgCg8AGDmvADgPLsAYFQ8AOA3PABAirwA4Gk8AGBtPQCgrDsAAEU9AGBCPADAP7sAAB+7AMDnvADgq7sAgLA6AIBGPABgo7wAYKu8ACDnvACgarwAAHY9AMBIvACAg7wAoIe8AEDAuwAAjzoAwPi7ACAdPQBgoLwAAI07AADePABAiT0AoKo8AMAcOgDgfDsAIMK7AICvvABAcTsAQOm8AKBVPADAuzwAgIC8AIACvAAgObwAoMA8AGDrvACA97oAwFm7AAAwPQCAUDwAgJQ8ACCbOwCgzLwA4Ea9AGCoPAAAmzwAgAQ8ACBdvADAU70AoFI8AEAqPQDgHDwAwP46ACD/PACg0jwAYAE9AEDmvAAAIb0AIKI7AADGvABgvzwAwMe8AOACvQCgBj0AYLK8AGDhugBgb7wAgF89AABzugAAlboAgNe8AEDMPADg7jwAgAI8ACCPPADgqTwAoAM8AACfOwBg6TwAgD48AGAEPQAgrLwAwBA7AMCOvAAgcDwAgOI7AIC7PABgqLwAoKS8AKBVvADgrTwAgIM8AGAkPQBg47wAYEq9ACCCugAAEzwA4CY8ACCmvAAANz0AQP88AOCavADAhLwAYCC8AOBCPACAXDwAAFI9AMBAPABAuLwAYBU8AMBkPABAXrwAAL67AOBQOgCAzjwAIKI8AIAwPADgn7wAIII9AOCavACAkLsAoN08ACBivADAWLwAQKY8ACBdvAAAszwAAMo8AMDuPADgSLwAoMm8ACCsPABgGz0A4Iu8AAB6vACghLwAYIu7AEDROQCAGDwAAC09AKDkPACgJb0AYMs8AOCkOQCApjwAwPA5AOCVPACAnTwAgMq8AGCvvAAgTrwAIPQ5AIBGPQDAyzwAAEm9ACACPABgDTwAoJO7ACDLOgAAzbwAgEk8AADHvACArDwA4O64ACDOPACgBLwAYGi7AMCyPAAgIbwA4Ha8AIAUvQDgaLwAwHW8AODZuwAgpDwAYFK7AODcuwDgDjwAgJ87AGDoOQBAAjwAICm8AAA2vACA+DwAwNU7AAB2PAAg5zoAgKk8AKA0vAAAwbkAIPa8AGCNvABARzsA4Gw8AMDHPACARbwAAH68AABYvQCgFDwAwMS8AKBAvACADLwAgD29AGAVPQBAET0AYLO7AICFvAAAqrwAwJ68AAAxvQAAsLoAQLU8AIAsPADAPj0AACw4AKA9PABAlLwAIFU8AOAcvQBgkTwAwOg7AID6vADARLsAQMo8AAC9vABATTwAoCg8AMAKvQAgT7sAoG+9AEAyPAAAC70AIHA7AGAVPAAg/7wAAJm9AOCavADA3rwAYKy8AEANvABgULwA4Fy8AMDnPADgyLwAQKC8AKBUPQBgmbwAgFa8AIDxvACg5TwA4L+8AMA4uQBAlTwA4E+8AKCtvACAiz0AAKW8AEDGOwDAJb0AADW8AOAGvAAAqDwAIEu8AOD9OwAAxDwAQOe8ACBCOwBgVTwAQPa8AIDovADAT70AwAe8ACDkvACAOj0AAL46AOBMPADAq7wA4Co9AEDCugDgDzwAAHw4AEDGvABg47wAYAs9AIAGvQCgzTwAAAc9AMCBOwDgSzwAAKe8AACwPABAFr0AIG88AOAsvACgDTsAIMU8AICVvADgajwAIEk8AKAIOwDgjD0AwDg8AMAuvQBgLzwAwE48ACCZPABgkDwAACc8AIDwPACAOr0AQIw8AOD3vACAcrwAYGq8AEA2PQBggjsAQIg8AGBEPQAAcLsAoJ+8AODsvAAA/bwA4B48AAABOwCAsLcAABe8AGAFvQDgxrwAgF09AICPPACgQLwA4F08AOA3PAAgHrwAoHe7AGCGvACA2bwAQAm9AOAZvQBAJL0AwLE8AGCCuwDAEbwAoKa8ACCqPADgfTwAII+8ACBhPABAYLwAgBM9ACB9vACgbjsAAA69AICyvACAnTwAQHa7ACB0PQBA3rwAAMG8AGDpvADg1zwAYCy8AICEPABAWjwAwIi8AMBDvQBA+jwAwE68AIAIvQAg7jwAIKy8AMBEvACAljwA4Kc9AIAdvQCAOTsAYCU9AIDwvAAgXj0AAIO9AIAfPQDgIbwAYNK8ACBGPQDgrDwAoCO6AGBSPACASDwAoIk6AGCFPADgAz0AoHG7AKB0vADAh7wAIKA8AMAFvQAgeboAIKq8AOC9OwCAGL0AQJU8AKDqOwDAljwAYPk8ACAevADgHD0A4IO7AGCNPQBA+jwAYN88AOCxvABAEr0AwLG8AODLOwAgG7wAYJO8ACCtOgBgfrwAgN27AKBXOwDABj0AwC48AGCWPACAzzsAgGu8AKAsvQBg3jwA4Pc8AICXOwBA5LsA4KO8AKDDPAAAcTwAwNA7AGAvvQAgHD0AQKY8AKDgPADAmzwA4Jg7AKAFvQDgNrwAALI8ACBFuwBAGTwAoC29AGAhOwDgOjwAYNC7AEA2PQBgwjwAoBq8ACBGuwAgpzsAIAy8AGBoPADA/zsAwBI9AGAPvQDgeb0AgLo8AADYPAAAzLwAAAa8AIDEvACAi7wAwLE7AABlPAAgGL0AgAo7AACZvABAML0AABY8AKAQvABAoDwAAPU8AEDGPADgK7wAwI68AMBBvAAgvDsAYHu8AGA8PADABzwAgC+9AGAIOwCgZzwAwM46ACDrPADgg7oAgFa8AKBfvAAAhz0AwCe8AMC4PAAgMbwAoP67AED8vADg1bsAAIq8AGBEvAAAFr0AYNy8AICpPABgkDwA4CM8AACZvABgjToAAJu8AOA3vQCA/DsAoIo8AIAvvQCgK70AgEW9AOAlvQDgvzsAYDY8AABoPADAWD0AAOU8ACAfuwDAML0AQK08AEDFPAAAgrwAIAK8AKD0OgCgpDwAwBu8AKAsOwDgkjoAAHS7AIBivACgi7wAoFs8AMAHPQAAMj0AwFg9AICOvADgar0AgJk9ACAQPQAgj7wAYFu9ACDsPACAurwAoI27AEABPABAHT0AwBs9AKBDPABgrrwAQC89AECdPACAEr0AoIG7AMDHPAAgYj0A4EA8AEDbvABAwDwAgAi9AIC0OgDgA70AQAe9AAC8PAAAkDwAgFq8AOAoPADgJzwA4M48AMDhOgBgHbwAYDU9AOCEOwBgjbsAoJC8AODWPADgujwAYKW8AACVvAAAqzkAYJC7AMAtvAAAkjsA4JQ8AIADOwDAlbwAYKI8AAC9OwCAmrwAgBO8AKC1vABgAz0AoAu8AAAevQBAc7wAANA8AGA1PAAgCLsAgK88AGCZOwCgbrwAgIq8AACrPACgtzwAwLW8AADlPABgGzsAYHA8AMCRPAAgBLwAAF88ACA9uwCg5rwAoC48AABSPAAg2jwAwJe8AKBgvABgzjwA4Aw9ACBFvQBAm7sAgFE8AIDHvABAsrwAoBG9AIAjPQBA/zwAoNI8ACDwPADgDj0AIG88AKAovABAzbwA4Ow8AAAkPQDgSLwAQIk8AOAGPQDAB7wAwB69AEC7vACg2zsAoI28AGAXuQCg6TwAQJS8AGDjOwAAlDwAwCK9ACAZvABA2jsAAIi8AGAjPAAgfTsAAEG7AEAkOgBAiLwAoF08AOB2vAAAOTsAoA89AAA/vAAgjDwAYHM7AGAKvQCAjbwA4M47AOATvQDgT7wAgCI9AGBFvABgBzwA4Ok8AKADPADgr7wAYAS8AIAAPQAAUjwAoEa7ACAPvQBA6rwAYFo7AACzvAAgnDwAAAM9AICJvAAACD0AwMq9AMBfvAAAhDwAoAM8AOCcPAAgjLwAwNC7AKC0uwAAcLwAQBG7AOAbPQBgFjwAwJQ7AEAKvQCgDTwAYJ+8AEAHOwAgnzsAQFc8AAA4PACAH7wAAIq8AIAdvQAgMzoAIFe8ACAYvQDAp7wAABg9ACCMOwCg5DwAwAq9AEDGvAAgBrsAQCq8ACBWOwCgj7sAYOU8AGAivADgmTwAwHk8AID9uwCg0TwAwMm8AEBMPACADbsAwLs8AAAePQAAtjwAgLM8AEDavAAArTwAIDk8AEAbPQCgiDwAgPc8AGCzugBAfjwAQFu8AIA4PABACrwAYNS6AICDPAAgQrwA4AG9ACCRPADgobwAgE+7AMCtuwBg7DwAoMM7AEB/vQCgJjsAYDg7AICxPACglzwA4FE6AOAhPQDg6DwAwDa9AECLvABgkzwA4Mg7AICfvABAMr0A4Cq8AMATPABA1bwAQMC8ACAzPAAgRT0AYOw8AMCPPADggz0AgAo8AMB+OwDA3zsAYO27AMCLOQDAgjwAIIO8AOAhPADgtjoAQLa6ACA0vQAgozwA4M47AMAoOwAgQzwAIPA8AIDMvADAC7wAACq9ACDuvAAgITwAwAK9ACB3PABgh7oA4Ea8AAAfvQBgrLsAgKa8AEBLuwAgiTwAgEg8AKARPADgQjwAQAa9AICsvACAFj0AoFM8AADxvACg07wAIJo8ACClvACADL0AYGE8AIAQuwDgZzwA4Ki8AIAOPQAAkLwAYLu8AADFvADglzwAwAO7AACfPADAarsAQH88AGCcvABgODwAYJI8AKCVuwCAhzwAgB89AKAlPABAxzsAYJI8AAA2vQDAdbwA4KG8AKC0vAAAfjwAYPA6AEDMvACAwDwA4N67AGA4vQDgXr0AINQ6AKBtOwDAHD0AYIO7AIC/PADgDjwAADE7AEA5vQCg2TwAgLe8AIDgPACgsbwAIJ48AICaPABA4LwAwAi9AIBGPQAAqzwAIIK8AMAzPQDgMzwAYCM7AAA4PQBAtDwAoKK7AMC0PABALTsAAIq8AIBEOwDg4rwAgDi7AOClvACgDD0AoO88AEDKPAAALTwAADg8ACBIPQCAFbwAQIa8AOCUvAAAmDwAQIO8AAATvAAArjwAoN47AOAZvACAODwA4FE8AGCpPACglzwAgAs9AMAOPQBgY7wAYKg8AMAHPAAAhDwAwJA8AABGvAAAR7wAwBQ6AMD1uwDAw7sAwNU8AMDovABgLbkAYIe7AKAFPADAmzwAQG08ACBevABANroAwEg7ACBJvACguzwAQBq7AKA6ugCADD0AgO88AECRPAAgWbwA4L+8AIApvABgMr0AIKg8AEAxvAAgozsAQEW4AADGvAAgGDwAQDw7AABHOwDgAL0AwLg8ACBsvACAz7oAQOO7AOCSPABgKT0AYCS8AMAcOwDARDwA4P+8AIBEPAAgtDwAwL+6AAB6PABAp7wA4Oe8AEBCPACgKTwAQJY7AECUOwCATbwAYJO8AODgPADgjTwAYK08AOAVvQDA1jwAAAS8AMAcPQBAMz0A4AU8AOAXvQDgIzwAYOc7AGDSvADA9DwAIBE8AICPvABgwbsAAAI9AKB9vAAg8DsAgCY9","index":0},{"object":"embedding","embedding":"AEAqvQBAEr0AAJK8AOA4OgAAPrwA4DE8ACC6vADA2bwAAEq9AMDVOwAgs7sAwPW8AKAEvQAgT7wA4MU8AAADvACAHD0A4I88AOCGPQBgWrwAANG7AICRuwAAM7wAoEC9AOCGPADg0bsAACy9AAApPQBgl7sAgF49ACAVvACACrwA4Eq8AKAYPADAYD0AQDS9AOAWPQCAJb0AoOI6AOByPQCAS7wAwAE8AIByugBgDz0AYFi9AOBGuwCg17wAgEM8ACCtOgAACjwAAM48AECPvACAD70AoFu9ACAHvQCg5zkAIEk9AGD7PACggTwA4N08AMB2PABgKj0AoJo7AMAqvAAgcrwAYGM9AMCavQBgjzwAQKu7AADTOQCAlbwAwJU7AKBAPACgtTwAQI88AOCBOgDAH7wAADU9AEC2uwAgRLsAwIC8AOAFOgAARb0AQLg8AIBvugDAxrwAgCU9AOCvPAAA7jsAYI67AMBgPAAgfDwAYFe7AOCpPACgwDwAoBa9AGDyPACg3TwAwNG8AMA2OwDgEz0A4AA9ACAzugDAWboAAMQ8AEAnPQCgbjsAgLK7ACDfOwAgAb0AICC9AKALPQBgJ7wAQNs7AOABPAAAyDwA4CU9AMCtOwCAXj0AwO48AKCTPABAA7sAgIS9ACBDOgCAdj0AoCK7AKAjPQBg3zsA4Jg8AAARvQDgqLwAQOg5ACCiuwAgFD0AACQ9AKDsvADATj0AIC89ACCIvACAcjwAIHA8AKCsPACgHrwAgJA8AECqPABgAb0AIAC9AIDWuwCgkT0AQCC9AAChPAAAhrwA4Fo9AOBbOwAgV7oAIKe9AGCKvABAqjwAQAU9ACCBPADAXr0AoDE9AAD9vABgGzwAgAY9AKC9PACgkjsAQNS8AECivACgTDwAwEs7AMCKPACgmj0AwCA9AMALPQCgyTwAoBy9AOClPADg7TsAQFW8AEBlvQCgZjoAQBA9AOAHPABAF7wAQFy8AMCHvACgRbwAAOQ6AMAcvAAgKzwAQCO8AAAUPQBAALwAADC9AAASPQCAfLoAgPa8AEBKPQAgM7wAwFG8AABYPQDA/7wAYCq8AKAVPABgvrwAgMA8AKBTvQBg1jwAwDa9AOBpPAAAF70AwJ28AACTvACgOT0AIHc7AEBhvABAnzsAQBM9AAC2PADgizwAgC09AOAsPQBA3joAgBa9AED4OwDgpzkAIMu8AEDiuwBgCT0AwEq7AKB3vQAgLb0AQFW8AKCRvQDAKD0AoP+8AGBVuwCAVL0AALQ8AMDJPADg/jwAwLI8AADpPABAyrwAwKC8AMAtvABgXj0AIDu8AKAGPQCgCT0AwA+9AEBTPAAgB7wAoIY8AIDROwCAz7sAgC69AGDhOgBgurwAQJs8AKAUPACguzsAIM08AMBlvACAbbwAYI88AIAougAAYrwAgC29AGAVPQCAbDsAQCw8AIAUPQBAvLsA4DY8AGAUvACAGr0AYLK8AEAivQBgsrwAAOU8AIAYvQCAiTgAgLO8AIB3OwBg9zsA4LM8ACDmOwCg8DwAYAy8ACDWvACgR70AICK8AACnugDAtDwAoC49ACCIugDA6LsAAE47AGAHvAAgG70AoDI9AADPOwAA/7wA4G09AECMPAAgKD0AIKE6AIAcvACg+DsAoPS8AIDwPABgo70A4LS8AMB/vADAmzwAQBc9ACD9PABgUDwAwPY7AOBSPADgDjwA4CI9AEAqPQDgIz0AoPc8AIAhPQCgy7wAoCQ8ACC5OwDgXjsAIMY7AEAjPQCgijwAoPA8AMC7uwAgdj0AIAU9AKBcPACgtrwAwAu9ACCevADgbjwAwC89AIATvACAwbwA4KQ8AKB3PACgebwAAP68AEArvQBAqLwAoCy9AACPuwDAFb0AgFW8AGDBPABgWL0AwEc6AOBJvQBgEb0AQLk7AIBavABgmr0AoJM7AECGPACgFz0AgDS9AMAXPQAgRb0AgNY8AIAKPACgAL0A4OU8AEBtvACgFTwAwCa8AOAUPQBgM70A4HE7AEDgOwAADjwAQAC9AID3PACA7TwAYAo8AMD2vABg6bwAQAc9AGDIPABgjTwAoGe8AEABPQBg27wAIL48ACACvAAgfzwA4Fo8AIA4PADAjzwAoDW9AKCQPACg8DwA4Ck9AAAFvQCgHb0AIMI7AEDRPAAg4rwA4Di9ACDivADgiDsAgMK8AMC1uwDg7DwAgDw9AAB4vABgCb0AQCo8AKBXPACg2LwAgAo9AEDVugAAr7wAQNW8AMBrOgAAmDwAAEI9AICGPAAA6DwAII+9AICbPACAzDwAAA68AGDXPACgxTwAAM68ACDhvACAvjsAoA89ACDXPAAAH70AwLg7AGBUvQDAAD0AABS9AKBFPQBgGLwAQDc9AOAYvADAAjwA4Mc7AGAauwCgBr0AoBM9AEBDPACAHj0AYAo9AOBNvQAAJzwAwIE9AGB7PACgBjwAQHe7AOCwPAAgqjwAINg8AADiPADgJb0AABG9ACC9vACgVz0AwJe8AKDuPABADz0AwDW8AEBBPQAAlDsAAGq9AGCsvACgNT0AgDo8AKAwvQBgjbwA4F+9AKD0uwDgTr0AAES9AMACPABgdzwAQGQ7AGBGPAAgZTkAQAo8AAAaPAAAUb0AAM28AOCYugAAQz0AQLq8AODpOwCA0jwA4Pc7ACBHvADA8zwAoLi7AOAbPQDg7jwAIPq8AGAwPABAAL0AgM48AGAFOgDAtTwAIBW8AEAHvABABT0AIPU7AMDNvADAfbsAQOY8AIDSvACAGbwAQBs5ACDoOwAAB70A4Bm8ACCIPADAYrwA4GG8AABtvQDgmToAwIQ7AGCCOwBAhbwAAAq9AOCPPABAtLwAIC48AGA5PABgZDwAYJQ8AGDBOwCA1rwAwO88ACBHvADgLzwA4GS9AADLvABgnjwAAHo8AKAMvQAA4joAIHe8AKCHPADABDwAoFe7AABYPACAa7wAAM+7AGBtPQAgMLwAIN88AIDSPABAuDwAIAU9ACApOgDAk7wAYPy8AIDpPABAZT0AwDi8AGBWuwAgKDwAwLs8AOAIvADAqTsAoIu8AOB7PAAgCTsAgIs8ACA+PADgnLsAIIY8AEAePQCAQzwA4DG8AEAOvACgRbsAYJy7AKCEuwDAZ7wAAOm6AGBUPQAA3DsAYD29AABBPABAQLwA4KS8AMAnvQCgdbsA4N+8AMCrvADAkLsAYHk8AGBbPQBgILsAIAy9AAACvQBgsDwAQEa9AKBluwCA1zwAABq7ACCDuwAgoDwAAAk9ACCWOgCA3DwAIIi8AGA3PQCg87wAQH+8AIACvQAgi7wAoFo9ACCGOwDAHb0AQAu8AAAtPQCAkLwAoOs8AIBTuwAA+DwAgJm8AIAdOwAAhboAYPy7AMDUuwDAyrsAwK48AOANPQDANjsAYF68AMCzugCgLzwAQJI9AGAIPQDgnbsAYAY8ACCrPAAAMT0AwOw6AODlPABgjLoAAJm8AICaOwCgXb0AgJs7ACAjvACAWrwAYDU9AGD/ugBgK7wA4Bs9ACDrugBA1DwAwG88AKDTvAAAO7wAINk7AIAovQBgqDsAgN48AGC2vACAUjwAAMK8AICwOgBAibsAAAI9AMCWPABAtrwAAMg7AKBHOgAASTwAIPC8AODTOwAArDkAwLu8ACDEOwBgoTwAIOM8AGAePQDgRD0AQLi8AAB3uQBAyTsAYJu8AEAvvQCAPLwAwDy8ACBYvQAgJb0AQNU7AKAAPQBgjLwAYKG8AECYPABg2zwA4Lm8AEBWvQBgl7wAQMC8AODBOwBAVzsAQAA7AOAouwBglzwA4G28ACDbOwBAHLwAIBy9AKDovACA9LcAoK07AIDEvAAgVT0AQIo7AOBUvQCgcrwAABK9ACD1PADgIz0AoI08AMDEPACAoTwAQJI8AMAtvQAglDwAAAy9AECYvABglLoAYGy8AOCQPQCAET0AgJq7ACCkuwCgMbwAIK05ACCFvABgK7sAILM8ACAJPQCASjwAQJ25AMDXPAAgnTwAIKm6AEBkvADArTwAoME8AMCTvABgtrsAoNY8AIAJvQCAgjsAoIc8AADiOwBAEDwAoIC7ACBEPACgALwAYJC8AIBfPADgvzwAYD87AEBZvAAg97sA4IW6AACUvACAg7wAwIQ8AGAavABAJT0AoMk7AIBJPQAgRDwAYD+8AOAZugCAvTwAoBe8AMC7vAAAn7wAIIc8AGA9vQDg/TwA4O68ACBquwBgibwAYLO7AEDMPADgSL0AACO8AKC/ugAA+zwAIOE7AEAcvQDg6TwA4O28AMBQvACAy7wAYKw8AODSuwDgADwAgBG9AKCbOwDA77sAgKU8ACCVPADgMrwAYEU8AMDsPAAAlLwAgLU8AEC+PABgJD0AoJO6ACAWvQAAqjwAIHO9AKDbuwDA5zsAoH+8AAASvACA0DsAICy8AIACvACAWzwA4A49AIByOwAgIz0AgD08AABHvAAAgjwAIA48AGBvPQDgBb0AQFS7AKAdPQBA5zwAIN86AMCPvACgELsAYM+8AACXPABgUbwA4CI9AKAtPACgjroAQCK9AICovABA1jwAQJG8ACCOPABAgLwAYDK9ACBsvACgf7wAAGs8AKA7vABAQDwAYJU8AOCouwBgj7sAgIY7AOADOwDg1jwA4OA8AAB7vACgi7wAoNW5AADTuwBAqTwAoIq8AADYPACgDL0AQNC7AECDOwDAOTwAwBI8AGCAPABAIT0AIM87AEDTugBAWrsAAIW6AOB/OgCg7LoAYFm8AOC/vACAi7sAQCA9AEA7PQBgBjwAQA47ACAAvQCgRzwAgHY8AOAXvQBgTjwAwOi8AOBjvAAAPLwAgBw9ACAfuwCgnzwAwPI7ACAovQAg2DwAIJ+8AEBvOwCAN70AYA08AKAFPQAgr7sAIFe9AICUPQAAwzwAgGm6AIDUuwBgDLwAoDE8AEArPADgnLwAgLy8AEAoOwCgML0AoGu8AAAFPQCAbjwAABi7AIAFPABgtjwAIJU8AMD9uwBAL7sAAPk7AEAiPQAgej0A4FI8AIBnPAAARLwAABS9AEA+PQBA5rwAgAU8AGBXPABAxrwA4Aw9AIAYvACgmLkAQHE7AGALvADAGb0AYEA8AIBZPQBg6zwAwD09ACAnOwDg0LwAQCy9AMDCuwBgwbwAgJU8AABfvAAA4zwAAE+9AED2OgAg1DwAwHK8AAChPABAobwAYB69AECMvABA3rwAQF89AODtOgAgeTsAAJK8AGDDvADghbwAoBo8AEB/vABg1TsAQKW8ACADPACAhjwAgJo7AEDlvABgCb0A4KY8AGD5vABAmLwAINa7ACAOvQAABroAgH08AADmvAAgH70AoCM9AACLvABAEL0AoKQ7ACCvuwAgnjsAACA9ACCNvACgzrwA4CW8AKAMvABAmzwAIIg8AMANvQAguzwAIKC8AOBAvABgYrsAoFC8AIBhOwBgAbwAgAu8AGD4vAAgsTwAYCi9ACAyPQBgGz0A4EO8AEAHPADACz0AQJM9AAA7vACggzwA4C+6AMAbPQAAajsA4D+8AKCfPADgBz0AYKi7AMAcvQBAc7kAQHq8AEBdPADAlbwAwAu9AICLvACgx7sAQFA8ACBMPACgbT0AgDO7ACCePACgbLwA4Di8AIDZuwCgDb0AgDG9AMD8vACAdzwAQCm9AKCCvABAOrwAgNw7AKC6OgAgJboAYDC9AAC+PABAVzwAQBk9AEC9PABAK7wAAFI9AAAHPQAAgbwAQCa9AMAZPQDgBzsAIK27AMABvQAApLkAQBw9ACCyvAAg3DoAgLY8AIAHPQDA67wAYPy7AKDyPABgEbwAQCU9AOAAvADgDjoAALG8AAAVvAAAi7wAwM+7AOBbvQCgH70AgJE8AAATPABAvjwAoMc8AMBmuwAgwbwAQHc9AGBEPACgEbwAoCK9AGAHPAAA2DoAIBG9AGAJvABgMbsAwBw8AOCcvAAgVLwAYFi9AKA2vQDgbLoA4GY8AMCSPABABr0AoJq8ACBHOQCAsrwAYKo8AGC7uwAgPbsAwLI8AADKPADgRb0AoBe7ACAGPQDgVLwAABm8AIBAPAAgCj0AYIo5ACAjPQBgPLwAIPI8ACCFOwDgh7wAoDk9ACAQuwAAGr0AIN07AKC8vABgCT0AACu8AMC7vAAgXLsAIK08ACBDvQAALb0AwFg8AIA/vQAglroAYMC7AOBuPADg6boAAAg8AECnPACA+TsAILs8AEDjvABAJLwAgA49AGBvPQDgzTwAoBk8AGA1PADANTsAoJ87AEDGvACACj0AYNC8AKC7uwBgOT0AQLu6AOD4vABA+DoAAD+8AADIvADgxTwAALy8AKBxPABgILwAIKk7AAA1vACALrwAoAQ9AGA8PABAPzwAYPQ8AICAOwDgfTwAgIq8AOAkugAgWrwAoMA8AOBqOwBgjjwAoBM7AKDyvADArrsA4Oo8AID7OwAAyrwA4JM7AMDJPABgFL0AgJW8AEASOwCAHjsAgBY9AOCuvABgVTwAICE8AGB5PADgtTsAIB69AOD+OwBA9TsAICw9ACDlvAAgfzwA4J07AKACvQBAZrwA4Ai8AEAMPQCggTsAoBo8AMDVvADgsLwA4Bq7ACDGvADAsrwAAJY8AGAqPQCA5jkA4P07AIAivQCACL0AgJu8ACBVPADgzrwA4E27AIDOOwCgZjwAgI+8AMCPOwDAAT0AoLk8AEDbOgCgBj0A4H48AICougBAu7sAoG89ACDBPAAgzDwAwC+8AEAHPACAdTwAQLw8AKAvPQDAyboAgDO8AMCBugDAMzwAgCi8AED3OQAAtjoAYIM9AMCuvAAARD0AAGQ7AODwOgBA27sAIIG8AMCyOwDA5rwAQN68AIDyOwDgyLwAgHU8ACBePAAgILwAwJW6AOC3OwAgxzsAYDy8AGABOwAgETwAgE29AMAfPQDA+jwAwCa9ACA+uwDAljwA4Lm7AIDPOwAgnbwAgDO8AOBBuwBAcLsAgHq9AGCLPACAXTwAgNO8AOCsOwCAFD0A4C87AEAYvABghrwAYLg8AODiPABAI7wAIIa8AADvvACAP7wAAOS6AGAVvAAgvbwAgAi8AMAWvQBgfrsAwIs8ACB/vQCAOrwAYEi8AKCSPADgezwAAJi8ACALvQDgLT0A4Cw9AGDxuwBg87wA4Ce8AMDJuwDgALsAYAK9ACB5vAAgErwAwIG8AKAqvAAgEDwA4EI7AGDvvABA8rwA4M87AABnuwBAD70AQNA7ACBCuwDAzbwAoNc6AOAmPQDAcLwA4Au8AOBhvAAAXDwAQJu8AACluwBA0jwAQBE8AABJvQDA/bgAwC29AMBRugDgfDwAgLE8AKAHPAAgLzwAgA49AGAEvQDAZ7wAoDW9AGBBPAAgvrkAAAI8ACCkvACAPj0AIHE7AGBVvQBgFbwAoEA9AADouwAAazwAgDo9AKDUPADAj7wAgCa9ACAvuwCAjbwAoMu8AMAKvADg27wAANC7AADkvAAgAzoAIHA8AECXPAAgersAgO28ACCsPQDgcjwAINc7AGCLPQDgBzwAIAA8AEBFPQDA/jwAwI68ACDZvABAuLoAQAS8ACBEPABAgDsAIPI7AIDUOQBA4rsA4Jy8AICVPAAArTsAwFi7AMAFvQAAiToAYA69AADUNgCA6zwAoOq7AGCVOgCglTkAAPe7AAA9OQCgfzwAwFA8AGBuuQBgbDsAoDe9ACAxvABA+jwAYAw8AECTvAAAZrsAYJ48ACCMOwDgCLwAwM48ACAHPACAJTsAwJe8AMCVvACAAjwAgLC7ACB1ugBACL0AwDo8AMCovADgGj0AQIS7AIC/vACg5jwA4Cg8AKDLuwDAVzwAgCi7AAAYvQBAEr0AIKY8AOD/PABAYbsA4K46ACD1vACgcLwAQEs8AGC/OwCg47wA4Ca8AMAPvQDgLDwAQBc9AAC1PACgZrwAwCU8ACBavACAED0AgI48ACAyvACgD7sAoI68AECYPABADD0AoPg7AACCPAAAeDwAAAi9AEAoOwBAaLsAQBA9AEDLPAAg4zsAABQ7AKCQvACAjbwAwLY8AECAPACgTbwA4Os8AKBAvQDAgzwAQAy7AKAivQDAGbwAYKg8AOCaOwAAqrsAQJ47AADZvAAgPzwAgOw7","index":1}],"model":"text-embedding-3-small","usage":{"prompt_tokens":38,"total_tokens":38}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3075587b3b2706-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:18 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '16586' + openai-organization: + - braintrust-data + openai-processing-ms: + - '62' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=cBtdeyJt7tgfqxZRUBwB1_JOS2C_8t4mTlnZAu0uYG8-1777320497.9936202-1.0.1.1-PZ5E6_A.Xc3KfELLA7q8V1W.WpKhiuzW_0DRKrLBAiiumAG5naPnXOmFL7TDF9RG7F_U3tIulJ1i0axW1MAc8vTPGeqhOOYND4Lo898zDYZUVgl70UHoU3VvM39QB9Up; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:18 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999966' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_4110b94fa4e8471aaa299cd45afea012 + status: + code: 200 + message: OK +- request: + body: '{"input":["What is the capital of France?"],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '104' + Content-Type: + - application/json + Cookie: + - __cf_bm=cBtdeyJt7tgfqxZRUBwB1_JOS2C_8t4mTlnZAu0uYG8-1777320497.9936202-1.0.1.1-PZ5E6_A.Xc3KfELLA7q8V1W.WpKhiuzW_0DRKrLBAiiumAG5naPnXOmFL7TDF9RG7F_U3tIulJ1i0axW1MAc8vTPGeqhOOYND4Lo898zDYZUVgl70UHoU3VvM39QB9Up + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AAAsPQDghTwAYPo8AADOPACAurwAwGG7AKCHvACAbzwAgCo8AGAYvADAqDsAYNC8AMB9vQCAWbwAQH68AAC0PABAubsAIKo8AMCVPQDgyLwAoB87AIBOvAAAH70AIEI8AICAPQDAnzsAwDm9AKAGvAAAwToAwBw9AKAsPQCAyLwAYE67AAArPQDgw7wAACe9ACAOvQBAJ70AgJ48AAD1PABAGLsAwEK8AEADPABAUTwAgOC8AMD1vADAILwAQB29AAAHvQDg2jwAwBo9AGCqOwDgCT0A4AY9AECWvAAAvjsA4Mg8AGAoPABgQT0AwFw8AKAYPQAAGrwAgNw8AEBEOwCgbrkAYA49AOCLuwCgFz0A4HY9AEBNPQCgVbwAAJI8AED2uwCAPTsAQBS8AMCSvABAt7sAQAm8AIAEvQBg+bwAIBa9AMBwuAAArbwAwBq8AEAZPACAOL0AwOc8AGD5PAAgwrwAwDi9ACBVOwCAVzwAAMe8AEDrPADgMrwA4KM8AEAGPQCAMTsA4I69AGAuOgCAjzwAgL+8AKD6vADA1DwAoMg8AGAkPQBAkjwAALG7AABvOwAAIr0A4PG8AAAfPABAEjoAQL88AEBFvQCA8rwA4K28AMDRvADg6zwAwMO8AGABPQBAUD0AYEO9AKAmPACAJDwAwGu8AEB1uwBASLsAgBA9AOAavQAgDzwAAO68AIDGPACgCj0AwAI9AOCIPAAg+zwA4I68AGClvADAEDwAQMU7ACBmPADguzwAQGk7AMDRvADgWbwAoCS9AOAxPQDAHTwA4Cm9AAAwPQAAwLwAgIq7AICAPACgVLsAoBu9AGBnvACAqjwAYKY7AEAxPQDAI70AAFM9ACAlvQCgj7sAAEE8AOD2PACAEr0AwKy8AGAdPABAeLsAgNW8AKDPOwDAXj0AQLc8AMADPQBA1bwAoES9AIAqPQBgn7oA4Ji8AKDkvACA5bwAADs8AKAaPABgfz0AAAI9AMArvACgybwA4Gm8AABGPABAGD0A4KG8AMB8PQDAArwAQDS9AKCtPABgDj0AYEQ8AOBQPAAABbwAgJW8AECsPACgJ7wAAIQ8ACChvAAA4zwAgD+8AIBKvABAgrwAgDi8AGABuQDAp7sAgMy8ACCCOwBgOzoA4M08AOANugBALTwA4LE7ACDCPACAxjwAwGk8AKBPOwBgQbwAgGi9ACBCPQBgeT0AQGk8AADkOwDAlrsAYKg8AKAGvQBAjzoA4E68AAADvQCAkDwA4II8AODrPACAEb0A4L48AEATvADgtTwAwO08AMADvACATbwAQMe7AMC2PABAFz0AYKA7AEAsPQCAZj0AYAC8AGCcugCAibsAAK+8AKBlPQBA1LwA4Oy8ACAKvQAgp7wA4BM8AADXOgDAVLsAYHq8AECrPACAfzkAQLm8AKDhvAAgZrwAICe8AMD3OwDgJ7sAQHq8AMALPADgnrwAgIQ8AKCIvAAg/rsAQJC8AKARPQBg3LwAgEE9AEBEvACAKT0AQFW9AIBbugCALj0AwLY8AMBivAAAAj0AALQ8AGChPABAorwAoFS7AKBYugDgNL0AgKy7AIBwOwBg1zwAwB+7ACCrvAAAszwAQNu7AAAtPABALb0AoIQ9AEDDuwAATT0AwFQ9AOAMPAAAHr0A4PW8AIDgPADADr0AwPe7AGA+PQBAZ7wAQO06AGDyPACAxbsAAMA8ACAGPAAA2TwAwPS7AOBeuQDgdjwAAC08AEDSPAAgGL0AoLu8AIBhugBgJTwAIJQ7AAA4vABA1bwAYLK8AEDHOwBgIT0AgPY6AAB3vABgAr0AwDc9AEAZPABACz0AYBw7ACDKvACgsDwAgMo8ACBjPABgCjsAIN68AOAMvADgIbwAoAe8ACDXvAAg/joAgI89AMC+vACAhb0AYB09AOAavQDgSL0AwMO8AOBNvQCAB70AoCu7AKBRPAAgqjsAgKW8AEB1PQCAEL0AwMw7AKBSuwAgr7wAYCg9AKDevABANT0AYL08ACBSPABAlLwAwPa8AMCKvABghzwAwN+8ACB7PQBAZzwAYKg9AAAzvQDgPrwAoAM9AICjuwDgXjwAwAM9ACAaPQCgmb0AYFI7AAD8OwDggzwAINW7AOAcvQCAqDwAoJC8AOABvQAARr0AoJs9AOCUPAAg4DwAgIc7AABPPABgA70AYJi7AEBrvQDAJDwAICW8AOAgOwAgVD0AoIA9AACPvQCguDwAwHi8AIASuwDAgLsAQEC9AKAZPABgyrwAIAK8AICIvAAgRL0A4KI7AMD1PAAghboAwBi7AACQOwCgEDoAICY7AODsuwBABDwAID09AOALvQDgzzwAQJs8AMB8uAAAPDsAwIO8AMAYvQCgkLwA4CA9AEBfPAAgQr0AYD09AOCrvACg/zsAILC8AOCXvADg9rsA4Bg9AADTPADAuT0AgAg8AICIOQCgxTsAgHY9AIA8PAAA6TwAgAk9AGDPPADg3DwAQIM8AAAlvQCgQ70AwAK8AAA4PQAgGjwAwIQ8AIDVvAAAu7wAoG69AKCGPABgXL0AoMK8AIAmvQBgKDwAoB+7AMDNvACArb0AwOu5AEBBOwBAHz0AgPW8AACvPABgMz0AYF28AOCQuwDgv7sAgOc8AGDzuwBgL70AAIS8AICDvAAgYr0AwIK8AIB9PAAguDsAQB88AOAoPQCgeT0AIEk9AMDPPABgwLwAoDe8AIBnPADARb0AAGk8AECUPAAAPbwAwBs8AEDAvADAETwAgNS6AADzvACAzDwAAIs8AKCiuwDAnjsAgOQ8AKABvADADbwAAJe7AGABPQCgYr0AoN47AMCrvACgOrwAgFu5AGAQvAAgsDoAQCO8AKBJPQAglDwAwCw9AGBzugAgOrsAALA7AMBMvABgEb0A4Je8AACcOwCgSL0AIKm8AOAKvQCAqrwAQGc9ACA9vQBgMr0AAKq7AODdOwCg5rwAgIi6AGAuPQAgO7sAoPM8AODkPABAID0AALE7AIBuOwCAjzsAgPI7AKCFOQCARbwAQA29AOCbPABgLD0AgJw8AOBPvADATTwAIC88ACD6vABA+zoAgKS7AAB3PQBgbDwAQB47AIBMPADAXL0AgGO9AOCuPADAbrsAwGo8AECHvACAab0AoKG8AKB9PQAA5jsAYPm7ACAfOwCALTsAINE7AKC8vADgybwAwEK8ACCBOADgwTsAwNK8AOAtvQBAvzwAAGW8AGDXPABg37wAQGA8AGC3OwCgNzwAgIy6AGCrOwBAUjwAAJe7ACArPABAbroAAPQ8AEC2uwBAqDwAQLq7AED3PABg3rwAoA48AECMvABgjjwAQC08AGA9PADgszwAIOu8AEB+vABgqzwAoHm8AOArPAAArbwAYAe9AIDJPAAgHLsAABg8AIAjvQDAMz0AwJk7AGANvAAAojwA4K68AGB4ugCA1zwAYCY9AODnOwAAWrwA4Pc8AKDtPACgoDsAQIo7AACWOwAAtDwAwAA9AECfugAgxbwAAIg9AIDcvABA1bwAIAc9AACNvACgCL0AwG47AGAJvQAgxTsAYFs9AMD1PACAA70AICm7ACC+PADACT0AgAW9AEAsvADA9LsAoDa6AMDPvAAAKjwAADs9AIDWPADgSbwAoB89AGBWuwDgCzwAgKM8AIBNPQBA4jwAwFO8AECDvABgmbsAQMO8AEAlPQDgyTwAIBy9AIAaPQBgWDwA4FY8AOCYPAAA8rsAYEG5AEADvQCAhzsAADs8AAClOwAAJrwAwOC7AIAjPACAGrwAYCq9AIBOvQAA2LwA4M47AIAfuwBgLj0AwEw6AKAhvAAgxTwAQNC8ACDuuwAAF7wAIAe9AEDTvADg6DwAoCg8AECluwBgNDwAQI88AKD6OwAAI7wAoNW8AIAwvABAujsAgIw8AGCMPACgH7sAwDS7AIAxvQCgnzoAYOq8ACDQPAAg1jsA4P68AMAJPQCgSj0AgFO7AGCIvADgtbwAIKW8AOD6vABARTsAgJU8AMDAvACgnzwAAEe8AKDEuwBAgLsAoIe7AMBrvQAAPTkAYDY8AMADvQBAVLwAAAi8AGCovAAASDwA4Oq6AOC7vABAgrwAwLG8AEB+PABADr0AwGK6AAAgPADg5rsAIIW9AABmPACgFL0AQPe8AECQPAAgtzsAID48AADhPAAAALwA4JS8AOCiPQBAX70AQPC7AMC+vADAGTwAwIm7AEC2uwDgz7sAAKY8ACBwvADAKz0AAPW8AGCxOgBgUb0AAP68AIArPADAuTwAQKq8AKByPAAAxjwAwAm9AKATPABAtjwAoKc8AICLvABgKr0AQHW6AMDvvADA7DwAQIo8AIDYuwAg4rwAACM9AGAxPABgtTwAwO07AKDtvABgBb0A4AY9AKCkvABgLj0AQEM9AIAwPADAlzwAYPq7AKDXPAAgObwAQKk8AOB3PACA2jsAID48AIAJvQBAT7sAYJE7AOAPvADg6DwAYAI9AAApvQCAHj0AoNc7AKAjuwAgyDwAYLE7AICdOwDgdrwAoEY9AOA7vQCAS7wAYDa8AGDmPABA4DoAIOE8ACCtPACglbwAgDK8AKCQuwCgB70AAOm7AEBQuwCgu7wAINi8AIAovQBgGL0AQCA9ACBkPABAA70AYIc7AECUPABAxTsAoO48AGCcuwCgBTwAAIC8AOBbvQCAF7wAAFc8AIA/PAAAMbsAwE28AIBUvAAAA7sAANe8AGBeuwDAljwAAOQ8AGDYPAAgZDsAIIO8AIBFvQDANDwAIEq8AEAyPQBgFbwAgB29AGCnvADADT0AYNE8AGBpvABglDwAQLU7AMAAvQCABj0AAEm8ACADvQAgXjwAoKO8AGBdvADAkDwAgIs9AOANvQBgCbwA4FY9AID0vACg+TwA4JK9AKBJPQAgPb0AgD69AODWPAAgazwAwLq7AMAiPQAAmLsAwLM6AMAQvAAgFT0AQKW7AECQvAAgo7wAIPs6ACAAvQBgF7wAoOO8AMCCPABAYzsAgFQ8AED+OwBgdjsAICY9AICCOwCACz0AQCi8AACYPQAASDwAIDo8AMAXvQCAqbwAoIW8AGCXPACArTwAIOS7AIB2PAAgnrwAwCu8AKC3vAAAizwAYPQ6AICyOQCgurwAYKk8AECHvAAA2TwAYL08AGAyPQBgdbwAILq8AEA3vACgZDwAwHi8AEAkvQCAJj0AYE88AAAcPAAgILsAQCk8AKDJOQBgv7oAQIm7AAAxvAAg7jkAAEq8AOAwuwDA7rsAwEG8AGARPQAA/zwAQI88AKCkvABANzwA4Gg6AEBqOwAgO7sAgD89AKAtvQCAdb0A4Bc9AOAuPACgZLwAgCK8AECTvAAgL7wAAL08AOAjvQBAkb0AgA48AOCmvADAFTsAQEK8ACCnvACAvzwAAOY8AACCuwBA27wAoHu8AED4vAAgFjwAoPE7AKAwuwDgpjwAoHq8AKCaOwAgLrwAYKC7AOBZuwBAnbwAgBC8AAAZvQBg3DwAwFG8AABOPACgSzwAQM07AMCpvAAgCTwAoC27AMBNugBACb0AYG28AMC5PADAK7wAYEq6AODePADgDD0AQJq7AGBSvQBAjbwAoDg8AKAAvQBAJL0AIAe9AGCZuwAALbwAAC07AEBsPAAAJT0AQAo8AODcPABABL0AgC+7AGD4PADgyzwAgEs8AIDhuwBAqTwAgP26AABcPABggDwAICc8AIC6vACgAbwAILk7AAAQPQDATjwAYDY9AIAIPACAfbwA4P48AAAKPQCAFb0AwEO9AACtPAAgq7wAwHi8AGAJvAAgezwAQCk9AIADPADghbwAYHI9AIC5PABALLwAgFm8AGApPABAID0AIAg9AEDivADA7TwAwJW8AKBDPABgQLsAYBu9AAAtOQBgDrwAwKG8AECdPACACj0AIBE8AECTPAAAxrwAAK08AGBoPADAHbwAoC68AAAtPACgKD0AIAi9AIAyvQCgVbsAABC7AICjvADAk7wAAEu8AEAVvAAAursAIIU8AGCBPACgk7wAwD66AEC2vAAAGzwAgJ+8AKBzuwCgz7wAIA09AEBgPAAAkrwAgLk8AMD3PADgErwAIN68AACBPACgRz0AYHW7AODLPACgAzwAwAm8AGA+uwBASLwAYDs8AIAfvABg7bsAgKC7AMDaPADAQD0AoNi7AADVOwCAL7sAIFg8ACCAvQAAuLwAQIU7AGCNvACA17sAIIS8AIACPAAgSzwAoJ08AOBnOwAAmTwAwE48AKA2vQCAxbwAoL08AADMPACATrsAYGw7AAA7PQBAaLoA4Ny8AMCNOwBA3DwAAPS8AMDSOgDAfTwAgKK8AKCnOwDgzboAIBm7AEAWPABgtTwAoMO7AOAPPQAgNjwAYLC8AIAQugDAlrwAAOk6AODaPABg2TsAIC49AMBbPAAAAj0AgP25AABXvAAgITwAgAu8AMDZvABg3LsAQB89AACyvADgEz0AQAs9AGBPPAAA77wAABQ8AKBfOwDAAjwAIIy7AGCMvADAJL0AAHA9AIBGvAAAGD0AwJQ7AEB9vAAASzwA4GO9AMD6uwDAQDwAIPQ8AMCzPADgwLsAYGy7AABhvABgoLwAICg6AMB7PQCAFr0AwBE8AMDdvACAGrwAgI28AOB4vADg5LwAQJg8AMD8OwCgsLwAoCs7AAA7vQCA9LwAYL45AKC7vADAj7wAIEc9AID9OwDgEj0AIAe9AMDOvABA27oAwEC7AKBKvADgADsA4I07AIAyOwBAkjsAIFM8AEDbvABgIj0AINe8AEAIPADg9TsAYN48ACAFPQDgJTwAgJ67AOANvQDggDwAYFe7AGBsPQAAqzwAYCA9AEAYPADgBj0AIPA7AEDpvABgDTwAYAG9AGADPQAgLrwAYCC9AIDLPACA/LwA4Lu7ACCPuwDgHD0AgCs8AMDNvAAgLTwA4Ac9AODbPABAi7wAQIm8AIAAPQBgO7wAADq9ACAnuwCAUzsAwAg9AADXuwCAMboAYJy8ACCauwCg1bsAgLG8AOBdPACAFT0A4Fs8AADPPAAAtDwAwAO8AADAvAAAFDwAwIq8AGBJvABg2rsA4Im8AIByPABAgjsAYB27AOBdvAAAOzwAoMI8AOCyvAAANLwAoLs8AGAAvQAAjDwAYES9AMABvACAxTwAgPW8AAAtPQCgCz0AgPc8AGDQvACg67gA4Em9AMAsuwAg+bwAoOs8AMA/PABAszwAAB29AAAGvAAAgDwA4K67AICyvAAAirwAQLo8AEBtvABg97wAIIe8AKDmOwDgzbsAAP87AIBFPACg+rwAIMS8AKALvQBgojwAwMO8AKD7uwAgjLoAAEa8ACAcvADACD0AADs8AACvuwBA0DwA4Ac9AODXOwBgkzwAYKA8AGAHvQBgPbwAwEe8ACC+vAAg7TsAwNy7AGAEvABAOD0AAOQ8AMB5vADARL0AQNQ8AOCyugBgArsA4HU8AKCtPADAWjwAoOS7AOBXvAAgLzwAgB28AAANPACgiLwAQEy8AKBwOwDg47wAoP68AEDNPADAVDwAALi8AIAwPQDA4TsAgKM4AOBIPQCAIj0AwNM7AED9PAAAKr0AQGC8ACBSuwBAtbwAgFO7AGAEvAAAET0AIL48AGCIPABAGjsAABW8AMAqPQAgkLsAABq9AECOvACAZrsAAJW8AKCPPACAMbwAoD08AADWuwAgEboAYHE5AAC7PABgrjwAgGk8AOAbPQAgFrwA4LE8AACYvAAgsDwAQAI8AOALvADgULwA4IU8AICJPADg3LsAQBk9AMD1vACgrTsAYLe8AIDMPAAgOTwA4Ok8AMDavACghrwAwOk7AMDFuwDARzwAgCa8ACCIvABAsTwAIKo8AEAzPACgx7wAQJK8AMCsvABggb0AQPA8AECiPAAA/DsAoEM8AEDdvABAWzsAgA87ACCMPADgJ7wAAIY8AOBRvAAgDLkA4PI7AABWvACgEz0AwAq9AGCouwCATjwAYDy9AECBPADAIzwA4LS7AKApPADgszsAAK28AOCVPAAAGT0A4PW7AACfvACgHr0A4Ko7ACCruwCABT0AoNC7AGAxvQCg4zwAwO28AADUPABARj0AQCU8AODYugAAgbwAQE+8AODPvAAghTwAwPe7AEDjvACA9zsAwDI9AECqvABg6TsAwA89","index":0}],"model":"text-embedding-3-small","usage":{"prompt_tokens":7,"total_tokens":7}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f30755cac6da1e4-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:22 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '8344' + openai-organization: + - braintrust-data + openai-processing-ms: + - '193' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999993' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_bc77ab9b634648e58026c1815998d223 + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are an expert Q&A system that + is trusted around the world.\nAlways answer the query using the provided context + information, and not prior knowledge.\nSome rules to follow:\n1. Never directly + reference the given context in your answer.\n2. Avoid statements like ''Based + on the context, ...'' or ''The context information ...'' or anything along those + lines."},{"role":"user","content":"Context information is below.\n---------------------\nThe + capital of France is Paris. Paris has a population of 2.1 million.\n\nThe Eiffel + Tower is located in Paris, France. It was built in 1889.\n---------------------\nGiven + the context information and not prior knowledge, answer the query.\nQuery: What + is the capital of France?\nAnswer: "}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '826' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXekFLmdLSdAg465aXEn5Rt9l6k\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320502,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 153,\n \"completion_tokens\": 7,\n \"total_tokens\": 160,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_370ba29939\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f30757458753896-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:08:23 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '501' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=JNp1C325KULAxLdDDcHsxvo1ivwdOskWVL5HEwye.Oc-1777320502.458055-1.0.1.1-XgsqyV7Zgmuo4BcPKF34JPQKuqSQhz8U2jxWxvcTZ.3ZSbo72dOHmUmtejbr0UItr6u2WJ5drF3A7rFmYFhPEdKDTrFM39XVPqVpPkgmX0Gkkqzrc1yTkj8oio7IkH4z; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:38:23 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999825' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_65c2c8ff2ee749cebe43341d74d9f74a + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_chat.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_chat.yaml new file mode 100644 index 00000000..8c2d4c78 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_chat.yaml @@ -0,0 +1,108 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '107' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - AsyncOpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - async:asyncio + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXAB4oesrxIlqnnViCLLersRrMY\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320472,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3074b81fbbd5f4-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:52 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '520' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=ylzd22MxGnW6ukdewFSryhIUMYoGWxwoLGyWIgUy7YA-1777320472.3309484-1.0.1.1-_RHXPIXhCCT8Xr._lCmYzEV_3hxeLPiVF7UViAII3LU_aW6fo.IeY6.sw3jW1Ypx7JB_a7LjRUYR44hsgeSMSQ7BlyPWAd60HeooOUG8dX5WgQTmPPFePGhcp405JyiP; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:52 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999995' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_cb46ed4f84074f71bdb34c444de266be + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_complete.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_complete.yaml new file mode 100644 index 00000000..1ecd748f --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_async_llm_complete.yaml @@ -0,0 +1,109 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"What is 2+2? Answer with just the + number."}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '139' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - AsyncOpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - async:asyncio + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMXAUJ3SrVAM9yfKsrLxtIn0BbFp\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320472,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"4\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 20,\n \"completion_tokens\": + 1,\n \"total_tokens\": 21,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_95c773cefe\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3074b5683b1d7b-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:52 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '807' + openai-organization: + - braintrust-data + openai-processing-ms: + - '254' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=TsV5UkCfQGgrAEzmrP83zfypHZagJ2C1CF8IHu7.nMQ-1777320471.9069223-1.0.1.1-9hVoDZSMYLwRrN60hBELuEDhJEmjC4lVO8iEtN4Y22urRltnLcdkMqPvucWGrjEJV5KC5stUBhmWpKcUENvmA7wri7QtvAUMt.eTD62E4iJ.vlGToqNPD4o_Sujxdyge; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:52 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999987' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_fa727dfb84d24261b18bcb870a1bafff + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_embedding.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_embedding.yaml new file mode 100644 index 00000000..51388473 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_embedding.yaml @@ -0,0 +1,194 @@ +interactions: +- request: + body: '{"input":["Hello world"],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '85' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AKANuwAASb0A4Ks8AIAAPQCgOb0AYNi8AEDtvAAAdz0AoNK8AMByvACAfTwAIPa8AOCmvADgCL0AoNM8AABpPACAj70AwEo8ACBzPABgSD0AQKo8AGARvADAd7wAQIi8AKDUPABAO7sAwMe8AADHPABA8DoAQGS9AEC9PABAOr0AoA68AOBKOwBglTsA4O46AKDaPAAgJjwA4ES8AMA8vABgdLwAoL28AADQPADAFj0AYBG9AICuPABAgb0AYCU9AGBbPQBAfD0AAAq9AKDZuwDg0DwAoOA9ACCauwDAIb0A4Oc7AABTPQBA2LwAgOQ8AGD5PAAAqTwAYI08AOBKPADAjjoAwOc7AOAXvQDAwDwAIC+8AEAnPQAgBrsAgAA9ACAvvQCg3bsAgEG9AECyvADAOr0AgIQ6AIDTOABgQr0AAAe9AMC/PADAWL0AIGa9AKC4vABglDwA4BK9AOCaOgBgxLsAYKK8AEA4PAAggjoAoKS8AAA5PQCAKT0AwLM7AGDvuwBgID0A4HQ9AEAOvACA5DwAoMS8AGDXPABgg7wAoBE8AABAPADALrkAQD29AEDNvAAglzsAwOW9AIB7vABgXDwAYP+8AGCpOwBgBz0AAKc9ACBrvQCgjTwAQIu9AACrPACgMDsAAJG8ACBwvQCgbb0AINi8AGAsvADgGT0AwCq9AEDrOwCA7TwAQNs8AECGPACA2bsAwEC9AMBQPADgEb0AYLu8ACANvQAAIz0AQFw9ACBRvQDAMzsAACy9ACBhuwAgLL0AwAe7ACAHPQBAvrwAoLc7AMAzPQDgbz0AoG29AMB5PACg8DwAwO27AIAQPQCgD70AQDa8AADzOwAAozwAwAI9AOAVvQCAhLwA4Dq8AEBmOwAA/roAwIc7AIBDvQCA6DsAYI08AABoPAAAvbwAgGa9AABevABgdTwA4I48AABXvQDALrwAgCa9AAAqPQAAgT0AYKU7AGCfPACAIb0AQGO8AGCKOwDAqTwAYHe7AIDIPAAAR70AAGk9AIDMPABgcrwA4J08AAAcvQCglj0AQCc8AKANvACAAT0AAGi8AEAqOwCA9LwAoGe8AKAMvQCAdb0AgAk8AACbPQBASrwAgC+9AICTPQCAnrwA4Me8AGASuQAgCb0AQPm7AMDRPABAhTwAQIy7AOAkvQBANL0AYJA9AMCYPQBAuTsAgP08AMBwPACA6DsAIKm7AGAfPQAAJDwAQIM8AOBNPABgozwAYA69ACC+OgBAx7sA4B09AGCmvAAAaLwAwH87AKBLvQDg/jkAIJ88AGAVPQAALj0AgFq8AGAHvQBAT70AQHs8AKD1PACAjDwAAB89AGCmOwAgNjwAwA49AEApOgCgDrwAAJ07AAB1PQAAc7wAQLm8AOBJvQDAjrwAINe8AMCsvACAY7wAoMk6AKBHuwAgKTwAIB69AKBRPQBAPrwAIII9ACCwvACgDzoAgMA8ACAkvABASbwAACS9AGAXPQDA67wAICa8AMBCvADgNT0AQIK9AMCrugDAZj0AQJW8AACJPABA6LoA4Iw8AIA5PQCAAj0AYEW8AMAWPAAgUzwAYAI8AICNvACA8DwA4L68AMCYPQDACbwAYJA8AEB1PAAgIbwAYA09AEDBPABgU70AwIs9AGCQPABADb0AYJU7AAA+PQDgyrwAIKO7AGAEvQBAlbsA4B29AOAnvAAAP70AQOY8AABdvQBAhLsAIHM7AODaPABAB7wAQFw9AKAYuwAAELwAYKi7AGB1PAAADL0AgFC8AEAOPAAA37oAQFm8AGD9vABAOj0A4Iq8AIBDPQAAgrwAgKS8AEDuOwCgN7wAICE8AKAUvABAIj0A4CO9AMCYOwAAFjsAIOW6AMCBPADgVzwAwFy8AKAKvABgr7wAQBg9AOCSvACgU7oAAMk8AOBtvABArLwAoM06AOAhugAgUT0AQIU7AKCVvABAa70AYM46AAAdPQBAg7sA4P47AEABPQAANLwAwAy9AMDdvAAgWjwAwMO7AGBGPQDAHrwAYNc8AGC+uwDgiLwAwFS8AAA2PAAAi7wA4IA8ACBfPACA4DoAIGG6AGBePQDgT7wAIMg8AMAlPADADTwAgDq8AGAAuwBAorwAwK27ACBivQDANj0A4Ca9AADoPADAjjwAAIS9AMA6vQCg5bsAQEA9AEClPABg4LwAwEs8AOApvQCABz0AAPE8AEDsvABgA7wAwE+8AAAJvQDg0jsAwHI8AABQOwBgET0AAJe8ACDdPABgMbwAoDQ9AEA8PQCg/LwAoJg6AGCIvQAAbbwAQFK8AIC0vABAdjwAQKW6AAAyvQDAcrwA4AC8AEAxPQDgmDwAwEM8AKA1PACAu7sAwHO8AEAPvACAN70AIAm8AOAavAAADb0A4AG8AECfPABgiL0AoGw8AOCUPADgoLsAAF08AGA2PADgIrsAoGK8AGAKPQDAw7sAwFK7AKBVvQCgTT0AYHw8ACBavADAirsAAPY7AMDcuwAgJr0AAFC8AABsOwCAnDwAgFe8ACD+vAAAxLsAoPm8AOAVPACg3bwAAFu7AGBdPADAEbwAIPg7AGDrOwAg5TsAQK09AACFvQCA1joAwBu9AMCIvAAgs7wA4Ho9ACDtPADgp7wAoIQ6AIAyvQBA2jsAINO8AOB0PADAO70AYJ47AGBNvACgQLwAAEo4AIA2PQBAobwA4Ci9AODZvADg2TwAIM+8ACAcvQBASjwAANY6AGCEvAAgRjwAQBO8AOAaOwDgmDwA4B28AODMvAAgQzwAwBA9AECcvABABb0AQJ48AEArPADgBb0AoCu8AAB2uQCA2zwAoLM7AOAYuwCAzTwAwOS7AIC2vABAgbwAALy6AGA8PACAhLsA4Oa8AKA8PAAAoDwAYOo8ACAmPABAw7wAAAM8AKD/PACgPDwAINa7AOAdPQBAsDsAYMS8AGC6vADAW7wA4AY9AECuuwBgt7wAIEW8AIABvACAKT0AALQ8AGAYOgBAwTwAoCE8ACA0OwAAAT0AgKq8AEAovQCgyrwAYB+9AKByvAAA4rwAIOW8AECivAAAhDsAQCE7AOCGPABgzDwAwBM8AGDuuwAAl7wAIL28AIDJvABgvDwA4Hy9AOBwPQCAiTwAYLc8AMDYPACAwrwA4Cc8AMAXPADABT0AYL48AKB4vABg67wAQNK6AKCWugCgIb0AgEU8ACBOPADAyDsAwPk7AMBJvQCAhzwAgMe8AADPvADAKrwAQOc7ACDwvACABL0AYBw9AIAXvAAgOb0AAIO8AMABPQAgULwAgJc7AGCEuwAgo7wAAD68AGCGvQCA+DsA4M88AAC/OQCgUTwAIE27AGDMuwAACbwAIJk8AOATPQBghDwA4Jc8AEBHvAAAJrwAYHa7AAB5OwAgz7sAQD28AKDyvADAGT0AwFI7ACDUPADg07wAoEY9AOCrPADgjzwAYFM8ACDaOwAA6rsAwGY8AICZPADg0DwA4BO8ACDPPAAgsjsAgOe8ACCUvABgzLwAAPw7AICDvAAgbT0AQGG8AIA2vAAgvbwAINi7AGBMvACg8zwAQKm7ACCFugAAdjsAYPO6AAAiPQCAiLsAAD89AEDluwAAHrwAwD+9AMDQuwCACL0AANs7AAD5PACAJ70AIBO9AAAdPADAajwAIF88AMCWPADgELsAoEO7AADhvACAiLwAQEw8ACDHPAAAE7sAYOu8ACBWPADAdzoAgD28AMBlvQAg6TwAIGe8AKBgvABA2TsAQC47AGAvvADANzsAgM88AKAIPQCg2ToAINW8AKAxvAAAVrwAoMa7AGBSvQDgzDsAYBq8AOBEvQCgeTwAQBo8AIA4vQBAdDwAQFm8AGBpOwAgNLwAgAW8AMAZPADgxbwAQOs8ACCVPACgwTwAoIi8AODVPADgAD0AwM06AMB+uwBATb0AgCq8ACDOuwAACb0A4E+8AOBgPAAgiDwAABI9AEBUuwDAm7wAgL87AGCQPABg47wA4M86AICNOwBAVTwAwM28AEAOvAAgFTwAQBq9AMB6OwBgGjoAIP67AMDPPACA07sAYLU8AIABvACAJz0AwJq8AIA5PACgvTwAIKc7ACCcugAgujsAgCk9AGBOvADgKDwA4NQ7AMDTuQBAHrwAoB+9AMCuOwBgAb0AYA27AMAavQDArjsAYNG8ACCIvABA4DsAgBq9AGDTOwDAlzwAQKA8AAAhvQAAsLwAwPW8AABCvAAA+LwAoD67AEBmPQBgVrwAACm9AKAqPADgoLsAYEo8AED0vABg/DwAYMs8AAAGOwDASrwAAAe8AIAZPACA7LsA4Li7AGDTOwDAYz0AYIG8AMCnOwBgO7wAoE69AIBYPABgjrwAwBU8AEB6PABgUDwAwCe7AOAhvQBAHL0AIIA9AMCaPABgk7wAYOk8AEBMPACgu7wAwGK8AMBlPADg6rsAQC28ACBRPABgLj0AgCA7AKDGvAAA7rwAoMO8AMCFPABgGrwAYEY8AGBOvACAcz0AQNe7AACLPACgDLwAAEG7AGDMPADAGrwAQM28AAD9PABAlLwAABK9AOAyPAAgOL0AAE27AGAhugDgJr0AwBe8AIA4PQAAhjwA4E48ACC/PABAybwAYOM7AOByOgDgCD0AQAM9AOC5PACAxDoA4Fi8AMDdvABg/DwAgD09AICBvQDA2TwAYKi8AOBhvACgrTwAAE08AODUOwCgSrwAYLm8AKAyvAAghbsAAKI8AAB+PACAkbsAACU6AMBtOwDAjjsAoPm7AGDDOwBgujsAoCG7AMAUPQCA1DsAoKg8AIDAuwAge7wAAA68AODfPABgyDsAACy7AKDGugDghjsAwDI8AOCAOwDARbsAIEO9AMDDPAAgxDsA4D89AGByOwAgyboA4Mg8AADDPACA8rkAgKO8ACAevQBAmLwAYHY8AOBIvAAgZDwAQCu9AICNPQDgWTwAQNc7ACAbPQDgeTwAAOm8AOCWPACANzwAgJK8AEA7vQCACD0A4H28AKBnvABg87wAwH88AIA5PADAyDsAAI89AOB8PABAuDoAACa7AGDLugAA+LsA4Am8AACQuwDAOTwAIGG8AOARvQDAhjsAgHI9ACAWvAAAVLwAgAs6AEAsOwCAULsAwKW8AMB2ugAAFbwAwIG8AGAvvQDgmbwAoHS6AIBxOwAACjsAwP+7ACAxPQBgSjwAQDi8ACCUOwDgP7wA4KU8AOAFPQAgfjwAYLM8AGCbPABAaTwAwOO8AGAUvACg47sA4C88AADSOwAgCbwAIBm8AOBXugBAFrwAACC9AODuPACAzzwAIJq8AKC7vAAgLzwAoNW8AMAtugBAMT0AQOA8ACC5PABAkTwAwLw8AICEPABAX7sAQLw8AIDeuwDgFjwA4JE8AACzPACgwrwAABg7ACBBPADAhDwAIDi8AMClPABgd7sA4IW8AECUuwBAm7sAoDm8AAC6vABAaDsAANm7AGCwOwAgAzoAwAo8AIBEPQCAobwA4Oc7AOAAuwBA9DwAoKA6AKASPQCA/bwAwNW8AMA9vQBgH7sAYAS8AAASvABgVLsAoJa7AGC6uQAAIroAwCK9AGDHPADA4boAgA+8ACCkvADg5DsAgJ+8AEAAOwBANjwA4K08AEDTPACgTrsAoDy8AIAcPABgLr0AYP28AGBUvQBgjjsAINg8ACBxvABgNjwAQDk8AMBHPADAIz0A4Nm8AKBRPABADbwAwBc9AADNuwDA2rwA4D48AOD4vADAqDwA4Ko7ACC5ugCgVbwAYHY8AKDWvABgurwAYEq8AKD8PAAgP7wAwLo8ACCbPADASTwAwCQ6AAB1vABAObwAgN28ACCBPABAqzwAoN88ACATPQAAurwAoFo8AIAVPQBgHDwA4Ci8AKDmuwBg6TsAoAG8AABBOwCAxrwAQLU8AIAAPADgTTsAoGS8AICfuwBA8jwAANO7AKC3vACgXLwAAFQ7AMD9uwCgHTwAANa8AIC+PADA/7sAIDy8AGDXOwBgGT0AwKo8AOA0vQCASToAQJE8AIB8OwBA4TwAoC+9AMDtOwDgNT0AwKS8AMArvACgvrwAIME8AIAJPQAgwbwAoDc8AMA6vABASr0AwAW8AAB8PADACD4AgLe8ACDivACgrTwAAJQ8AMBKuwCAbbwAYAI8AICOuwCAB7wA4N26AODNvAAgF70AIPC7AABOvADgnzwAAKm7AAA2vQDgL7wAwMe8AICUPACA+LwAQBC8AAD8OwCgNjwAgLi8AICDvADAQLwAYCs8AOBbPQCAGDwA4Mk6ACAHPQAgDDwAoIi7ACD3PABgvbwAYLW8AODhvABgQzwA4H28AIAKPADgND0AQGa8AKAdvABgOrwAICM8AIBjuwAgEzkAYEu8AGABvQDAWD0AIHs7AMABPABAODwAYAC8AOAIPQBgDT0AwGY9AKCRuwAA77sAgBE7AGBnPAAAwDwAgHY8AEBkuQAgnrwAQA89AKAkvAAAIT0AAAa8AKCJPACgfDwAgMk8AICgPADAGD0AQNG8AEDBOQBgg7wAwPk8AGBfvACgQrwAYFY8AMCTPADAljwAgD88ACDwOwAAozwAYFO8AADLvADg8DsAoAc7AADRPACAS7wAILw6AMAEPQDgSr0AAJI8AMDQOwBghDwAoHI8AMC9PACgkzsAgLU8AMDSuwBAALwAgH47AABGvQCAM70A4Jw7AODkOgBggLwA4BC7AODTPAAgJz0AQIS9AGDrvACAzbwAwIq6AGCxOwAAXz0AIKM8ACB1PAAgqrwAwB49AOCGugAgVz0AoKc8AGA5PQAgWrwAYP+7AOBovADgiTwAYBE8AMDUOwAAWTwAgCs8AICPvACgDjsAAIc8AGC5OgCgt7wA4DY8AEAivAAAX7wAYNs7AEAYPQBAdLwA4AO9AEBcvQDgnLwAIEO8AIBZPADAk7wAgNA7AIBFPABADr0AIC67AIAbuwBAwrwAABu9AICQOwBg7jsAgES7AEAevABgUDwA4Hu8AKDUOgBgtLwAQPe7AEAtPQAgTL0AILW8ACD9PABg3DwAIFq8AGDEOwCgGzsAQPI8AOAoPACAOL0AINy8AAAKPQBAKbwAwMC8AMDJPAAAk7wAAMm7AMDauwAALb0AYBo8AMB6vABALLsAYJG8ACDWuwBg+7wAgKi8AGBZvQAAHbwAICe8AACqvACAybwAQC48AIABOwDAZDwAYLc8AMB8vADgCjwAQGK7AECWvADAOzwAQAQ9AKDIOwAAxjsAwDM9AMCAPQAAirsAgKU8ACCxuABApjsAgIQ7AAApuwDgEz0AIHC8AAAnvAAAfDwAAII7AMCmvAAgzLwA4II7AKDOPABgAT0AoJo8AMAsPQDgfrsAoGE8AGCNuwBAITwA4Ki7AKA2vADACrwAINq8AKD5uwDgMbwA4Gi8AIA2PQBgIj0AIFm8AKA6OwDgHzoAICQ8AKAGPQDAj7wAwA68AMCKvACA3bsAAIo7AGCDPACAiTwAQIC7AKAUvQAAULwAIL88AGD6vABgyDsAQBC9AGA+PQDgqDwAwMe6AOAEPQCAjzsAwAq8AOCtPAAAZbwAwLu8AACwPACAAD0AIPK7AKCsPACAnrwAYJ28ACBevABAjrsAAMg7AOD1OwDgKbsAYD88AEAYvAAA4rwA4HQ6AOBpPQAgMbsAQNM6AEDPPAAgiDwAAMQ8AACtvACgvDwAIAE9AAAJvADA9bwAgGS6AKDAPAAgmLwAoAw8AKDfPACgFD0AoNw7AADGvAAggLwAwBm7AEB0PABASboAANy8ACA6OwBgCTwAIKe8AAD0PAAAtbwA4BE9AMC5PABgDbkAIFk7AKAWPAAgkjwAALy8AIAKOwBAhrwAYOk8AGDjvABAcjwAgIw8AEBZPQBg27wAwIo8AEC6vAAgfLwA4NM8ACBaPABAerwAINk8AEDYPABALDsAIK08AECMPADACjwAoLg8AEDIuwDAorsAwCk8AEDbvADASzwA4Gg8AGBhPADgJL0AQKs8AACgvACgjrwAwC47AODbvABg4bwAQBG9AGBQvABgjboAAMq8AGAXPQCAq7wAoKe5AMDZPADg57wAoCy7ACAYOwAAtjwAgNi8ACByPABg3bwAYLm6AICuvAAg9zwAoOM7ACC3uwDAkLwAIOc7AKCDOwAgmzwAoOs7AABquwDAZbwA4Ma7","index":0}],"model":"text-embedding-3-small","usage":{"prompt_tokens":2,"total_tokens":2}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3073f95918ab33-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:22 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '8344' + openai-organization: + - braintrust-data + openai-processing-ms: + - '119' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=Y8og393YInJE7ZJBA9vqMeuqUpfH0Tn1bUr_xpa4bAk-1777320441.813354-1.0.1.1-67DY79mBnyEK85DonyivUly2hoDZdFNwr9rse4HepqP6vpLp2tL99AknlptoqWeODAhB3_fvHozSe_qaK6RJL8_C9GFpqaj1nUaSbzo6ut.tmrD6JyIN8X8k8pXIsWpr; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:22 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999998' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_8452e8cc3ae94fa6967ab221f1a67648 + status: + code: 200 + message: OK +- request: + body: '{"input":["Hello world"],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '85' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AIALuwDgSL0A4Ks8AIAAPQDAOb0AgNi8AADtvADgdj0AANO8AMByvAAAfjwAAPa8AECnvADACL0AoNM8AKBpPABgj70AQEs8AIByPABASD0AIKo8AEARvAAgeLwAIIi8AKDUPAAAPbsA4Me8AMDGPABA7DoAYGS9AAC9PABAOr0AoA28ACBLOwCglTsA4Oo6ACDbPACgJTwAwES8AKA8vABAdLwA4L28AEDQPADAFj0AoBG9AICuPABAgb0AgCU9AIBbPQBAfD0AwAm9AADauwAA0TwAoOA9AACauwDgIb0AIOg7ACBTPQAA2LwAYOQ8ACD5PADgqDwAYI08AKBKPAAgjjoAoOc7AOAXvQCgwDwAAC+8AEAnPQCABrsAYAA9ACAvvQBA3bsAgEG9AECyvAAgO70AoIU6AMCfOABAQr0AAAe9AOC/PACgWL0AQGa9AMC4vAAglDwAABO9AACbOgCgxLsAQKK8AIA3PACgejoAgKS8AAA5PQCAKT0AwLI7AEDwuwBAID0AwHQ9AAAOvACA5DwAoMS8AEDXPACAg7wAoBE8AGBAPACACrkAID29AEDNvACAlzsA4OW9AOB7vADAXDwA4P+8ACCpOwCABz0AAKc9ACBrvQDAjTwAQIu9AMCqPABgMjsAQJG8ACBwvQCAbb0AINi8AEAsvADgGT0AACu9AIDsOwBA7TwAINs8ACCGPACA2bsAoEC9AEBQPAAgEr0AYLu8AOAMvQAAIz0AIFw9AABRvQDAMTsAQCy9AKBhuwAgLL0AIAi7AAAHPQAAvrwAILg7AMAzPQDAbz0AwG29AEB6PACA8DwAQO27AMAQPQCAD70AYDa8AMDyOwBAozwAoAI9AOAVvQCAhLwAYDu8AMBjOwBA+roAQIg7AKBDvQBg6TsAQI08AEBoPAAgvbwAoGa9AOBdvADgdTwA4I48AABXvQCAL7wAoCa9AGAqPQAAgT0AIKU7AGCfPABgIb0AQGO8AMCLOwCAqTwAYHi7AEDIPAAAR70AAGk9AKDMPABAc7wAwJ08AEAcvQCglj0AQCY8AKANvACAAT0A4Ge8AIApOwDA9LwA4Ge8AIAMvQCAdb0AwAk8ACCbPQDgSbwAgC+9AICTPQBAnrwAAMi8AECTuAAACb0AAPm7AODRPAAghTwAwIy7AOAkvQBgNL0AYJA9AMCYPQCAuDsAoP08AIBwPABg5zsAoKm7AKAfPQCAIzwAwIM8AIBNPACAozwAYA69AEC8OgDAxrsA4B09AMCmvADgZ7wAYH07AIBLvQBg5DkAIJ88AGAVPQDgLT0AAFq8AGAHvQBgT70AoHs8AGD1PABgjDwAAB89ACClOwAANjwAwA49ACAhOgDADrwAwJ07AAB1PQAgc7wAALm8AOBJvQBgjrwAANe8AMCsvABAY7wAYMY6AGBGuwCgKDwAAB69AKBRPQCAPbwAIII9ACCwvADAAzoAoMA8AIAkvADASLwAACS9AIAXPQCg67wA4CW8ACBDvADANT0AQIK9AOCtugCgZj0AgJW8ACCJPADA6boAwIw8AKA5PQCgAj0AwEW8AOAWPABgUzwAQAI8AKCNvABg8DwAIL+8AMCYPQBACbwAgJA8AGB1PABgIbwAQA09AEDBPABgU70AwIs9AGCQPABgDb0AIJQ7AOA9PQDgyrwAQKO7AIAEvQBAlbsAwB29AKAnvADgPr0AQOY8AOBcvQAAhLsAwHI7AMDaPADgBrwAAFw9AKAYuwDgD7wAAKe7AAB1PAAgDL0AAFC8AEAOPACg4boAQFm8AMD9vABAOj0AwIq8AGBDPQDggbwAwKS8AGDtOwAgN7wAICE8AEAVvAAAIj0AwCO9AICZOwDgFjsAQOi6AKCBPADgVzwA4Fy8ACAKvABAr7wAYBg9ACCTvABgTroAIMk8AABuvABArLwAwNQ6AGAbugBgUT0AYIY7AICVvABga70AAM86AAAdPQCAgrsAgP87ACABPQDAM7wA4Ay9AKDdvADgWTwAIMS7AEBGPQCAHrwAYNc8AOC9uwDgiLwAgFW8AEA2PAAgi7wA4IA8AOBePADg2zoAQGO6AGBePQDgT7wAYMg8AGAlPADADTwAADu8AIABuwCAorwA4K27ACBivQDANj0A4Ca9AADoPADgjjwAAIS9AMA6vQCg5bsAQEA9AIClPABA4LwA4Es8AOApvQCABz0AwPA8AADsvACgA7wA4E+8AOAIvQBA1DsAAHM8ACBOOwBAET0AIJe8AODcPAAgMbwAwDQ9AEA8PQDA/LwAgJI6AGCIvQBgbbwAoFG8AKC0vACAdjwAIKm6ACAyvQCAcrwAgAC8AAAxPQAAmTwA4EM8AMA1PAAAvLsAAHS8AKAPvACAN70AwAm8AMAavADADL0AgAG8AGCfPABgiL0AYGw8AOCUPACgoLsAIF08AMA2PABAIbsAIGO8AGAKPQDgw7sAIFK7AKBVvQCATT0AoHw8AABavABAirsAwPU7AADduwBgJr0AwE+8AIBuOwCAnDwAwFe8ACD+vAAgxbsAgPm8AEAVPACg3bwAIFm7AMBcPADgEbwAQPg7ACDtOwAg5TsAIK09AACFvQAA1ToAwBu9AMCIvAAgs7wA4Ho9AEDtPADgp7wAIIQ6AGAyvQBA2jsAgNO8AGB1PADgO70AoJ07AABNvABgQLwAAD43AGA2PQBAobwAwCi9AMDZvACg2TwAAM+8ACAcvQCgSjwA4Ng6AGCEvAAARjwAQBO8AKAbOwAgmTwAIB68AMDMvAAgQzwAwBA9AECcvAAgBb0AIJ48ACArPADgBb0AwCu8AOBouQCA2zwAILM7AIAauwCgzTwAQOS7AIC2vAAggbwAQL+6AMA7PABgg7sAwOa8AMA8PAAAoDwAQOo8AAAmPABAw7wAwAI8AMD/PABAPDwAQNa7AOAdPQAgsDsAIMS8AGC6vAAgXLwA4AY9AICtuwBgt7wAYEW8AKABvACAKT0AILQ8AMAWOgBgwTwAYCE8AAAzOwDgAD0AoKq8AEAovQBAyrwAYB+9AIByvADg4bwAIOW8AKChvACAhDsAYCA7ACCHPABAzDwAwBM8ACDtuwAgl7wA4Ly8AMDJvABAvDwA4Hy9AMBwPQCgiTwAQLc8AMDYPACgwrwAgCc8AEAXPACgBT0AgL48AMB4vAAg67wAINO6AACTugDAIb0AwEU8AABOPADgyTsAgPo7AKBJvQBghzwAgMe8AODOvADgKrwAwOY7AODvvACABL0AYBw9AOAXvAAAOb0AAIO8AMABPQDAT7wAAJc7AACDuwAgo7wA4D68AGCGvQAg+DsAANA8AKDJOQBgUTwAwEu7AEDLuwBACLwAoJk8AOATPQBghDwAIJg8ACBHvADgJbwAQHi7AGB4OwBgzrsAAD68AKDyvADAGT0AIFE7ACDUPABg1LwAoEY9AMCrPAAAkDwAQFM8ACDaOwDA6bsAgGY8AICZPADg0DwAwBO8AGDPPADgsjsAYOe8AECUvABgzLwAgPs7AGCDvAAgbT0AQGG8AAA2vABgvbwAwNi7ACBMvACg8zwAwKm7ACCFugCAdDsAgPO6AEAiPQBgiLsA4D49AMDjuwAgHrwA4D+9AADRuwCACL0A4Ns7AAD5PACAJ70AQBO9AAAdPADgajwAQF88AKCWPACgD7sAoEW7AODgvABgiLwAAEw8AADHPABgE7sAwOu8AEBWPACgdDoAAD28AOBlvQDA6DwAAGe8AGBgvADA2TsAYC87AGAvvABANjsAIM88AKAIPQCg1zoAoNW8AIAxvAAAVrwAgMe7AGBSvQAAzTsAQBq8AOBEvQBgeTwAoBo8AKA4vQDAdDwAQFm8ACBqOwAANLwAQAW8AMAZPADAxbwAgOs8AACVPACgwTwAwIi8AMDVPADgAD0AIM06AOB8uwBATb0AQCu8AMDNuwAACb0AwE+8AMBgPABAiDwA4BE9AOBTuwAAnLwAwMA7AICQPAAA47wA4M86AACNOwAgVTwAwM28AOANvADgFDwAIBq9AAB8OwAgIToAoP27AIDPPACg07sAQLU8AIABvACAJz0AAJu8AMA5PABAvTwAgKY7AGCYugAAuTsAYCk9AGBOvAAgKTwA4NQ7AMC6uQAAHrwAoB+9AKCuOwBgAb0AgA27AKAavQCgrTsAYNG8AGCIvACA4DsAYBq9AODSOwDglzwAIKA8AOAgvQCgr7wAAPa8AOBBvAAg+LwAAEC7ACBmPQAgVrwAQCm9AEAqPACAoLsAIEo8AGD0vABA/DwAQMs8AKACOwDASrwAoAa8AMAYPABA7bsAQLi7AIDSOwCAYz0AoIG8AOCnOwDAO7wAwE69AOBXPACAjrwAIBY8AIB6PADAUDwAoCi7AOAhvQBAHL0AIIA9AOCaPABgk7wAYOk8ACBMPACgu7wAwGK8AABmPAAg67sAYC28AGBRPABgLj0AICE7AGDGvAAA7rwAYMO8AKCFPACAGrwAwEY8AOBOvACAcz0A4Ne7AACLPABADLwAwD27ACDMPACAGrwAoM28AOD8PACAlLwAABK9AAAzPAAgOL0AgEq7AMAcugAAJ70AoBe8AGA4PQDghTwAgE48AIC/PAAgybwAwOI7AABxOgAACT0AIAM9ACC6PACgxjoAQFm8AMDdvABA/DwAgD09AGCBvQDA2TwAIKi8AMBhvADArTwAwEw8AIDVOwDASrwAALm8ACAyvADghLsAQKI8AKB+PABAkbsAYCY6ACBtOwDAjjsAgPq7AMDCOwCgujsAgCG7AKAUPQAA1jsAoKg8AEDAuwCAe7wAwA28AMDfPAAgyTsAYCu7AADHugBAhjsAADM8AECBOwDAR7sAIEO9AODDPAAgxTsA4D89AOBxOwAgzboAoMg8ACDDPABA97kAwKO8AAAevQAAmLwAoHY8AABJvABgZDwAQCu9AKCNPQDAWjwAwNY7AAAbPQDAeTwAwOi8AACXPADgNzwAQJK8AEA7vQCgCD0A4H28AOBnvAAg87wAoH88AIA5PAAAyTsA4I49AKB8PADAtjoAICW7AADIugBA+LsAwAm8AICRuwCAOTwAgGG8AAASvQDAhTsAYHI9ACAWvACgU7wAAAE6AOAqOwDgULsA4KW8AIB0ugCAFbwA4IG8AEAvvQDAmbwAoIG6AKByOwAgCTsAwP67AAAxPQCgSjwAQDi8AACUOwCAP7wA4KU8AMAFPQCgfTwAYLM8AGCbPAAAaTwAoOO8AOATvADA47sAADA8AODSOwDACLwAQBi8ACBRugBAFrwAACC9AODuPACAzzwAIJq8AIC7vABAMDwAwNW8AAAtugAgMT0AQOA8AEC5PABgkTwAgLw8AMCEPADgXbsAYLw8AEDeuwDAFjwAwJE8ACCzPADgwrwA4Bk7ACBBPADghDwAADi8AACmPABgeLsAAIa8AECUuwCAmrsAQDm8AEC6vAAAaDsAQNm7AKCwOwAgCToAAAo8AKBEPQCAobwAoOc7AMABuwBA9DwAoJ86AMASPQCg/bwAwNW8AMA9vQBAH7sAoAS8AGARvACAVLsAwJW7AICuuQCAHroAwCK9AIDHPAAA3boAgA+8ACCkvABg5TsAoJ+8AAACOwCANjwA4K08ACDTPACgTbsAwDy8AEAcPACALr0AIP28AGBUvQCgjTsAwNc8AIBwvAAANjwAADk8ACBIPADgIz0AoNm8AABSPADgDLwAoBc9AGDMuwCA2rwA4D48AKD4vACAqDwAAKs7AAC3ugAAVrwAYHY8AMDWvACAurwAIEq8AKD8PABAP7wAALs8AOCaPACgSTwAYB46AAB1vABAObwAYN28ACCBPABgqzwAYN88AEATPQAAurwAwFo8AIAVPQBAHDwAoCi8AODmuwBg6TsAgAG8AMBCOwCgxrwAQLU8AMAAPAAATjsAgGS8AOCfuwBg8jwAgNO7AKC3vADAXLwAgFM7AED+uwBAHTwAANa8AKC+PADg/rsAgDy8AKDWOwCAGT0AoKo8AOA0vQAgUDoAAJE8AAB9OwBA4TwAoC+9AADuOwDgNT0AwKS8AOArvACAvrwAAME8AIAJPQBAwbwAoDc8AGA7vAAgSr0AoAW8ACB7PADACD4AgLe8ACDivACArTwAIJQ8AABLuwBAbbwAAAI8AECPuwAgB7wA4Nq6AADOvABAF70AoO+7AKBNvACgnzwAYKi7AAA2vQDgL7wAAMi8AGCUPABA+LwAIBC8ACD8OwDANjwAQLi8AICDvABAQLwAgCs8AOBbPQBAGDwAIMk6AEAHPQBADDwAIIm7AAD3PACgvbwAgLW8AADivACgQzwAoH68AAAKPAAANT0AAGa8AEAdvAAgOrwAQCM8AOBiuwCgBDkAYEu8AGABvQDAWD0AQH47AEACPACgODwAYAC8AAAJPQBgDT0AwGY9AACRuwAA77sAQBE7AEBnPABAwDwAwHY8AIBluQBgnrwAYA89AIAkvAAAIT0AIAa8AOCJPACAfDwAgMk8AKCgPADgGD0AQNG8AODfOQBgg7wA4Pk8ACBfvADAQrwAgFY8AMCTPACAljwAwD88AADvOwDAojwAoFO8AODKvADg8DsAwAc7ACDRPABgS7wAYLw6AMAEPQDgSr0AAJI8ACDROwAAhDwAgHI8AKC9PAAglDsAYLU8AADTuwCAALwAQH07ACBGvQCAM70A4J07AADmOgCggLwAIBC7AADUPABAJz0AQIS9AKDrvABgzbwAIIW6AICxOwDgXj0A4KI8AEB1PABAqrwAwB49AACFugDgVj0AgKc8AEA5PQBAWrwAIP+7ACBpvADgiTwAYBE8AIDTOwCgWTwAICs8AKCPvABgDjsAwIY8AAC3OgCAt7wAQDc8AOAhvABAX7wAwNo7ACAYPQCAdLwAAAS9AEBcvQAgnbwA4EK8ACBZPACAk7wAgM87AGBFPABADr0AwC67AEAauwCgwrwA4Bq9AICQOwDg7TsAAES7AAAevACAUDwAwHu8ACDTOgDAtLwAQPi7AEAtPQAATL0AILW8AAD9PABg3DwAwFm8AKDFOwBAHDsAIPI8AMAoPABAOL0AANy8AOAJPQAgKbwAoMC8AODJPADgkrwAQMm7AADbuwAALb0AABs8AOB6vACAK7sA4JC8AMDWuwCA+7wAIKi8AEBZvQAAHbwAICe8AMCpvACgybwAoC48AIABOwDAZDwAQLc8AGB8vADgCjwAIGG7AECWvAAgPDwAQAQ9AGDJOwBAxjsA4DM9AMCAPQCgirsAYKU8AGDLuACApjsAYIQ7AMAnuwDgEz0AoG+8AAAnvABAfDwAQIA7AOCmvAAAzLwAAIQ7AMDOPABAAT0AgJo8AKAsPQAAf7sAgGE8AOCNuwBgITwAoKi7AEA2vACgCrwAINq8AOD6uwBgMrwAYGm8AIA2PQBgIj0AAFm8AKA4OwAAIDoAACQ8AOAGPQDAj7wAoA68AKCKvACg3bsA4Ik7AICDPACgiTwAAH+7AIAUvQAAULwAQL88AGD6vAAgyDsAYBC9AIA+PQDgqDwAQMq6AOAEPQCgjzsA4Aq8AKCtPABAZbwAwLu8AMCvPACAAD0AYPG7AMCsPACgnrwAYJ28AGBevAAgj7sA4Mc7AGD1OwDAK7sA4D48AKAXvABA4rwAoHk6AMBpPQAgM7sAwNE6AEDPPABAiDwA4MM8AKCsvACgvDwAIAE9AKAIvAAA9rwAgGC6AMDAPAAgmLwAwAw8AODfPADAFD0AINw7AMDFvAAggLwAYBi7ACB0PADAS7oAANy8ACA5OwDgCDwAAKe8ACD0PADgtLwA4BE9AAC6PADAC7kAQFc7AKAWPAAAkjwAILy8AMAJOwCAhrwAYOk8AGDjvABAcjwAgIw8AGBZPQCA27wAoIo8AGC6vABgfLwAgNM8AEBaPAAgerwA4Ng8ACDYPADAKzsAIK08AGCMPADACjwAoLg8AKDHuwDgorsAQCo8AKDbvABgSzwAgGg8AMBhPADgJL0AYKs8AOCfvABAjrwAgC07AMDbvACg4bwAQBG9AGBQvADAjboAQMq8AEAXPQBgq7wAYKa5AEDaPADA57wAgC27AGAXOwAAtjwA4Ni8AIByPACA3bwAALq6AECuvAAg9zwAoOM7AAC3uwCAkLwA4Oc7AKCDOwDAmjwAQOs7AKBpuwBgZbwAwMe7","index":0}],"model":"text-embedding-3-small","usage":{"prompt_tokens":2,"total_tokens":2}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3074a2db1394e3-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:49 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '8344' + openai-organization: + - braintrust-data + openai-processing-ms: + - '182' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=4CpF.Hwh5OnWsEvQfVSvkeuEM7kPJKkDzS0rm64bKgw-1777320468.9381797-1.0.1.1-RXCtheM_cWzAbRhKyzii2mM3efjV1Vfyrxp.SY2xQ38LQcWqZRYMPI8ZzP_j0v16uSZCr8g9cvnuTOONkdGvIQR8dmO9dpySDHwnG3A2MoUOcZCTESejSV6ChiYomSqN; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:49 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999998' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_d6017af4bfe54fc3ae88c93050cd61b4 + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat.yaml new file mode 100644 index 00000000..f2980d5a --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat.yaml @@ -0,0 +1,216 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What + is the capital of France?"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '187' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMWdYfBua4zUsh7JGyCz17LnlReH\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320439,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 24,\n \"completion_tokens\": 7,\n \"total_tokens\": 31,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_9490d6845c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3073e80c24ab1c-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:20 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '837' + openai-organization: + - braintrust-data + openai-processing-ms: + - '390' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=YwjAZIzN7JG3K9Pd93kAzczEJtesEWPf6o4tD.VxqXY-1777320439.0499623-1.0.1.1-5lz54FacwO3Dde.i2ZIjMZ8tzvvV1pscRF61XE5LtlqZvuD3Ma26sQ8iaNx.PXliA57PpQ1XaAXBl0okZEWispgYraijB.el.i4lZvlulkvpdYVR92RGTFl5Na8Gl4r3; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:20 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999982' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_01ac4433e82e470e8244697dd7851ffb + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What + is the capital of France?"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '187' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMX566AuJ3Uvu96luxnWTdzsorIm\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320467,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 24,\n \"completion_tokens\": 7,\n \"total_tokens\": 31,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_9490d6845c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f307496ab1c9113-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '837' + openai-organization: + - braintrust-data + openai-processing-ms: + - '430' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=rwPcdI2l7IcMnc9i3uQXr9zG1siKY7ccfW0T0W0LMXU-1777320466.9907067-1.0.1.1-JZJrfNWpkCA.uf_byvSe0GWMaQ6HCw1DJkfGQy87zfY2zIw6e69FkbM63e5N9_OfbEEVG4Pbsl5WmhIT57Zm43v1Z4BW3E4NS1JXj14KwuOzCzxFg04580iu3yymU_MP; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:47 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999982' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_bd38c4685cbf4f39baebba9e9648701e + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml new file mode 100644 index 00000000..1f743f11 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml @@ -0,0 +1,214 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '107' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMWfkPQh6PvSjb9xMFMcBguVePJr\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320441,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3073f20d25ac3c-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:21 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '517' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=vyVeASPTExW6n6hxNIZbO6.n.IB9OJIpL.rM0TJVSzc-1777320440.6493819-1.0.1.1-u5tto7c4Feo5iuLSgAoXrJT7shPDO1zOyx.mT.GOh3_RROlkOZNB9gtEj3yjIViudF1tbWJqHFuX60NijyQDgdhfKGzSU1wW0ezTArHUrGc5TvV3vf1s2OkZJZgO0iDO; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:21 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999995' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_05653f634a2447ca80b128ac70203c58 + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '107' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMX6oruAjcO5kCSZShAyhoslOtUu\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320468,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f30749a78a83a53-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:48 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '525' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=5pOFexmPj7ztIkLz.7LP.MIKGnpDgRzO8pe3.Lq7Z84-1777320467.5979965-1.0.1.1-ieVM.DNmHS1_iTAQHTZLh9aAUZZSlPpr8R1Eo1teV7546Rd5NhW208WewzXwGzLYMiuOhWkpyDCWzu97m0eCrr9cYLv2MTRk1qp9Gxye2LbZ4mPCm5yzoJ_Ywr7GIWG.; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:48 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999995' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_d1f5805591154369a083238659c93faf + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_complete.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_complete.yaml new file mode 100644 index 00000000..e50d3593 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_complete.yaml @@ -0,0 +1,216 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"What is 2+2? Answer with just the + number."}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '139' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMWcqRA4Q2cyJ6gNIOymJ77xysuU\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320438,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"4\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 20,\n \"completion_tokens\": + 1,\n \"total_tokens\": 21,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_95c773cefe\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3073dd9d5936d2-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:18 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '807' + openai-organization: + - braintrust-data + openai-processing-ms: + - '358' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=03fmfaRdDvBcm3Admy1iEa1FI5lCpxPpWJqyIGBVYvk-1777320437.3787556-1.0.1.1-XQ6RM_7Y1qViWTmQD8SB_ijG2HMjzCwwqOrVsJaGSGaYAjRN90.CKWXuAhKSomSE4xJIlxHkawH40Y26aKa4ayOnhprGjdfRiQMI7r7O3X068RsNPSwyuw.jQDmHB0Zy; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:18 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999987' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_86a667746b0a4152bd20ad87afb429cb + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"user","content":"What is 2+2? Answer with just the + number."}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '139' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMX4Hpq11q551FbP44MeJNB8KmbN\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320466,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"4\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 20,\n \"completion_tokens\": + 1,\n \"total_tokens\": 21,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_95c773cefe\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f307492ef06b2eb-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:46 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '807' + openai-organization: + - braintrust-data + openai-processing-ms: + - '330' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=lfSreaQNWlIU1pyWgKYX011BSHdbWxJIIR9JKyVCuJ8-1777320466.3865285-1.0.1.1-DujEuQw99Kr2efJ6eRB86MVor7HT_zmwfWUQsLtnD901f3mc3sRNcc_dMnPhtSVkW6YOMt5qqlPordkPuNcDKVVB4mIUPoETpMMTBkRh914qfQTK5Thjve9BazTOcX6p; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:46 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999987' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_76927a17b49143d2adcba11c49d64354 + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_query_engine.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_query_engine.yaml new file mode 100644 index 00000000..207b24c9 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_query_engine.yaml @@ -0,0 +1,614 @@ +interactions: +- request: + body: '{"input":["The capital of France is Paris. Paris has a population of 2.1 + million.","The Eiffel Tower is located in Paris, France. It was built in 1889."],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '214' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AGCbPAAg1TwAIBc9ACDQuQDgHr0AoIe6AIA7vQDggbwAgAG8AGBQOwBggjwAwBC7AOA2vQDA6zwAgCy8AOAFuwAAxLwA4Is6AOBxPQDA5LwAICa6AGD/OgBgubwAwLM8AEBRPQDgozwAgDW9AIBXPAAglrwAANU8AOC0PACgXLsAYLi8AOArPABAkrwAoJy9AAA5vABg5bwAINI8AIApPABAubsAIBq8AOCWvAAAszwAQBK9AIC/vABAljsAIGi9AKAKvQCA4jwAQEM7AKAevAAgWDwAoEY8AACTuwDgED0AwIM8AID3PADASzwAQJc8AIBHPQBgcDwAYBU9AAASPQDgBjwAIGA8AEAEPACAyzwAYAQ9AIBQPQAAlrsAQD07AECzOgBA9TwAoMy8AEAmvACAg7wAgLm7AEADvQDA0LwAYLa8AMCyuwCg4bwAgAu8AEDPOwAgCL0AQCc8AOBaOwCgSb0AwDC9AKAuvABAuzwA4JM8AADYPACANrwAYJW7AEBCPQBgD7sA4HC9AEAbPQBgIT0AgM48AMDivACgpjoA4Iw8ACBtPABAkrsAIKK7AGAguwCgAr0AoLK8AIDuPACg9DwAoJo8AADEvABgLrwAYJg7AGC4vABAtjwA4Jm8AGAWPQCg0DwAAEK9AOAPPQCAljwAYI68AGCNOgCg7zoAIGs8AIB1uwCAQ7wA4Ge7AICFPAAAfT0A4Js8AKC+uwDABz0AoIS8AEBBOwAg1LkAoGO8AECmvADgHzsAwF89AEASvQAgDr0A4BC9AOAqPQDgvzoAAD69AABSPQCAdLwAAM47ACDzPAAAULsAIFa9AMDtPAAgHTsAQAE9AODQOwAA6LwAgPo8AODmuwDgSLwAQBM8AEB9PACgY70AIAW9AEC9uwBgnbwAIGw7AMCIOwAgjD0AIO28AMBAPAAAxLwAoCm9AKBcPQCAbDoAgF87AKDxvABgqLwAoHU9AEBbvABgiD0AwMG7AGCEOwDASr0AoKU7ACDMPABAjz0A4NO7AEBePQDgq7wAQKG9AIC4OwAg2jwAgCy8AABQtgCAZjoAAME7AMC3PABgUbwAQJi7AKBkvADAfbsAAA68AKAkvQBgpDwAgKI3AMBkvAAApDwAANK7AAC/PACABD0AIG08AKC9vACAOz0AYIQ8AEBmPABAFz0AYL88AMC3PAAADjwAIE69AEBxPQBADD0AgGY8AMDBOwCgrbwA4KM8AMA8vAAg3LkAQDK9AMAIvQAgJbwA4Ag9AKAkPQDAar0AwBU8AAAfvACAmjsAAPY8AGANPAAgcbsAAG67AGCEPABAPT0AwIw8AGCVOgDgJj0AoG28AIAJPQCA4LkA4Ey8AOCqOwDA8DsAgH+7AEA2vQDgrDsAABC8AEBLPABAxTsAQFW8AIBsvABgpbsAoFm8AIAEPABgibwAwJi8AMBtvADAz7wAQL48ACDcugAgnb0AIAA9AECnPAAgkzsAILa8AIDfuwBAWLwAoFI9AIAjPADAGz0AQIE6ACAqvADgSz0AwAE7AIDWvACA8jwAwOs8AEBGvAAggr0AgFS5AACFvADASLwAwJk7AGCfvACgCTwAICa8AIBFvAAAbjwAgFq8AMDOPAAgEL0AYOY8AECwvACAtz0AQMo8AEA0uwAgKL0AoDq9AGAoPQDg5bwAoA+9AADxPADA4bwA4L07AEDzPADApTwAAIU7AKBpOwCgPbsAwFw7AEASvQBg0DwAQKe8AODxPADgbrwAoFQ8AGCKPABgMj0AQIS7AICoPABAZ7wAgAS8AMDEOwDg5DwAYBa7AIAouwAgr7wA4BU9AMD5vAAgID0AQAw8AOAFvQDAJT0A4FU8AAASPQAAwLwAgLa8AACyvACg4bwA4Nk8AEC2vACgajwAwEI9ACA6PACgFb0A4Lo8AGATvQBgK70AIK28AKARvQDATL0AoMa7AMA9vQDgIT0AoKS8AKADPQAAOb0AAL07ACArPQDAZLwAYEI9AGCrvABA7zwAQPw7AEAnvACg2bwAQCy7AICavADAUD0AQDK9AABlPQDgJT0AgO88AEDxvACgHb0AYD88AKAWPQBgAb0AIDM9AKAGPQAAnL0AQD88AOAmPAAAgTwAoJq7AGAhvAAgRj0AYGm9ACCWvABAdL0AQJc9AKDZOwDAiTwAwNW7AKD4PAAA2bsAQMk8ACAnvQAgxrgAgK48AGCIPACANj0AwF89AGCdvABAjDwAgBq9AGCkPAAgHDwAoMC7AKAUPQDAyrsAQM47AOCCvABAp7wAQAO9ACAXPQCAAb0A4Bs9ACBkOgCgADsA4Ac8ACANvAAgDz0A4Ea8AOBmOwBgyjsAAKI7AGAEvQAghrwAAMS7AMA0vABgmTwAYPg8AOADPQAgPLwAACI9AAAivQDASTwAYDa8AIAEvQCgSroAwMs7AIBvOwBAST0AoAA9AGAjuwAACr0AoA09AOC9vADAcrsAQMA8AKDfPAAAEz0AQNI8AMBkvABgxbwAINA7AACbPAAAfjwAoPo8AMDFuwDAt7wAoBa9AKAjPAAgEr0AoFO8AAABvQDAxTwAQHk8AAC1OwDAxb0AgIC9AMDkPADgHT0AoKa8AODqPADAkTwAAAe8AMBBPQDAdLoA4AM9AOAnvQCgKb0AQO86AGDYuwCARL0A4Lm7AEAwPACgnzwAwDc8ACBFPADAXD0AYI49ACAQvACAs7wAoM87ACBJOQBA0jsAQPQ8AIB1uwDgvzsAoNs7ACDXOwAg8TwAIFy8AGAeuwBAPD0AYBw9AAC/OwAgbTwA4Lc8AGCEPACgBL0AINi7AEBHPQCgU70AgCg8AGDmvADgPLsAYFQ8AOA3PABAirwA4Gk8AGBtPQCgrDsAAEU9AGBCPADAP7sAAB+7AMDnvADgq7sAgLA6AIBGPABgo7wAYKu8ACDnvACgarwAAHY9AMBIvACAg7wAoIe8AEDAuwAAjzoAwPi7ACAdPQBgoLwAAI07AADePABAiT0AoKo8AMAcOgDgfDsAIMK7AICvvABAcTsAQOm8AKBVPADAuzwAgIC8AIACvAAgObwAoMA8AGDrvACA97oAwFm7AAAwPQCAUDwAgJQ8ACCbOwCgzLwA4Ea9AGCoPAAAmzwAgAQ8ACBdvADAU70AoFI8AEAqPQDgHDwAwP46ACD/PACg0jwAYAE9AEDmvAAAIb0AIKI7AADGvABgvzwAwMe8AOACvQCgBj0AYLK8AGDhugBgb7wAgF89AABzugAAlboAgNe8AEDMPADg7jwAgAI8ACCPPADgqTwAoAM8AACfOwBg6TwAgD48AGAEPQAgrLwAwBA7AMCOvAAgcDwAgOI7AIC7PABgqLwAoKS8AKBVvADgrTwAgIM8AGAkPQBg47wAYEq9ACCCugAAEzwA4CY8ACCmvAAANz0AQP88AOCavADAhLwAYCC8AOBCPACAXDwAAFI9AMBAPABAuLwAYBU8AMBkPABAXrwAAL67AOBQOgCAzjwAIKI8AIAwPADgn7wAIII9AOCavACAkLsAoN08ACBivADAWLwAQKY8ACBdvAAAszwAAMo8AMDuPADgSLwAoMm8ACCsPABgGz0A4Iu8AAB6vACghLwAYIu7AEDROQCAGDwAAC09AKDkPACgJb0AYMs8AOCkOQCApjwAwPA5AOCVPACAnTwAgMq8AGCvvAAgTrwAIPQ5AIBGPQDAyzwAAEm9ACACPABgDTwAoJO7ACDLOgAAzbwAgEk8AADHvACArDwA4O64ACDOPACgBLwAYGi7AMCyPAAgIbwA4Ha8AIAUvQDgaLwAwHW8AODZuwAgpDwAYFK7AODcuwDgDjwAgJ87AGDoOQBAAjwAICm8AAA2vACA+DwAwNU7AAB2PAAg5zoAgKk8AKA0vAAAwbkAIPa8AGCNvABARzsA4Gw8AMDHPACARbwAAH68AABYvQCgFDwAwMS8AKBAvACADLwAgD29AGAVPQBAET0AYLO7AICFvAAAqrwAwJ68AAAxvQAAsLoAQLU8AIAsPADAPj0AACw4AKA9PABAlLwAIFU8AOAcvQBgkTwAwOg7AID6vADARLsAQMo8AAC9vABATTwAoCg8AMAKvQAgT7sAoG+9AEAyPAAAC70AIHA7AGAVPAAg/7wAAJm9AOCavADA3rwAYKy8AEANvABgULwA4Fy8AMDnPADgyLwAQKC8AKBUPQBgmbwAgFa8AIDxvACg5TwA4L+8AMA4uQBAlTwA4E+8AKCtvACAiz0AAKW8AEDGOwDAJb0AADW8AOAGvAAAqDwAIEu8AOD9OwAAxDwAQOe8ACBCOwBgVTwAQPa8AIDovADAT70AwAe8ACDkvACAOj0AAL46AOBMPADAq7wA4Co9AEDCugDgDzwAAHw4AEDGvABg47wAYAs9AIAGvQCgzTwAAAc9AMCBOwDgSzwAAKe8AACwPABAFr0AIG88AOAsvACgDTsAIMU8AICVvADgajwAIEk8AKAIOwDgjD0AwDg8AMAuvQBgLzwAwE48ACCZPABgkDwAACc8AIDwPACAOr0AQIw8AOD3vACAcrwAYGq8AEA2PQBggjsAQIg8AGBEPQAAcLsAoJ+8AODsvAAA/bwA4B48AAABOwCAsLcAABe8AGAFvQDgxrwAgF09AICPPACgQLwA4F08AOA3PAAgHrwAoHe7AGCGvACA2bwAQAm9AOAZvQBAJL0AwLE8AGCCuwDAEbwAoKa8ACCqPADgfTwAII+8ACBhPABAYLwAgBM9ACB9vACgbjsAAA69AICyvACAnTwAQHa7ACB0PQBA3rwAAMG8AGDpvADg1zwAYCy8AICEPABAWjwAwIi8AMBDvQBA+jwAwE68AIAIvQAg7jwAIKy8AMBEvACAljwA4Kc9AIAdvQCAOTsAYCU9AIDwvAAgXj0AAIO9AIAfPQDgIbwAYNK8ACBGPQDgrDwAoCO6AGBSPACASDwAoIk6AGCFPADgAz0AoHG7AKB0vADAh7wAIKA8AMAFvQAgeboAIKq8AOC9OwCAGL0AQJU8AKDqOwDAljwAYPk8ACAevADgHD0A4IO7AGCNPQBA+jwAYN88AOCxvABAEr0AwLG8AODLOwAgG7wAYJO8ACCtOgBgfrwAgN27AKBXOwDABj0AwC48AGCWPACAzzsAgGu8AKAsvQBg3jwA4Pc8AICXOwBA5LsA4KO8AKDDPAAAcTwAwNA7AGAvvQAgHD0AQKY8AKDgPADAmzwA4Jg7AKAFvQDgNrwAALI8ACBFuwBAGTwAoC29AGAhOwDgOjwAYNC7AEA2PQBgwjwAoBq8ACBGuwAgpzsAIAy8AGBoPADA/zsAwBI9AGAPvQDgeb0AgLo8AADYPAAAzLwAAAa8AIDEvACAi7wAwLE7AABlPAAgGL0AgAo7AACZvABAML0AABY8AKAQvABAoDwAAPU8AEDGPADgK7wAwI68AMBBvAAgvDsAYHu8AGA8PADABzwAgC+9AGAIOwCgZzwAwM46ACDrPADgg7oAgFa8AKBfvAAAhz0AwCe8AMC4PAAgMbwAoP67AED8vADg1bsAAIq8AGBEvAAAFr0AYNy8AICpPABgkDwA4CM8AACZvABgjToAAJu8AOA3vQCA/DsAoIo8AIAvvQCgK70AgEW9AOAlvQDgvzsAYDY8AABoPADAWD0AAOU8ACAfuwDAML0AQK08AEDFPAAAgrwAIAK8AKD0OgCgpDwAwBu8AKAsOwDgkjoAAHS7AIBivACgi7wAoFs8AMAHPQAAMj0AwFg9AICOvADgar0AgJk9ACAQPQAgj7wAYFu9ACDsPACAurwAoI27AEABPABAHT0AwBs9AKBDPABgrrwAQC89AECdPACAEr0AoIG7AMDHPAAgYj0A4EA8AEDbvABAwDwAgAi9AIC0OgDgA70AQAe9AAC8PAAAkDwAgFq8AOAoPADgJzwA4M48AMDhOgBgHbwAYDU9AOCEOwBgjbsAoJC8AODWPADgujwAYKW8AACVvAAAqzkAYJC7AMAtvAAAkjsA4JQ8AIADOwDAlbwAYKI8AAC9OwCAmrwAgBO8AKC1vABgAz0AoAu8AAAevQBAc7wAANA8AGA1PAAgCLsAgK88AGCZOwCgbrwAgIq8AACrPACgtzwAwLW8AADlPABgGzsAYHA8AMCRPAAgBLwAAF88ACA9uwCg5rwAoC48AABSPAAg2jwAwJe8AKBgvABgzjwA4Aw9ACBFvQBAm7sAgFE8AIDHvABAsrwAoBG9AIAjPQBA/zwAoNI8ACDwPADgDj0AIG88AKAovABAzbwA4Ow8AAAkPQDgSLwAQIk8AOAGPQDAB7wAwB69AEC7vACg2zsAoI28AGAXuQCg6TwAQJS8AGDjOwAAlDwAwCK9ACAZvABA2jsAAIi8AGAjPAAgfTsAAEG7AEAkOgBAiLwAoF08AOB2vAAAOTsAoA89AAA/vAAgjDwAYHM7AGAKvQCAjbwA4M47AOATvQDgT7wAgCI9AGBFvABgBzwA4Ok8AKADPADgr7wAYAS8AIAAPQAAUjwAoEa7ACAPvQBA6rwAYFo7AACzvAAgnDwAAAM9AICJvAAACD0AwMq9AMBfvAAAhDwAoAM8AOCcPAAgjLwAwNC7AKC0uwAAcLwAQBG7AOAbPQBgFjwAwJQ7AEAKvQCgDTwAYJ+8AEAHOwAgnzsAQFc8AAA4PACAH7wAAIq8AIAdvQAgMzoAIFe8ACAYvQDAp7wAABg9ACCMOwCg5DwAwAq9AEDGvAAgBrsAQCq8ACBWOwCgj7sAYOU8AGAivADgmTwAwHk8AID9uwCg0TwAwMm8AEBMPACADbsAwLs8AAAePQAAtjwAgLM8AEDavAAArTwAIDk8AEAbPQCgiDwAgPc8AGCzugBAfjwAQFu8AIA4PABACrwAYNS6AICDPAAgQrwA4AG9ACCRPADgobwAgE+7AMCtuwBg7DwAoMM7AEB/vQCgJjsAYDg7AICxPACglzwA4FE6AOAhPQDg6DwAwDa9AECLvABgkzwA4Mg7AICfvABAMr0A4Cq8AMATPABA1bwAQMC8ACAzPAAgRT0AYOw8AMCPPADggz0AgAo8AMB+OwDA3zsAYO27AMCLOQDAgjwAIIO8AOAhPADgtjoAQLa6ACA0vQAgozwA4M47AMAoOwAgQzwAIPA8AIDMvADAC7wAACq9ACDuvAAgITwAwAK9ACB3PABgh7oA4Ea8AAAfvQBgrLsAgKa8AEBLuwAgiTwAgEg8AKARPADgQjwAQAa9AICsvACAFj0AoFM8AADxvACg07wAIJo8ACClvACADL0AYGE8AIAQuwDgZzwA4Ki8AIAOPQAAkLwAYLu8AADFvADglzwAwAO7AACfPADAarsAQH88AGCcvABgODwAYJI8AKCVuwCAhzwAgB89AKAlPABAxzsAYJI8AAA2vQDAdbwA4KG8AKC0vAAAfjwAYPA6AEDMvACAwDwA4N67AGA4vQDgXr0AINQ6AKBtOwDAHD0AYIO7AIC/PADgDjwAADE7AEA5vQCg2TwAgLe8AIDgPACgsbwAIJ48AICaPABA4LwAwAi9AIBGPQAAqzwAIIK8AMAzPQDgMzwAYCM7AAA4PQBAtDwAoKK7AMC0PABALTsAAIq8AIBEOwDg4rwAgDi7AOClvACgDD0AoO88AEDKPAAALTwAADg8ACBIPQCAFbwAQIa8AOCUvAAAmDwAQIO8AAATvAAArjwAoN47AOAZvACAODwA4FE8AGCpPACglzwAgAs9AMAOPQBgY7wAYKg8AMAHPAAAhDwAwJA8AABGvAAAR7wAwBQ6AMD1uwDAw7sAwNU8AMDovABgLbkAYIe7AKAFPADAmzwAQG08ACBevABANroAwEg7ACBJvACguzwAQBq7AKA6ugCADD0AgO88AECRPAAgWbwA4L+8AIApvABgMr0AIKg8AEAxvAAgozsAQEW4AADGvAAgGDwAQDw7AABHOwDgAL0AwLg8ACBsvACAz7oAQOO7AOCSPABgKT0AYCS8AMAcOwDARDwA4P+8AIBEPAAgtDwAwL+6AAB6PABAp7wA4Oe8AEBCPACgKTwAQJY7AECUOwCATbwAYJO8AODgPADgjTwAYK08AOAVvQDA1jwAAAS8AMAcPQBAMz0A4AU8AOAXvQDgIzwAYOc7AGDSvADA9DwAIBE8AICPvABgwbsAAAI9AKB9vAAg8DsAgCY9","index":0},{"object":"embedding","embedding":"AEAqvQBAEr0AAJK8AOA4OgAAPrwA4DE8ACC6vADA2bwAAEq9AMDVOwAgs7sAwPW8AKAEvQAgT7wA4MU8AAADvACAHD0A4I88AOCGPQBgWrwAANG7AICRuwAAM7wAoEC9AOCGPADg0bsAACy9AAApPQBgl7sAgF49ACAVvACACrwA4Eq8AKAYPADAYD0AQDS9AOAWPQCAJb0AoOI6AOByPQCAS7wAwAE8AIByugBgDz0AYFi9AOBGuwCg17wAgEM8ACCtOgAACjwAAM48AECPvACAD70AoFu9ACAHvQCg5zkAIEk9AGD7PACggTwA4N08AMB2PABgKj0AoJo7AMAqvAAgcrwAYGM9AMCavQBgjzwAQKu7AADTOQCAlbwAwJU7AKBAPACgtTwAQI88AOCBOgDAH7wAADU9AEC2uwAgRLsAwIC8AOAFOgAARb0AQLg8AIBvugDAxrwAgCU9AOCvPAAA7jsAYI67AMBgPAAgfDwAYFe7AOCpPACgwDwAoBa9AGDyPACg3TwAwNG8AMA2OwDgEz0A4AA9ACAzugDAWboAAMQ8AEAnPQCgbjsAgLK7ACDfOwAgAb0AICC9AKALPQBgJ7wAQNs7AOABPAAAyDwA4CU9AMCtOwCAXj0AwO48AKCTPABAA7sAgIS9ACBDOgCAdj0AoCK7AKAjPQBg3zsA4Jg8AAARvQDgqLwAQOg5ACCiuwAgFD0AACQ9AKDsvADATj0AIC89ACCIvACAcjwAIHA8AKCsPACgHrwAgJA8AECqPABgAb0AIAC9AIDWuwCgkT0AQCC9AAChPAAAhrwA4Fo9AOBbOwAgV7oAIKe9AGCKvABAqjwAQAU9ACCBPADAXr0AoDE9AAD9vABgGzwAgAY9AKC9PACgkjsAQNS8AECivACgTDwAwEs7AMCKPACgmj0AwCA9AMALPQCgyTwAoBy9AOClPADg7TsAQFW8AEBlvQCgZjoAQBA9AOAHPABAF7wAQFy8AMCHvACgRbwAAOQ6AMAcvAAgKzwAQCO8AAAUPQBAALwAADC9AAASPQCAfLoAgPa8AEBKPQAgM7wAwFG8AABYPQDA/7wAYCq8AKAVPABgvrwAgMA8AKBTvQBg1jwAwDa9AOBpPAAAF70AwJ28AACTvACgOT0AIHc7AEBhvABAnzsAQBM9AAC2PADgizwAgC09AOAsPQBA3joAgBa9AED4OwDgpzkAIMu8AEDiuwBgCT0AwEq7AKB3vQAgLb0AQFW8AKCRvQDAKD0AoP+8AGBVuwCAVL0AALQ8AMDJPADg/jwAwLI8AADpPABAyrwAwKC8AMAtvABgXj0AIDu8AKAGPQCgCT0AwA+9AEBTPAAgB7wAoIY8AIDROwCAz7sAgC69AGDhOgBgurwAQJs8AKAUPACguzsAIM08AMBlvACAbbwAYI88AIAougAAYrwAgC29AGAVPQCAbDsAQCw8AIAUPQBAvLsA4DY8AGAUvACAGr0AYLK8AEAivQBgsrwAAOU8AIAYvQCAiTgAgLO8AIB3OwBg9zsA4LM8ACDmOwCg8DwAYAy8ACDWvACgR70AICK8AACnugDAtDwAoC49ACCIugDA6LsAAE47AGAHvAAgG70AoDI9AADPOwAA/7wA4G09AECMPAAgKD0AIKE6AIAcvACg+DsAoPS8AIDwPABgo70A4LS8AMB/vADAmzwAQBc9ACD9PABgUDwAwPY7AOBSPADgDjwA4CI9AEAqPQDgIz0AoPc8AIAhPQCgy7wAoCQ8ACC5OwDgXjsAIMY7AEAjPQCgijwAoPA8AMC7uwAgdj0AIAU9AKBcPACgtrwAwAu9ACCevADgbjwAwC89AIATvACAwbwA4KQ8AKB3PACgebwAAP68AEArvQBAqLwAoCy9AACPuwDAFb0AgFW8AGDBPABgWL0AwEc6AOBJvQBgEb0AQLk7AIBavABgmr0AoJM7AECGPACgFz0AgDS9AMAXPQAgRb0AgNY8AIAKPACgAL0A4OU8AEBtvACgFTwAwCa8AOAUPQBgM70A4HE7AEDgOwAADjwAQAC9AID3PACA7TwAYAo8AMD2vABg6bwAQAc9AGDIPABgjTwAoGe8AEABPQBg27wAIL48ACACvAAgfzwA4Fo8AIA4PADAjzwAoDW9AKCQPACg8DwA4Ck9AAAFvQCgHb0AIMI7AEDRPAAg4rwA4Di9ACDivADgiDsAgMK8AMC1uwDg7DwAgDw9AAB4vABgCb0AQCo8AKBXPACg2LwAgAo9AEDVugAAr7wAQNW8AMBrOgAAmDwAAEI9AICGPAAA6DwAII+9AICbPACAzDwAAA68AGDXPACgxTwAAM68ACDhvACAvjsAoA89ACDXPAAAH70AwLg7AGBUvQDAAD0AABS9AKBFPQBgGLwAQDc9AOAYvADAAjwA4Mc7AGAauwCgBr0AoBM9AEBDPACAHj0AYAo9AOBNvQAAJzwAwIE9AGB7PACgBjwAQHe7AOCwPAAgqjwAINg8AADiPADgJb0AABG9ACC9vACgVz0AwJe8AKDuPABADz0AwDW8AEBBPQAAlDsAAGq9AGCsvACgNT0AgDo8AKAwvQBgjbwA4F+9AKD0uwDgTr0AAES9AMACPABgdzwAQGQ7AGBGPAAgZTkAQAo8AAAaPAAAUb0AAM28AOCYugAAQz0AQLq8AODpOwCA0jwA4Pc7ACBHvADA8zwAoLi7AOAbPQDg7jwAIPq8AGAwPABAAL0AgM48AGAFOgDAtTwAIBW8AEAHvABABT0AIPU7AMDNvADAfbsAQOY8AIDSvACAGbwAQBs5ACDoOwAAB70A4Bm8ACCIPADAYrwA4GG8AABtvQDgmToAwIQ7AGCCOwBAhbwAAAq9AOCPPABAtLwAIC48AGA5PABgZDwAYJQ8AGDBOwCA1rwAwO88ACBHvADgLzwA4GS9AADLvABgnjwAAHo8AKAMvQAA4joAIHe8AKCHPADABDwAoFe7AABYPACAa7wAAM+7AGBtPQAgMLwAIN88AIDSPABAuDwAIAU9ACApOgDAk7wAYPy8AIDpPABAZT0AwDi8AGBWuwAgKDwAwLs8AOAIvADAqTsAoIu8AOB7PAAgCTsAgIs8ACA+PADgnLsAIIY8AEAePQCAQzwA4DG8AEAOvACgRbsAYJy7AKCEuwDAZ7wAAOm6AGBUPQAA3DsAYD29AABBPABAQLwA4KS8AMAnvQCgdbsA4N+8AMCrvADAkLsAYHk8AGBbPQBgILsAIAy9AAACvQBgsDwAQEa9AKBluwCA1zwAABq7ACCDuwAgoDwAAAk9ACCWOgCA3DwAIIi8AGA3PQCg87wAQH+8AIACvQAgi7wAoFo9ACCGOwDAHb0AQAu8AAAtPQCAkLwAoOs8AIBTuwAA+DwAgJm8AIAdOwAAhboAYPy7AMDUuwDAyrsAwK48AOANPQDANjsAYF68AMCzugCgLzwAQJI9AGAIPQDgnbsAYAY8ACCrPAAAMT0AwOw6AODlPABgjLoAAJm8AICaOwCgXb0AgJs7ACAjvACAWrwAYDU9AGD/ugBgK7wA4Bs9ACDrugBA1DwAwG88AKDTvAAAO7wAINk7AIAovQBgqDsAgN48AGC2vACAUjwAAMK8AICwOgBAibsAAAI9AMCWPABAtrwAAMg7AKBHOgAASTwAIPC8AODTOwAArDkAwLu8ACDEOwBgoTwAIOM8AGAePQDgRD0AQLi8AAB3uQBAyTsAYJu8AEAvvQCAPLwAwDy8ACBYvQAgJb0AQNU7AKAAPQBgjLwAYKG8AECYPABg2zwA4Lm8AEBWvQBgl7wAQMC8AODBOwBAVzsAQAA7AOAouwBglzwA4G28ACDbOwBAHLwAIBy9AKDovACA9LcAoK07AIDEvAAgVT0AQIo7AOBUvQCgcrwAABK9ACD1PADgIz0AoI08AMDEPACAoTwAQJI8AMAtvQAglDwAAAy9AECYvABglLoAYGy8AOCQPQCAET0AgJq7ACCkuwCgMbwAIK05ACCFvABgK7sAILM8ACAJPQCASjwAQJ25AMDXPAAgnTwAIKm6AEBkvADArTwAoME8AMCTvABgtrsAoNY8AIAJvQCAgjsAoIc8AADiOwBAEDwAoIC7ACBEPACgALwAYJC8AIBfPADgvzwAYD87AEBZvAAg97sA4IW6AACUvACAg7wAwIQ8AGAavABAJT0AoMk7AIBJPQAgRDwAYD+8AOAZugCAvTwAoBe8AMC7vAAAn7wAIIc8AGA9vQDg/TwA4O68ACBquwBgibwAYLO7AEDMPADgSL0AACO8AKC/ugAA+zwAIOE7AEAcvQDg6TwA4O28AMBQvACAy7wAYKw8AODSuwDgADwAgBG9AKCbOwDA77sAgKU8ACCVPADgMrwAYEU8AMDsPAAAlLwAgLU8AEC+PABgJD0AoJO6ACAWvQAAqjwAIHO9AKDbuwDA5zsAoH+8AAASvACA0DsAICy8AIACvACAWzwA4A49AIByOwAgIz0AgD08AABHvAAAgjwAIA48AGBvPQDgBb0AQFS7AKAdPQBA5zwAIN86AMCPvACgELsAYM+8AACXPABgUbwA4CI9AKAtPACgjroAQCK9AICovABA1jwAQJG8ACCOPABAgLwAYDK9ACBsvACgf7wAAGs8AKA7vABAQDwAYJU8AOCouwBgj7sAgIY7AOADOwDg1jwA4OA8AAB7vACgi7wAoNW5AADTuwBAqTwAoIq8AADYPACgDL0AQNC7AECDOwDAOTwAwBI8AGCAPABAIT0AIM87AEDTugBAWrsAAIW6AOB/OgCg7LoAYFm8AOC/vACAi7sAQCA9AEA7PQBgBjwAQA47ACAAvQCgRzwAgHY8AOAXvQBgTjwAwOi8AOBjvAAAPLwAgBw9ACAfuwCgnzwAwPI7ACAovQAg2DwAIJ+8AEBvOwCAN70AYA08AKAFPQAgr7sAIFe9AICUPQAAwzwAgGm6AIDUuwBgDLwAoDE8AEArPADgnLwAgLy8AEAoOwCgML0AoGu8AAAFPQCAbjwAABi7AIAFPABgtjwAIJU8AMD9uwBAL7sAAPk7AEAiPQAgej0A4FI8AIBnPAAARLwAABS9AEA+PQBA5rwAgAU8AGBXPABAxrwA4Aw9AIAYvACgmLkAQHE7AGALvADAGb0AYEA8AIBZPQBg6zwAwD09ACAnOwDg0LwAQCy9AMDCuwBgwbwAgJU8AABfvAAA4zwAAE+9AED2OgAg1DwAwHK8AAChPABAobwAYB69AECMvABA3rwAQF89AODtOgAgeTsAAJK8AGDDvADghbwAoBo8AEB/vABg1TsAQKW8ACADPACAhjwAgJo7AEDlvABgCb0A4KY8AGD5vABAmLwAINa7ACAOvQAABroAgH08AADmvAAgH70AoCM9AACLvABAEL0AoKQ7ACCvuwAgnjsAACA9ACCNvACgzrwA4CW8AKAMvABAmzwAIIg8AMANvQAguzwAIKC8AOBAvABgYrsAoFC8AIBhOwBgAbwAgAu8AGD4vAAgsTwAYCi9ACAyPQBgGz0A4EO8AEAHPADACz0AQJM9AAA7vACggzwA4C+6AMAbPQAAajsA4D+8AKCfPADgBz0AYKi7AMAcvQBAc7kAQHq8AEBdPADAlbwAwAu9AICLvACgx7sAQFA8ACBMPACgbT0AgDO7ACCePACgbLwA4Di8AIDZuwCgDb0AgDG9AMD8vACAdzwAQCm9AKCCvABAOrwAgNw7AKC6OgAgJboAYDC9AAC+PABAVzwAQBk9AEC9PABAK7wAAFI9AAAHPQAAgbwAQCa9AMAZPQDgBzsAIK27AMABvQAApLkAQBw9ACCyvAAg3DoAgLY8AIAHPQDA67wAYPy7AKDyPABgEbwAQCU9AOAAvADgDjoAALG8AAAVvAAAi7wAwM+7AOBbvQCgH70AgJE8AAATPABAvjwAoMc8AMBmuwAgwbwAQHc9AGBEPACgEbwAoCK9AGAHPAAA2DoAIBG9AGAJvABgMbsAwBw8AOCcvAAgVLwAYFi9AKA2vQDgbLoA4GY8AMCSPABABr0AoJq8ACBHOQCAsrwAYKo8AGC7uwAgPbsAwLI8AADKPADgRb0AoBe7ACAGPQDgVLwAABm8AIBAPAAgCj0AYIo5ACAjPQBgPLwAIPI8ACCFOwDgh7wAoDk9ACAQuwAAGr0AIN07AKC8vABgCT0AACu8AMC7vAAgXLsAIK08ACBDvQAALb0AwFg8AIA/vQAglroAYMC7AOBuPADg6boAAAg8AECnPACA+TsAILs8AEDjvABAJLwAgA49AGBvPQDgzTwAoBk8AGA1PADANTsAoJ87AEDGvACACj0AYNC8AKC7uwBgOT0AQLu6AOD4vABA+DoAAD+8AADIvADgxTwAALy8AKBxPABgILwAIKk7AAA1vACALrwAoAQ9AGA8PABAPzwAYPQ8AICAOwDgfTwAgIq8AOAkugAgWrwAoMA8AOBqOwBgjjwAoBM7AKDyvADArrsA4Oo8AID7OwAAyrwA4JM7AMDJPABgFL0AgJW8AEASOwCAHjsAgBY9AOCuvABgVTwAICE8AGB5PADgtTsAIB69AOD+OwBA9TsAICw9ACDlvAAgfzwA4J07AKACvQBAZrwA4Ai8AEAMPQCggTsAoBo8AMDVvADgsLwA4Bq7ACDGvADAsrwAAJY8AGAqPQCA5jkA4P07AIAivQCACL0AgJu8ACBVPADgzrwA4E27AIDOOwCgZjwAgI+8AMCPOwDAAT0AoLk8AEDbOgCgBj0A4H48AICougBAu7sAoG89ACDBPAAgzDwAwC+8AEAHPACAdTwAQLw8AKAvPQDAyboAgDO8AMCBugDAMzwAgCi8AED3OQAAtjoAYIM9AMCuvAAARD0AAGQ7AODwOgBA27sAIIG8AMCyOwDA5rwAQN68AIDyOwDgyLwAgHU8ACBePAAgILwAwJW6AOC3OwAgxzsAYDy8AGABOwAgETwAgE29AMAfPQDA+jwAwCa9ACA+uwDAljwA4Lm7AIDPOwAgnbwAgDO8AOBBuwBAcLsAgHq9AGCLPACAXTwAgNO8AOCsOwCAFD0A4C87AEAYvABghrwAYLg8AODiPABAI7wAIIa8AADvvACAP7wAAOS6AGAVvAAgvbwAgAi8AMAWvQBgfrsAwIs8ACB/vQCAOrwAYEi8AKCSPADgezwAAJi8ACALvQDgLT0A4Cw9AGDxuwBg87wA4Ce8AMDJuwDgALsAYAK9ACB5vAAgErwAwIG8AKAqvAAgEDwA4EI7AGDvvABA8rwA4M87AABnuwBAD70AQNA7ACBCuwDAzbwAoNc6AOAmPQDAcLwA4Au8AOBhvAAAXDwAQJu8AACluwBA0jwAQBE8AABJvQDA/bgAwC29AMBRugDgfDwAgLE8AKAHPAAgLzwAgA49AGAEvQDAZ7wAoDW9AGBBPAAgvrkAAAI8ACCkvACAPj0AIHE7AGBVvQBgFbwAoEA9AADouwAAazwAgDo9AKDUPADAj7wAgCa9ACAvuwCAjbwAoMu8AMAKvADg27wAANC7AADkvAAgAzoAIHA8AECXPAAgersAgO28ACCsPQDgcjwAINc7AGCLPQDgBzwAIAA8AEBFPQDA/jwAwI68ACDZvABAuLoAQAS8ACBEPABAgDsAIPI7AIDUOQBA4rsA4Jy8AICVPAAArTsAwFi7AMAFvQAAiToAYA69AADUNgCA6zwAoOq7AGCVOgCglTkAAPe7AAA9OQCgfzwAwFA8AGBuuQBgbDsAoDe9ACAxvABA+jwAYAw8AECTvAAAZrsAYJ48ACCMOwDgCLwAwM48ACAHPACAJTsAwJe8AMCVvACAAjwAgLC7ACB1ugBACL0AwDo8AMCovADgGj0AQIS7AIC/vACg5jwA4Cg8AKDLuwDAVzwAgCi7AAAYvQBAEr0AIKY8AOD/PABAYbsA4K46ACD1vACgcLwAQEs8AGC/OwCg47wA4Ca8AMAPvQDgLDwAQBc9AAC1PACgZrwAwCU8ACBavACAED0AgI48ACAyvACgD7sAoI68AECYPABADD0AoPg7AACCPAAAeDwAAAi9AEAoOwBAaLsAQBA9AEDLPAAg4zsAABQ7AKCQvACAjbwAwLY8AECAPACgTbwA4Os8AKBAvQDAgzwAQAy7AKAivQDAGbwAYKg8AOCaOwAAqrsAQJ47AADZvAAgPzwAgOw7","index":1}],"model":"text-embedding-3-small","usage":{"prompt_tokens":38,"total_tokens":38}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3073ff4ab4ebb9-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:23 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '16586' + openai-organization: + - braintrust-data + openai-processing-ms: + - '145' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=X0vsYomiPqzwgU5t_vNVbhniuh2B8yZ7FYj.JKYZjvg-1777320442.7686315-1.0.1.1-8kWzxyeZTFxdw3pkqVJBQvCr5hldettiWgFFGWDqO_27KA7MNGkf9KyQv0BTY3LOCgzuwhmRMEwzUnCQA5v2UoC5QaqBoFIf4cZzVuhvH3FEqhlEJjSCn.emU8WQG5jZ; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:23 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999966' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_41c357abee394c67a6a859070ffdfcf0 + status: + code: 200 + message: OK +- request: + body: '{"input":["What is the capital of France?"],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '104' + Content-Type: + - application/json + Cookie: + - __cf_bm=X0vsYomiPqzwgU5t_vNVbhniuh2B8yZ7FYj.JKYZjvg-1777320442.7686315-1.0.1.1-8kWzxyeZTFxdw3pkqVJBQvCr5hldettiWgFFGWDqO_27KA7MNGkf9KyQv0BTY3LOCgzuwhmRMEwzUnCQA5v2UoC5QaqBoFIf4cZzVuhvH3FEqhlEJjSCn.emU8WQG5jZ + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AAAsPQDghTwAYPo8AADOPACAurwAwGG7AKCHvACAbzwAgCo8AGAYvADAqDsAYNC8AMB9vQCAWbwAQH68AAC0PABAubsAIKo8AMCVPQDgyLwAoB87AIBOvAAAH70AIEI8AICAPQDAnzsAwDm9AKAGvAAAwToAwBw9AKAsPQCAyLwAYE67AAArPQDgw7wAACe9ACAOvQBAJ70AgJ48AAD1PABAGLsAwEK8AEADPABAUTwAgOC8AMD1vADAILwAQB29AAAHvQDg2jwAwBo9AGCqOwDgCT0A4AY9AECWvAAAvjsA4Mg8AGAoPABgQT0AwFw8AKAYPQAAGrwAgNw8AEBEOwCgbrkAYA49AOCLuwCgFz0A4HY9AEBNPQCgVbwAAJI8AED2uwCAPTsAQBS8AMCSvABAt7sAQAm8AIAEvQBg+bwAIBa9AMBwuAAArbwAwBq8AEAZPACAOL0AwOc8AGD5PAAgwrwAwDi9ACBVOwCAVzwAAMe8AEDrPADgMrwA4KM8AEAGPQCAMTsA4I69AGAuOgCAjzwAgL+8AKD6vADA1DwAoMg8AGAkPQBAkjwAALG7AABvOwAAIr0A4PG8AAAfPABAEjoAQL88AEBFvQCA8rwA4K28AMDRvADg6zwAwMO8AGABPQBAUD0AYEO9AKAmPACAJDwAwGu8AEB1uwBASLsAgBA9AOAavQAgDzwAAO68AIDGPACgCj0AwAI9AOCIPAAg+zwA4I68AGClvADAEDwAQMU7ACBmPADguzwAQGk7AMDRvADgWbwAoCS9AOAxPQDAHTwA4Cm9AAAwPQAAwLwAgIq7AICAPACgVLsAoBu9AGBnvACAqjwAYKY7AEAxPQDAI70AAFM9ACAlvQCgj7sAAEE8AOD2PACAEr0AwKy8AGAdPABAeLsAgNW8AKDPOwDAXj0AQLc8AMADPQBA1bwAoES9AIAqPQBgn7oA4Ji8AKDkvACA5bwAADs8AKAaPABgfz0AAAI9AMArvACgybwA4Gm8AABGPABAGD0A4KG8AMB8PQDAArwAQDS9AKCtPABgDj0AYEQ8AOBQPAAABbwAgJW8AECsPACgJ7wAAIQ8ACChvAAA4zwAgD+8AIBKvABAgrwAgDi8AGABuQDAp7sAgMy8ACCCOwBgOzoA4M08AOANugBALTwA4LE7ACDCPACAxjwAwGk8AKBPOwBgQbwAgGi9ACBCPQBgeT0AQGk8AADkOwDAlrsAYKg8AKAGvQBAjzoA4E68AAADvQCAkDwA4II8AODrPACAEb0A4L48AEATvADgtTwAwO08AMADvACATbwAQMe7AMC2PABAFz0AYKA7AEAsPQCAZj0AYAC8AGCcugCAibsAAK+8AKBlPQBA1LwA4Oy8ACAKvQAgp7wA4BM8AADXOgDAVLsAYHq8AECrPACAfzkAQLm8AKDhvAAgZrwAICe8AMD3OwDgJ7sAQHq8AMALPADgnrwAgIQ8AKCIvAAg/rsAQJC8AKARPQBg3LwAgEE9AEBEvACAKT0AQFW9AIBbugCALj0AwLY8AMBivAAAAj0AALQ8AGChPABAorwAoFS7AKBYugDgNL0AgKy7AIBwOwBg1zwAwB+7ACCrvAAAszwAQNu7AAAtPABALb0AoIQ9AEDDuwAATT0AwFQ9AOAMPAAAHr0A4PW8AIDgPADADr0AwPe7AGA+PQBAZ7wAQO06AGDyPACAxbsAAMA8ACAGPAAA2TwAwPS7AOBeuQDgdjwAAC08AEDSPAAgGL0AoLu8AIBhugBgJTwAIJQ7AAA4vABA1bwAYLK8AEDHOwBgIT0AgPY6AAB3vABgAr0AwDc9AEAZPABACz0AYBw7ACDKvACgsDwAgMo8ACBjPABgCjsAIN68AOAMvADgIbwAoAe8ACDXvAAg/joAgI89AMC+vACAhb0AYB09AOAavQDgSL0AwMO8AOBNvQCAB70AoCu7AKBRPAAgqjsAgKW8AEB1PQCAEL0AwMw7AKBSuwAgr7wAYCg9AKDevABANT0AYL08ACBSPABAlLwAwPa8AMCKvABghzwAwN+8ACB7PQBAZzwAYKg9AAAzvQDgPrwAoAM9AICjuwDgXjwAwAM9ACAaPQCgmb0AYFI7AAD8OwDggzwAINW7AOAcvQCAqDwAoJC8AOABvQAARr0AoJs9AOCUPAAg4DwAgIc7AABPPABgA70AYJi7AEBrvQDAJDwAICW8AOAgOwAgVD0AoIA9AACPvQCguDwAwHi8AIASuwDAgLsAQEC9AKAZPABgyrwAIAK8AICIvAAgRL0A4KI7AMD1PAAghboAwBi7AACQOwCgEDoAICY7AODsuwBABDwAID09AOALvQDgzzwAQJs8AMB8uAAAPDsAwIO8AMAYvQCgkLwA4CA9AEBfPAAgQr0AYD09AOCrvACg/zsAILC8AOCXvADg9rsA4Bg9AADTPADAuT0AgAg8AICIOQCgxTsAgHY9AIA8PAAA6TwAgAk9AGDPPADg3DwAQIM8AAAlvQCgQ70AwAK8AAA4PQAgGjwAwIQ8AIDVvAAAu7wAoG69AKCGPABgXL0AoMK8AIAmvQBgKDwAoB+7AMDNvACArb0AwOu5AEBBOwBAHz0AgPW8AACvPABgMz0AYF28AOCQuwDgv7sAgOc8AGDzuwBgL70AAIS8AICDvAAgYr0AwIK8AIB9PAAguDsAQB88AOAoPQCgeT0AIEk9AMDPPABgwLwAoDe8AIBnPADARb0AAGk8AECUPAAAPbwAwBs8AEDAvADAETwAgNS6AADzvACAzDwAAIs8AKCiuwDAnjsAgOQ8AKABvADADbwAAJe7AGABPQCgYr0AoN47AMCrvACgOrwAgFu5AGAQvAAgsDoAQCO8AKBJPQAglDwAwCw9AGBzugAgOrsAALA7AMBMvABgEb0A4Je8AACcOwCgSL0AIKm8AOAKvQCAqrwAQGc9ACA9vQBgMr0AAKq7AODdOwCg5rwAgIi6AGAuPQAgO7sAoPM8AODkPABAID0AALE7AIBuOwCAjzsAgPI7AKCFOQCARbwAQA29AOCbPABgLD0AgJw8AOBPvADATTwAIC88ACD6vABA+zoAgKS7AAB3PQBgbDwAQB47AIBMPADAXL0AgGO9AOCuPADAbrsAwGo8AECHvACAab0AoKG8AKB9PQAA5jsAYPm7ACAfOwCALTsAINE7AKC8vADgybwAwEK8ACCBOADgwTsAwNK8AOAtvQBAvzwAAGW8AGDXPABg37wAQGA8AGC3OwCgNzwAgIy6AGCrOwBAUjwAAJe7ACArPABAbroAAPQ8AEC2uwBAqDwAQLq7AED3PABg3rwAoA48AECMvABgjjwAQC08AGA9PADgszwAIOu8AEB+vABgqzwAoHm8AOArPAAArbwAYAe9AIDJPAAgHLsAABg8AIAjvQDAMz0AwJk7AGANvAAAojwA4K68AGB4ugCA1zwAYCY9AODnOwAAWrwA4Pc8AKDtPACgoDsAQIo7AACWOwAAtDwAwAA9AECfugAgxbwAAIg9AIDcvABA1bwAIAc9AACNvACgCL0AwG47AGAJvQAgxTsAYFs9AMD1PACAA70AICm7ACC+PADACT0AgAW9AEAsvADA9LsAoDa6AMDPvAAAKjwAADs9AIDWPADgSbwAoB89AGBWuwDgCzwAgKM8AIBNPQBA4jwAwFO8AECDvABgmbsAQMO8AEAlPQDgyTwAIBy9AIAaPQBgWDwA4FY8AOCYPAAA8rsAYEG5AEADvQCAhzsAADs8AAClOwAAJrwAwOC7AIAjPACAGrwAYCq9AIBOvQAA2LwA4M47AIAfuwBgLj0AwEw6AKAhvAAgxTwAQNC8ACDuuwAAF7wAIAe9AEDTvADg6DwAoCg8AECluwBgNDwAQI88AKD6OwAAI7wAoNW8AIAwvABAujsAgIw8AGCMPACgH7sAwDS7AIAxvQCgnzoAYOq8ACDQPAAg1jsA4P68AMAJPQCgSj0AgFO7AGCIvADgtbwAIKW8AOD6vABARTsAgJU8AMDAvACgnzwAAEe8AKDEuwBAgLsAoIe7AMBrvQAAPTkAYDY8AMADvQBAVLwAAAi8AGCovAAASDwA4Oq6AOC7vABAgrwAwLG8AEB+PABADr0AwGK6AAAgPADg5rsAIIW9AABmPACgFL0AQPe8AECQPAAgtzsAID48AADhPAAAALwA4JS8AOCiPQBAX70AQPC7AMC+vADAGTwAwIm7AEC2uwDgz7sAAKY8ACBwvADAKz0AAPW8AGCxOgBgUb0AAP68AIArPADAuTwAQKq8AKByPAAAxjwAwAm9AKATPABAtjwAoKc8AICLvABgKr0AQHW6AMDvvADA7DwAQIo8AIDYuwAg4rwAACM9AGAxPABgtTwAwO07AKDtvABgBb0A4AY9AKCkvABgLj0AQEM9AIAwPADAlzwAYPq7AKDXPAAgObwAQKk8AOB3PACA2jsAID48AIAJvQBAT7sAYJE7AOAPvADg6DwAYAI9AAApvQCAHj0AoNc7AKAjuwAgyDwAYLE7AICdOwDgdrwAoEY9AOA7vQCAS7wAYDa8AGDmPABA4DoAIOE8ACCtPACglbwAgDK8AKCQuwCgB70AAOm7AEBQuwCgu7wAINi8AIAovQBgGL0AQCA9ACBkPABAA70AYIc7AECUPABAxTsAoO48AGCcuwCgBTwAAIC8AOBbvQCAF7wAAFc8AIA/PAAAMbsAwE28AIBUvAAAA7sAANe8AGBeuwDAljwAAOQ8AGDYPAAgZDsAIIO8AIBFvQDANDwAIEq8AEAyPQBgFbwAgB29AGCnvADADT0AYNE8AGBpvABglDwAQLU7AMAAvQCABj0AAEm8ACADvQAgXjwAoKO8AGBdvADAkDwAgIs9AOANvQBgCbwA4FY9AID0vACg+TwA4JK9AKBJPQAgPb0AgD69AODWPAAgazwAwLq7AMAiPQAAmLsAwLM6AMAQvAAgFT0AQKW7AECQvAAgo7wAIPs6ACAAvQBgF7wAoOO8AMCCPABAYzsAgFQ8AED+OwBgdjsAICY9AICCOwCACz0AQCi8AACYPQAASDwAIDo8AMAXvQCAqbwAoIW8AGCXPACArTwAIOS7AIB2PAAgnrwAwCu8AKC3vAAAizwAYPQ6AICyOQCgurwAYKk8AECHvAAA2TwAYL08AGAyPQBgdbwAILq8AEA3vACgZDwAwHi8AEAkvQCAJj0AYE88AAAcPAAgILsAQCk8AKDJOQBgv7oAQIm7AAAxvAAg7jkAAEq8AOAwuwDA7rsAwEG8AGARPQAA/zwAQI88AKCkvABANzwA4Gg6AEBqOwAgO7sAgD89AKAtvQCAdb0A4Bc9AOAuPACgZLwAgCK8AECTvAAgL7wAAL08AOAjvQBAkb0AgA48AOCmvADAFTsAQEK8ACCnvACAvzwAAOY8AACCuwBA27wAoHu8AED4vAAgFjwAoPE7AKAwuwDgpjwAoHq8AKCaOwAgLrwAYKC7AOBZuwBAnbwAgBC8AAAZvQBg3DwAwFG8AABOPACgSzwAQM07AMCpvAAgCTwAoC27AMBNugBACb0AYG28AMC5PADAK7wAYEq6AODePADgDD0AQJq7AGBSvQBAjbwAoDg8AKAAvQBAJL0AIAe9AGCZuwAALbwAAC07AEBsPAAAJT0AQAo8AODcPABABL0AgC+7AGD4PADgyzwAgEs8AIDhuwBAqTwAgP26AABcPABggDwAICc8AIC6vACgAbwAILk7AAAQPQDATjwAYDY9AIAIPACAfbwA4P48AAAKPQCAFb0AwEO9AACtPAAgq7wAwHi8AGAJvAAgezwAQCk9AIADPADghbwAYHI9AIC5PABALLwAgFm8AGApPABAID0AIAg9AEDivADA7TwAwJW8AKBDPABgQLsAYBu9AAAtOQBgDrwAwKG8AECdPACACj0AIBE8AECTPAAAxrwAAK08AGBoPADAHbwAoC68AAAtPACgKD0AIAi9AIAyvQCgVbsAABC7AICjvADAk7wAAEu8AEAVvAAAursAIIU8AGCBPACgk7wAwD66AEC2vAAAGzwAgJ+8AKBzuwCgz7wAIA09AEBgPAAAkrwAgLk8AMD3PADgErwAIN68AACBPACgRz0AYHW7AODLPACgAzwAwAm8AGA+uwBASLwAYDs8AIAfvABg7bsAgKC7AMDaPADAQD0AoNi7AADVOwCAL7sAIFg8ACCAvQAAuLwAQIU7AGCNvACA17sAIIS8AIACPAAgSzwAoJ08AOBnOwAAmTwAwE48AKA2vQCAxbwAoL08AADMPACATrsAYGw7AAA7PQBAaLoA4Ny8AMCNOwBA3DwAAPS8AMDSOgDAfTwAgKK8AKCnOwDgzboAIBm7AEAWPABgtTwAoMO7AOAPPQAgNjwAYLC8AIAQugDAlrwAAOk6AODaPABg2TsAIC49AMBbPAAAAj0AgP25AABXvAAgITwAgAu8AMDZvABg3LsAQB89AACyvADgEz0AQAs9AGBPPAAA77wAABQ8AKBfOwDAAjwAIIy7AGCMvADAJL0AAHA9AIBGvAAAGD0AwJQ7AEB9vAAASzwA4GO9AMD6uwDAQDwAIPQ8AMCzPADgwLsAYGy7AABhvABgoLwAICg6AMB7PQCAFr0AwBE8AMDdvACAGrwAgI28AOB4vADg5LwAQJg8AMD8OwCgsLwAoCs7AAA7vQCA9LwAYL45AKC7vADAj7wAIEc9AID9OwDgEj0AIAe9AMDOvABA27oAwEC7AKBKvADgADsA4I07AIAyOwBAkjsAIFM8AEDbvABgIj0AINe8AEAIPADg9TsAYN48ACAFPQDgJTwAgJ67AOANvQDggDwAYFe7AGBsPQAAqzwAYCA9AEAYPADgBj0AIPA7AEDpvABgDTwAYAG9AGADPQAgLrwAYCC9AIDLPACA/LwA4Lu7ACCPuwDgHD0AgCs8AMDNvAAgLTwA4Ac9AODbPABAi7wAQIm8AIAAPQBgO7wAADq9ACAnuwCAUzsAwAg9AADXuwCAMboAYJy8ACCauwCg1bsAgLG8AOBdPACAFT0A4Fs8AADPPAAAtDwAwAO8AADAvAAAFDwAwIq8AGBJvABg2rsA4Im8AIByPABAgjsAYB27AOBdvAAAOzwAoMI8AOCyvAAANLwAoLs8AGAAvQAAjDwAYES9AMABvACAxTwAgPW8AAAtPQCgCz0AgPc8AGDQvACg67gA4Em9AMAsuwAg+bwAoOs8AMA/PABAszwAAB29AAAGvAAAgDwA4K67AICyvAAAirwAQLo8AEBtvABg97wAIIe8AKDmOwDgzbsAAP87AIBFPACg+rwAIMS8AKALvQBgojwAwMO8AKD7uwAgjLoAAEa8ACAcvADACD0AADs8AACvuwBA0DwA4Ac9AODXOwBgkzwAYKA8AGAHvQBgPbwAwEe8ACC+vAAg7TsAwNy7AGAEvABAOD0AAOQ8AMB5vADARL0AQNQ8AOCyugBgArsA4HU8AKCtPADAWjwAoOS7AOBXvAAgLzwAgB28AAANPACgiLwAQEy8AKBwOwDg47wAoP68AEDNPADAVDwAALi8AIAwPQDA4TsAgKM4AOBIPQCAIj0AwNM7AED9PAAAKr0AQGC8ACBSuwBAtbwAgFO7AGAEvAAAET0AIL48AGCIPABAGjsAABW8AMAqPQAgkLsAABq9AECOvACAZrsAAJW8AKCPPACAMbwAoD08AADWuwAgEboAYHE5AAC7PABgrjwAgGk8AOAbPQAgFrwA4LE8AACYvAAgsDwAQAI8AOALvADgULwA4IU8AICJPADg3LsAQBk9AMD1vACgrTsAYLe8AIDMPAAgOTwA4Ok8AMDavACghrwAwOk7AMDFuwDARzwAgCa8ACCIvABAsTwAIKo8AEAzPACgx7wAQJK8AMCsvABggb0AQPA8AECiPAAA/DsAoEM8AEDdvABAWzsAgA87ACCMPADgJ7wAAIY8AOBRvAAgDLkA4PI7AABWvACgEz0AwAq9AGCouwCATjwAYDy9AECBPADAIzwA4LS7AKApPADgszsAAK28AOCVPAAAGT0A4PW7AACfvACgHr0A4Ko7ACCruwCABT0AoNC7AGAxvQCg4zwAwO28AADUPABARj0AQCU8AODYugAAgbwAQE+8AODPvAAghTwAwPe7AEDjvACA9zsAwDI9AECqvABg6TsAwA89","index":0}],"model":"text-embedding-3-small","usage":{"prompt_tokens":7,"total_tokens":7}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f307401fc005d15-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:23 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '8344' + openai-organization: + - braintrust-data + openai-processing-ms: + - '263' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999993' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_30a8ef5fc42b490487b07278a71d2c84 + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are an expert Q&A system that + is trusted around the world.\nAlways answer the query using the provided context + information, and not prior knowledge.\nSome rules to follow:\n1. Never directly + reference the given context in your answer.\n2. Avoid statements like ''Based + on the context, ...'' or ''The context information ...'' or anything along those + lines."},{"role":"user","content":"Context information is below.\n---------------------\nThe + capital of France is Paris. Paris has a population of 2.1 million.\n\nThe Eiffel + Tower is located in Paris, France. It was built in 1889.\n---------------------\nGiven + the context information and not prior knowledge, answer the query.\nQuery: What + is the capital of France?\nAnswer: "}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '826' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMWiH7mAYzFwJj8VolhYfVLe6ueg\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320444,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 153,\n \"completion_tokens\": 7,\n \"total_tokens\": 160,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_4debc47fe0\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f307404fbe8ac7c-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:24 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '512' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=TgGqRQfM59xcTjFC7wxGssAR0wZ9SXhH6sz12l6lkik-1777320443.6764722-1.0.1.1-W33CHdoExhgypeDCE1HIj3LL3tqKd6EYTzCjEZz88jQFgSoEAiANjEC_1l6cmQcvd3.JtMh4EGpya9QpQbFNURQoM8RVxICsENP3JGUorCSES.Adej5.9lW9Qnqd0Zoc; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:24 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999825' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_8458527f2d614b05a60e0d61ccdccc36 + status: + code: 200 + message: OK +- request: + body: '{"input":["The capital of France is Paris. Paris has a population of 2.1 + million.","The Eiffel Tower is located in Paris, France. It was built in 1889."],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '214' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AGCbPAAg1TwAIBc9ACDQuQDgHr0AoIe6AIA7vQDggbwAgAG8AGBQOwBggjwAwBC7AOA2vQDA6zwAgCy8AOAFuwAAxLwA4Is6AOBxPQDA5LwAICa6AGD/OgBgubwAwLM8AEBRPQDgozwAgDW9AIBXPAAglrwAANU8AOC0PACgXLsAYLi8AOArPABAkrwAoJy9AAA5vABg5bwAINI8AIApPABAubsAIBq8AOCWvAAAszwAQBK9AIC/vABAljsAIGi9AKAKvQCA4jwAQEM7AKAevAAgWDwAoEY8AACTuwDgED0AwIM8AID3PADASzwAQJc8AIBHPQBgcDwAYBU9AAASPQDgBjwAIGA8AEAEPACAyzwAYAQ9AIBQPQAAlrsAQD07AECzOgBA9TwAoMy8AEAmvACAg7wAgLm7AEADvQDA0LwAYLa8AMCyuwCg4bwAgAu8AEDPOwAgCL0AQCc8AOBaOwCgSb0AwDC9AKAuvABAuzwA4JM8AADYPACANrwAYJW7AEBCPQBgD7sA4HC9AEAbPQBgIT0AgM48AMDivACgpjoA4Iw8ACBtPABAkrsAIKK7AGAguwCgAr0AoLK8AIDuPACg9DwAoJo8AADEvABgLrwAYJg7AGC4vABAtjwA4Jm8AGAWPQCg0DwAAEK9AOAPPQCAljwAYI68AGCNOgCg7zoAIGs8AIB1uwCAQ7wA4Ge7AICFPAAAfT0A4Js8AKC+uwDABz0AoIS8AEBBOwAg1LkAoGO8AECmvADgHzsAwF89AEASvQAgDr0A4BC9AOAqPQDgvzoAAD69AABSPQCAdLwAAM47ACDzPAAAULsAIFa9AMDtPAAgHTsAQAE9AODQOwAA6LwAgPo8AODmuwDgSLwAQBM8AEB9PACgY70AIAW9AEC9uwBgnbwAIGw7AMCIOwAgjD0AIO28AMBAPAAAxLwAoCm9AKBcPQCAbDoAgF87AKDxvABgqLwAoHU9AEBbvABgiD0AwMG7AGCEOwDASr0AoKU7ACDMPABAjz0A4NO7AEBePQDgq7wAQKG9AIC4OwAg2jwAgCy8AABQtgCAZjoAAME7AMC3PABgUbwAQJi7AKBkvADAfbsAAA68AKAkvQBgpDwAgKI3AMBkvAAApDwAANK7AAC/PACABD0AIG08AKC9vACAOz0AYIQ8AEBmPABAFz0AYL88AMC3PAAADjwAIE69AEBxPQBADD0AgGY8AMDBOwCgrbwA4KM8AMA8vAAg3LkAQDK9AMAIvQAgJbwA4Ag9AKAkPQDAar0AwBU8AAAfvACAmjsAAPY8AGANPAAgcbsAAG67AGCEPABAPT0AwIw8AGCVOgDgJj0AoG28AIAJPQCA4LkA4Ey8AOCqOwDA8DsAgH+7AEA2vQDgrDsAABC8AEBLPABAxTsAQFW8AIBsvABgpbsAoFm8AIAEPABgibwAwJi8AMBtvADAz7wAQL48ACDcugAgnb0AIAA9AECnPAAgkzsAILa8AIDfuwBAWLwAoFI9AIAjPADAGz0AQIE6ACAqvADgSz0AwAE7AIDWvACA8jwAwOs8AEBGvAAggr0AgFS5AACFvADASLwAwJk7AGCfvACgCTwAICa8AIBFvAAAbjwAgFq8AMDOPAAgEL0AYOY8AECwvACAtz0AQMo8AEA0uwAgKL0AoDq9AGAoPQDg5bwAoA+9AADxPADA4bwA4L07AEDzPADApTwAAIU7AKBpOwCgPbsAwFw7AEASvQBg0DwAQKe8AODxPADgbrwAoFQ8AGCKPABgMj0AQIS7AICoPABAZ7wAgAS8AMDEOwDg5DwAYBa7AIAouwAgr7wA4BU9AMD5vAAgID0AQAw8AOAFvQDAJT0A4FU8AAASPQAAwLwAgLa8AACyvACg4bwA4Nk8AEC2vACgajwAwEI9ACA6PACgFb0A4Lo8AGATvQBgK70AIK28AKARvQDATL0AoMa7AMA9vQDgIT0AoKS8AKADPQAAOb0AAL07ACArPQDAZLwAYEI9AGCrvABA7zwAQPw7AEAnvACg2bwAQCy7AICavADAUD0AQDK9AABlPQDgJT0AgO88AEDxvACgHb0AYD88AKAWPQBgAb0AIDM9AKAGPQAAnL0AQD88AOAmPAAAgTwAoJq7AGAhvAAgRj0AYGm9ACCWvABAdL0AQJc9AKDZOwDAiTwAwNW7AKD4PAAA2bsAQMk8ACAnvQAgxrgAgK48AGCIPACANj0AwF89AGCdvABAjDwAgBq9AGCkPAAgHDwAoMC7AKAUPQDAyrsAQM47AOCCvABAp7wAQAO9ACAXPQCAAb0A4Bs9ACBkOgCgADsA4Ac8ACANvAAgDz0A4Ea8AOBmOwBgyjsAAKI7AGAEvQAghrwAAMS7AMA0vABgmTwAYPg8AOADPQAgPLwAACI9AAAivQDASTwAYDa8AIAEvQCgSroAwMs7AIBvOwBAST0AoAA9AGAjuwAACr0AoA09AOC9vADAcrsAQMA8AKDfPAAAEz0AQNI8AMBkvABgxbwAINA7AACbPAAAfjwAoPo8AMDFuwDAt7wAoBa9AKAjPAAgEr0AoFO8AAABvQDAxTwAQHk8AAC1OwDAxb0AgIC9AMDkPADgHT0AoKa8AODqPADAkTwAAAe8AMBBPQDAdLoA4AM9AOAnvQCgKb0AQO86AGDYuwCARL0A4Lm7AEAwPACgnzwAwDc8ACBFPADAXD0AYI49ACAQvACAs7wAoM87ACBJOQBA0jsAQPQ8AIB1uwDgvzsAoNs7ACDXOwAg8TwAIFy8AGAeuwBAPD0AYBw9AAC/OwAgbTwA4Lc8AGCEPACgBL0AINi7AEBHPQCgU70AgCg8AGDmvADgPLsAYFQ8AOA3PABAirwA4Gk8AGBtPQCgrDsAAEU9AGBCPADAP7sAAB+7AMDnvADgq7sAgLA6AIBGPABgo7wAYKu8ACDnvACgarwAAHY9AMBIvACAg7wAoIe8AEDAuwAAjzoAwPi7ACAdPQBgoLwAAI07AADePABAiT0AoKo8AMAcOgDgfDsAIMK7AICvvABAcTsAQOm8AKBVPADAuzwAgIC8AIACvAAgObwAoMA8AGDrvACA97oAwFm7AAAwPQCAUDwAgJQ8ACCbOwCgzLwA4Ea9AGCoPAAAmzwAgAQ8ACBdvADAU70AoFI8AEAqPQDgHDwAwP46ACD/PACg0jwAYAE9AEDmvAAAIb0AIKI7AADGvABgvzwAwMe8AOACvQCgBj0AYLK8AGDhugBgb7wAgF89AABzugAAlboAgNe8AEDMPADg7jwAgAI8ACCPPADgqTwAoAM8AACfOwBg6TwAgD48AGAEPQAgrLwAwBA7AMCOvAAgcDwAgOI7AIC7PABgqLwAoKS8AKBVvADgrTwAgIM8AGAkPQBg47wAYEq9ACCCugAAEzwA4CY8ACCmvAAANz0AQP88AOCavADAhLwAYCC8AOBCPACAXDwAAFI9AMBAPABAuLwAYBU8AMBkPABAXrwAAL67AOBQOgCAzjwAIKI8AIAwPADgn7wAIII9AOCavACAkLsAoN08ACBivADAWLwAQKY8ACBdvAAAszwAAMo8AMDuPADgSLwAoMm8ACCsPABgGz0A4Iu8AAB6vACghLwAYIu7AEDROQCAGDwAAC09AKDkPACgJb0AYMs8AOCkOQCApjwAwPA5AOCVPACAnTwAgMq8AGCvvAAgTrwAIPQ5AIBGPQDAyzwAAEm9ACACPABgDTwAoJO7ACDLOgAAzbwAgEk8AADHvACArDwA4O64ACDOPACgBLwAYGi7AMCyPAAgIbwA4Ha8AIAUvQDgaLwAwHW8AODZuwAgpDwAYFK7AODcuwDgDjwAgJ87AGDoOQBAAjwAICm8AAA2vACA+DwAwNU7AAB2PAAg5zoAgKk8AKA0vAAAwbkAIPa8AGCNvABARzsA4Gw8AMDHPACARbwAAH68AABYvQCgFDwAwMS8AKBAvACADLwAgD29AGAVPQBAET0AYLO7AICFvAAAqrwAwJ68AAAxvQAAsLoAQLU8AIAsPADAPj0AACw4AKA9PABAlLwAIFU8AOAcvQBgkTwAwOg7AID6vADARLsAQMo8AAC9vABATTwAoCg8AMAKvQAgT7sAoG+9AEAyPAAAC70AIHA7AGAVPAAg/7wAAJm9AOCavADA3rwAYKy8AEANvABgULwA4Fy8AMDnPADgyLwAQKC8AKBUPQBgmbwAgFa8AIDxvACg5TwA4L+8AMA4uQBAlTwA4E+8AKCtvACAiz0AAKW8AEDGOwDAJb0AADW8AOAGvAAAqDwAIEu8AOD9OwAAxDwAQOe8ACBCOwBgVTwAQPa8AIDovADAT70AwAe8ACDkvACAOj0AAL46AOBMPADAq7wA4Co9AEDCugDgDzwAAHw4AEDGvABg47wAYAs9AIAGvQCgzTwAAAc9AMCBOwDgSzwAAKe8AACwPABAFr0AIG88AOAsvACgDTsAIMU8AICVvADgajwAIEk8AKAIOwDgjD0AwDg8AMAuvQBgLzwAwE48ACCZPABgkDwAACc8AIDwPACAOr0AQIw8AOD3vACAcrwAYGq8AEA2PQBggjsAQIg8AGBEPQAAcLsAoJ+8AODsvAAA/bwA4B48AAABOwCAsLcAABe8AGAFvQDgxrwAgF09AICPPACgQLwA4F08AOA3PAAgHrwAoHe7AGCGvACA2bwAQAm9AOAZvQBAJL0AwLE8AGCCuwDAEbwAoKa8ACCqPADgfTwAII+8ACBhPABAYLwAgBM9ACB9vACgbjsAAA69AICyvACAnTwAQHa7ACB0PQBA3rwAAMG8AGDpvADg1zwAYCy8AICEPABAWjwAwIi8AMBDvQBA+jwAwE68AIAIvQAg7jwAIKy8AMBEvACAljwA4Kc9AIAdvQCAOTsAYCU9AIDwvAAgXj0AAIO9AIAfPQDgIbwAYNK8ACBGPQDgrDwAoCO6AGBSPACASDwAoIk6AGCFPADgAz0AoHG7AKB0vADAh7wAIKA8AMAFvQAgeboAIKq8AOC9OwCAGL0AQJU8AKDqOwDAljwAYPk8ACAevADgHD0A4IO7AGCNPQBA+jwAYN88AOCxvABAEr0AwLG8AODLOwAgG7wAYJO8ACCtOgBgfrwAgN27AKBXOwDABj0AwC48AGCWPACAzzsAgGu8AKAsvQBg3jwA4Pc8AICXOwBA5LsA4KO8AKDDPAAAcTwAwNA7AGAvvQAgHD0AQKY8AKDgPADAmzwA4Jg7AKAFvQDgNrwAALI8ACBFuwBAGTwAoC29AGAhOwDgOjwAYNC7AEA2PQBgwjwAoBq8ACBGuwAgpzsAIAy8AGBoPADA/zsAwBI9AGAPvQDgeb0AgLo8AADYPAAAzLwAAAa8AIDEvACAi7wAwLE7AABlPAAgGL0AgAo7AACZvABAML0AABY8AKAQvABAoDwAAPU8AEDGPADgK7wAwI68AMBBvAAgvDsAYHu8AGA8PADABzwAgC+9AGAIOwCgZzwAwM46ACDrPADgg7oAgFa8AKBfvAAAhz0AwCe8AMC4PAAgMbwAoP67AED8vADg1bsAAIq8AGBEvAAAFr0AYNy8AICpPABgkDwA4CM8AACZvABgjToAAJu8AOA3vQCA/DsAoIo8AIAvvQCgK70AgEW9AOAlvQDgvzsAYDY8AABoPADAWD0AAOU8ACAfuwDAML0AQK08AEDFPAAAgrwAIAK8AKD0OgCgpDwAwBu8AKAsOwDgkjoAAHS7AIBivACgi7wAoFs8AMAHPQAAMj0AwFg9AICOvADgar0AgJk9ACAQPQAgj7wAYFu9ACDsPACAurwAoI27AEABPABAHT0AwBs9AKBDPABgrrwAQC89AECdPACAEr0AoIG7AMDHPAAgYj0A4EA8AEDbvABAwDwAgAi9AIC0OgDgA70AQAe9AAC8PAAAkDwAgFq8AOAoPADgJzwA4M48AMDhOgBgHbwAYDU9AOCEOwBgjbsAoJC8AODWPADgujwAYKW8AACVvAAAqzkAYJC7AMAtvAAAkjsA4JQ8AIADOwDAlbwAYKI8AAC9OwCAmrwAgBO8AKC1vABgAz0AoAu8AAAevQBAc7wAANA8AGA1PAAgCLsAgK88AGCZOwCgbrwAgIq8AACrPACgtzwAwLW8AADlPABgGzsAYHA8AMCRPAAgBLwAAF88ACA9uwCg5rwAoC48AABSPAAg2jwAwJe8AKBgvABgzjwA4Aw9ACBFvQBAm7sAgFE8AIDHvABAsrwAoBG9AIAjPQBA/zwAoNI8ACDwPADgDj0AIG88AKAovABAzbwA4Ow8AAAkPQDgSLwAQIk8AOAGPQDAB7wAwB69AEC7vACg2zsAoI28AGAXuQCg6TwAQJS8AGDjOwAAlDwAwCK9ACAZvABA2jsAAIi8AGAjPAAgfTsAAEG7AEAkOgBAiLwAoF08AOB2vAAAOTsAoA89AAA/vAAgjDwAYHM7AGAKvQCAjbwA4M47AOATvQDgT7wAgCI9AGBFvABgBzwA4Ok8AKADPADgr7wAYAS8AIAAPQAAUjwAoEa7ACAPvQBA6rwAYFo7AACzvAAgnDwAAAM9AICJvAAACD0AwMq9AMBfvAAAhDwAoAM8AOCcPAAgjLwAwNC7AKC0uwAAcLwAQBG7AOAbPQBgFjwAwJQ7AEAKvQCgDTwAYJ+8AEAHOwAgnzsAQFc8AAA4PACAH7wAAIq8AIAdvQAgMzoAIFe8ACAYvQDAp7wAABg9ACCMOwCg5DwAwAq9AEDGvAAgBrsAQCq8ACBWOwCgj7sAYOU8AGAivADgmTwAwHk8AID9uwCg0TwAwMm8AEBMPACADbsAwLs8AAAePQAAtjwAgLM8AEDavAAArTwAIDk8AEAbPQCgiDwAgPc8AGCzugBAfjwAQFu8AIA4PABACrwAYNS6AICDPAAgQrwA4AG9ACCRPADgobwAgE+7AMCtuwBg7DwAoMM7AEB/vQCgJjsAYDg7AICxPACglzwA4FE6AOAhPQDg6DwAwDa9AECLvABgkzwA4Mg7AICfvABAMr0A4Cq8AMATPABA1bwAQMC8ACAzPAAgRT0AYOw8AMCPPADggz0AgAo8AMB+OwDA3zsAYO27AMCLOQDAgjwAIIO8AOAhPADgtjoAQLa6ACA0vQAgozwA4M47AMAoOwAgQzwAIPA8AIDMvADAC7wAACq9ACDuvAAgITwAwAK9ACB3PABgh7oA4Ea8AAAfvQBgrLsAgKa8AEBLuwAgiTwAgEg8AKARPADgQjwAQAa9AICsvACAFj0AoFM8AADxvACg07wAIJo8ACClvACADL0AYGE8AIAQuwDgZzwA4Ki8AIAOPQAAkLwAYLu8AADFvADglzwAwAO7AACfPADAarsAQH88AGCcvABgODwAYJI8AKCVuwCAhzwAgB89AKAlPABAxzsAYJI8AAA2vQDAdbwA4KG8AKC0vAAAfjwAYPA6AEDMvACAwDwA4N67AGA4vQDgXr0AINQ6AKBtOwDAHD0AYIO7AIC/PADgDjwAADE7AEA5vQCg2TwAgLe8AIDgPACgsbwAIJ48AICaPABA4LwAwAi9AIBGPQAAqzwAIIK8AMAzPQDgMzwAYCM7AAA4PQBAtDwAoKK7AMC0PABALTsAAIq8AIBEOwDg4rwAgDi7AOClvACgDD0AoO88AEDKPAAALTwAADg8ACBIPQCAFbwAQIa8AOCUvAAAmDwAQIO8AAATvAAArjwAoN47AOAZvACAODwA4FE8AGCpPACglzwAgAs9AMAOPQBgY7wAYKg8AMAHPAAAhDwAwJA8AABGvAAAR7wAwBQ6AMD1uwDAw7sAwNU8AMDovABgLbkAYIe7AKAFPADAmzwAQG08ACBevABANroAwEg7ACBJvACguzwAQBq7AKA6ugCADD0AgO88AECRPAAgWbwA4L+8AIApvABgMr0AIKg8AEAxvAAgozsAQEW4AADGvAAgGDwAQDw7AABHOwDgAL0AwLg8ACBsvACAz7oAQOO7AOCSPABgKT0AYCS8AMAcOwDARDwA4P+8AIBEPAAgtDwAwL+6AAB6PABAp7wA4Oe8AEBCPACgKTwAQJY7AECUOwCATbwAYJO8AODgPADgjTwAYK08AOAVvQDA1jwAAAS8AMAcPQBAMz0A4AU8AOAXvQDgIzwAYOc7AGDSvADA9DwAIBE8AICPvABgwbsAAAI9AKB9vAAg8DsAgCY9","index":0},{"object":"embedding","embedding":"AEAqvQBAEr0AAJK8AOA4OgAAPrwA4DE8ACC6vADA2bwAAEq9AMDVOwAgs7sAwPW8AKAEvQAgT7wA4MU8AAADvACAHD0A4I88AOCGPQBgWrwAANG7AICRuwAAM7wAoEC9AOCGPADg0bsAACy9AAApPQBgl7sAgF49ACAVvACACrwA4Eq8AKAYPADAYD0AQDS9AOAWPQCAJb0AoOI6AOByPQCAS7wAwAE8AIByugBgDz0AYFi9AOBGuwCg17wAgEM8ACCtOgAACjwAAM48AECPvACAD70AoFu9ACAHvQCg5zkAIEk9AGD7PACggTwA4N08AMB2PABgKj0AoJo7AMAqvAAgcrwAYGM9AMCavQBgjzwAQKu7AADTOQCAlbwAwJU7AKBAPACgtTwAQI88AOCBOgDAH7wAADU9AEC2uwAgRLsAwIC8AOAFOgAARb0AQLg8AIBvugDAxrwAgCU9AOCvPAAA7jsAYI67AMBgPAAgfDwAYFe7AOCpPACgwDwAoBa9AGDyPACg3TwAwNG8AMA2OwDgEz0A4AA9ACAzugDAWboAAMQ8AEAnPQCgbjsAgLK7ACDfOwAgAb0AICC9AKALPQBgJ7wAQNs7AOABPAAAyDwA4CU9AMCtOwCAXj0AwO48AKCTPABAA7sAgIS9ACBDOgCAdj0AoCK7AKAjPQBg3zsA4Jg8AAARvQDgqLwAQOg5ACCiuwAgFD0AACQ9AKDsvADATj0AIC89ACCIvACAcjwAIHA8AKCsPACgHrwAgJA8AECqPABgAb0AIAC9AIDWuwCgkT0AQCC9AAChPAAAhrwA4Fo9AOBbOwAgV7oAIKe9AGCKvABAqjwAQAU9ACCBPADAXr0AoDE9AAD9vABgGzwAgAY9AKC9PACgkjsAQNS8AECivACgTDwAwEs7AMCKPACgmj0AwCA9AMALPQCgyTwAoBy9AOClPADg7TsAQFW8AEBlvQCgZjoAQBA9AOAHPABAF7wAQFy8AMCHvACgRbwAAOQ6AMAcvAAgKzwAQCO8AAAUPQBAALwAADC9AAASPQCAfLoAgPa8AEBKPQAgM7wAwFG8AABYPQDA/7wAYCq8AKAVPABgvrwAgMA8AKBTvQBg1jwAwDa9AOBpPAAAF70AwJ28AACTvACgOT0AIHc7AEBhvABAnzsAQBM9AAC2PADgizwAgC09AOAsPQBA3joAgBa9AED4OwDgpzkAIMu8AEDiuwBgCT0AwEq7AKB3vQAgLb0AQFW8AKCRvQDAKD0AoP+8AGBVuwCAVL0AALQ8AMDJPADg/jwAwLI8AADpPABAyrwAwKC8AMAtvABgXj0AIDu8AKAGPQCgCT0AwA+9AEBTPAAgB7wAoIY8AIDROwCAz7sAgC69AGDhOgBgurwAQJs8AKAUPACguzsAIM08AMBlvACAbbwAYI88AIAougAAYrwAgC29AGAVPQCAbDsAQCw8AIAUPQBAvLsA4DY8AGAUvACAGr0AYLK8AEAivQBgsrwAAOU8AIAYvQCAiTgAgLO8AIB3OwBg9zsA4LM8ACDmOwCg8DwAYAy8ACDWvACgR70AICK8AACnugDAtDwAoC49ACCIugDA6LsAAE47AGAHvAAgG70AoDI9AADPOwAA/7wA4G09AECMPAAgKD0AIKE6AIAcvACg+DsAoPS8AIDwPABgo70A4LS8AMB/vADAmzwAQBc9ACD9PABgUDwAwPY7AOBSPADgDjwA4CI9AEAqPQDgIz0AoPc8AIAhPQCgy7wAoCQ8ACC5OwDgXjsAIMY7AEAjPQCgijwAoPA8AMC7uwAgdj0AIAU9AKBcPACgtrwAwAu9ACCevADgbjwAwC89AIATvACAwbwA4KQ8AKB3PACgebwAAP68AEArvQBAqLwAoCy9AACPuwDAFb0AgFW8AGDBPABgWL0AwEc6AOBJvQBgEb0AQLk7AIBavABgmr0AoJM7AECGPACgFz0AgDS9AMAXPQAgRb0AgNY8AIAKPACgAL0A4OU8AEBtvACgFTwAwCa8AOAUPQBgM70A4HE7AEDgOwAADjwAQAC9AID3PACA7TwAYAo8AMD2vABg6bwAQAc9AGDIPABgjTwAoGe8AEABPQBg27wAIL48ACACvAAgfzwA4Fo8AIA4PADAjzwAoDW9AKCQPACg8DwA4Ck9AAAFvQCgHb0AIMI7AEDRPAAg4rwA4Di9ACDivADgiDsAgMK8AMC1uwDg7DwAgDw9AAB4vABgCb0AQCo8AKBXPACg2LwAgAo9AEDVugAAr7wAQNW8AMBrOgAAmDwAAEI9AICGPAAA6DwAII+9AICbPACAzDwAAA68AGDXPACgxTwAAM68ACDhvACAvjsAoA89ACDXPAAAH70AwLg7AGBUvQDAAD0AABS9AKBFPQBgGLwAQDc9AOAYvADAAjwA4Mc7AGAauwCgBr0AoBM9AEBDPACAHj0AYAo9AOBNvQAAJzwAwIE9AGB7PACgBjwAQHe7AOCwPAAgqjwAINg8AADiPADgJb0AABG9ACC9vACgVz0AwJe8AKDuPABADz0AwDW8AEBBPQAAlDsAAGq9AGCsvACgNT0AgDo8AKAwvQBgjbwA4F+9AKD0uwDgTr0AAES9AMACPABgdzwAQGQ7AGBGPAAgZTkAQAo8AAAaPAAAUb0AAM28AOCYugAAQz0AQLq8AODpOwCA0jwA4Pc7ACBHvADA8zwAoLi7AOAbPQDg7jwAIPq8AGAwPABAAL0AgM48AGAFOgDAtTwAIBW8AEAHvABABT0AIPU7AMDNvADAfbsAQOY8AIDSvACAGbwAQBs5ACDoOwAAB70A4Bm8ACCIPADAYrwA4GG8AABtvQDgmToAwIQ7AGCCOwBAhbwAAAq9AOCPPABAtLwAIC48AGA5PABgZDwAYJQ8AGDBOwCA1rwAwO88ACBHvADgLzwA4GS9AADLvABgnjwAAHo8AKAMvQAA4joAIHe8AKCHPADABDwAoFe7AABYPACAa7wAAM+7AGBtPQAgMLwAIN88AIDSPABAuDwAIAU9ACApOgDAk7wAYPy8AIDpPABAZT0AwDi8AGBWuwAgKDwAwLs8AOAIvADAqTsAoIu8AOB7PAAgCTsAgIs8ACA+PADgnLsAIIY8AEAePQCAQzwA4DG8AEAOvACgRbsAYJy7AKCEuwDAZ7wAAOm6AGBUPQAA3DsAYD29AABBPABAQLwA4KS8AMAnvQCgdbsA4N+8AMCrvADAkLsAYHk8AGBbPQBgILsAIAy9AAACvQBgsDwAQEa9AKBluwCA1zwAABq7ACCDuwAgoDwAAAk9ACCWOgCA3DwAIIi8AGA3PQCg87wAQH+8AIACvQAgi7wAoFo9ACCGOwDAHb0AQAu8AAAtPQCAkLwAoOs8AIBTuwAA+DwAgJm8AIAdOwAAhboAYPy7AMDUuwDAyrsAwK48AOANPQDANjsAYF68AMCzugCgLzwAQJI9AGAIPQDgnbsAYAY8ACCrPAAAMT0AwOw6AODlPABgjLoAAJm8AICaOwCgXb0AgJs7ACAjvACAWrwAYDU9AGD/ugBgK7wA4Bs9ACDrugBA1DwAwG88AKDTvAAAO7wAINk7AIAovQBgqDsAgN48AGC2vACAUjwAAMK8AICwOgBAibsAAAI9AMCWPABAtrwAAMg7AKBHOgAASTwAIPC8AODTOwAArDkAwLu8ACDEOwBgoTwAIOM8AGAePQDgRD0AQLi8AAB3uQBAyTsAYJu8AEAvvQCAPLwAwDy8ACBYvQAgJb0AQNU7AKAAPQBgjLwAYKG8AECYPABg2zwA4Lm8AEBWvQBgl7wAQMC8AODBOwBAVzsAQAA7AOAouwBglzwA4G28ACDbOwBAHLwAIBy9AKDovACA9LcAoK07AIDEvAAgVT0AQIo7AOBUvQCgcrwAABK9ACD1PADgIz0AoI08AMDEPACAoTwAQJI8AMAtvQAglDwAAAy9AECYvABglLoAYGy8AOCQPQCAET0AgJq7ACCkuwCgMbwAIK05ACCFvABgK7sAILM8ACAJPQCASjwAQJ25AMDXPAAgnTwAIKm6AEBkvADArTwAoME8AMCTvABgtrsAoNY8AIAJvQCAgjsAoIc8AADiOwBAEDwAoIC7ACBEPACgALwAYJC8AIBfPADgvzwAYD87AEBZvAAg97sA4IW6AACUvACAg7wAwIQ8AGAavABAJT0AoMk7AIBJPQAgRDwAYD+8AOAZugCAvTwAoBe8AMC7vAAAn7wAIIc8AGA9vQDg/TwA4O68ACBquwBgibwAYLO7AEDMPADgSL0AACO8AKC/ugAA+zwAIOE7AEAcvQDg6TwA4O28AMBQvACAy7wAYKw8AODSuwDgADwAgBG9AKCbOwDA77sAgKU8ACCVPADgMrwAYEU8AMDsPAAAlLwAgLU8AEC+PABgJD0AoJO6ACAWvQAAqjwAIHO9AKDbuwDA5zsAoH+8AAASvACA0DsAICy8AIACvACAWzwA4A49AIByOwAgIz0AgD08AABHvAAAgjwAIA48AGBvPQDgBb0AQFS7AKAdPQBA5zwAIN86AMCPvACgELsAYM+8AACXPABgUbwA4CI9AKAtPACgjroAQCK9AICovABA1jwAQJG8ACCOPABAgLwAYDK9ACBsvACgf7wAAGs8AKA7vABAQDwAYJU8AOCouwBgj7sAgIY7AOADOwDg1jwA4OA8AAB7vACgi7wAoNW5AADTuwBAqTwAoIq8AADYPACgDL0AQNC7AECDOwDAOTwAwBI8AGCAPABAIT0AIM87AEDTugBAWrsAAIW6AOB/OgCg7LoAYFm8AOC/vACAi7sAQCA9AEA7PQBgBjwAQA47ACAAvQCgRzwAgHY8AOAXvQBgTjwAwOi8AOBjvAAAPLwAgBw9ACAfuwCgnzwAwPI7ACAovQAg2DwAIJ+8AEBvOwCAN70AYA08AKAFPQAgr7sAIFe9AICUPQAAwzwAgGm6AIDUuwBgDLwAoDE8AEArPADgnLwAgLy8AEAoOwCgML0AoGu8AAAFPQCAbjwAABi7AIAFPABgtjwAIJU8AMD9uwBAL7sAAPk7AEAiPQAgej0A4FI8AIBnPAAARLwAABS9AEA+PQBA5rwAgAU8AGBXPABAxrwA4Aw9AIAYvACgmLkAQHE7AGALvADAGb0AYEA8AIBZPQBg6zwAwD09ACAnOwDg0LwAQCy9AMDCuwBgwbwAgJU8AABfvAAA4zwAAE+9AED2OgAg1DwAwHK8AAChPABAobwAYB69AECMvABA3rwAQF89AODtOgAgeTsAAJK8AGDDvADghbwAoBo8AEB/vABg1TsAQKW8ACADPACAhjwAgJo7AEDlvABgCb0A4KY8AGD5vABAmLwAINa7ACAOvQAABroAgH08AADmvAAgH70AoCM9AACLvABAEL0AoKQ7ACCvuwAgnjsAACA9ACCNvACgzrwA4CW8AKAMvABAmzwAIIg8AMANvQAguzwAIKC8AOBAvABgYrsAoFC8AIBhOwBgAbwAgAu8AGD4vAAgsTwAYCi9ACAyPQBgGz0A4EO8AEAHPADACz0AQJM9AAA7vACggzwA4C+6AMAbPQAAajsA4D+8AKCfPADgBz0AYKi7AMAcvQBAc7kAQHq8AEBdPADAlbwAwAu9AICLvACgx7sAQFA8ACBMPACgbT0AgDO7ACCePACgbLwA4Di8AIDZuwCgDb0AgDG9AMD8vACAdzwAQCm9AKCCvABAOrwAgNw7AKC6OgAgJboAYDC9AAC+PABAVzwAQBk9AEC9PABAK7wAAFI9AAAHPQAAgbwAQCa9AMAZPQDgBzsAIK27AMABvQAApLkAQBw9ACCyvAAg3DoAgLY8AIAHPQDA67wAYPy7AKDyPABgEbwAQCU9AOAAvADgDjoAALG8AAAVvAAAi7wAwM+7AOBbvQCgH70AgJE8AAATPABAvjwAoMc8AMBmuwAgwbwAQHc9AGBEPACgEbwAoCK9AGAHPAAA2DoAIBG9AGAJvABgMbsAwBw8AOCcvAAgVLwAYFi9AKA2vQDgbLoA4GY8AMCSPABABr0AoJq8ACBHOQCAsrwAYKo8AGC7uwAgPbsAwLI8AADKPADgRb0AoBe7ACAGPQDgVLwAABm8AIBAPAAgCj0AYIo5ACAjPQBgPLwAIPI8ACCFOwDgh7wAoDk9ACAQuwAAGr0AIN07AKC8vABgCT0AACu8AMC7vAAgXLsAIK08ACBDvQAALb0AwFg8AIA/vQAglroAYMC7AOBuPADg6boAAAg8AECnPACA+TsAILs8AEDjvABAJLwAgA49AGBvPQDgzTwAoBk8AGA1PADANTsAoJ87AEDGvACACj0AYNC8AKC7uwBgOT0AQLu6AOD4vABA+DoAAD+8AADIvADgxTwAALy8AKBxPABgILwAIKk7AAA1vACALrwAoAQ9AGA8PABAPzwAYPQ8AICAOwDgfTwAgIq8AOAkugAgWrwAoMA8AOBqOwBgjjwAoBM7AKDyvADArrsA4Oo8AID7OwAAyrwA4JM7AMDJPABgFL0AgJW8AEASOwCAHjsAgBY9AOCuvABgVTwAICE8AGB5PADgtTsAIB69AOD+OwBA9TsAICw9ACDlvAAgfzwA4J07AKACvQBAZrwA4Ai8AEAMPQCggTsAoBo8AMDVvADgsLwA4Bq7ACDGvADAsrwAAJY8AGAqPQCA5jkA4P07AIAivQCACL0AgJu8ACBVPADgzrwA4E27AIDOOwCgZjwAgI+8AMCPOwDAAT0AoLk8AEDbOgCgBj0A4H48AICougBAu7sAoG89ACDBPAAgzDwAwC+8AEAHPACAdTwAQLw8AKAvPQDAyboAgDO8AMCBugDAMzwAgCi8AED3OQAAtjoAYIM9AMCuvAAARD0AAGQ7AODwOgBA27sAIIG8AMCyOwDA5rwAQN68AIDyOwDgyLwAgHU8ACBePAAgILwAwJW6AOC3OwAgxzsAYDy8AGABOwAgETwAgE29AMAfPQDA+jwAwCa9ACA+uwDAljwA4Lm7AIDPOwAgnbwAgDO8AOBBuwBAcLsAgHq9AGCLPACAXTwAgNO8AOCsOwCAFD0A4C87AEAYvABghrwAYLg8AODiPABAI7wAIIa8AADvvACAP7wAAOS6AGAVvAAgvbwAgAi8AMAWvQBgfrsAwIs8ACB/vQCAOrwAYEi8AKCSPADgezwAAJi8ACALvQDgLT0A4Cw9AGDxuwBg87wA4Ce8AMDJuwDgALsAYAK9ACB5vAAgErwAwIG8AKAqvAAgEDwA4EI7AGDvvABA8rwA4M87AABnuwBAD70AQNA7ACBCuwDAzbwAoNc6AOAmPQDAcLwA4Au8AOBhvAAAXDwAQJu8AACluwBA0jwAQBE8AABJvQDA/bgAwC29AMBRugDgfDwAgLE8AKAHPAAgLzwAgA49AGAEvQDAZ7wAoDW9AGBBPAAgvrkAAAI8ACCkvACAPj0AIHE7AGBVvQBgFbwAoEA9AADouwAAazwAgDo9AKDUPADAj7wAgCa9ACAvuwCAjbwAoMu8AMAKvADg27wAANC7AADkvAAgAzoAIHA8AECXPAAgersAgO28ACCsPQDgcjwAINc7AGCLPQDgBzwAIAA8AEBFPQDA/jwAwI68ACDZvABAuLoAQAS8ACBEPABAgDsAIPI7AIDUOQBA4rsA4Jy8AICVPAAArTsAwFi7AMAFvQAAiToAYA69AADUNgCA6zwAoOq7AGCVOgCglTkAAPe7AAA9OQCgfzwAwFA8AGBuuQBgbDsAoDe9ACAxvABA+jwAYAw8AECTvAAAZrsAYJ48ACCMOwDgCLwAwM48ACAHPACAJTsAwJe8AMCVvACAAjwAgLC7ACB1ugBACL0AwDo8AMCovADgGj0AQIS7AIC/vACg5jwA4Cg8AKDLuwDAVzwAgCi7AAAYvQBAEr0AIKY8AOD/PABAYbsA4K46ACD1vACgcLwAQEs8AGC/OwCg47wA4Ca8AMAPvQDgLDwAQBc9AAC1PACgZrwAwCU8ACBavACAED0AgI48ACAyvACgD7sAoI68AECYPABADD0AoPg7AACCPAAAeDwAAAi9AEAoOwBAaLsAQBA9AEDLPAAg4zsAABQ7AKCQvACAjbwAwLY8AECAPACgTbwA4Os8AKBAvQDAgzwAQAy7AKAivQDAGbwAYKg8AOCaOwAAqrsAQJ47AADZvAAgPzwAgOw7","index":1}],"model":"text-embedding-3-small","usage":{"prompt_tokens":38,"total_tokens":38}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3074a76a99abd0-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:49 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '16586' + openai-organization: + - braintrust-data + openai-processing-ms: + - '83' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=yhSN74.ML8Pgx.P8tdeaM3HGarsxaz9EcoETmZVORxM-1777320469.667367-1.0.1.1-lRlU_8_ZUW3r0LT_rIJzLPtChXTHI24ynYWe8OonK4Nq65v_HDTNQUldZ.UGOvniLdEiGat_2gt6FWOJmySyHBD8t1xP4A_BiERTyIJk4giZdej0zN8USjR0.VH_5NEC; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:49 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999966' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_aea6c24a47634e8f821220c3f3720935 + status: + code: 200 + message: OK +- request: + body: '{"input":["What is the capital of France?"],"model":"text-embedding-3-small","encoding_format":"base64"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '104' + Content-Type: + - application/json + Cookie: + - __cf_bm=yhSN74.ML8Pgx.P8tdeaM3HGarsxaz9EcoETmZVORxM-1777320469.667367-1.0.1.1-lRlU_8_ZUW3r0LT_rIJzLPtChXTHI24ynYWe8OonK4Nq65v_HDTNQUldZ.UGOvniLdEiGat_2gt6FWOJmySyHBD8t1xP4A_BiERTyIJk4giZdej0zN8USjR0.VH_5NEC + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: '{"object":"list","data":[{"object":"embedding","embedding":"AKAqPQAggTwAYOY8ACDHPABAvbwAQDW7AGBpvAAgazwAIDI8AGAnvADA4jsAYMW8AEB8vQAgd7wAgGi8AOC9PADA2LsAAJ88AECUPQAgyLwAAEk7AKAlvADgJ70A4EM8AGB+PQDg6TsA4Dq9AGDvuwBgajsAgCE9AKAsPQBAzrwAYAO7AKAwPQCAybwAoCO9AEAavQBgIb0AoK48AKDzPACATbsAYFW8AIDgOwDgWDwAQOC8AMD7vABgF7wAoCO9AOAJvQCA4TwAAB89AKCEOwAgBT0AwAU9AOCJvABgijsAAMo8AIAdPABAPz0AoH48AAAUPQDAKLwA4Nc8AGCNOwBgFDoAQBE9AECBuwAgGz0AIHI9AAA9PQDANbwAoIU8AGAWvADglzsAANm7ACCVvACAgbsAoMO7AGADvQBgAr0AIBS9AICSOgBAlLwAIA28AEAHPADANr0AoNs8AKAKPQCgu7wAoEO9AMBhOwDgNzwAwNS8ACDePADgKbwAAJ08AGARPQBAlzoAoIu9AMAdOgAgnjwAoMS8AAD/vACg3DwA4NE8AKAkPQCggTwAoKK7AMBLOwDgHb0A4NG8AMA2PADAWjsAQMc8AEBFvQCA7rwAQMO8AGDGvACA7TwA4NK8AAAIPQBAVz0AYEG9AKAqPADgLzwAwFy8AEAyuwCANrsAQA89AMAevQCgMTwAgOG8AADJPABABz0AoP88AMCbPACg3DwA4Iq8AGCYvABAMDwAAAI8AIBYPABAsTwAQFc7AKDavABAb7wAwCm9ACAmPQCAPDwAQC29AKAlPQCAvbwAoIC7AMCDPACgubsAQBa9AEATvACgojwAoMM7AKAxPQDgHr0AwEk9AGAYvQDAxbsAYEg8AIAGPQBgFb0A4K68AADlOwDAr7sAwMm8ACCJOwCgXj0AYK08AGD2PADAx7wAwEq9AMAmPQBguDkAgJ68AGDovAAA5rwAwEA8AOBVPADAej0AQPI8AIA4vADg0LwAQG28AMBNPADAEj0AwKW8ACB8PQDABrwAIDS9AICiPABACT0AgFA8AIBJPACgArwAwKe8AMCzPACAs7sA4Gs8AMCwvAAg+jwAwD28AMBcvACgZbwAACm8AIB8OgDgQ7sAYM+8AOCbOwDAmToAAM08AOCPuAAANjwAgIg7AGDIPADgujwAQHk8AGCAOwAgPLwAIGW9AIBCPQAgfT0AADc8AIDqOwDgcrsAwKs8AAADvQBgbDoA4De8AGAGvQDgkDwAYGg8ACDoPABAEL0AALs8AGAwvABgrTwA4Oo8AGDXuwCgSbwAAKu7ACDhPACgFD0AYMA7AMAxPQCAaz0AAPq7ACD7ugAAvLsAwKG8AEB0PQDAyLwAYOe8AGATvQAAlLwAoNs7AICOOwBACrsAoGq8AACrPACANTkAoKK8AMDKvAAAcbwAwA68AMAfPAAgarsA4Ii8AMAhPACAm7wAIII8AGCYvACgBbwAQK68AKAXPQCg3LwA4Dc9AKBSvADAKz0AYFS9AGB+OgAANT0AIK48AKBOvACg+zwAoKw8ACCjPABAn7wAYDq7ACBDuwCANb0AAIG7AMCbOgBg3DwA4Oy6AGC6vAAguDwAwKq7ACAkPAAAOb0AwIY9AKCouwDgQD0AwFU9AIDQOwAAIb0A4AC9AEDKPAAgDL0AgCe8AOA6PQBgWbwAQNy5AKDyPADA4bsAoM08AMADPABAyDwAoAm8AEAduwDgiTwAIEs8AODYPACgD70AQMO8AKAAugBgOjwAoJc7AIAjvADg1bwA4Ku8AACiOwDAHz0AoLI6AIBovADACL0AQD49AOAVPACg/TwAYFI7AADVvABgmjwAwMk8AGBIPAAgYzsAoOC8AADruwBgF7wAAAa8AEDjvAAAMzsA4I89AOC3vAAggr0AoCM9AAAmvQDASb0AYNO8ACBGvQCgCr0AAIK7AOBaPABgjjsAIKa8AGCAPQAABr0AAKU7ACCHuwAAq7wAYC49AKD2vACgLT0AwK08AEBiPABAhrwAAOq8AICSvADAfDwAwNW8AMB7PQBAbDwAwKg9AKAsvQCgIbwAoPk8AACquwBgKjwAIAI9AAAbPQAAl70AYLg7AIAjPACglDwAYPO7AIAfvQBAsjwAgJm8AAABvQAgS70AYJs9AGCoPAAA1TwAwKA7AOBxPAAABb0AAJ67AIB3vQCgCjwAYEG8AIA5OwBgUz0AQHg9AOCNvQAA1zwAYIC8ACBfuwBAkrsAwD69AIAMPACgtrwAwAa8AKB+vADgP70AIIM7AADrPACAhLoAoJS7AMDdOgBg0DoAIJ46AGDsuwDA1DsAIDo9ACADvQCAvzwAYIs8AGBoOgBgLzsAgGO8AKAWvQBgmbwAQBk9AMBWPABAPb0AwD89AAC4vAAgAjwA4K68AICMvAAg/7sAYBk9AMDVPACguD0AgAw8AOBdOQAASjsAYHQ9AIBYPABA5DwAAA09AMDBPACA2TwAoIE8AAAmvQCgPL0A4Ki7AOA4PQCAJjwAoGo8AKDjvADAq7wAgG69AEB2PAAgXr0AoMq8AEAdvQCgDDwAoE+7AODTvAAAqL0AwMg7ACCkOwBgHT0AwAO9AKC0PACAKz0AgGG8AIBnuwBgvrsAgOY8AAAFvAAAMr0A4I28AACRvAAgZ70AYIK8AGB2PADg2jsAgCM8AOAsPQCAbj0AgEA9AEDVPAAAwrwAwCy8AIBtPADARb0AoE48AKCkPABgQLwAQAc8AODCvAAgRTwAoM66AKDbvAAAzTwAAIM8AOAZuwDgzjsAIOI8AMACvACgILwAgO46AEABPQCAZ70AYLs7AECwvAAAPrwAAOa6ACAWvAAgXzoAQBu8AABKPQBAiDwAoDI9AMAvugCATLsAIK87ACBpvADAE70AAJi8AGDPOwCgUr0AoKG8AOAJvQCgt7wAYGw9AKA1vQAAM70AABC7AAASPADg5rwAwDG7AGAtPQBggLsA4O88AODrPABgGT0AYLg7AKCJOwBgizsAgNA7AKBPOwAgKLwAwA29AGCgPACAMj0AwIs8AMBevACAQjwAQC88AGACvQCgLTsA4NK7AKB1PQDAXzwAwAI7ACBEPACAYL0AIGm9AKC4PACAoLsAoII8AACWvACgaL0AwKK8AKCAPQCg9DsAQL+7AABvOwDgrzsAINw7AAC9vAAA1bwAICK8AACFOgDgDTwAIM+8AOAsvQAgyjwAoHK8AADRPACg4rwAoGM8AIC/OwAAKjwAICS6AOC6OwBAXDwAIM67AKBHPABg1boAAP08AGCYuwDguTwAANa7AODqPAAg1LwAYBc8AECLvAAAlDwAIDc8AEAqPAAguDwAYNi8AKCGvAAAszwAAIC8AKAoPAAgtbwAgAa9AIC0PACgeboAIAI8ACAlvQDgOj0AAKc7AOAKvADgkjwAALO8AMD0ugCgzDwAACo9AKDaOwAAb7wAAPw8AEDvPACAmzsA4O47AGCeOwBguDwAoP88AEAiuwAA1bwAgIY9AGDIvABA4LwAoAk9AMB7vADgDb0AIMM7AGAQvQAg4DsAQFc9AGAGPQAgCb0AQG+7AODDPABgAD0AYBO9AOALvABA+bsAAOi6ACDSvAAAHTwAgDk9AIDpPAAAOLwAQCA9AAASuwDgFTwA4KI8AKBNPQBA5DwAoEq8AMCZvAAgDrsAILe8AKAmPQAg0DwAYBi9AIAcPQBgWTwAgGQ8AGChPABgvbsAQL46ACAGvQBAhjsAoCI8AACbOwBAM7wAAMG7AIBLPADAGrwAQCi9AOBQvQCA0rwAQAQ8ACBEuwAANT0AwB47AMA1vAAgwzwAoMi8ACDMuwDAMbwAIP28AODQvACA7jwAoDc8AGB0uwBgGzwAIIM8AKAUPAAAI7wAYOa8AAAbvACgyTsAIJk8AKBxPABgo7oAYI+7ACAuvQDg9ToAAOe8AKDLPABAxzsAQAW9AIAPPQBgSD0AQEK7AACDvABgrbwAwKq8AOAAvQDALjsA4Jc8AGDEvADgrjwAQC28AMDVuwBgo7sA4Ii7AEBzvQCghzkAoDE8AOAJvQDAPrwAINu7AACevADAQjwA4JK7AIDMvADgb7wAYKO8AGCFPAAgC70A4Di6AKAyPABg9bsAAIW9AKB0PADgF70AoPG8AKCjPABgqjsA4Dc8AKDfPAAABbwAIKC8AGChPQCgX70AoPa7AMDFvABgHTwAQCy7AKCfuwCAvrsAQKk8AABJvADgMD0AgAS9AIDmOgDgQ70AIPu8ACAqPABgwDwA4Ki8AIBJPADAvTwAoAy9ACAAPABAqjwAIJ08AOCUvADgIb0AQC66ACDyvADg6jwAIIY8AIDXuwCA8LwAwB09ACA0PAAgtzwAgO07AODyvACgBr0AIAs9AACpvAAANz0AoEs9AAApPAAAhjwAQOS7AKDSPACAKbwAwKk8AKB0PADA2DsAIEY8AEAHvQCAqbsAgIs7AMD7uwAg1DwAIAA9AGAwvQAgIz0AoN07ACBruwDgwTwAILg7AICFOwCgg7wAwEY9ACA1vQBgU7wAAEm8AADoPACAJzsAIOE8AKCsPADgq7wAgBm8AICRuwDgD70AIM67AKBPuwDAwLwAYN68AIAnvQBgFL0AQBs9AKBQPAAgAL0AgIA7AACRPACgyzsA4AE9AEDJuwCgFzwAYI28ACBevQAA7bsAwFY8ACBcPABATrsAgEy8ACBKvAAAUrsAANG8AOAuuwCgjjwA4Ow8AMDZPABAVjsAwJq8ACBEvQCgNTwAwGO8AIAyPQAgGrwAIBa9AIC3vADgCD0AgNQ8AABlvADgjzwAoNI7AAAMvQCgCT0AYEC8AIAFvQBgPzwAgKK8AEBCvABAlDwAgIg9ACALvQBAK7wAAFU9ACADvQBg3jwAYJW9AKBJPQDgRb0AwD69AKDTPACAcDwAIK67AEAkPQDg3rsAACo7AEAavADAED0AQLC7AICLvACgobwAoCC6ACD5vAAgGLwAgO68AICTPAAAmjsAwGs8AEAGPAAAFjsAgCI9ACBKOwCAED0A4Cq8AECaPQCgXTwAoCs8ACAYvQDgmrwAwIe8AGCWPABAvjwAYKC7ACBkPACAg7wA4CW8AAC1vABgijwAAJI6ACCiOgBguLwAwKY8AICHvACA2TwAALc8AGA6PQCAebwAgLi8ACAivAAgYDwAgFm8AOAivQDgIT0AIE48AKALPADgl7gAIBs8AGBEOgAAK7oAgDa7ACAuvACABDoAgFS8AKAWuwBA5bsAwFS8AEAHPQDAAz0AAJM8ACCrvADALTwAIFC6AIBnOwDgVrsAgDc9AIAqvQAgeL0AIBY9AGAwPABggbwA4CC8AGCPvAAgSLwAYMM8AGAivQBgkr0AIA08AGCVvADAgjoA4Ee8AACnvABgvzwAoOM8AKCJuwCgzLwAwHa8AEDfvABA+zsAABA8ACBjuwBArTwAQI28AMBAOwBgRLwAgNO7ACD+ugBAjrwAgDO8AEAevQBA1jwAIEq8AOBRPACgSDwAwLI7AAClvADgADwAIIm7AKDluQAgD70AYHG8AOCtPAAgLbwAIEm6ACDhPACgCz0AgLi7AMBNvQAgibwAADI8AID5vACAJ70A4Ai9AKCLuwDALrwAIPo6AGBnPACAKD0AIPk7AGDmPACABL0AoE67AKABPQDgxzwA4D08AADpuwAgszwAYNe6AKBdPACgaTwAoEY8ACCcvADAA7wAwMc7ACANPQDASTwAYDg9AMAPPAAAcbwAQPk8ACARPQBAGL0AAEG9AOCrPAAAp7wA4IO8ACAQvADgdTwAICE9AKABPADggrwAYHI9AMC9PACAUrwAAGa8AKA1PADAGT0A4PU8ACDkvACg4TwAYJS8AEBePADAHLsAAB69AOC3uQDg37sAwKS8AECSPADADj0AADg8AMCGPACAv7wAIKw8AKBSPACgLbwAoDy8AMAqPADgKj0AoAG9AEAuvQDAP7sA4Aq7AICkvADgi7wAIDi8AEApvACgprsAAI88AGCGPAAAkbwAgBC7AIC8vACAAzwAoI28AKB/uwDA1bwAYAs9AIBkPACgl7wAQL48AID3PADADLwAgOS8AOCFPABgRD0A4JS7AODXPACgBjwAYCC8AOAkuwCAN7wAICA8AOAZvAAg3LsAIKq7AIDkPABgOT0A4Ke7AGCdOwDATbsAgE48AGCAvQBAtLwA4HM7AGCCvAAg57sAwI68AMCtOwCAQDwAYJ48AKCHOwBAmjwAADw8AKA1vQAgxrwAoLY8AEDePABgh7sAgGc7ACA8PQCABroAwN28AIB+OwBA2jwAgOq8AECuOQBgXjwAgLW8AAChOwBAbLkAYE+7AAARPADAvTwAYO27ACAMPQCAcDwA4Ka8ACB2OwBgiLwAIJM5AMDMPACg9DsAgDk9AOBOPADg8zwA4Di5AABCvADABDwAwAS8AIDPvACgtbsA4Bo9AECxvAAgFz0AIAo9AMBGPABg7rwAgBs8ACBoOwCAAzwAwHm7AECavADgJr0AwHk9AKBFvADAGD0A4Fk7AMB6vAAgYDwAQGG9AKABvACAPjwAIN48AMCxPACA0rsA4NK6ACBmvADgorwA4IA6AAB7PQCAG70AoA08AMDlvABAILwA4Ja8AECCvADg3rwAgJs8AGDeOwBAsbwAYCo7AOBEvQBg8LwAgA86AKDJvACAgLwAIFA9AEDFOwAAED0AoAq9AODOvADgIroAwHO7AMA9vADgOzsAIJo7AKBeOwCAuDsAYF08AMDkvACAGz0AINy8AOAAPACg3zsAQNw8AAADPQBgLTwAoGS7AGAWvQDAjzwAoJ27AOBrPQDgrDwAoCE9AIAmPACgAz0AwNo7AIDvvABA8TsAoAi9AAAFPQCgNLwAoBm9AODaPABAAr0AQMO7AMCduwDAHT0AoA48ACDRvAAgJTwAIAI9AADkPADAhbwAQHC8AMD5PAAAUbwAIDu9AGAFugBAgDsAwBE9AMDJuwAAYjgAAJu8AGCMuwAgzLsA4KW8AIBgPABAGT0AAG08AIDjPACAwjwA4BS8AEC9vABABzwAoIu8ACBQvADAD7wA4Ii8AGCBPACAPTsAIBu7AOBrvADgTjwAIMM8AKCvvABgK7wAYMI8AMDuvAAgijwAwEm9ACASvABAsjwA4AG9AGAxPQBAEj0AYPM8AODavAAgJToAYEa9ACAzuwCg9rwAYPQ8AOAsPACAtzwAABu9AOALvAAgeTwAAKG7AKCsvADAjLwAgLU8AABSvACg+LwAIJa8AMDYOwCAprsA4Bc8AMBBPAAg/rwA4Ly8AGAJvQAgpDwA4L28AKAgvADAPbsAAFe8AKAivACABD0AoEo8AIC5uwBguTwAIAo9AEDYOwDAkjwAQJU8AKAKvQDgX7wAgE28AGC3vADgFzwAAAq8AAAEvACAOD0AgOY8AKCDvACAQL0AwMU8AGAcuwBgArsAAIc8AACePADAYTwAAOK7AOBovACgGTwA4CK8AMAEPACAjrwAoHi8AOBaOwBA3rwA4Pa8AODOPACgYjwAAL28AEAwPQBghTsAwAY7AABMPQBAGz0AoLc7AAD9PADAKr0AADy8AOAauwCAuLwAwIm7AODVuwCADz0AILU8ACB5PADgADsAQCe8AEAoPQAAtbsAICW9AECVvADA7LoAIJi8AMCFPAAAS7wA4FQ8ACDNuwCg6LoAQE46AGC9PACAnDwAAHo8AOAYPQCAF7wAgMA8AECfvAAAvDwAQAY8ACD2uwDgR7wAIH08AMCAPABAzLsAIBg9AKABvQDAkDsAwMG8AADaPAAgLjwAIOs8AKDPvACgibwAwPU7AMCTuwCgRDwAAOe7AEB4vACgtjwAIMw8ACBSPADAyLwAIJO8AGCxvAAAg70AgOk8AOCuPABAzDsAwG88AODWvADAgjsA4Fw7AOCLPAAgJLwAQJc8ACBrvADgGbsAoNM7AKBmvAAAFz0A4Ai9AMCcuwAgRDwAIEi9AICBPADAJjwAAPG7AMAmPADAtjsAQKq8AMCYPADAHj0AYAi8AGCivACgF70AwFs7AGCduwAgCT0AYOi7ACA1vQDA3zwAoPO8AIDQPACgRj0AQCM8AGBDuwCgcbwAgGm8AKDOvABgijwAAOu7ACD4vAAA5jsAwDI9AMCtvADA9zsA4BQ9","index":0}],"model":"text-embedding-3-small","usage":{"prompt_tokens":7,"total_tokens":7}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3074a9ca87a1f8-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:50 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '8344' + openai-organization: + - braintrust-data + openai-processing-ms: + - '176' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999993' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_faa8b0bf089147649f7140e1b7ed5b77 + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are an expert Q&A system that + is trusted around the world.\nAlways answer the query using the provided context + information, and not prior knowledge.\nSome rules to follow:\n1. Never directly + reference the given context in your answer.\n2. Avoid statements like ''Based + on the context, ...'' or ''The context information ...'' or anything along those + lines."},{"role":"user","content":"Context information is below.\n---------------------\nThe + capital of France is Paris. Paris has a population of 2.1 million.\n\nThe Eiffel + Tower is located in Paris, France. It was built in 1889.\n---------------------\nGiven + the context information and not prior knowledge, answer the query.\nQuery: What + is the capital of France?\nAnswer: "}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '826' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-DZMX8kyAs4qMp5RdZmGpNAVBplniG\",\n \"object\": + \"chat.completion\",\n \"created\": 1777320470,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 153,\n \"completion_tokens\": 7,\n \"total_tokens\": 160,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_57133166c6\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f3074adca3b6e57-YYZ + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Mon, 27 Apr 2026 20:07:51 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + content-length: + - '839' + openai-organization: + - braintrust-data + openai-processing-ms: + - '404' + openai-project: + - proj_vsCSXafhhByzWOThMrJcZiw9 + openai-version: + - '2020-10-01' + set-cookie: + - __cf_bm=2QTiqaZz0FPcobcKlHdijKoSfv6_ZsYMyBmMwz5Ugdo-1777320470.685107-1.0.1.1-zHgLEAlmAxHSGb6.yAvnG7LPSo02Or0AdbjNCR_fTIyAKdlsZchS1yTeg_akgzv0gxcxmBEvRMQG2LnHr_N0LDW1pmbddmhnaCmX5DpA_bZijwPAEKKaUs7wiqqPirkJ; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:37:51 GMT + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999825' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_a2af0aa985bb42b2bede1673ca8eb04b + status: + code: 200 + message: OK +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py index 7fcccd36..eb8c736e 100644 --- a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -1,9 +1,8 @@ """Tests for the LlamaIndex integration.""" import pytest - from braintrust import logger -from braintrust.integrations.llamaindex import LlamaIndexIntegration, BraintrustSpanHandler +from braintrust.integrations.llamaindex import BraintrustSpanHandler, LlamaIndexIntegration from braintrust.test_helpers import init_test_logger @@ -34,9 +33,7 @@ def setup_and_cleanup(): yield dispatcher = get_dispatcher() - dispatcher.span_handlers = [ - h for h in dispatcher.span_handlers if not isinstance(h, BraintrustSpanHandler) - ] + dispatcher.span_handlers = [h for h in dispatcher.span_handlers if not isinstance(h, BraintrustSpanHandler)] def test_integration_setup(): @@ -259,6 +256,7 @@ def test_llm_error_handling(logger_memory_logger): @pytest.mark.vcr +@pytest.mark.asyncio async def test_async_llm_complete(logger_memory_logger): test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() @@ -278,6 +276,7 @@ async def test_async_llm_complete(logger_memory_logger): @pytest.mark.vcr +@pytest.mark.asyncio async def test_async_llm_chat(logger_memory_logger): test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() From 5b9d7e5030de039b99b55c9e96406e34e6bfbc56 Mon Sep 17 00:00:00 2001 From: "Nova (SFK)" Date: Mon, 27 Apr 2026 20:19:08 +0000 Subject: [PATCH 07/13] fix token double-counting and CI lint failures When both LlamaIndex and OpenAI integrations are active, skip token metrics on the LlamaIndex LLM span so only the OpenAI leaf span owns token accounting. Same pattern as CrewAI's _litellm_owns_leaf_span(). Also fix CI: add pylint disable=import-error for optional imports, run ruff format. Co-Authored-By: Claude Opus 4.6 --- .../integrations/llamaindex/patchers.py | 2 ++ .../llamaindex/test_llamaindex.py | 10 +++++-- .../integrations/llamaindex/tracing.py | 30 +++++++++++++------ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/py/src/braintrust/integrations/llamaindex/patchers.py b/py/src/braintrust/integrations/llamaindex/patchers.py index df48d16b..8372f2cc 100644 --- a/py/src/braintrust/integrations/llamaindex/patchers.py +++ b/py/src/braintrust/integrations/llamaindex/patchers.py @@ -1,5 +1,7 @@ """LlamaIndex patchers.""" +# pylint: disable=import-error + from braintrust.integrations.base import CallbackPatcher diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py index eb8c736e..9f8dfb81 100644 --- a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -1,5 +1,7 @@ """Tests for the LlamaIndex integration.""" +# pylint: disable=import-error + import pytest from braintrust import logger from braintrust.integrations.llamaindex import BraintrustSpanHandler, LlamaIndexIntegration @@ -133,8 +135,12 @@ def test_llm_chat_metrics(logger_memory_logger): llm_spans = _find_spans_by_attributes(spans, type="llm") assert len(llm_spans) >= 1 - metrics = llm_spans[0].get("metrics", {}) - assert "prompt_tokens" in metrics or "total_tokens" in metrics or "completion_tokens" in metrics + # Token metrics may be on the LlamaIndex LLM span or on the OpenAI leaf + # span (when the OpenAI integration is also active). Check all LLM spans. + all_metrics = {} + for s in llm_spans: + all_metrics.update(s.get("metrics", {})) + assert "prompt_tokens" in all_metrics or "total_tokens" in all_metrics or "tokens" in all_metrics def test_document_processing(logger_memory_logger): diff --git a/py/src/braintrust/integrations/llamaindex/tracing.py b/py/src/braintrust/integrations/llamaindex/tracing.py index aab05205..b6ce38b7 100644 --- a/py/src/braintrust/integrations/llamaindex/tracing.py +++ b/py/src/braintrust/integrations/llamaindex/tracing.py @@ -8,6 +8,21 @@ from braintrust.span_types import SpanTypeAttribute +def _openai_owns_leaf_span() -> bool: + """Return True when the OpenAI integration has patched completion entry points. + + When OpenAI is patched, it creates a child ``Chat Completion`` span with + its own token accounting. Emitting tokens on the enclosing LlamaIndex LLM + span would double-count during trace-tree rollup. + """ + try: + from openai.resources.chat.completions import Completions + + return bool(getattr(Completions.create, "__braintrust_patched_openai_chat_completions_create_sync__", False)) + except Exception: + return False + + def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: if not messages: return None @@ -206,13 +221,9 @@ def new_span( event["input"] = input_data if parent_bt_span is not None: - bt_span = parent_bt_span.start_span( - name=span_name, type=span_type, start_time=start_time, **event - ) + bt_span = parent_bt_span.start_span(name=span_name, type=span_type, start_time=start_time, **event) else: - bt_span = start_span( - name=span_name, type=span_type, start_time=start_time, **event - ) + bt_span = start_span(name=span_name, type=span_type, start_time=start_time, **event) bt_span.set_current() self._bt_spans[id_] = _SpanRecord(bt_span=bt_span, start_time=start_time) @@ -235,9 +246,10 @@ def prepare_to_exit_span( output = _extract_response_output(result) metrics: dict[str, int | float] = {} - raw = getattr(result, "raw", None) - if raw is not None: - metrics.update(_extract_token_usage(raw)) + if not _openai_owns_leaf_span(): + raw = getattr(result, "raw", None) + if raw is not None: + metrics.update(_extract_token_usage(raw)) log_kwargs: dict[str, Any] = {} if output is not None: From 8e49c5be279e750ff0ad4d5e50bc81cf8d745b09 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 27 Apr 2026 16:29:17 -0400 Subject: [PATCH 08/13] fix(llamaindex): address integration review findings Add LlamaIndex packages to the lint environment instead of suppressing import errors, tighten dispatcher state checks, and improve optional dependency fallback behavior. Avoid double-counting async OpenAI token metrics, preserve block-backed message content, improve error detail logging, and add VCR coverage for LLM error handling. --- py/pyproject.toml | 3 + .../integrations/llamaindex/__init__.py | 15 +- .../0.13.0/test_llm_error_handling.yaml | 87 ++++++ .../latest/test_llm_error_handling.yaml | 87 ++++++ .../integrations/llamaindex/patchers.py | 12 +- .../llamaindex/test_llamaindex.py | 3 +- .../integrations/llamaindex/tracing.py | 47 ++-- py/uv.lock | 264 +++++++++++++++++- 8 files changed, 488 insertions(+), 30 deletions(-) create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_error_handling.yaml create mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_error_handling.yaml diff --git a/py/pyproject.toml b/py/pyproject.toml index 528a7018..29ea13f1 100644 --- a/py/pyproject.toml +++ b/py/pyproject.toml @@ -212,6 +212,9 @@ lint = [ "langchain-core", "langchain-openai", "langchain-anthropic", + "llama-index-core", + "llama-index-llms-openai", + "llama-index-embeddings-openai", ] # -- Build deps ---------------------------------------------------------------- diff --git a/py/src/braintrust/integrations/llamaindex/__init__.py b/py/src/braintrust/integrations/llamaindex/__init__.py index 6485b0b9..be68ffd7 100644 --- a/py/src/braintrust/integrations/llamaindex/__init__.py +++ b/py/src/braintrust/integrations/llamaindex/__init__.py @@ -5,14 +5,25 @@ from .integration import LlamaIndexIntegration +_IMPORT_ERROR: ImportError | None = None try: - from .tracing import BraintrustSpanHandler + from .tracing import BraintrustSpanHandler as _BraintrustSpanHandler except ImportError as exc: _IMPORT_ERROR = exc + _BraintrustSpanHandler = None + + +if _BraintrustSpanHandler is None: class BraintrustSpanHandler: # type: ignore[no-redef] def __init__(self, *args, **kwargs): - raise ImportError("llama-index-core is required for braintrust.integrations.llamaindex") from _IMPORT_ERROR + message = "llama-index-core is required for braintrust.integrations.llamaindex" + if _IMPORT_ERROR is not None: + raise ImportError(message) from _IMPORT_ERROR + raise ImportError(message) + +else: + BraintrustSpanHandler = _BraintrustSpanHandler __all__ = [ diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_error_handling.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_error_handling.yaml new file mode 100644 index 00000000..c5cf93f8 --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_error_handling.yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"Hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.1}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"error\": {\n \"message\": \"Incorrect API key provided: sk-inval**-key. + You can find your API key at https://platform.openai.com/account/api-keys.\",\n + \ \"type\": \"invalid_request_error\",\n \"code\": \"invalid_api_key\",\n + \ \"param\": null\n },\n \"status\": 401\n}" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f308ee39b2038e3-YYZ + Connection: + - keep-alive + Content-Length: + - '260' + Content-Type: + - text/plain + Date: + - Mon, 27 Apr 2026 20:25:44 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + X-Content-Type-Options: + - nosniff + alt-svc: + - h3=":443"; ma=86400 + set-cookie: + - __cf_bm=Iwzzvi30_5LK0fu53ShBc5244y0DrkYdpZ0o.boIagU-1777321544.2581315-1.0.1.1-zXPpHC1dsc4UMQwgevXx9G8tcrqShZvJdM82Jki.zEy9kACcFA6bEChd12B6m2hxEO34wRAUewFGcq1MNWl3VXWINg.wN1MQE608RX6R.bWLFZzE5B6ivsEk4WGUUCIe; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:55:44 GMT + - _cfuvid=qmeEYYNZiZb7mzrajkkavL4N6B.9v3oAoAQavjgi5P4-1777321544.2581315-1.0.1.1-U4zLudu5sH8BWvSY_6kqwzcgbMKpfsMSpLu3rjB63UE; + HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com + x-error-json: + - ewogICJlcnJvciI6IHsKICAgICJtZXNzYWdlIjogIkluY29ycmVjdCBBUEkga2V5IHByb3ZpZGVkOiBzay1pbnZhbCoqLWtleS4gWW91IGNhbiBmaW5kIHlvdXIgQVBJIGtleSBhdCBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vYWNjb3VudC9hcGkta2V5cy4iLAogICAgInR5cGUiOiAiaW52YWxpZF9yZXF1ZXN0X2Vycm9yIiwKICAgICJjb2RlIjogImludmFsaWRfYXBpX2tleSIsCiAgICAicGFyYW0iOiBudWxsCiAgfSwKICAic3RhdHVzIjogNDAxCn0= + x-openai-authorization-error: + - '401' + x-openai-ide-error-code: + - invalid_api_key + x-openai-internal-caller: + - unknown_through_ide + x-openai-proxy-wasm: + - v0.1 + x-request-id: + - req_e142f7732b934f4289995bc168d6e0a6 + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_error_handling.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_error_handling.yaml new file mode 100644 index 00000000..e2040ece --- /dev/null +++ b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_error_handling.yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: '{"messages":[{"role":"user","content":"Hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.1}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/json + Host: + - api.openai.com + User-Agent: + - OpenAI/Python 2.32.0 + X-Stainless-Arch: + - arm64 + X-Stainless-Async: + - 'false' + X-Stainless-Lang: + - python + X-Stainless-OS: + - MacOS + X-Stainless-Package-Version: + - 2.32.0 + X-Stainless-Runtime: + - CPython + X-Stainless-Runtime-Version: + - 3.12.12 + x-stainless-read-timeout: + - '60.0' + x-stainless-retry-count: + - '0' + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"error\": {\n \"message\": \"Incorrect API key provided: sk-inval**-key. + You can find your API key at https://platform.openai.com/account/api-keys.\",\n + \ \"type\": \"invalid_request_error\",\n \"code\": \"invalid_api_key\",\n + \ \"param\": null\n },\n \"status\": 401\n}" + headers: + CF-Cache-Status: + - DYNAMIC + CF-Ray: + - 9f308e30ac07b8f3-YYZ + Connection: + - keep-alive + Content-Length: + - '260' + Content-Type: + - text/plain + Date: + - Mon, 27 Apr 2026 20:25:15 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + X-Content-Type-Options: + - nosniff + alt-svc: + - h3=":443"; ma=86400 + set-cookie: + - __cf_bm=Xw_sy4mMxxZgyewEqHVE9G0wcBQ3C43oivboxqsYids-1777321515.6236315-1.0.1.1-ermHGeEXexv5YmZJQhzHjggMFgK6x5sy3Jmm2ZrOUlgoVOmDzWB1e1VE6BBZ8v4vLpFcYcBJ2NBDptuHfYnlmyjY1Ur84lcmrbyHjBL3gygc47cB8.ivCQxLfple_4YJ; + HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 + 20:55:15 GMT + - _cfuvid=m1AF3vorr7BoFdRKktpK6v2iHBX3rxqfAZkHg_7mrGs-1777321515.6236315-1.0.1.1-A7gZWn9Y0i9xUFNerjbEuF1Ix8fenxHzk9fGEqxZbG0; + HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com + x-error-json: + - ewogICJlcnJvciI6IHsKICAgICJtZXNzYWdlIjogIkluY29ycmVjdCBBUEkga2V5IHByb3ZpZGVkOiBzay1pbnZhbCoqLWtleS4gWW91IGNhbiBmaW5kIHlvdXIgQVBJIGtleSBhdCBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vYWNjb3VudC9hcGkta2V5cy4iLAogICAgInR5cGUiOiAiaW52YWxpZF9yZXF1ZXN0X2Vycm9yIiwKICAgICJjb2RlIjogImludmFsaWRfYXBpX2tleSIsCiAgICAicGFyYW0iOiBudWxsCiAgfSwKICAic3RhdHVzIjogNDAxCn0= + x-openai-authorization-error: + - '401' + x-openai-ide-error-code: + - invalid_api_key + x-openai-internal-caller: + - unknown_through_ide + x-openai-proxy-wasm: + - v0.1 + x-request-id: + - req_9698521e100c4949b5db121c26bc1a9c + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/patchers.py b/py/src/braintrust/integrations/llamaindex/patchers.py index 8372f2cc..ed313926 100644 --- a/py/src/braintrust/integrations/llamaindex/patchers.py +++ b/py/src/braintrust/integrations/llamaindex/patchers.py @@ -1,7 +1,5 @@ """LlamaIndex patchers.""" -# pylint: disable=import-error - from braintrust.integrations.base import CallbackPatcher @@ -14,13 +12,11 @@ def _has_braintrust_handlers() -> bool: if BraintrustSpanHandler is None: return False - try: - from llama_index.core.instrumentation import get_dispatcher - dispatcher = get_dispatcher() - return any(isinstance(h, BraintrustSpanHandler) for h in dispatcher.span_handlers) - except Exception: - return False + from llama_index.core.instrumentation import get_dispatcher + + dispatcher = get_dispatcher() + return any(isinstance(h, BraintrustSpanHandler) for h in dispatcher.span_handlers) def _register_braintrust_handlers() -> None: diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py index 9f8dfb81..2af5271e 100644 --- a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -1,7 +1,5 @@ """Tests for the LlamaIndex integration.""" -# pylint: disable=import-error - import pytest from braintrust import logger from braintrust.integrations.llamaindex import BraintrustSpanHandler, LlamaIndexIntegration @@ -239,6 +237,7 @@ def test_span_hierarchy(logger_memory_logger): assert span["root_span_id"] == root_span_id +@pytest.mark.vcr def test_llm_error_handling(logger_memory_logger): test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() diff --git a/py/src/braintrust/integrations/llamaindex/tracing.py b/py/src/braintrust/integrations/llamaindex/tracing.py index b6ce38b7..2ccacc52 100644 --- a/py/src/braintrust/integrations/llamaindex/tracing.py +++ b/py/src/braintrust/integrations/llamaindex/tracing.py @@ -16,12 +16,31 @@ def _openai_owns_leaf_span() -> bool: span would double-count during trace-tree rollup. """ try: - from openai.resources.chat.completions import Completions - - return bool(getattr(Completions.create, "__braintrust_patched_openai_chat_completions_create_sync__", False)) - except Exception: + from openai.resources.chat.completions import AsyncCompletions, Completions + except ImportError: return False + return bool( + getattr(Completions.create, "__braintrust_patched_openai_chat_completions_create_sync__", False) + or getattr(AsyncCompletions.create, "__braintrust_patched_openai_chat_completions_create_async__", False) + ) + + +def _extract_block_content(message: Any) -> str | None: + if not hasattr(message, "blocks"): + return None + text_parts = [block.text for block in message.blocks if hasattr(block, "text") and block.text] + if text_parts: + return "\n".join(text_parts) + return None + + +def _extract_message_content(message: Any) -> Any: + content = getattr(message, "content", None) + if content: + return content + return _extract_block_content(message) + def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: if not messages: @@ -31,12 +50,9 @@ def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: entry: dict[str, Any] = {} if hasattr(msg, "role"): entry["role"] = str(msg.role.value) if hasattr(msg.role, "value") else str(msg.role) - if hasattr(msg, "content"): - entry["content"] = msg.content - elif hasattr(msg, "blocks"): - text_parts = [block.text for block in msg.blocks if hasattr(block, "text")] - if text_parts: - entry["content"] = "\n".join(text_parts) + content = _extract_message_content(msg) + if content is not None: + entry["content"] = content result.append(entry) return result @@ -51,12 +67,9 @@ def _extract_response_output(result: Any) -> Any: return None output: dict[str, Any] = {} output["role"] = str(msg.role.value) if hasattr(msg.role, "value") else str(msg.role) - if hasattr(msg, "content"): - output["content"] = msg.content - elif hasattr(msg, "blocks"): - text_parts = [b.text for b in msg.blocks if hasattr(b, "text")] - if text_parts: - output["content"] = "\n".join(text_parts) + content = _extract_message_content(msg) + if content is not None: + output["content"] = content return output # CompletionResponse if hasattr(result, "text") and hasattr(result, "raw"): @@ -276,7 +289,7 @@ def prepare_to_drop_span( return None bt_span = record.bt_span - bt_span.log(error=str(err) if err else "Unknown error") + bt_span.log(error=f"{type(err).__name__}: {err}" if err else "Unknown error") bt_span.unset_current() bt_span.end() diff --git a/py/uv.lock b/py/uv.lock index 29bc65d4..e3ffccb7 100644 --- a/py/uv.lock +++ b/py/uv.lock @@ -448,6 +448,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, ] +[[package]] +name = "aiosqlite" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/8a/64761f4005f17809769d23e518d915db74e6310474e733e3593cfc854ef1/aiosqlite-0.22.1.tar.gz", hash = "sha256:043e0bd78d32888c0a9ca90fc788b38796843360c855a7262a532813133a0650", size = 14821, upload-time = "2025-12-23T19:25:43.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/b7/e3bf5133d697a08128598c8d0abc5e16377b51465a33756de24fa7dee953/aiosqlite-0.22.1-py3-none-any.whl", hash = "sha256:21c002eb13823fad740196c5a2e9d8e62f6243bd9e7e4a1f87fb5e44ecb4fceb", size = 17405, upload-time = "2025-12-23T19:25:42.139Z" }, +] + [[package]] name = "alembic" version = "1.18.4" @@ -680,6 +689,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181, upload-time = "2024-05-28T17:01:53.112Z" }, ] +[[package]] +name = "banks" +version = "2.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecated" }, + { name = "filetype" }, + { name = "griffe" }, + { name = "jinja2" }, + { name = "platformdirs" }, + { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/51/08fb68d23f4b0f6256fe85dc86e9576941550f890b079352fba719e07b39/banks-2.4.2.tar.gz", hash = "sha256:cda6013bd377ea7b701933578bfb9370fc21ad70bc13cedfc3f5cb2c034ca3dc", size = 188633, upload-time = "2026-04-27T12:15:22.021Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/b6/8dc5477681b782e2f99de703e7a99828883364b9e03a60d3e2c47053d56a/banks-2.4.2-py3-none-any.whl", hash = "sha256:5fe407cc48c101f3e13d1cf732b83b8246003337612f13c0705d2e81f6faffb7", size = 35050, upload-time = "2026-04-27T12:15:20.785Z" }, +] + [[package]] name = "bcrypt" version = "5.0.0" @@ -892,6 +919,9 @@ lint = [ { name = "langchain-openai" }, { name = "langsmith", version = "0.7.31", source = { registry = "https://pypi.org/simple" } }, { name = "litellm", version = "1.82.6", source = { registry = "https://pypi.org/simple" } }, + { name = "llama-index-core" }, + { name = "llama-index-embeddings-openai" }, + { name = "llama-index-llms-openai" }, { name = "mistralai" }, { name = "onnxruntime", marker = "python_full_version < '3.11'" }, { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" } }, @@ -1054,6 +1084,9 @@ lint = [ { name = "langchain-openai" }, { name = "langsmith", specifier = "==0.7.31" }, { name = "litellm" }, + { name = "llama-index-core" }, + { name = "llama-index-embeddings-openai" }, + { name = "llama-index-llms-openai" }, { name = "mistralai" }, { name = "onnxruntime", marker = "python_full_version < '3.11'", specifier = "<1.24" }, { name = "openai" }, @@ -1769,6 +1802,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4a/25/2e9d14f3a0e200a7468069ba31953998f6a234ee2d73b1bb74aaf7aa66cb/dashscope-1.25.17-py3-none-any.whl", hash = "sha256:ed5ff8508f91df1663300ebef572e2b73f2acd7a0473a80d7179f5225a13c7d9", size = 1346198, upload-time = "2026-04-16T02:24:21.889Z" }, ] +[[package]] +name = "dataclasses-json" +version = "0.6.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "marshmallow" }, + { name = "typing-inspect" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/a4/f71d9cf3a5ac257c993b5ca3f93df5f7fb395c725e7f1e6479d2514173c3/dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0", size = 32227, upload-time = "2024-06-09T16:20:19.103Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686, upload-time = "2024-06-09T16:20:16.715Z" }, +] + [[package]] name = "datasets" version = "4.8.5" @@ -1810,6 +1856,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/c7/d1ec24fb280caa5a79b6b950db565dab30210a66259d17d5bb2b3a9f878d/dependency_groups-1.3.1-py3-none-any.whl", hash = "sha256:51aeaa0dfad72430fcfb7bcdbefbd75f3792e5919563077f30bc0d73f4493030", size = 8664, upload-time = "2025-05-02T00:34:27.085Z" }, ] +[[package]] +name = "deprecated" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/85/12f0a49a7c4ffb70572b6c2ef13c90c88fd190debda93b23f026b25f9634/deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223", size = 2932523, upload-time = "2025-10-30T08:19:02.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f", size = 11298, upload-time = "2025-10-30T08:19:00.758Z" }, +] + [[package]] name = "dill" version = "0.4.1" @@ -1819,6 +1877,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, ] +[[package]] +name = "dirtyjson" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/04/d24f6e645ad82ba0ef092fa17d9ef7a21953781663648a01c9371d9e8e98/dirtyjson-1.0.8.tar.gz", hash = "sha256:90ca4a18f3ff30ce849d100dcf4a003953c79d3a2348ef056f1d9c22231a25fd", size = 30782, upload-time = "2022-11-28T23:32:33.319Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/69/1bcf70f81de1b4a9f21b3a62ec0c83bdff991c88d6cc2267d02408457e88/dirtyjson-1.0.8-py3-none-any.whl", hash = "sha256:125e27248435a58acace26d5c2c4c11a1c0de0a9c5124c5a94ba78e517d74f53", size = 25197, upload-time = "2022-11-28T23:32:31.219Z" }, +] + [[package]] name = "diskcache" version = "5.6.3" @@ -2952,7 +3019,7 @@ name = "griffe" version = "1.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "extra == 'group-10-braintrust-test-crewai' or extra == 'group-10-braintrust-test-litellm' or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra != 'group-10-braintrust-test-crewai' and extra != 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands')" }, + { name = "colorama", marker = "extra == 'group-10-braintrust-lint' or extra == 'group-10-braintrust-test-crewai' or extra == 'group-10-braintrust-test-litellm' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0d/0c/3a471b6e31951dce2360477420d0a8d1e00dea6cf33b70f3e8c3ab6e28e1/griffe-1.15.0.tar.gz", hash = "sha256:7726e3afd6f298fbc3696e67958803e7ac843c1cfe59734b6251a40cdbfb5eea", size = 424112, upload-time = "2025-11-10T15:03:15.52Z" } wheels = [ @@ -4284,6 +4351,103 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6f/58/8dd69d5b1ab11f206a9c9f21b6fd191bcdd4fb3ed90b8efbf3a1291fd47c/litellm-1.83.10-py3-none-any.whl", hash = "sha256:55203a7b5551efec8f2fccde29ee045ba057e768591e0b6b9fe1d12f00685ff8", size = 16334780, upload-time = "2026-04-19T02:36:25.274Z" }, ] +[[package]] +name = "llama-index-core" +version = "0.14.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", version = "3.13.5", source = { registry = "https://pypi.org/simple" } }, + { name = "aiosqlite" }, + { name = "banks" }, + { name = "dataclasses-json" }, + { name = "deprecated" }, + { name = "dirtyjson" }, + { name = "filetype" }, + { name = "fsspec", version = "2026.2.0", source = { registry = "https://pypi.org/simple" } }, + { name = "httpx" }, + { name = "llama-index-workflows" }, + { name = "nest-asyncio" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "nltk" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pillow" }, + { name = "platformdirs" }, + { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "setuptools" }, + { name = "sqlalchemy", extra = ["asyncio"], marker = "extra == 'group-10-braintrust-lint' or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "tenacity", version = "8.5.0", source = { registry = "https://pypi.org/simple" } }, + { name = "tiktoken" }, + { name = "tinytag" }, + { name = "tqdm" }, + { name = "typing-extensions" }, + { name = "typing-inspect" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/43/d6d2a368865e68c25d3400c017fb772daab71427f08c4e36c591f729dbc3/llama_index_core-0.14.21.tar.gz", hash = "sha256:29706defbe2f429d28330a4eea010f9d92d42db92539382f8c800e19590cae45", size = 11581087, upload-time = "2026-04-21T00:18:10.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/23/55ec5f35a5c7f35b60d3928bcd2e867076440036a280cf4d07481719c249/llama_index_core-0.14.21-py3-none-any.whl", hash = "sha256:4a807d31e54d066068e076eb4d066efbf95e2d2a00dcbe0eba3d9340a04cad42", size = 11916624, upload-time = "2026-04-21T00:18:12.966Z" }, +] + +[[package]] +name = "llama-index-embeddings-openai" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llama-index-core" }, + { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/52/eb56a4887501651fb17400f7f571c1878109ff698efbe0bbac9165a5603d/llama_index_embeddings_openai-0.6.0.tar.gz", hash = "sha256:eb3e6606be81cb89125073e23c97c0a6119dabb4827adbd14697c2029ad73f29", size = 7629, upload-time = "2026-03-12T20:21:27.234Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/d1/4bb0b80f4057903110060f617ef519197194b3ff5dd6153d850c8f5676fa/llama_index_embeddings_openai-0.6.0-py3-none-any.whl", hash = "sha256:039bb1007ad4267e25ddb89a206dfdab862bfb87d58da4271a3919e4f9df4d61", size = 7666, upload-time = "2026-03-12T20:21:28.079Z" }, +] + +[[package]] +name = "llama-index-instrumentation" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecated" }, + { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/d0/671b23ccff255c9bce132a84ffd5a6f4541ceefdeab9c1786b08c9722f2e/llama_index_instrumentation-0.5.0.tar.gz", hash = "sha256:eeb724648b25d149de882a5ac9e21c5acb1ce780da214bda2b075341af29ad8e", size = 43831, upload-time = "2026-03-12T20:17:06.742Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/45/6dcaccef44e541ffa138e4b45e33e0d40ab2a7d845338483954fcf77bc75/llama_index_instrumentation-0.5.0-py3-none-any.whl", hash = "sha256:aaab83cddd9dd434278891012d8995f47a3bc7ed1736a371db90965348c56a21", size = 16444, upload-time = "2026-03-12T20:17:05.957Z" }, +] + +[[package]] +name = "llama-index-llms-openai" +version = "0.7.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llama-index-core" }, + { name = "openai", version = "2.32.0", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/27/18a7fd0873023aed145332dab5a09b95b298e4fff1c21685eaf22b629d87/llama_index_llms_openai-0.7.5.tar.gz", hash = "sha256:54123e679a7cddc1f2e969f278a4654050730daf84691731a0c53ae14feac3c7", size = 27423, upload-time = "2026-03-30T16:30:33.973Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/62/a847e9a94c2f92926c30188259f9f86e019dcc45122bbb222dea35a74c02/llama_index_llms_openai-0.7.5-py3-none-any.whl", hash = "sha256:c302c6386873420df3714c3d538f45379b6de27ab6a531f30c67419b39a538f5", size = 28492, upload-time = "2026-03-30T16:30:32.979Z" }, +] + +[[package]] +name = "llama-index-workflows" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llama-index-instrumentation" }, + { name = "pydantic", version = "2.12.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'group-10-braintrust-lint') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "pydantic", version = "2.13.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'group-10-braintrust-lint') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (python_full_version < '3.11' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (python_full_version < '3.11' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-pydantic-ai-logfire') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (sys_platform != 'emscripten' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-agno') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agentscope' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-crewai') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-agno' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-langchain') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-crewai' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-litellm') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-langchain' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-openai-agents') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-litellm' and extra == 'group-10-braintrust-test-strands') or (extra != 'group-10-braintrust-lint' and extra == 'group-10-braintrust-test-openai-agents' and extra == 'group-10-braintrust-test-strands')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/ec/05f3db99a2e6e252e3939e7751cad2fb1322dc6d32f4cf5c795cf7ddcad3/llama_index_workflows-2.20.0.tar.gz", hash = "sha256:df2760fea9e100c97a4e919d255461e344413acac4382d17d8217337806e4772", size = 97410, upload-time = "2026-04-24T14:54:41.524Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/5f/385231406d777cb4b608fd8ebe3577dbd90962770717181e6b91b44fb1b8/llama_index_workflows-2.20.0-py3-none-any.whl", hash = "sha256:36f6b6ace77f837d9907078aea7e830251afe96a58daecff5ed090c88c55095d", size = 121238, upload-time = "2026-04-24T14:54:40.455Z" }, +] + [[package]] name = "logfire" version = "4.32.1" @@ -4435,6 +4599,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] +[[package]] +name = "marshmallow" +version = "3.26.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" } }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/79/de6c16cc902f4fc372236926b0ce2ab7845268dcc30fb2fbb7f71b418631/marshmallow-3.26.2.tar.gz", hash = "sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57", size = 222095, upload-time = "2025-12-22T06:53:53.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl", hash = "sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73", size = 50964, upload-time = "2025-12-22T06:53:51.801Z" }, +] + [[package]] name = "mccabe" version = "0.7.0" @@ -4863,6 +5039,50 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + [[package]] name = "nexus-rpc" version = "1.4.0" @@ -4875,6 +5095,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/11/52/6327a5f4fda01207205038a106a99848a41c83e933cd23ea2cab3d2ebc6c/nexus_rpc-1.4.0-py3-none-any.whl", hash = "sha256:14c953d3519113f8ccec533a9efdb6b10c28afef75d11cdd6d422640c40b3a49", size = 29645, upload-time = "2026-02-25T22:01:33.122Z" }, ] +[[package]] +name = "nltk" +version = "3.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", version = "8.3.3", source = { registry = "https://pypi.org/simple" } }, + { name = "joblib" }, + { name = "regex" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/a1/b3b4adf15585a5bc4c357adde150c01ebeeb642173ded4d871e89468767c/nltk-3.9.4.tar.gz", hash = "sha256:ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0", size = 2946864, upload-time = "2026-03-24T06:13:40.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/91/04e965f8e717ba0ab4bdca5c112deeab11c9e750d94c4d4602f050295d39/nltk-3.9.4-py3-none-any.whl", hash = "sha256:f2fa301c3a12718ce4a0e9305c5675299da5ad9e26068218b69d692fda84828f", size = 1552087, upload-time = "2026-03-24T06:13:38.47Z" }, +] + [[package]] name = "nodeenv" version = "1.10.0" @@ -8256,6 +8491,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e5/30/8519fdde58a7bdf155b714359791ad1dc018b47d60269d5d160d311fdc36/sqlalchemy-2.0.49-py3-none-any.whl", hash = "sha256:ec44cfa7ef1a728e88ad41674de50f6db8cfdb3e2af84af86e0041aaf02d43d0", size = 1942158, upload-time = "2026-04-03T16:53:44.135Z" }, ] +[package.optional-dependencies] +asyncio = [ + { name = "greenlet" }, +] + [[package]] name = "sqlalchemy-spanner" version = "1.17.3" @@ -8487,6 +8727,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/df/c7891ef9d2712ad774777271d39fdef63941ffba0a9d59b7ad1fd2765e57/tiktoken-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71", size = 920667, upload-time = "2025-10-06T20:22:34.444Z" }, ] +[[package]] +name = "tinytag" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/59/8a8cb2331e2602b53e4dc06960f57d1387a2b18e7efd24e5f9cb60ea4925/tinytag-2.2.1.tar.gz", hash = "sha256:e6d06610ebe7cd66fd07be2d3b9495914ab32654a5e47657bb8cd44c2484523c", size = 38214, upload-time = "2026-03-15T18:48:01.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/34/d50e338631baaf65ec5396e70085e5de0b52b24b28db1ffbc1c6e82190dc/tinytag-2.2.1-py3-none-any.whl", hash = "sha256:ed8b1e6d25367937e3321e054f4974f9abfde1a3e0a538824c87da377130c2b6", size = 32927, upload-time = "2026-03-15T18:47:59.613Z" }, +] + [[package]] name = "tokenizers" version = "0.22.2" @@ -8682,6 +8931,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] +[[package]] +name = "typing-inspect" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, +] + [[package]] name = "typing-inspection" version = "0.4.2" From 7736c132592b42cf958bdcb44b8efb1543de2d6d Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 27 Apr 2026 16:37:11 -0400 Subject: [PATCH 09/13] don't log metrics --- .../0.13.0/test_llm_chat_metrics.yaml | 108 --------- .../latest/test_llm_chat_metrics.yaml | 214 ------------------ .../llamaindex/test_llamaindex.py | 24 -- .../integrations/llamaindex/tracing.py | 59 +---- 4 files changed, 4 insertions(+), 401 deletions(-) delete mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml delete mode 100644 py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml deleted file mode 100644 index 2965588b..00000000 --- a/py/src/braintrust/integrations/llamaindex/cassettes/0.13.0/test_llm_chat_metrics.yaml +++ /dev/null @@ -1,108 +0,0 @@ -interactions: -- request: - body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '107' - Content-Type: - - application/json - Host: - - api.openai.com - User-Agent: - - OpenAI/Python 2.32.0 - X-Stainless-Arch: - - arm64 - X-Stainless-Async: - - 'false' - X-Stainless-Lang: - - python - X-Stainless-OS: - - MacOS - X-Stainless-Package-Version: - - 2.32.0 - X-Stainless-Runtime: - - CPython - X-Stainless-Runtime-Version: - - 3.12.12 - x-stainless-read-timeout: - - '60.0' - x-stainless-retry-count: - - '0' - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - body: - string: "{\n \"id\": \"chatcmpl-DZMXXYADHyG1mx1uF6Gt1DcWz4Unw\",\n \"object\": - \"chat.completion\",\n \"created\": 1777320495,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n - \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": - null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": - \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-Ray: - - 9f307547f9f0713b-YYZ - Connection: - - keep-alive - Content-Type: - - application/json - Date: - - Mon, 27 Apr 2026 20:08:15 GMT - Server: - - cloudflare - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - content-length: - - '839' - openai-organization: - - braintrust-data - openai-processing-ms: - - '468' - openai-project: - - proj_vsCSXafhhByzWOThMrJcZiw9 - openai-version: - - '2020-10-01' - set-cookie: - - __cf_bm=E.cn_VKHgI2ZFedl7T0FR5NpA5KZ56jKN2NWQS__7VI-1777320495.3573093-1.0.1.1-4NA4S2aSw0.iTUI2S_3AHt45Mtjw.eqbwqMvFH.LzF0uQd3izXvmS34kTJuuAfIst4po38sKho1MIlvvKDyHf.WJ5BbrD.9WPrdgKdksJrMEyqcAWiDN83vcvgxQeuWu; - HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 - 20:38:15 GMT - x-openai-proxy-wasm: - - v0.1 - x-ratelimit-limit-requests: - - '30000' - x-ratelimit-limit-tokens: - - '150000000' - x-ratelimit-remaining-requests: - - '29999' - x-ratelimit-remaining-tokens: - - '149999995' - x-ratelimit-reset-requests: - - 2ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_591a67412a7646ed897f4563f95b7f77 - status: - code: 200 - message: OK -version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml b/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml deleted file mode 100644 index 1f743f11..00000000 --- a/py/src/braintrust/integrations/llamaindex/cassettes/latest/test_llm_chat_metrics.yaml +++ /dev/null @@ -1,214 +0,0 @@ -interactions: -- request: - body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '107' - Content-Type: - - application/json - Host: - - api.openai.com - User-Agent: - - OpenAI/Python 2.32.0 - X-Stainless-Arch: - - arm64 - X-Stainless-Async: - - 'false' - X-Stainless-Lang: - - python - X-Stainless-OS: - - MacOS - X-Stainless-Package-Version: - - 2.32.0 - X-Stainless-Runtime: - - CPython - X-Stainless-Runtime-Version: - - 3.12.12 - x-stainless-read-timeout: - - '60.0' - x-stainless-retry-count: - - '0' - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - body: - string: "{\n \"id\": \"chatcmpl-DZMWfkPQh6PvSjb9xMFMcBguVePJr\",\n \"object\": - \"chat.completion\",\n \"created\": 1777320441,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n - \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": - null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": - \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-Ray: - - 9f3073f20d25ac3c-YYZ - Connection: - - keep-alive - Content-Type: - - application/json - Date: - - Mon, 27 Apr 2026 20:07:21 GMT - Server: - - cloudflare - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - content-length: - - '839' - openai-organization: - - braintrust-data - openai-processing-ms: - - '517' - openai-project: - - proj_vsCSXafhhByzWOThMrJcZiw9 - openai-version: - - '2020-10-01' - set-cookie: - - __cf_bm=vyVeASPTExW6n6hxNIZbO6.n.IB9OJIpL.rM0TJVSzc-1777320440.6493819-1.0.1.1-u5tto7c4Feo5iuLSgAoXrJT7shPDO1zOyx.mT.GOh3_RROlkOZNB9gtEj3yjIViudF1tbWJqHFuX60NijyQDgdhfKGzSU1wW0ezTArHUrGc5TvV3vf1s2OkZJZgO0iDO; - HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 - 20:37:21 GMT - x-openai-proxy-wasm: - - v0.1 - x-ratelimit-limit-requests: - - '30000' - x-ratelimit-limit-tokens: - - '150000000' - x-ratelimit-remaining-requests: - - '29999' - x-ratelimit-remaining-tokens: - - '149999995' - x-ratelimit-reset-requests: - - 2ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_05653f634a2447ca80b128ac70203c58 - status: - code: 200 - message: OK -- request: - body: '{"messages":[{"role":"user","content":"Say hello"}],"model":"gpt-4o-mini","stream":false,"temperature":0.0}' - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '107' - Content-Type: - - application/json - Host: - - api.openai.com - User-Agent: - - OpenAI/Python 2.32.0 - X-Stainless-Arch: - - arm64 - X-Stainless-Async: - - 'false' - X-Stainless-Lang: - - python - X-Stainless-OS: - - MacOS - X-Stainless-Package-Version: - - 2.32.0 - X-Stainless-Runtime: - - CPython - X-Stainless-Runtime-Version: - - 3.12.12 - x-stainless-read-timeout: - - '60.0' - x-stainless-retry-count: - - '0' - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - body: - string: "{\n \"id\": \"chatcmpl-DZMX6oruAjcO5kCSZShAyhoslOtUu\",\n \"object\": - \"chat.completion\",\n \"created\": 1777320468,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n - \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": - null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 9,\n \"completion_tokens\": 9,\n \"total_tokens\": 18,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": - \"default\",\n \"system_fingerprint\": \"fp_de7acce317\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-Ray: - - 9f30749a78a83a53-YYZ - Connection: - - keep-alive - Content-Type: - - application/json - Date: - - Mon, 27 Apr 2026 20:07:48 GMT - Server: - - cloudflare - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - content-length: - - '839' - openai-organization: - - braintrust-data - openai-processing-ms: - - '525' - openai-project: - - proj_vsCSXafhhByzWOThMrJcZiw9 - openai-version: - - '2020-10-01' - set-cookie: - - __cf_bm=5pOFexmPj7ztIkLz.7LP.MIKGnpDgRzO8pe3.Lq7Z84-1777320467.5979965-1.0.1.1-ieVM.DNmHS1_iTAQHTZLh9aAUZZSlPpr8R1Eo1teV7546Rd5NhW208WewzXwGzLYMiuOhWkpyDCWzu97m0eCrr9cYLv2MTRk1qp9Gxye2LbZ4mPCm5yzoJ_Ywr7GIWG.; - HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 27 Apr 2026 - 20:37:48 GMT - x-openai-proxy-wasm: - - v0.1 - x-ratelimit-limit-requests: - - '30000' - x-ratelimit-limit-tokens: - - '150000000' - x-ratelimit-remaining-requests: - - '29999' - x-ratelimit-remaining-tokens: - - '149999995' - x-ratelimit-reset-requests: - - 2ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_d1f5805591154369a083238659c93faf - status: - code: 200 - message: OK -version: 1 diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py index 2af5271e..3a546bd7 100644 --- a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -117,30 +117,6 @@ def test_llm_chat(logger_memory_logger): assert "content" in llm_span["output"] or "role" in llm_span["output"] -@pytest.mark.vcr -def test_llm_chat_metrics(logger_memory_logger): - test_logger, memory_logger = logger_memory_logger - assert not memory_logger.pop() - - from llama_index.llms.openai import OpenAI - - llm = OpenAI(model="gpt-4o-mini", temperature=0) - - with test_logger.start_span(name="test-metrics"): - llm.complete("Say hello") - - spans = memory_logger.pop() - llm_spans = _find_spans_by_attributes(spans, type="llm") - assert len(llm_spans) >= 1 - - # Token metrics may be on the LlamaIndex LLM span or on the OpenAI leaf - # span (when the OpenAI integration is also active). Check all LLM spans. - all_metrics = {} - for s in llm_spans: - all_metrics.update(s.get("metrics", {})) - assert "prompt_tokens" in all_metrics or "total_tokens" in all_metrics or "tokens" in all_metrics - - def test_document_processing(logger_memory_logger): test_logger, memory_logger = logger_memory_logger assert not memory_logger.pop() diff --git a/py/src/braintrust/integrations/llamaindex/tracing.py b/py/src/braintrust/integrations/llamaindex/tracing.py index 2ccacc52..b2abddcd 100644 --- a/py/src/braintrust/integrations/llamaindex/tracing.py +++ b/py/src/braintrust/integrations/llamaindex/tracing.py @@ -8,24 +8,6 @@ from braintrust.span_types import SpanTypeAttribute -def _openai_owns_leaf_span() -> bool: - """Return True when the OpenAI integration has patched completion entry points. - - When OpenAI is patched, it creates a child ``Chat Completion`` span with - its own token accounting. Emitting tokens on the enclosing LlamaIndex LLM - span would double-count during trace-tree rollup. - """ - try: - from openai.resources.chat.completions import AsyncCompletions, Completions - except ImportError: - return False - - return bool( - getattr(Completions.create, "__braintrust_patched_openai_chat_completions_create_sync__", False) - or getattr(AsyncCompletions.create, "__braintrust_patched_openai_chat_completions_create_async__", False) - ) - - def _extract_block_content(message: Any) -> str | None: if not hasattr(message, "blocks"): return None @@ -105,35 +87,6 @@ def _extract_nodes(nodes: list[Any]) -> list[dict[str, Any]]: return result -def _extract_token_usage(raw: Any) -> dict[str, int | float]: - metrics: dict[str, int | float] = {} - if raw is None: - return metrics - - usage = getattr(raw, "usage", None) - if usage is None and isinstance(raw, dict): - usage = raw.get("usage") - - if usage is not None: - for key in ("prompt_tokens", "completion_tokens", "total_tokens"): - val = usage.get(key) if isinstance(usage, dict) else getattr(usage, key, None) - if val is not None: - metrics[key] = val - - # Anthropic-style fallback - if not metrics: - for src, dst in [("input_tokens", "prompt_tokens"), ("output_tokens", "completion_tokens")]: - val = getattr(raw, src, None) - if val is None and isinstance(raw, dict): - val = raw.get(src) - if val is not None: - metrics[dst] = val - if "prompt_tokens" in metrics and "completion_tokens" in metrics: - metrics["total_tokens"] = metrics["prompt_tokens"] + metrics["completion_tokens"] - - return metrics - - def _classify_instance(instance: Any) -> tuple[SpanTypeAttribute, str]: if instance is None: return SpanTypeAttribute.TASK, "llamaindex" @@ -258,17 +211,13 @@ def prepare_to_exit_span( bt_span = record.bt_span output = _extract_response_output(result) - metrics: dict[str, int | float] = {} - if not _openai_owns_leaf_span(): - raw = getattr(result, "raw", None) - if raw is not None: - metrics.update(_extract_token_usage(raw)) - + # Token usage is intentionally not logged on LlamaIndex spans. + # LlamaIndex is an orchestration layer; provider integrations own + # token accounting. Emitting usage here would double-count when + # provider spans are also present. log_kwargs: dict[str, Any] = {} if output is not None: log_kwargs["output"] = output - if metrics: - log_kwargs["metrics"] = metrics if log_kwargs: bt_span.log(**log_kwargs) From 4f2225397cf4453dfcc14bfb78d30e18e38e8d42 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 27 Apr 2026 16:46:19 -0400 Subject: [PATCH 10/13] update integration skill --- .agents/skills/sdk-integrations/SKILL.md | 51 +++++++++++++++++-- .../sdk-integrations/agents/openai.yaml | 4 ++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 .agents/skills/sdk-integrations/agents/openai.yaml diff --git a/.agents/skills/sdk-integrations/SKILL.md b/.agents/skills/sdk-integrations/SKILL.md index 67b62a6f..8dc34fcb 100644 --- a/.agents/skills/sdk-integrations/SKILL.md +++ b/.agents/skills/sdk-integrations/SKILL.md @@ -16,8 +16,9 @@ Before editing: 1. Read the shared integration primitives. 2. Read the target provider package. 3. Pick the nearest existing integration as a reference. -4. Decide the span shape before writing patchers. -5. Run the narrowest provider nox session first. +4. Confirm provider versions and nox sessions from source files, not memory. +5. Decide the span shape before writing patchers. +6. Run the narrowest provider nox session first. Do not design a new integration shape from scratch if an existing provider already matches the problem. @@ -29,6 +30,7 @@ Always read: - `py/src/braintrust/integrations/versioning.py` - `py/src/braintrust/integrations/__init__.py` - `py/src/braintrust/integrations/utils.py` +- `py/pyproject.toml` for provider matrix pins and cassette directory mappings - `py/noxfile.py` Read these when working on an existing integration: @@ -51,6 +53,25 @@ Read these when relevant: Do not forget `auto.py` and `auto_test_scripts/`. Import-order and subprocess regressions often only show up there. +## Version And CI Routing + +Do not guess which provider versions or sessions apply. + +Use these files as the routing chain: + +- `py/pyproject.toml` `[tool.braintrust.matrix]`: supported provider versions and what `latest` resolves to +- `py/pyproject.toml` `[tool.braintrust.cassette-dirs]`: versioned cassette directory ownership +- `py/src/braintrust/integrations/versioning.py`: supported version helpers and gates +- `py/noxfile.py`: actual session names, package installation, and `BRAINTRUST_TEST_PACKAGE_VERSION` +- `.github/workflows/checks.yaml`: CI matrix and which sessions run in shards or static checks + +When changing version-gated behavior: + +1. Identify every matrix version for the provider. +2. Check whether the integration has `min_version`, `max_version`, `superseded_by`, or feature-detection branches. +3. Test the narrowest affected version first. +4. Add or update cassettes only for versions whose observable provider behavior intentionally changed. + ## Pick A Reference Start from the nearest current integration: @@ -121,6 +142,16 @@ Do not start by wiring wrappers and only later decide what the span should conta 3. Add the integration import near the other integration imports. 4. Add or update the relevant subprocess auto-instrument test. +### Setup, manual wrapping, and auto-instrument + +Treat these as distinct entry points: + +- `setup_()`: explicit package-level patching +- public `wrap_*()` helpers: manual wrapping of a provided class, function, or client +- `auto_instrument()`: import-order-sensitive discovery and setup + +When changing one entry point, check whether the other two should keep equivalent span behavior. If `auto_instrument()` changes or could be affected by import timing, validate it with a subprocess test instead of only calling the integration in-process. + ## Package Layout Rules Keep provider-specific behavior in `py/src/braintrust/integrations//`. @@ -171,15 +202,25 @@ Use this rubric: - `metrics`: timing and numeric accounting such as token counts or elapsed time - `error`: exceptions or failure information +Avoid double-counting token metrics: + +- the integration that directly owns the model/provider API response should own token accounting +- orchestration/framework integrations should usually not log token metrics when underlying provider integrations can create leaf spans with usage metrics +- do not add fragile provider-specific ownership checks such as "if OpenAI is patched, skip metrics"; prefer a clear span ownership rule instead + Good span shaping usually means: - flatten positional arguments into named fields -- normalize provider SDK objects into dicts, lists, or scalars +- normalize provider SDK objects into dicts, lists, or scalars when that improves readability - drop duplicate or noisy transport fields - aggregate streaming chunks into one final `output` plus stream-specific `metrics` +Do not over-serialize in integration code. Braintrust handles serialization when sending/logging spans, so integration tracing helpers usually only need to shape readable Python dicts/lists/scalars and materialize attachments where appropriate. Avoid unnecessary JSON dumps/loads, recursive conversion, or stringification just to make values serializable. + Keep wrapper bodies thin: prepare traced input, open the span, call the provider, normalize the result, and log `output`/`metadata`/`metrics`. +Braintrust span logging methods are boundary-safe and should not throw during normal integration use. Do not wrap `span.log(...)`, `span.set_attributes(...)`, or similar Braintrust span methods in broad `try`/`except` blocks. Only catch exceptions around provider calls or around integration-owned conversion code when there is a specific expected failure mode and a clear fallback. + Prefer provider-local helpers in `tracing.py`, for example: ```python @@ -321,4 +362,8 @@ Avoid these failures: - re-recording cassettes when behavior did not intentionally change - adding a custom `_instrument_*` helper where `_instrument_integration()` already fits - forgetting `target_module` for deep or optional patch targets +- double-counting token metrics in both orchestration/framework spans and provider leaf spans +- adding provider-specific token ownership detection instead of defining clear metric ownership for the integration +- doing excessive serialization/stringification in tracing code even though Braintrust serializes span payloads at send/log time +- wrapping Braintrust span logging methods in broad `try`/`except` blocks even though those methods are designed not to throw - forcing non-image attachments through `image_url` shims, dropping unrecognized file inputs, or re-serializing non-attachment values while materializing payloads diff --git a/.agents/skills/sdk-integrations/agents/openai.yaml b/.agents/skills/sdk-integrations/agents/openai.yaml new file mode 100644 index 00000000..dcb60218 --- /dev/null +++ b/.agents/skills/sdk-integrations/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "SDK Integrations" + short_description: "Build Braintrust SDK integrations" + default_prompt: "Use $sdk-integrations to add or update a Braintrust Python SDK provider integration." From f5daf5d101d1984d5eefbe42df827f23f2299590 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 27 Apr 2026 18:23:46 -0400 Subject: [PATCH 11/13] make sure parent child relationship is correct --- .../llamaindex/test_llamaindex.py | 38 ++++++++++++++++++- .../integrations/llamaindex/tracing.py | 34 ++++++++++++----- 2 files changed, 60 insertions(+), 12 deletions(-) diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py index 3a546bd7..5282965a 100644 --- a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -63,6 +63,38 @@ def test_auto_instrument_includes_llamaindex(): assert result["llamaindex"] is True +@pytest.mark.asyncio +async def test_streaming_outputs_are_not_stringified(): + from braintrust.integrations.llamaindex.tracing import _extract_response_output + + def stream(): + yield "chunk" + + async def async_stream(): + yield "chunk" + + async_gen = async_stream() + try: + assert _extract_response_output(stream()) is None + assert _extract_response_output(async_gen) is None + finally: + await async_gen.aclose() + + +@pytest.mark.asyncio +async def test_coroutine_outputs_are_not_stringified(): + from braintrust.integrations.llamaindex.tracing import _extract_response_output + + async def coroutine(): + return "result" + + coro = coroutine() + try: + assert _extract_response_output(coro) is None + finally: + coro.close() + + @pytest.mark.vcr def test_llm_complete(logger_memory_logger): test_logger, memory_logger = logger_memory_logger @@ -82,9 +114,11 @@ def test_llm_complete(logger_memory_logger): assert len(llm_spans) >= 1 llm_span = llm_spans[0] + assert llm_span["span_attributes"]["name"] == "OpenAI" assert llm_span["input"] is not None assert llm_span["output"] is not None assert llm_span["metadata"]["class"] == "OpenAI" + assert llm_span["metadata"]["model"] == "gpt-4o-mini" @pytest.mark.vcr @@ -232,8 +266,8 @@ def test_llm_error_handling(logger_memory_logger): assert len(spans) >= 2 llm_spans = _find_spans_by_attributes(spans, type="llm") - if llm_spans: - assert llm_spans[0].get("error") is not None + assert len(llm_spans) >= 1 + assert llm_spans[0].get("error") is not None @pytest.mark.vcr diff --git a/py/src/braintrust/integrations/llamaindex/tracing.py b/py/src/braintrust/integrations/llamaindex/tracing.py index b2abddcd..ee2a6542 100644 --- a/py/src/braintrust/integrations/llamaindex/tracing.py +++ b/py/src/braintrust/integrations/llamaindex/tracing.py @@ -42,6 +42,10 @@ def _extract_messages(messages: Any) -> list[dict[str, Any]] | None: def _extract_response_output(result: Any) -> Any: if result is None: return None + # Streaming/coroutine responses are consumed outside this span handler. + # Do not log unstable object reprs such as "". + if inspect.isgenerator(result) or inspect.isasyncgen(result) or inspect.iscoroutine(result): + return None # ChatResponse if hasattr(result, "message") and hasattr(result, "raw"): msg = result.message @@ -95,8 +99,7 @@ def _classify_instance(instance: Any) -> tuple[SpanTypeAttribute, str]: mro_names = {c.__name__ for c in type(instance).__mro__} if "BaseLLM" in mro_names or "LLM" in mro_names: - model = getattr(instance, "model", None) or getattr(instance, "model_name", None) - return SpanTypeAttribute.LLM, f"{cls_name} ({model})" if model else cls_name + return SpanTypeAttribute.LLM, cls_name if "BaseTool" in mro_names or "FunctionTool" in mro_names: return SpanTypeAttribute.TOOL, getattr(instance, "name", None) or cls_name @@ -150,6 +153,24 @@ def model_post_init(self, __context: Any) -> None: def class_name(cls) -> str: return "BraintrustSpanHandler" + def _find_parent_bt_span(self, parent_span_id: str | None) -> Span | None: + if parent_span_id is None: + cs = current_span() + return cs if cs != NOOP_SPAN else None + + span_id = parent_span_id + while span_id: + record = self._bt_spans.get(span_id) + if record is not None: + return record.bt_span + + parent_span = self.open_spans.get(span_id) + if parent_span is None: + return None + span_id = parent_span.parent_id + + return None + def new_span( self, id_: str, @@ -171,14 +192,7 @@ def new_span( if val is not None: metadata[attr] = val - # Find parent Braintrust span - parent_bt_span = None - if parent_span_id and parent_span_id in self._bt_spans: - parent_bt_span = self._bt_spans[parent_span_id].bt_span - else: - cs = current_span() - if cs != NOOP_SPAN: - parent_bt_span = cs + parent_bt_span = self._find_parent_bt_span(parent_span_id) event: dict[str, Any] = {} if metadata: From 0783e8df0639f6f2a050acc72d2c50017b08870b Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 27 Apr 2026 18:24:27 -0400 Subject: [PATCH 12/13] readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 75deb673..49bf0247 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ BRAINTRUST_API_KEY= braintrust eval tutorial_eval.py | [Google ADK](py/src/braintrust/integrations/adk/) | Yes | `google-adk>=1.14.1` | | [Pydantic AI](py/src/braintrust/integrations/pydantic_ai/) | Yes | `pydantic_ai>=1.10.0` | | [LangChain](py/src/braintrust/integrations/langchain/) | Yes | `langchain-core>=0.3.28` | +| [LlamaIndex](py/src/braintrust/integrations/llamaindex/) | Yes | `llama-index-core>=0.13.0` | | [DSPy](py/src/braintrust/integrations/dspy/) | Yes | `dspy>=2.6.0` | | [OpenAI Agents](py/src/braintrust/integrations/openai_agents/) | Yes | `openai-agents>=0.0.19` | | [Claude Agent SDK](py/src/braintrust/integrations/claude_agent_sdk/) | Yes | `claude_agent_sdk>=0.1.10` | From 592320270a82bf3363117226cfbd7cb5537a5e4f Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 27 Apr 2026 18:48:03 -0400 Subject: [PATCH 13/13] fix CI --- py/src/braintrust/integrations/llamaindex/test_llamaindex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py index 5282965a..315a8ce0 100644 --- a/py/src/braintrust/integrations/llamaindex/test_llamaindex.py +++ b/py/src/braintrust/integrations/llamaindex/test_llamaindex.py @@ -92,7 +92,7 @@ async def coroutine(): try: assert _extract_response_output(coro) is None finally: - coro.close() + getattr(coro, "close")() @pytest.mark.vcr