Skip to content

Commit

Permalink
Merge branch 'development' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
karthikscale3 committed Nov 14, 2024
2 parents 0c7af05 + aad6047 commit 425e563
Show file tree
Hide file tree
Showing 9 changed files with 196 additions and 65 deletions.
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ COPY --from=builder /app/public ./public
COPY --from=builder /app/scripts ./scripts
COPY --from=builder /app/node_modules ./node_modules
COPY ./entrypoint.sh /app/entrypoint.sh
COPY ./proto ./proto

RUN chmod +x /app/entrypoint.sh

Expand Down
176 changes: 132 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,73 @@
# [Langtrace](https://www.langtrace.ai)

Open Source Observability for LLM applications

## 🌐 Open Source & Open Telemetry(OTEL) Observability for LLM applications

![Static Badge](https://img.shields.io/badge/License-AGPL--3.0-blue)
[![NPM Typescript SDK](https://img.shields.io/npm/v/%40langtrase%2Ftypescript-sdk?style=flat&logo=npm&label=%40langtrase%2Ftypescript-sdk&color=green&link=https%3A%2F%2Fgithub.com%2FScale3-Labs%2Flangtrace-typescript-sdk)](https://github.com/Scale3-Labs/langtrace-typescript-sdk)
[![PyPI Python SDK](https://img.shields.io/pypi/v/langtrace-python-sdk?style=flat&logo=python&label=langtrace-python-sdk&color=green&link=https%3A%2F%2Fgithub.com%2FScale3-Labs%2Flangtrace-python-sdk)](https://github.com/Scale3-Labs/langtrace-python-sdk)
[![Downloads](https://static.pepy.tech/badge/langtrace-python-sdk/month)](https://pepy.tech/project/langtrace-python-sdk)
[![NPM Trace Attributes](https://img.shields.io/npm/v/%40langtrase%2Ftrace-attributes?style=flat&logo=npm&label=%40langtrase%2Ftrace-attributes&color=green&link=https%3A%2F%2Fgithub.com%2FScale3-Labs%2Flangtrace-trace-attributes)](https://github.com/Scale3-Labs/langtrace-trace-attributes)
[![PyPI Trace Attributes](https://img.shields.io/pypi/v/trace-attributes?style=flat&logo=python&label=trace-attributes&color=green&link=https%3A%2F%2Fgithub.com%2FScale3-Labs%2Flangtrace-trace-attributes)](https://github.com/Scale3-Labs/langtrace-trace-attributes)
![Static Badge](https://img.shields.io/badge/Development_status-Active-green)
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/8dNq1c?referralCode=MA2S9H)
<div align="center">
<h1>
<img src="https://github.com/Scale3-Labs/langtrace/assets/105607645/6825158c-39bb-4270-b1f9-446c36c066ee" alt="Langtrace" width="400"/>
<br/>
<a href="https://www.langtrace.ai">Langtrace</a>
</h1>
<h3>Open Source Observability for LLM Applications</h3>

[![License](https://img.shields.io/badge/License-AGPL--3.0-blue?style=flat-square)](LICENSE)
[![Development Status](https://img.shields.io/badge/Status-Active-success?style=flat-square)](https://github.com/Scale3-Labs/langtrace)
[![Pull Requests](https://img.shields.io/github/issues-pr/Scale3-Labs/langtrace?style=flat-square)](https://github.com/Scale3-Labs/langtrace/pulls)
[![NPM SDK](https://img.shields.io/npm/v/%40langtrase%2Ftypescript-sdk?style=flat-square&logo=npm&label=typescript-sdk&color=green)](https://github.com/Scale3-Labs/langtrace-typescript-sdk)
[![NPM Downloads](https://img.shields.io/npm/dm/%40langtrase%2Ftypescript-sdk?style=flat-square&logo=npm)](https://www.npmjs.com/package/@langtrase/typescript-sdk)
[![PyPI SDK](https://img.shields.io/pypi/v/langtrace-python-sdk?style=flat-square&logo=python&label=python-sdk&color=green)](https://github.com/Scale3-Labs/langtrace-python-sdk)
[![Downloads](https://static.pepy.tech/badge/langtrace-python-sdk/month)](https://pepy.tech/project/langtrace-python-sdk)
[![Deploy](https://railway.app/button.svg)](https://railway.app/template/8dNq1c?referralCode=MA2S9H)
</div>

---

## 📚 Table of Contents
- [✨ Features](#-features)
- [🚀 Quick Start](#-quick-start)
- [🔗 Integrations](#-supported-integrations)
- [🌐 Getting Started](#-getting-started)
- [🏠 Self Hosting](#-langtrace-self-hosted)
- [📐 Architecture](#-langtrace-system-architecture)
- [🤝 Contributing](#-contributions)
- [🔒 Security](#-security)
- [❓ FAQ](#-frequently-asked-questions)
- [👥 Contributors](#-contributors)
- [📜 License](#-license)

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.

![image](/public/langtrace-tracing-ss.png)

## ✨ 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
- 🏠 **Self-hosting Option**: Deploy on your own infrastructure

## 🚀 Quick Start

```bash
# For TypeScript/JavaScript
npm i @langtrase/typescript-sdk

# For Python
pip install langtrace-python-sdk
```

Initialize in your code:
```typescript
// TypeScript
import * as Langtrace from '@langtrase/typescript-sdk'
Langtrace.init({ api_key: '<your_api_key>' }) // Get your API key at langtrace.ai
```
```python
# Python
from langtrace_python_sdk import langtrace
langtrace.init(api_key='<your_api_key>') # Get your API key at langtrace.ai
```

For detailed setup instructions, see [Getting Started](#-getting-started).

## 📊 Open Telemetry Support

The traces generated by Langtrace adhere to [Open Telemetry Standards(OTEL)](https://opentelemetry.io/docs/concepts/signals/traces/). We are developing [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions/) for the traces generated by this project. You can checkout the current definitions in [this repository](https://github.com/Scale3-Labs/langtrace-trace-attributes/tree/main/schemas). Note: This is an ongoing development and we encourage you to get involved and welcome your feedback.
Expand Down Expand Up @@ -138,36 +187,45 @@ If you prefer to disable telemetry, you can do so by setting TELEMETRY_ENABLED=f

---

## 🔗 Supported integrations

Langtrace automatically captures traces from the following vendors:

| Vendor | Type | Typescript SDK | Python SDK |
| ------------ | --------------- | ------------------ | ------------------------------- |
| OpenAI | LLM | :white_check_mark: | :white_check_mark: |
| Anthropic | LLM | :white_check_mark: | :white_check_mark: |
| Azure OpenAI | LLM | :white_check_mark: | :white_check_mark: |
| Cohere | LLM | :white_check_mark: | :white_check_mark: |
| xAI | LLM | :white_check_mark: | :white_check_mark: |
| Groq | LLM | :white_check_mark: | :white_check_mark: |
| Perplexity | LLM | :white_check_mark: | :white_check_mark: |
| Gemini | LLM | :white_check_mark: | :white_check_mark: |
| AWS Bedrock | LLM | :white_check_mark: | :x: |
| Mistral | LLM | :x: | :white_check_mark: |
| Langchain | Framework | :x: | :white_check_mark: |
| LlamaIndex | Framework | :white_check_mark: | :white_check_mark: |
| Langgraph | Framework | :x: | :white_check_mark: |
| LiteLLM | Framework | :x: | :white_check_mark: |
| DSPy | Framework | :x: | :white_check_mark: |
| CrewAI | Framework | :x: | :white_check_mark: |
| Ollama | Framework | :x: | :white_check_mark: |
| VertexAI | Framework | :white_check_mark: | :white_check_mark: |
| Vercel AI | Framework | :white_check_mark: | :x: |
| Pinecone | Vector Database | :white_check_mark: | :white_check_mark: |
| ChromaDB | Vector Database | :white_check_mark: | :white_check_mark: |
| QDrant | Vector Database | :white_check_mark: | :white_check_mark: |
| Weaviate | Vector Database | :white_check_mark: | :white_check_mark: |
| PGVector | Vector Database | :white_check_mark: | :white_check_mark: (SQLAlchemy) |
## 🔗 Supported Integrations

Langtrace automatically captures traces from the following vendors and frameworks:

### LLM Providers
| Provider | TypeScript SDK | Python SDK |
|----------|:-------------:|:----------:|
| OpenAI |||
| Anthropic |||
| Azure OpenAI |||
| Cohere |||
| xAI |||
| Groq |||
| Perplexity |||
| Gemini |||
| AWS Bedrock |||
| Mistral |||

### LLM Frameworks
| Framework | TypeScript SDK | Python SDK |
|-----------|:-------------:|:----------:|
| Langchain |||
| LlamaIndex |||
| Langgraph |||
| LiteLLM |||
| DSPy |||
| CrewAI |||
| Ollama |||
| VertexAI |||
| Vercel AI |||

### Vector Databases
| Database | TypeScript SDK | Python SDK |
|----------|:-------------:|:----------:|
| Pinecone |||
| ChromaDB |||
| QDrant |||
| Weaviate |||
| PGVector || ✅ (SQLAlchemy) |

---

Expand Down Expand Up @@ -207,6 +265,36 @@ To report security vulnerabilities, email us at <[email protected]>. You c
- Langtrace application(this repository) is [licensed](https://github.com/Scale3-Labs/langtrace/blob/development/LICENSE) under the AGPL 3.0 License. You can read about this license [here](https://www.gnu.org/licenses/agpl-3.0.en.html).
- Langtrace SDKs are licensed under the Apache 2.0 License. You can read about this license [here](https://www.apache.org/licenses/LICENSE-2.0).

## 👥 Contributors

<div align="center">
<table>
<tr>
<td align="center"><a href="https://github.com/karthikscale3"><img src="https://github.com/karthikscale3.png" width="100px;" alt="karthikscale3"/><br /><sub><b>karthikscale3</b></sub></a></td>
<td align="center"><a href="https://github.com/dylanzuber-scale3"><img src="https://github.com/dylanzuber-scale3.png" width="100px;" alt="dylanzuber-scale3"/><br /><sub><b>dylanzuber-scale3</b></sub></a></td>
<td align="center"><a href="https://github.com/darshit-s3"><img src="https://github.com/darshit-s3.png" width="100px;" alt="darshit-s3"/><br /><sub><b>darshit-s3</b></sub></a></td>
<td align="center"><a href="https://github.com/rohit-kadhe"><img src="https://github.com/rohit-kadhe.png" width="100px;" alt="rohit-kadhe"/><br /><sub><b>rohit-kadhe</b></sub></a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/yemiadej"><img src="https://github.com/yemiadej.png" width="100px;" alt="yemiadej"/><br /><sub><b>yemiadej</b></sub></a></td>
<td align="center"><a href="https://github.com/alizenhom"><img src="https://github.com/alizenhom.png" width="100px;" alt="alizenhom"/><br /><sub><b>alizenhom</b></sub></a></td>
<td align="center"><a href="https://github.com/obinnascale3"><img src="https://github.com/obinnascale3.png" width="100px;" alt="obinnascale3"/><br /><sub><b>obinnascale3</b></sub></a></td>
<td align="center"><a href="https://github.com/Cruppelt"><img src="https://github.com/Cruppelt.png" width="100px;" alt="Cruppelt"/><br /><sub><b>Cruppelt</b></sub></a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Dnaynu"><img src="https://github.com/Dnaynu.png" width="100px;" alt="Dnaynu"/><br /><sub><b>Dnaynu</b></sub></a></td>
<td align="center"><a href="https://github.com/jatin9823"><img src="https://github.com/jatin9823.png" width="100px;" alt="jatin9823"/><br /><sub><b>jatin9823</b></sub></a></td>
<td align="center"><a href="https://github.com/MayuriS24"><img src="https://github.com/MayuriS24.png" width="100px;" alt="MayuriS24"/><br /><sub><b>MayuriS24</b></sub></a></td>
<td align="center"><a href="https://github.com/NishantRana07"><img src="https://github.com/NishantRana07.png" width="100px;" alt="NishantRana07"/><br /><sub><b>NishantRana07</b></sub></a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/obinnaokafor"><img src="https://github.com/obinnaokafor.png" width="100px;" alt="obinnaokafor"/><br /><sub><b>obinnaokafor</b></sub></a></td>
<td align="center"><a href="https://github.com/heysagnik"><img src="https://github.com/heysagnik.png" width="100px;" alt="heysagnik"/><br /><sub><b>heysagnik</b></sub></a></td>
<td align="center"><a href="https://github.com/dabiras3"><img src="https://github.com/dabiras3.png" width="100px;" alt="dabiras3"/><br /><sub><b>dabiras3</b></sub></a></td>
</tr>
</table>
</div>

---

## ❓Frequently Asked Questions
Expand Down
19 changes: 15 additions & 4 deletions app/(protected)/project/[project_id]/annotations/annotations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,21 @@ export default function Annotations({ email }: { email: string }) {
type: "event",
},
{
key: "status_code",
operation: "EQUALS",
value: "STATUS_CODE_OK",
type: "property",
operation: "OR",
filters: [
{
key: "status_code",
operation: "EQUALS",
value: "STATUS_CODE_OK",
type: "property",
},
{
key: "status_code",
operation: "EQUALS",
value: "1",
type: "property",
},
],
},
],
},
Expand Down
11 changes: 9 additions & 2 deletions app/api/trace/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,17 @@ export async function POST(req: NextRequest) {
{ message: "Traces added successfully" },
{ status: 200 }
);
} catch (error) {
} catch (err: unknown) {
const error = err as Error;

return NextResponse.json(
{
error: "Something went wrong while ingesting traces",
name: error?.name || 'UnknownError',
message: error?.message || 'Something went wrong while ingesting traces',
stack: error?.stack,
fullError: error instanceof Error
? JSON.stringify(error, Object.getOwnPropertyNames(error))
: JSON.stringify(error)
},
{ status: 404 }
);
Expand Down
26 changes: 13 additions & 13 deletions components/annotations/chart-tabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,29 @@ export function ChartTabs({
queryFn: async () => {
const filters = {
filters: [
{
key: "name",
operation: "EQUALS",
value: "gen_ai.content.completion",
type: "event",
},
{
operation: "OR",
filters: [
{
key: "llm.prompts",
operation: "NOT_EQUALS",
value: "",
type: "attribute",
key: "status_code",
operation: "EQUALS",
value: "STATUS_CODE_OK",
type: "property",
},
{
key: "name",
key: "status_code",
operation: "EQUALS",
value: "gen_ai.content.completion",
type: "event",
value: "1",
type: "property",
},
],
},
{
key: "status_code",
operation: "EQUALS",
value: "OK",
type: "property",
},
],
operation: "AND",
};
Expand Down
24 changes: 22 additions & 2 deletions components/shared/vendor-metadata.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,10 @@ export function vendorColor(vendor: string) {
return "bg-green-200";
}

if (vendor.includes("guardrails")) {
return "bg-green-200";
}

return "bg-gray-800";
}

Expand Down Expand Up @@ -497,8 +501,24 @@ export function VendorLogo({
<Image
alt="MongoDB Logo"
src="/mongodb.png"
width={50}
height={50}
width={30}
height={30}
className={cn(
`${color} p-[3px]`,
variant === "circular" ? "rounded-full" : "rounded-md"
)}
/>
);
}

if (vendor.includes("guardrails")) {
const color = vendorColor("guardrails");
return (
<Image
alt="Guardrails Logo"
src="/guardrails.png"
width={30}
height={30}
className={cn(
`${color} p-[3px]`,
variant === "circular" ? "rounded-full" : "rounded-md"
Expand Down
2 changes: 2 additions & 0 deletions components/traces/trace_graph.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,8 @@ const SpanItem: React.FC<SpanItemProps> = ({
color = "bg-blue-500";
else if (span.name.includes("mongodb") || serviceName.includes("mongodb"))
color = "bg-green-500";
else if (span.name.includes("guardrails") || serviceName.includes("guardrails"))
color = "bg-green-500";
const fillColor = color.replace("bg-", "fill-");

const vendor = getVendorFromSpan(span as any);
Expand Down
2 changes: 2 additions & 0 deletions lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -833,6 +833,8 @@ export function getVendorFromSpan(span: Span): string {
vendor = "litellm";
} else if (span.name.includes("mongodb") || serviceName.includes("mongodb")) {
vendor = "mongodb";
} else if (span.name.includes("guard") || serviceName.includes("guard")) {
vendor = "guardrails";
}
return vendor;
}
Expand Down
Binary file added public/guardrails.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 425e563

Please sign in to comment.