Observed since 20 Oct, 22:47 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
LangChain integration for Agent Observability - structured logging, cost tracking, and compliance for AI agents
LangChain integration for the Agent Observability platform — structured logging, cost tracking, and compliance audit trails for production AI agents.
pip install agent-observability-langchain
import requests
response = requests.post(
"https://api-production-0c55.up.railway.app/v1/register",
json={"agent_id": "my-langchain-agent"}
)
api_key = response.json()["api_key"]
print(f"Your API key: {api_key}")
# Save this! Example: ao_live_abc123...
Or via curl:
curl -X POST https://api-production-0c55.up.railway.app/v1/register \
-H "Content-Type: application/json" \
-d '{"agent_id": "my-langchain-agent"}'
export AGENT_OBS_API_KEY=ao_live_your_key_here
from langchain.agents import initialize_agent, AgentType
from langchain_openai import ChatOpenAI
from agent_observability_langchain import AgentObservabilityTool
# Create observability tool
obs_tool = AgentObservabilityTool()
# Create agent with observability
agent = initialize_agent(
tools=[obs_tool],
llm=ChatOpenAI(model="gpt-4"),
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True
)
# Use your agent — it can now log events for compliance
result = agent.run(
"Log an API call to OpenAI with cost $0.05 and latency 1200ms"
)
| Feature | Description |
|---|---|
| Structured Logging | Track all agent decisions and API calls with metadata |
| Cost Tracking | Monitor spending per agent, task, and LLM provider |
| Performance Analytics | Latency percentiles, error rates, throughput |
| Compliance Ready | SOC 2, GDPR, HIPAA audit trail requirements |
| Queryable History | Search logs by agent, time, event type, severity |
| LangChain Native | Works with agents, chains, and LangGraph |
Track spending across all your agents and LLM providers:
from agent_observability_langchain import AgentObservabilityTool
tool = AgentObservabilityTool(agent_id="research-bot-v2")
# Log each API call with cost
tool.invoke({
"event_type": "api_call",
"metadata": {
"provider": "openai",
"model": "gpt-4",
"cost_usd": 0.03,
"latency_ms": 1250,
"tokens": 1500
}
})
For regulated industries (finance, healthcare, legal):
tool.invoke({
"event_type": "decision",
"metadata": {
"decision": "approve_loan",
"confidence": 0.92,
"factors": ["credit_score", "income", "debt_ratio"],
"customer_id": "cust_12345"
},
"severity": "info"
})
tool.invoke({
"event_type": "error",
"metadata": {
"error_type": "RateLimitError",
"provider": "openai",
"retry_count": 3,
"resolved": False
},
"severity": "error"
})
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from agent_observability_langchain import AgentObservabilityTool
# Create agent with observability
agent = create_react_agent(
ChatOpenAI(model="gpt-4"),
tools=[AgentObservabilityTool()]
)
result = agent.invoke({
"messages": [("user", "Research AI trends and log the costs")]
})
# Different agent IDs for different workflows
research_tool = AgentObservabilityTool(agent_id="research-agent")
writer_tool = AgentObservabilityTool(agent_id="writer-agent")
reviewer_tool = AgentObservabilityTool(agent_id="reviewer-agent")
AgentObservabilityTool(
api_key: str = None, # Or set AGENT_OBS_API_KEY env var
agent_id: str = "langchain-agent", # Your agent identifier
api_base: str = None # Override API URL (for self-hosted)
)
| Parameter | Type | Required | Description |
|---|---|---|---|
event_type | str | Yes | api_call, decision, transaction, error, state_change |
metadata | dict | No | Event data (provider, cost_usd, latency_ms, etc.) |
severity | str | No | debug, info, warning, error, critical (default: info) |
| Field | Type | Description |
|---|---|---|
provider | str | LLM provider (openai, anthropic, cohere, etc.) |
model | str | Model name (gpt-4, claude-3-opus, etc.) |
cost_usd | float | Cost in USD |
latency_ms | int | Response time in milliseconds |
tokens | int | Total token count |
input_tokens | int | Input/prompt tokens |
output_tokens | int | Output/completion tokens |
error_message | str | Error details (for error events) |
decision | str | Decision made (for decision events) |
confidence | float | Confidence score (0-1) |
| Tier | Logs/Month | Price | Best For |
|---|---|---|---|
| Free | 100,000 | $0 | Development, small projects |
| Starter | 1,000,000 | $29/month | Production agents |
| Professional | 10,000,000 | $199/month | Enterprise, high-volume |
Full pricing: https://api-production-0c55.up.railway.app/pricing.json
from agent_observability_langchain import create_observability_tool
# Quick creation
tool = create_observability_tool(agent_id="my-agent")
| Variable | Description | Required |
|---|---|---|
AGENT_OBS_API_KEY | Your API key | Yes (or pass to constructor) |
AGENT_OBS_BASE_URL | Override API URL | No |
The tool handles errors gracefully and returns error messages instead of raising exceptions:
result = tool.invoke({
"event_type": "api_call",
"metadata": {"provider": "openai"}
})
if "Failed" in result:
print(f"Logging failed: {result}")
else:
print(f"Success: {result}")
MIT License — see LICENSE for details.
Contributions welcome! Please open an issue or submit a pull request.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.2.1 | 5 Jan 2026 | 8 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:47 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:1aec752b8eb67650714087c784d85f7de77ac1b597f1ac84f3faaca40f85d779