Available in Phoenix 10.12+
New Features:
Added POST /projects/{project_identifier}/spans
route for span ingestion.
Added log_spans
client method to submit a sequence of spans, rejecting the entire batch if any span is invalid or not unique.
Added log_spans_dataframe
for submitting spans as a dataframe.
Introduced uniquify_spans
and uniquify_spans_dataframe
helpers to regenerate span and trace IDs while preserving relationships.
Improved validation and error handling to prevent partial ingestion and ensure safe, conflict-free span creation.
from phoenix.client import Client
from phoenix.client.helpers.spans import uniquify_spans
client = Client()
spans = [
{
"name": "llm_call",
"context": {"trace_id": "trace_123", "span_id": "span_456"},
"start_time": "2024-01-15T10:00:00Z",
"end_time": "2024-01-15T10:00:05Z",
"span_kind": "LLM"
}
]
unique_spans = uniquify_spans(spans)
result = client.spans.log_spans(
project_identifier="my-project",
spans=unique_spans,
)