>>> LLM Observability for AI agents <<<

See why your
AI agent failed.

BotGauge records every conversation your AI agent has, one step at a time. See what it said, what it did behind the scenes, how long it took, and what it cost, all in one place.

Works with the tools you already use · Python SDK or standard OpenTelemetry

/// OBSERVABILITY / TRACE

Acme workspace

MessagesGraph viewTimeline
Latency: 1.8s$0.004Turn 2 of 3
Evaluation alert

Faithfulness failed on refund-agent · ses_1042, turn 2

Search by name…
  • Session · ses_10423.6s · $0.007
  • turn 2 of 31.8s
  • agent: support1.8s
  • llm: plan0.4s
  • tool: lookup_order0.5s
  • llm: answer0.9s

llm: answer

Completed · 2000.9s1,842 tokens

Input

Human: Can I return this order after 20 days? · Retrieved: “Refunds may be requested within 30 days.”

Output

You can request a refund within 14 days.

Evaluation · Faithfulness

0.64FailedThreshold 0.80

The answer says 14 days. The retrieved policy says 30 days, so it is not supported by the context.

>>> Works with the agent frameworks you already use <<<
  • LlamaIndex
  • LangChain
  • LangGraph logoLangGraph
  • Autogen
  • Anthropic
  • OpenAI
  • CrewAI
  • OpenAI Agents
  • Google ADK logoGoogle ADK
  • PydanticAI
  • MCP
  • OpenTelemetry

Not on the list? Anything that sends standard OpenTelemetry data can send traces to BotGauge.

>>> What is LLM observability? <<<

Follow the agent, not just the request.

An AI agent does more than answer. It plans, looks things up, calls tools, and talks to AI models, often many times before it replies. LLM observability means recording all of that, so when an answer is wrong, slow, or expensive, you can see exactly why.Traditional monitoring tells you a request was slow or failed. LLM observability also tells you whether the answer was good, and why.

11

frameworks verified

Frameworks

3

views of every session

Views

0

code changes to see your first traces (Python)

Setup

OTel

built on standard OpenTelemetry

Standard
>>> The basics <<<

Sessions, turns and spans.

Three simple ideas explain how BotGauge organizes everything your agent does. Think of a customer support chat: a follow-up like “and what about after 20 days?” only makes sense inside the conversation, so BotGauge keeps every turn tied to its session.

/// SESSION / SES_1042

3 turns · 3.6s · $0.007

User · turn 1

Where is my order 1042?

Support agent

It was delivered on Monday.

Spans in this turn

Agent · support-agent

1.2s

Model call · plan

0.3s

Tool call · lookup_order

0.4s

Model call · answer

0.5s

Duration 1.2sCost $0.002790 tokens
01

Session

The whole conversation with one person, from their first message to their last.

Answers

What did this whole conversation cost, and did it go well?

Example

One support chat about order 1042.

Shown in the Sessions tab

/// SESSION / SES_1042

3 turns · 3.6s · $0.007

User · turn 2

Can I return this order after 20 days?

Support agent

You can request a refund within 14 days.

Spans in this turn

Agent · support-agent

1.8s

Model call · plan

0.4s

Tool call · lookup_order

0.5s

Model call · answer

0.9s

Duration 1.8sCost $0.0041,842 tokens

Faithfulness · Fail

The retrieved policy says 30 days. The answer contradicts it.

02

Turn

One round trip inside a session: the person sends a message and the agent replies. A session can have one turn or many.

Answers

Which replies were slow, costly, or wrong?

Example

“Can I return this order after 20 days?” and the answer.

Shown in the Traces tab

/// SESSION / SES_1042

3 turns · 3.6s · $0.007

User · turn 3

Ok, thanks. I will contact support.

Support agent

Of course. Is there anything else I can help with?

Spans in this turn

Agent · support-agent

0.6s

Model call · answer

0.6s

Duration 0.6sCost $0.001410 tokens
03

Span

One timed piece of work inside a turn: the agent’s own run, a call to an AI model, a tool such as an order lookup, or a document fetch.

Answers

Which span was the bottleneck, and where did it fail?

Example

The lookup of order 1042.

Shown in the Spans tab

>>> From a wrong answer to the right explanation <<<

The answer is only the last step.

See the prompts, retrieved context, and tool calls behind a result. Find the span worth investigating fast, without piecing together disconnected logs.

01

Follow the conversation

Open a session to read the whole conversation, turn by turn, and see which agent handled each one.

02

Inspect the execution

Move between Messages, Graph view, and Timeline to see what happened inside a turn.

03

Put quality in context

Read quality scores next to cost and duration, then open the reason behind a failure.

>>> Conversation-level visibility <<<

A whole conversation. One connected view.

A single message rarely tells the whole story. BotGauge groups everything into sessions and turns, and shows which agent handled each one.

  • Read the conversation the way your customer saw it.
  • Open any turn to see the model calls, tool calls, and lookups behind the reply.
  • Switch between Messages, Graph view, and Timeline.
Explore the documentation

/// SESSION / SES_1042

User · turn 1

Where is my order 1042?

Support agent

It was delivered on Monday.

User · turn 2

Can I return this order after 20 days?

Support agent

You can request a refund within 14 days.

Faithfulness · Fail

The retrieved policy says 30 days. Open turn 2 to inspect the answer span.

>>> What you can measure <<<

The numbers that matter

Every session, turn, and span comes with the figures teams ask about most. No spreadsheets needed.

$0.004

What each conversation costs

BotGauge works out cost from the tokens each model call used and the price of that model. See it for every session, turn, and span, so you can tell which turn pushed the bill up.

Cost

1.8s

How long people waited

Duration for a whole session or turn, and latency for each span. The slowest span stands out on the timeline.

Speed

1,842

How much the model read and wrote

Models handle text in small pieces called tokens. More tokens usually means a bigger bill and a slower reply.

Tokens

What broke, and whether it recovered

Red: a span failed and nothing fixed it. Amber: a warning, such as a failure that a retry or a backup model then fixed. No color: all clear.

Errors

0.64

Whether the answer was right

Quality scores sit beside cost and speed, so a fast, cheap answer can’t hide a wrong one.

Quality

support-agent

Which agent handled it

See which agent handled each session, turn, and span, and filter down to just one.

Agent

Sample values from one example turn. Cost is an estimate based on model price lists.

>>> At a glance <<<

Spot the problem turns fast.

The Traces tab lists every turn with what the person asked, how long the reply took, and what it cost. Rows are tinted when something went wrong. Search and filter by status, latency, cost, and more, then open a turn to see exactly why.

  • One row per turn, with what the person asked.
  • Duration and cost side by side.
  • Rows tinted red or amber when something went wrong.

/// TRACES

SessionInputSpansDurationCost
ses_1042Where is my order 1042?41.2s$0.002
ses_1041Move my appointment to Thursday53.4s$0.006
ses_1040Where’s my refund?42.9s$0.005
ses_1039Why was I charged twice?42.2s$0.004
  • Red: failed, and nothing fixed it
  • Amber: a warning, such as a failure fixed by a retry
>>> Quality, cost, and latency <<<

Know where the time and tokens went.

Find the slow spans on the timeline, then switch the view to see where the tokens and the cost went. Quality scores sit alongside, so a fast answer can’t hide a wrong one.

  • Duration: how long each span took.
  • Tokens: how much the model read and wrote.
  • Cost: what each span added to the bill.
Explore evaluations

/// EVERY SPAN, IN CONTEXT

agent: support
1.8s
llm: plan
0.4s
tool: lookup_order
0.5s
llm: answer
0.9s
Duration1.8s
Cost$0.004
Faithfulness0.64
>>> Built for the whole team <<<

Not just for engineers.

Everyone who touches an AI agent gets the view they need, from one shared record, so nobody waits on an engineer to explain what happened.

See what customers saw

Read real conversations turn by turn, then see what the agent did behind each reply.

Support and product

Go from symptom to cause

Jump from a wrong or slow answer to the exact prompt, tool result, or error that caused it.

Engineers

Know the bill

See what each conversation, agent, and release costs, and how long users wait.

Finance and operations

Keep data in check

Detected personal data and credentials are masked before they leave your app, and you choose how much is recorded.

Security and compliance
>>> You stay in control <<<

You decide what gets recorded.

Choose how much detail BotGauge keeps. Personal data and credentials are masked by default at every level.

01

Metadata only

The model used, token counts, and timing. No message content is recorded.

02Default

Text

Prompts, responses, and tool data. Images, audio, and embeddings stay out.

03

Full

Everything in Text, plus images, audio, and embeddings.

// What your user typed

Please refund the order on my card 4242 4242 4242 4242.

You can email me at sam@example.com.

// What BotGauge records

Please refund the order on my card ***************.

You can email me at ***************.

Illustrative example. Masking is on by default and covers detected emails, card numbers, API keys, and passwords.

>>> Two ways to connect <<<

Use the SDK or your own exporter

BotGauge accepts standard OpenTelemetry, so you can start with a Python package or point an exporter you already run.

Any OpenTelemetry exporterBotGauge SDK

What it is

An exporter you already run, pointed at BotGauge

A Python package built on the standard OpenTelemetry SDK

Sessions, turns, and agent names

Not added automatically

Added to every span once your developer sets a session ID

Masking of personal data and credentials

Not applied automatically

On by default

Start without code changes

Depends on your language’s OpenTelemetry setup

Yes, for Python apps. Your developer adds a session ID in code to group conversations.

Languages

Any language with an OpenTelemetry exporter

Python

The frameworks BotGauge has verified are listed at the top of this page. Other versions are still traced, with a warning, and CI can be set to allow verified versions only.

>>> Built for production <<<

Safe to run in production

Built so tracing never gets in your agent’s way, or records more than you intend.

Private by default

Detected personal data and credentials are masked before anything leaves your app.

Never in your way

Tracing runs in the background. A slow or unreachable endpoint never blocks or crashes your app.

Roles for your team

Viewer, editor, and admin roles decide who can only look and who can make changes.

Works with your setup

Runs alongside your own OpenTelemetry setup, and your BotGauge key is never sent to your own collectors by default.

>>> The BotGauge reliability loop <<<

Find it. Understand it. Keep checking it

Connect adversarial testing, execution traces, and quality checks around the same agent.

>>> Get started <<<

Three steps. Then watch it work

Your developer can connect an agent with a few commands. After that, anyone on the team can open Logs and follow a conversation.

  1. 01

    Get a key.

    Sign in at cloud.botgauge.com and create an API key.

  2. 02

    Install

    Run pip install botgauge, then botgauge setup --install to add tracing for the frameworks your app uses.

  3. 03

    Run

    Start your app with botgauge instrument python app.py, then open Logs to see your first traces. To group them into conversations, your developer passes a session ID.

Good to know

The Python SDK is an early 0.x release and needs Python 3.10 or later. Pin its version in production.

Read the integration docs
>>> Frequently asked questions <<<

A few things to know.

It means recording what your AI agent actually does: every model call, tool call, and lookup, so you can investigate behavior, quality, cost, and speed. Instead of guessing why an answer was wrong, you open the conversation and see.
A session is a whole conversation with one person. A turn is one round trip inside it: the person sends a message and the agent replies. Behind each reply, the agent does its work in spans, such as calling an AI model or looking something up. BotGauge keeps all three connected, so you can go from the conversation to a turn to the exact span. Your developer gives each conversation an ID, which is how BotGauge knows which turns belong together.
A turn is stored as a trace. Trace and span are the standard OpenTelemetry names, and the console’s Sessions, Traces, and Spans tabs list your data at each level.
A developer connects your agent once. After that, anyone on your team can open Logs, read conversations, and check cost and duration without writing code.
Open the session, pick the turn, and look at its spans. In the Traces tab, turns where a span failed and nothing fixed it are tinted red. Turns with a warning, such as a failure that a retry or a backup model then fixed, are tinted amber. Open any span to see what went in and what came out.
Yes. BotGauge works cost out from the tokens each model call used and the price of that model, and shows it for every session, turn, and span. It is an estimate based on model price lists, so it can differ slightly from your provider’s invoice.
No. An existing OpenTelemetry exporter can send traces to BotGauge. The BotGauge SDK adds session, turn, and agent identity to every span (your developer supplies the session ID), plus capture controls and default masking of detected personal data and credentials.
Text mode, the default, captures prompts, responses, and tool data with detected personal data and credentials masked. Metadata mode limits capture to the model, token counts, and timing. Full capture can also include images, audio, and embeddings.
No. Spans are sent from a background thread with limits and timeouts, so a slow or unreachable endpoint never blocks or crashes your app.
Traditional monitoring tells you a request was slow or failed. An LLM application can return a successful response that is still wrong, so observability also records the content: prompts, responses, tool calls, and retrieved context. That lets you judge quality and trace a bad answer back to the step that caused it.
Yes. BotGauge runs alongside your own collector without mixing the two, and your BotGauge key is never sent to your own collectors by default.
The Python SDK is an early 0.x release, so public API shapes may change before 1.0. Pin the version in production. Any OpenTelemetry exporter is a stable alternative.
>>> Get started <<<

Stop guessing.
Follow the trace.

Connect your agent and see exactly what it does in its very next conversation.