---
title: Langfuse Update — October 2023
date: 2023/11/01
description: "Improved dashboard, OpenAI integration, RAG evals, doubled API speed, simplified Docker deployments."
tag: update
ogImage: /images/blog/update-october-2023/og.png
author: Marc
---

Hi everyone 👋, here's a quick overview of all the most notable new features we shipped in October:

- [**Improved dashboard**](#dashboard)

- [**OpenAI SDK integration**](#openai) (Python)

- [**Cookbook for RAG evals**](#rag-evals) based on Ragas

- [**2x API performance**](#doubled-api-performance)

- [**Simplified Docker deployments**](#simplified-docker)

- [**SDK improvements**](#sdk-improvements)
  - SDKs expose trace URL
  - Python SDK now supports Pydantic v1 and v2

- [**UX improvements**](#ux-improvements)
  - Quickly page through traces
  - SSO via Google and GitHub
  - Delete projects

- [**Docs improvements**](#docs): Quickly open all Python docs as Jupyter notebooks

... and many small improvements and bug fixes.

---

The details 👇

## 📈 Enhancements to dashboard [#dashboard]

**Now includes**

- Costs broken down by model
- Latency percentiles by model (50th, 90th, 95th, 99th)
- Usage/cost by end-user
- Usage by trace type to break it down by application use case
- New date-range selection

## 🤖 OpenAI SDK integration [#openai]

Drop-in replacement for OpenAI's Python SDK to get full visibility by changing only one line of code. Automatically captures: prompts, completions, usage, latencies and API errors.

```diff
- import openai
+ from langfuse.openai import openai
```

```python
# Use OpenAI Python SDK as usual
openai.ChatCompletion.create(
  model="gpt-4o",
  messages=[
      {"role": "system", "content": "You are a very accurate calculator. You output only the result of the calculation."},
      {"role": "user", "content": "1 + 1 = "}],
)
```

This integration fully supports grouping multiple requests into one trace if they belong to a single invocation. Also you can add scores to evaluate the outputs.

See [integration docs](/integrations/model-providers/openai-py) for full details.

Thanks to [@Dev-Khant](https://github.com/Dev-Khant) for contributing to this.

## 📚 Cookbook for RAG evals [#rag-evals]

Together with the [Ragas](https://docs.ragas.io/) team, we've added a [cookbook](/docs/scores/model-based-evals/ragas) on how to evaluate production RAG (Retrieval augmented generation) pipelines in Langfuse. They specifically evaluate the retrieved context and the generated answer.

  [![RAG
  evals](/images/blog/update-october-2023/ragas-notebook.png)](/docs/scores/model-based-evals/ragas)

## ⚡️ Doubled API performance [#doubled-api-performance]

![RAG evals](/images/blog/update-october-2023/api-perf.png)

API authentication previously added a significant overhead to API requests. We've now optimized this and doubled the API performance.

## 🐳 Simplified Docker deployments [#simplified-docker]

We've integrated the application of migrations to the startup process of the Docker image. This makes it much easier to deploy and continuously update Langfuse via Docker.

```bash
docker pull ghcr.io/langfuse/langfuse:latest
```

Check [self-hosting docs](/self-hosting) for full details on how to deploy Langfuse in a production environment.

Optionally, you can also one-click deploy Langfuse to Railway:

[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/gmbqa_)

## 🛠 SDK improvements [#sdk-improvements]

### Expose Langfuse trace url

In some cases, it is useful to get the trace URL directly from the SDK to add it to your logs or print it in a development environment. This is now possible in all SDKs.

<LangTabs items={["Python SDK", "JS/TS SDK"]}>
<Tab>
```python
# trace object
trace.get_trace_url()
```

```python
# Langchain callback handler
handler.get_trace_url()
```

</Tab>
<Tab>
```ts
// trace object
trace.getTraceUrl()
```

```ts
// Langchain callback handler
handler.getTraceUrl();
```

</Tab>

</LangTabs>

### Python SDK now supports Pydantic v1 and v2

The Python SDK uses Pydantic to validate the data you send to Langfuse at run time before it is asynchronously sent to the Langfuse API. Previously, the Python SDK used Pydantic v1 leading to incompatibilities with projects using Pydantic v2.

From `1.1.3` onwards, the Python SDK supports both Pydantic v1 and v2.

## 🎨 UX improvements [#ux-improvements]

### Quickly page through traces

  ![Navigate
  traces](https://static.langfuse.com/changelog-2023-10-06-faster-navigation.gif)

When you're browsing traces, you can now quickly page through them.

_Use the `j` and `k` keys to navigate even faster._

### Sign in via Google and GitHub

You can now authenticate using **Google** and **GitHub**. Also supported for self-hosted deployments. Check [docs](/self-hosting) for details.

### Delete projects

Long overdue, you can now get rid of old projects. Thanks to [@DIWAKARKASHYAP](https://github.com/DIWAKARKASHYAP) for contributing to this.

## 📖 Docs [#docs]

_"Docs is product"_

All Python docs are now Jupyter notebooks so you can quickly run them. They are in the [cookbook folder](https://github.com/langfuse/langfuse-docs/tree/main/cookbook) of the Langfuse docs repo.

We've added a banner to the docs to make it easy to open them on GitHub and Google Colab.

_Example pointing to new OpenAI integration_

## 🚢 What's Next?

A lot is to come in November. For starters, we'll invest into the core user experience, especially to make working with complex traces easier.

If you have any feedback or feature requests on how to make Langfuse better for your user case, join us on [Discord](/discord) or open an [issue](/issue) on GitHub.

Subscribe to get monthly updates via email:

Subscribe to the Langfuse product update newsletter at https://langfuse.com/changelog.

Follow along on Twitter ([@Langfuse](https://twitter.com/langfuse), [@marcklingen](https://twitter.com/marcklingen))

<!-- agent-instructions -->

---

## Agent Instructions

This page is part of the [Langfuse](https://langfuse.com) documentation, published as plain Markdown for AI agents. Every page is available as Markdown by appending `.md` to its URL, or by sending an `Accept: text/markdown` header. This page: `https://langfuse.com/blog/update-2023-10.md`.

### Querying these docs

If the answer is not on this page, query the documentation instead of guessing:

- **Semantic search** across all Langfuse docs, returning an answer with the relevant pages and excerpts. Ask a specific, self-contained question:

  ```bash
  curl -sG "https://langfuse.com/api/search-docs" --data-urlencode "query=How do I trace a LangGraph agent?"
  ```

- **Index of every page**: <https://langfuse.com/llms.txt>, with per-section indexes [llms-docs.txt](https://langfuse.com/llms-docs.txt), [llms-integrations.txt](https://langfuse.com/llms-integrations.txt), and [llms-self-hosting.txt](https://langfuse.com/llms-self-hosting.txt).

### Before writing Langfuse code

- **Install the [Langfuse Agent Skill](https://langfuse.com/docs/api-and-data-platform/features/agent-skill).** It encodes Langfuse's own best practices for instrumentation, prompt management, and evaluation, and materially improves results.
- **Read [What does a good trace look like?](https://langfuse.com/docs/observability/best-practices.md)** before instrumenting an application.
- **Verify endpoints, parameters, and response fields** against the [API reference](https://api.reference.langfuse.com) instead of inferring them from code examples.
- **Use the [Langfuse CLI](https://langfuse.com/docs/api-and-data-platform/features/cli)** (`npx langfuse-cli api <resource> <action>`) to read or write traces, prompts, datasets, and scores from the terminal.

Found an error in these docs? Please open an issue at <https://github.com/langfuse/langfuse-docs/issues>.
