Skip to main content

Installation

Setup

Works with both synchronous and asynchronous clients; use the same wrap_openai entry point.

Chat Completions API

Span name: "openai-chat", SpanKind: LLM
What gets traced
  • Input: messages array
  • Output: assistant message
  • Model name
  • Token usage: prompt_tokens, completion_tokens, total_tokens, plus detail fields (for example reasoning_tokens from completion_tokens_details)
  • Model parameters: temperature, top_p, max_tokens, and other safe parameters only

Streaming

Streaming is fully supported. The wrapper records completion_start_time on the first chunk for time-to-first-token tracking. Chunks are reduced to a single response for the span output.

Responses API

Span name: "openai-response", SpanKind: LLM
What gets traced
  • Input: instructions plus input, normalized to messages format
  • Output: response output items
  • Token usage: input_tokens mapped to prompt tokens, output_tokens mapped to completion tokens, plus detail fields
  • Reasoning summaries extracted from reasoning output items
  • Model parameters: max_output_tokens, temperature, top_p, reasoning, and related fields

Tool calls (Responses API)

Built-in tools such as web_search, file_search, and code_interpreter are automatically traced as child spans with SpanKind TOOL:
Each tool invocation produces a child TOOL span with the tool type as the span name (for example "web_search_call", "function_call"). Function calls (function_call items) are also captured as TOOL child spans with arguments as input and results as output.

Token usage mapping

Chat Completions and Responses return different usage object shapes from the SDK. The wrapper normalizes both into the PandaProbe fields in this table; do not assume raw OpenAI field names are identical across APIs when reading span payloads in custom exporters.