Skip to content

Commit

Permalink
feat(llm-monitoring): Docs for LLM monitoring (#1285)
Browse files Browse the repository at this point in the history
* Docs for LLM monitoring

* Add notes field to table
  • Loading branch information
colin-sentry committed May 21, 2024
1 parent 043bf0d commit f2092c6
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/docs/sdk/performance/modules/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ The list below contains SDK documentation for our various Insights Modules (form

- [App Starts](/sdk/performance/modules/app-starts/)
- [Caches](/sdk/performance/modules/caches/)
- [LLM Monitoring](/sdk/performance/modules/llm-monitoring/)
- [Queues](/sdk/performance/modules/queues/)
- [Queries](/sdk/performance/modules/queries/)
- [Requests](/sdk/performance/modules/requests/)
Expand Down
70 changes: 70 additions & 0 deletions src/docs/sdk/performance/modules/llm-monitoring.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
title: 'LLM Monitoring'
---

Sentry auto-generates LLM Monitoring data for common providers in Python, but you may need to manually annotate spans for other frameworks.

## Span conventions

### Span Operations

| Span OP | Description |
|:------------------------|:-------------------------------------------------------------------------------------|
| `ai.pipeline.*` | The top-level span which corresponds to one or more AI operations & helper functions |
| `ai.run.*` | A unit of work - a tool call, LLM execution, or helper method. |
| `ai.chat_completions.*` | A LLM chat operation |
| `ai.embeddings.*` | An LLM embedding creation operation |



### Span Data

| Attribute | Type | Description | Examples | Notes |
|-----------------------------|---------|-------------------------------------------------------|------------------------------------------|------------------------------------------|
| `ai.input_messages` | string | The input messages sent to the model | `[{"role": "user", "message": "hello"}]` | |
| `ai.completion_tоkens.used` | int | The number of tokens used to respond to the message | `10` | required for cost calculation |
| `ai.prompt_tоkens.used` | int | The number of tokens used to process just the prompt | `20` | required for cost calculation |
| `ai.total_tоkens.used` | int | The total number of tokens used to process the prompt | `30` | required for charts and cost calculation |
| `ai.model_id` | list | The vendor-specific ID of the model used | `"gpt-4"` | required for cost calculation |
| `ai.streaming` | boolean | Whether the request was streamed back | `true` | |
| `ai.responses` | list | The response messages sent back by the AI model | `["hello", "world"]` | |
| `ai.pipeline.name` | string | The description of the parent ai.pipeline span | `My AI pipeline` | required for charts |

## Instrumentation

When a user creates a new AI pipeline, the SDK automatically creates spans that instrument both the pipeline and its AI operations.

**Example**

```python
from sentry_sdk.ai.monitoring import ai_track
from openai import OpenAI

sentry.init(...)

openai = OpenAI()

@ai_track(description="My AI pipeline")
def invoke_pipeline():
result = openai.chat.completions.create(
model="some-model", messages=[{"role": "system", "content": "hello"}]
).choices[0].message.content

return openai.chat.completions.create(
model="some-model", messages=[{"role": "system", "content": result}]
).choices[0].message.content



```

This should result in the following spans.

```
<span op:"ai.pipeline" description:"My AI pipeline">
<span op:"ai.chat_completions.openai" description:"OpenAI Chat Completion" data[ai.total_tokens.used]:15 data[ai.pipeline.name]:"My AI pipeline" />
<span op:"ai.chat_completions.openai" description:"OpenAI Chat Completion" data[ai.total_tokens.used]:20 data[ai.pipeline.name]:"My AI pipeline" />
</span>
```

Notice that the ai.pipeline.name span of the children spans is the description of the `ai.pipeline.*` span parent.

0 comments on commit f2092c6

Please sign in to comment.