Skip to main content

Session Turns API

March 11, 2026 Available in arize-phoenix-client 2.0.0+ (Python) and @arizeai/phoenix-client 6.4.0+ (TypeScript) Phoenix now provides a dedicated session turns API that reconstructs the ordered input/output pairs across all traces in a session. The new get_session_turns() method (Python) and getSessionTurns() function (TypeScript) fetch all traces within a session, extract root span input.value / output.value attributes (per OpenInference semantic conventions), and return chronologically ordered SessionTurn objects. Each SessionTurn corresponds to a single trace and contains the root span’s input and output as SessionTurnIO objects (with value and optional mime_type). This API is experimental and may change in future releases.
  • Chronological turn ordering from session traces sorted by start_time
  • SessionTurnIO with MIME type — supports text/plain, application/json, and image types
  • Batched root span fetching with pagination to handle large sessions (up to 50 trace IDs per batch)
  • Async variantsasync_client.sessions.get_session_turns() (Python) and the same getSessionTurns() function (TypeScript, natively async)
Python example:
from phoenix.client import Client

client = Client()

# List sessions in a project
sessions = client.sessions.list(project_name="default", limit=5)

# Get the ordered turns for a session
turns = client.sessions.get_session_turns(session_id="my-session")
for turn in turns:
    input_val = turn.get("input", {}).get("value", "<no input>")
    output_val = turn.get("output", {}).get("value", "<no output>")
    print(f"Turn (trace={turn['trace_id']}): {input_val}{output_val}")
TypeScript example:
import { getSessionTurns } from "@arizeai/phoenix-client/sessions";

const turns = await getSessionTurns({ sessionId: "my-session" });
for (const turn of turns) {
  console.log(`[${turn.startTime}] Input: ${turn.input?.value}`);
  console.log(`[${turn.startTime}] Output: ${turn.output?.value}`);
}

Session Management REST APIs

March 10, 2026 Available in arize-phoenix 13.13.0+ (server), arize-phoenix-client 1.31.0+ (Python), @arizeai/phoenix-client 6.1.0+ (TypeScript) Phoenix now exposes comprehensive session management through REST API endpoints on the server. Retrieve individual sessions, list sessions with pagination and project filtering, and delete sessions with cascading cleanup of associated traces, spans, and annotations. REST endpoints added to the server:
  • GET /v1/sessions/{session_id} — retrieve a single session by ID or GlobalID
  • GET /v1/projects/{project}/sessions — paginated session listing with cursor-based pagination
  • DELETE /v1/sessions/{session_id} — delete a session with cascade through traces and spans (requires arize-phoenix 13.13.0+)
  • POST /v1/sessions/delete — bulk delete sessions by a list of identifiers (requires arize-phoenix 13.13.0+)
Client SDK wrappers:
# Python (arize-phoenix-client 1.31.0+)
from phoenix.client import Client

client = Client()

# Get a single session
session = client.sessions.get(session_id="my-session")

# List sessions for a project
sessions = client.sessions.list(project_name="default", limit=100)

# Delete a session (cascades to traces/spans/annotations)
client.sessions.delete(session_id="my-session")

# Bulk delete
client.sessions.bulk_delete(session_ids=["session-1", "session-2"])

# Export sessions to a DataFrame
df = client.sessions.get_sessions_dataframe(project_name="default")
// TypeScript (@arizeai/phoenix-client 6.1.0+)
import { getSession, listSessions, deleteSession } from "@arizeai/phoenix-client/sessions";

const session = await getSession({ sessionId: "my-session" });
const { sessions } = await listSessions({ project: "default" });
await deleteSession({ sessionId: "my-session" });

Filter Spans by Trace ID and Parent Relationships

March 9, 2026 Available in arize-phoenix 13.12.0+ (server), arize-phoenix-client 2.0.0+ (Python), @arizeai/phoenix-client 6.3.0+ (TypeScript) The GET /v1/spans REST endpoint now supports filtering by trace_id (available since arize-phoenix 13.9.0) and parent_id (added in arize-phoenix 13.12.0), enabling precise traversal of trace hierarchies. Pass parent_id=null to retrieve root spans only, or filter by a specific parent span ID to retrieve all direct children. Client SDK support:
# Python (arize-phoenix-client 2.0.0+)
from phoenix.client import Client

client = Client()

# Get root spans for a specific trace
spans = client.spans.get_spans(
    project_identifier="default",
    trace_ids=["trace-abc123"],
    parent_id="null",  # root spans only
)

# Filter by multiple trace IDs
spans = client.spans.get_spans(
    project_identifier="default",
    trace_ids=["trace-abc123", "trace-def456"],
)
// TypeScript (@arizeai/phoenix-client 6.3.0+)
import { getSpans } from "@arizeai/phoenix-client/spans";

// Get root spans for a trace
const { spans } = await getSpans({
  project: { projectName: "default" },
  traceIds: ["trace-abc123"],
  parentId: null,  // root spans only
});

Incremental Evaluation Metrics in Playground

March 4, 2026 Available in arize-phoenix 13.8.0+ The Playground now displays evaluation metrics, cost, and latency aggregates in real-time as dataset experiments run. Metrics update incrementally every ~2 seconds, providing immediate feedback on experiment performance without waiting for completion.

Brute Force Login Protection

March 4, 2026 Available in arize-phoenix 13.8.0+ Phoenix now automatically protects login endpoints against brute force attacks. After 5 consecutive failed login attempts within a 5-minute window, the account is temporarily locked for 5 minutes. This applies to both basic auth and LDAP login endpoints.
  • Enabled by default — no configuration required
  • Configurable attempt threshold via PHOENIX_BRUTE_FORCE_LOGIN_PROTECTION_MAX_ATTEMPTS (default: 5)
  • Disable if needed by setting PHOENIX_DISABLE_BRUTE_FORCE_LOGIN_PROTECTION=true
  • Automatic recovery — the lockout resets after the 5-minute window expires, and clears immediately on successful login or password reset

Unified Dataset Upload with Drag-and-Drop

March 7, 2026 Available in arize-phoenix 13.9.0+ Dataset creation from files is now streamlined with automatic file type detection and a unified upload experience. Drag-and-drop CSV or JSONL files anywhere in the upload form, and Phoenix automatically parses headers and previews data without loading entire files into memory.
  • Automatic format detection for CSV and JSONL files
  • Drag-and-drop file selection with visual feedback
  • Streaming parser that handles large files efficiently
  • RFC 4180 CSV support including quoted fields, escaped quotes, and BOM handling
  • Detailed error messages for parsing issues with line-by-line feedback

Drag-and-Drop Column Assignment for Datasets

March 10, 2026 Available in arize-phoenix 13.13.0+ Dataset creation now features an intuitive drag-and-drop column assignment interface. Assign columns to input, output, or metadata buckets with automatic suggestions based on common naming conventions, and preview exactly how your data will appear in the final dataset.
  • Visual column assignment with draggable chips and drop targets
  • Smart auto-assignment based on column names like “input”, “output”, “reference”
  • Live dataset preview showing the final structure as you make changes
  • Keyboard navigation support for accessibility
  • Raw data preview in tabular format alongside final dataset view

Extended Model Provider Support

March 8, 2026 Available in arize-phoenix 13.10.0+ (Cerebras, Fireworks, Groq, Moonshot) and arize-phoenix 13.11.0+ (Perplexity, Together AI) Phoenix Playground now supports six additional OpenAI-compatible model providers: Perplexity AI, Together AI, Cerebras, Fireworks AI, Groq, and Moonshot (Kimi). Access hundreds of new models including specialized reasoning models and fine-tuned variants through familiar OpenAI-compatible APIs.
  • Perplexity AI for research and web-grounded responses
  • Together AI with models from Moonshot, DeepSeek, Qwen, and GLM
  • Cerebras for ultra-fast inference with Llama models
  • Fireworks AI with Llama 4 Scout and Maverick variants
  • Groq for low-latency Llama and Qwen deployments
  • Moonshot (Kimi) with extended 128k and 32k context models
  • Cost tracking enabled for Cerebras, Fireworks, Groq, and Moonshot

Provider Visibility Controls

March 10, 2026 Available in arize-phoenix 13.13.0+ Control which model providers appear in the Phoenix UI using the PHOENIX_ALLOWED_PROVIDERS environment variable. Set it to a comma-separated list of provider names to show only those providers, keeping your interface focused on the tools you actually use.
  • Allow-list mode to show only specified providers
  • Case-insensitive configuration with typo detection warnings
  • Set to NONE to hide all providers from the UI

Latest OpenAI GPT Models

March 8, 2026 Available in arize-phoenix 13.10.0+ Phoenix Playground now includes the latest OpenAI models: GPT-5.4 family, GPT-5.3-chat-latest, GPT-5.2-pro variants, and o3-pro-2025-06-10. All models include cost tracking and are ready to use in experiments and prompt testing.

Project Editing from Settings

March 8, 2026 Available in arize-phoenix 13.10.0+ Edit project descriptions and customize gradient colors directly from the Project Settings page. Click the edit button to update project metadata inline, with changes persisting immediately across the Phoenix UI.

Breaking Change: Removed Deprecated Annotations API

March 11, 2026 Breaking change in arize-phoenix-client 2.0.0 The deprecated client.annotations module has been removed. All annotation methods remain available on client.spans. Update your code to use client.spans.add_span_annotation() and client.spans.log_span_annotations() instead of the client.annotations variants.