> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pandaprobe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Zero-code LLM tracing for Python and TypeScript provider SDKs

**LLM provider wrappers** are the simplest way to add tracing to your LLM calls. Wrap your provider client once and every API call is automatically traced — no other code changes required.

The wrapper returns the same client type with tracing injected. Your existing code continues to work identically.

All wrappers automatically capture: input messages, output messages, model name, token usage, model parameters, streaming support, time-to-first-token for streaming, and error details.

## Comparison

| Provider | Python wrapper | TypeScript wrapper | APIs traced |
| - | - | - | - |
| OpenAI | `wrap_openai` | `wrapOpenAI` | Chat Completions and Responses |
| Anthropic | `wrap_anthropic` | `wrapAnthropic` | Messages, including streaming |
| Google Gemini | `wrap_gemini` | `wrapGemini` | Generate content, including streaming |
| Mistral | `wrap_mistral` | `wrapMistral` | Chat completions, including streaming |
| AWS Bedrock | `wrap_bedrock` | `wrapBedrock` | Converse and InvokeModel, including streaming |
| LiteLLM | `wrap_litellm` | — | Completion and async completion across providers |

<Tip>
  Install only the provider extras you use so dependency resolution stays minimal.
</Tip>

## Quick example

<Tabs>
  <Tab title="Python">
    ```python title="Python" theme={null}
    from pandaprobe.wrappers import wrap_openai
    from openai import OpenAI

    client = wrap_openai(OpenAI())
    ```
  </Tab>

  <Tab title="TypeScript">
    ```ts title="TypeScript" theme={null}
    import OpenAI from "openai";
    import { wrapOpenAI } from "pandaprobe/wrappers/openai";

    const client = wrapOpenAI(new OpenAI());
    ```
  </Tab>
</Tabs>

Use the returned client exactly as before—supported calls are traced automatically.

<Note>
  Wrappers work seamlessly with manual instrumentation. If a wrapper call happens inside a `pandaprobe.start_trace()` or `@pandaprobe.trace` context, the LLM span is automatically nested as a child span.
</Note>

## Provider guides

<CardGroup cols={3}>
  <Card title="OpenAI" href="/tracing/wrappers/openai">
    Chat Completions and Responses API, streaming, and tool spans
  </Card>

  <Card title="Anthropic" href="/tracing/wrappers/anthropic">
    Messages API, streaming patterns, and extended thinking
  </Card>

  <Card title="Google Gemini" href="/tracing/wrappers/google-gemini">
    `generate_content`, async, streaming, and thinking mode
  </Card>

  <Card title="Mistral AI" href="/tracing/wrappers/mistral">
    Chat completions, async, and streaming
  </Card>

  <Card title="LiteLLM" href="/tracing/wrappers/litellm">
    Unified `completion` across 100+ providers, async, streaming, and proxy
  </Card>

  <Card title="AWS Bedrock" href="/tracing/wrappers/bedrock">
    Converse and InvokeModel APIs, streaming, and aioboto3 support
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.