SDK Quickstart
Instrument a Python LLM application with the Revefi LLM SDK in a few lines — OpenAI, Anthropic, Gemini, and LangChain calls are tracked automatically.
Overview
The Revefi LLM SDK is a minimal Python package built on OpenLLMetry / Traceloop and OpenTelemetry. A single init_llm_observability() call auto-instruments your LLM client libraries — every request and response is captured as a span and streamed to Revefi.
Supported providers / frameworks: OpenAI, Anthropic, Google Gemini (Generative AI), and LangChain.
Prerequisites
- Python 3.8+
1. Install
pip install revefi-llm-sdk2. Initialize
Call init_llm_observability() once at startup, before you create or call any LLM client. It configures the OpenTelemetry exporter and turns on auto-instrumentation.
from revefi_llm_sdk import init_llm_observability
init_llm_observability(
api_key="<REVEFI_API_TOKEN>", # your Revefi API access token
service_name="my-llm-app", # identifies this application in Revefi
ingestor_url="https://gateway.revefi.com",
capture_content=True, # send prompt and completion text (off by default)
)
# From here on, LLM calls are automatically traced:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello!"}],
)Parameters
| Parameter | Required | Description |
|---|---|---|
api_key | Yes | Revefi API access token. Sent as Authorization: Bearer <api_key>. |
service_name | Yes | Logical name for your application/agent. Appears as service.name on every span. |
ingestor_url | No | Base URL of the Revefi ingestion gateway. The SDK appends /api/v1/traces/ingest. Defaults to http://localhost:3000 (local dev). Set this to your Revefi gateway URL in production (see Endpoints). |
capture_content | No | Whether to send prompt and completion text to Revefi. Defaults to False. |
init_llm_observability() returns True on success and False if initialization failed (e.g. bad configuration) — it never raises, so check the return value if you want to fail fast.
Prompt and completion content
By default the SDK does not send prompt or completion text. Spans still carry everything needed for cost, usage, and performance analysis — model, token counts, latency, errors, cost, tool and function names, and your custom tags.
Set capture_content=True to also send the prompt messages, completion text, tool-call arguments, and LangChain chain/tool inputs and outputs. These appear in span details, prompt-similarity analysis, and free-text search. The setting applies to the whole process — it cannot be varied per request.
3. Add context and custom tags (optional)
Use set_context() to attach a user identifier, an agent name, and arbitrary custom tags to subsequent spans. Custom tags become first-class dimensions in Revefi — you can filter and group cost/usage charts by any of them (e.g. environment, team, feature, tenant_id).
from revefi_llm_sdk import set_context
set_context(
user_id="user-123",
agent_name="support-bot",
environment="production", # custom tag
team="growth", # custom tag
)Call set_context() whenever the context changes (for example, per request in a web handler) — it applies to all spans emitted afterward on that execution.
Custom tag limitsA maximum of 50 custom tags may be set. Each key must be a non-empty string of ≤ 64 characters, and each value a non-empty string of ≤ 128 characters. Invalid tags raise a
ValueError.
Endpoints
Pass the base URL (no path) as ingestor_url:
| Environment | ingestor_url |
|---|---|
| Production | https://gateway.revefi.com |
| AU | https://au.gateway.revefi.com |
Full example
import os
from revefi_llm_sdk import init_llm_observability, set_context
from openai import OpenAI
# 1. Initialize once at startup
ok = init_llm_observability(
api_key=os.environ["REVEFI_API_TOKEN"],
service_name="my-llm-app",
ingestor_url="https://gateway.revefi.com",
capture_content=True,
)
if not ok:
raise RuntimeError("Failed to initialize Revefi LLM observability")
# 2. Attach context for this request
set_context(user_id="user-123", agent_name="support-bot", environment="production")
# 3. Make LLM calls as usual — they are traced automatically
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Summarize today's incidents."}],
)
print(resp.choices[0].message.content)Within a minute or two your spans should appear in the Revefi AI Observability dashboards.
Troubleshooting
initreturnsFalse— check application logs; the SDK logs the failure reason. A common cause is an unreachableingestor_url.- Short-lived scripts — the exporter batches spans. Let the process exit cleanly (or flush) so the final batch is sent before shutdown.
- Spans arrive but prompt/response text is missing — expected unless
capture_content=Truewas passed at init. On startup the SDK logsLLM prompt/completion content capture: enabledordisabled.
Not using Python or these providers?
Send traces directly over OTLP — see Direct Trace Ingestion.
Updated 5 days ago
What’s Next
Add custom tags with set_context to break down cost and usage by user, team, or environment. See Span Structure for the full attribute reference.
