Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Langtrace Python SDK

Open Source & Open Telemetry(OTEL) Observability for LLM Applications

Static BadgeStatic BadgeStatic BadgeDownloadsDeploy


📚 Table of Contents

Langtrace is an open source observability software which lets you capture, debug and analyze traces and metrics from all your applications that leverages LLM APIs, Vector Databases and LLM based Frameworks.

✨ Features

  • 📊 Open Telemetry Support: Built on OTEL standards for comprehensive tracing
  • 🔄 Real-time Monitoring: Track LLM API calls, vector operations, and framework usage
  • 🎯 Performance Insights: Analyze latency, costs, and usage patterns
  • 🔍 Debug Tools: Trace and debug your LLM application workflows
  • 📈 Analytics: Get detailed metrics and visualizations
  • 🛠️ Framework Support: Extensive integration with popular LLM frameworks
  • 🔌 Vector DB Integration: Support for major vector databases
  • 🎨 Flexible Configuration: Customizable tracing and monitoring options

🚀 Quick Start

pip install langtrace-python-sdk
fromlangtrace_python_sdkimportlangtracelangtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai

🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors:

LLM Providers

ProviderTypeScript SDKPython SDK
OpenAI
Anthropic
Azure OpenAI
Cohere
Groq
Perplexity
Gemini
Mistral
AWS Bedrock
Ollama
Cerebras

Frameworks

FrameworkTypeScript SDKPython SDK
Langchain
LlamaIndex
Langgraph
LiteLLM
DSPy
CrewAI
VertexAI
EmbedChain
Autogen
HiveAgent
Inspect AI
Graphlit
Phidata
Arch

Vector Databases

DatabaseTypeScript SDKPython SDK
Pinecone
ChromaDB
QDrant
Weaviate
PGVector✅ (SQLAlchemy)
MongoDB
Milvus

🌐 Getting Started

Langtrace Cloud ☁️

  1. Sign up by going to this link.
  2. Create a new Project after signing up. Projects are containers for storing traces and metrics generated by your application. If you have only one application, creating 1 project will do.
  3. Generate an API key by going inside the project.
  4. In your application, install the Langtrace SDK and initialize it with the API key you generated in the step 3.
  5. The code for installing and setting up the SDK is shown below

Framework Quick Starts

FastAPI

fromfastapiimportFastAPIfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIlangtrace.init()
app=FastAPI()
client=OpenAI()
@app.get("/")defroot():
client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=False,
)
return {"Hello": "World"}

Django

# settings.pyfromlangtrace_python_sdkimportlangtracelangtrace.init()
# views.pyfromdjango.httpimportJsonResponsefromopenaiimportOpenAIclient=OpenAI()
defchat_view(request):
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": request.GET.get('message', '')}]
)
returnJsonResponse({"response": response.choices[0].message.content})

Flask

fromflaskimportFlaskfromlangtrace_python_sdkimportlangtracefromopenaiimportOpenAIapp=Flask(__name__)
langtrace.init()
client=OpenAI()
@app.route('/')defchat():
response=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
return {"response": response.choices[0].message.content}

LangChain

fromlangtrace_python_sdkimportlangtracefromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatelangtrace.init()
# LangChain operations are automatically tracedchat=ChatOpenAI()
prompt=ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}")
])
chain=prompt|chatresponse=chain.invoke({"input": "Hello!"})

LlamaIndex

fromlangtrace_python_sdkimportlangtracefromllama_indeximportVectorStoreIndex, SimpleDirectoryReaderlangtrace.init()
# Document loading and indexing are automatically traceddocuments=SimpleDirectoryReader('data').load_data()
index=VectorStoreIndex.from_documents(documents)
# Queries are traced with metadataquery_engine=index.as_query_engine()
response=query_engine.query("What's in the documents?")

DSPy

fromlangtrace_python_sdkimportlangtraceimportdspyfromdspy.telepromptimportBootstrapFewShotlangtrace.init()
# DSPy operations are automatically tracedlm=dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
classSimpleQA(dspy.Signature):
"""Answer questions with short responses."""question=dspy.InputField()
answer=dspy.OutputField(desc="short answer")
compiler=BootstrapFewShot(metric=dspy.metrics.Answer())
program=compiler.compile(SimpleQA)

CrewAI

fromlangtrace_python_sdkimportlangtracefromcrewaiimportAgent, Task, Crewlangtrace.init()
# Agents and tasks are automatically tracedresearcher=Agent(
role="Researcher",
goal="Research and analyze data",
backstory="Expert data researcher",
allow_delegation=False
)
task=Task(
description="Analyze market trends",
agent=researcher
)
crew=Crew(
agents=[researcher],
tasks=[task]
)
result=crew.kickoff()

For more detailed examples and framework-specific features, visit our documentation.

⚙️ Configuration

Initialize Options

The SDK can be initialized with various configuration options to customize its behavior:

langtrace.init(
api_key: Optional[str] =None, # API key for authenticationbatch: bool=True, # Enable/disable batch processingwrite_spans_to_console: bool=False, # Console loggingcustom_remote_exporter: Optional[Any] =None, # Custom exporterapi_host: Optional[str] =None, # Custom API hostdisable_instrumentations: Optional[Dict] =None, # Disable specific integrationsservice_name: Optional[str] =None, # Custom service namedisable_logging: bool=False, # Disable all loggingheaders: Dict[str, str] = {}, # Custom headers
)

Configuration Details

ParameterTypeDefault ValueDescription
api_keystrLANGTRACE_API_KEY or NoneThe API key for authentication. Can be set via environment variable
batchboolTrueWhether to batch spans before sending them to reduce API calls
write_spans_to_consoleboolFalseEnable console logging for debugging purposes
custom_remote_exporterOptional[Exporter]NoneCustom exporter for sending traces to your own backend
api_hostOptional[str]https://langtrace.ai/Custom API endpoint for self-hosted deployments
disable_instrumentationsOptional[Dict]NoneDisable specific vendor instrumentations (e.g., {'only': ['openai']})
service_nameOptional[str]NoneCustom service name for trace identification
disable_loggingboolFalseDisable SDK logging completely
headersDict[str, str]{}Custom headers for API requests

Environment Variables

Configure Langtrace behavior using these environment variables:

VariableDescriptionDefaultImpact
LANGTRACE_API_KEYPrimary authentication methodRequired*Required if not passed to init()
TRACE_PROMPT_COMPLETION_DATAControl prompt/completion tracingtrueSet to 'false' to opt out of prompt/completion data collection
TRACE_DSPY_CHECKPOINTControl DSPy checkpoint tracingtrueSet to 'false' to disable checkpoint tracing
LANGTRACE_ERROR_REPORTINGControl error reportingtrueSet to 'false' to disable Sentry error reporting
LANGTRACE_API_HOSTCustom API endpointhttps://langtrace.ai/Override default API endpoint for self-hosted deployments

Performance Note: Setting TRACE_DSPY_CHECKPOINT=false is recommended in production environments as checkpoint tracing involves state serialization which can impact latency.

Security Note: When TRACE_PROMPT_COMPLETION_DATA=false, no prompt or completion data will be collected, ensuring sensitive information remains private.

🔧 Advanced Features

Root Span Decorator

Use the root span decorator to create custom trace hierarchies:

fromlangtrace_python_sdkimportlangtrace@langtrace.with_langtrace_root_span(name="custom_operation")defmy_function():
# Your code herepass

Additional Attributes

Inject custom attributes into your traces:

# Using decorator@langtrace.with_additional_attributes({"custom_key": "custom_value"})defmy_function():
pass# Using context managerwithlangtrace.inject_additional_attributes({"custom_key": "custom_value"}):
# Your code herepass

Prompt Registry

Register and manage prompts for better traceability:

fromlangtrace_python_sdkimportlangtrace# Register a prompt templatelangtrace.register_prompt("greeting", "Hello, {name}!")
# Use registered promptresponse=client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": langtrace.get_prompt("greeting", name="Alice")}]
)

User Feedback System

Collect and analyze user feedback:

fromlangtrace_python_sdkimportlangtrace# Record user feedback for a tracelangtrace.record_feedback(
trace_id="your_trace_id",
rating=5,
feedback_text="Great response!",
metadata={"user_id": "123"}
)

DSPy Checkpointing

Manage DSPy checkpoints for workflow tracking:

fromlangtrace_python_sdkimportlangtrace# Enable checkpoint tracing (disabled by default in production)langtrace.init(
api_key="your_api_key",
dspy_checkpoint_tracing=True
)

Vector Database Operations

Track vector database operations:

fromlangtrace_python_sdkimportlangtrace# Vector operations are automatically tracedwithlangtrace.inject_additional_attributes({"operation_type": "similarity_search"}):
results=vector_db.similarity_search("query", k=5)

For more detailed examples and use cases, visit our documentation.

📐 Examples

🏠 Langtrace Self Hosted

Get started with self-hosted Langtrace:

fromlangtrace_python_sdkimportlangtracelangtrace.init(write_spans_to_console=True) # For console logging# ORlangtrace.init(custom_remote_exporter=<your_exporter>, batch=<TrueorFalse>) # For custom exporter

🤝 Contributing

We welcome contributions! To get started:

  1. Fork this repository and start developing
  2. Join our Discord workspace
  3. Run examples:
    # In run_example.py, set ENABLED_EXAMPLES flag to True for desired examplepythonsrc/run_example.py
  4. Run tests:
    pipinstall'.[test]'&&pipinstall'.[dev]'pytest-v

🔒 Security

To report security vulnerabilities, email us at security@scale3labs.com. You can read more on security here.

❓ Frequently Asked Questions

📜 License

Langtrace Python SDK is licensed under the Apache 2.0 License. You can read about this license here.

About

Langtrace SDK for Python Applications

Topics

Resources

Stars

45 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages