Skip to main content

Expandable Session Turn Messages

Available in arize-phoenix 15.7.0+ Long messages in the Session Details view are now collapsed by default with an expand button. This keeps the turn list scannable without losing any content — click to expand a message, click again to collapse it. The change applies to both user turns and model responses.

Note Identifier Support

Available in arize-phoenix 15.7.0+ The POST /v1/{trace,span,session}_notes endpoints now accept an optional identifier field on the request body. When provided, the note is upserted on (entity_id, name='note', identifier) — matching the semantics of structured annotations. Repeated calls with the same identifier overwrite the existing note. When omitted, the server stamps a unique px-<kind>-note:<uuid> identifier, preserving the existing append behavior.
The same identifier field is available on span and session notes:
Combined with the existing filter-based DELETE endpoints, this lets you tag every note in a coding session with a shared identifier and remove them all in one call:

New CLI Annotation Commands

Available in arize-phoenix 15.7.0+ (server), @arizeai/phoenix-cli (next minor release) New px commands let you manage annotations without needing curl or GraphQL. Bulk delete annotations by identifier or time range
Get a project by name
--identifier flag on annotate and add-note
The TypeScript client’s addTraceNote, addSpanNote, and addSessionNote functions also accept an identifier parameter in the same upcoming release.

Security: Format-String Injection Prevention

Available in arize-phoenix 15.7.0+ The f-string template formatter now blocks access to private and dunder attributes in template expressions. Templates like {user.__class__.__globals__} raised an error instead of resolving, preventing a format-string injection path that could expose process state (environment variables, module globals) through user-supplied template variables. Normal attribute access ({user.name}, {items[0].value}) is unaffected.