Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 4 additions & 34 deletions content/docs/evaluation/evaluation-methods/llm-as-a-judge.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ Each experiment run generates traces that are automatically scored by your selec
</Tab>
</Tabs>

## Set up step-by-step
## Set up step-by-step [#set-up-step-by-step]

<Steps>

Expand Down Expand Up @@ -263,9 +263,6 @@ With your evaluator and model selected, configure which data to run the evaluati
<Tabs items={["Live Production Data", "Offline Experiment Data"]}>
<Tab>

<Tabs items={["Observations (Recommended)", "Traces (Legacy)"]}>
<Tab>

**Configuration Steps**

1. Select "Live Observations" as your evaluation target
Expand All @@ -277,39 +274,12 @@ With your evaluator and model selected, configure which data to run the evaluati
- **SDK version**: Python v3+ (OTel-based) or JS/TS v4+ (OTel-based)
- [Python v2 → v3 migration guide](/docs/observability/sdk/upgrade-path/python-v2-to-v3)
- [JS/TS v3 → v4 migration guide](/docs/observability/sdk/upgrade-path/js-v3-to-v4)
- **When filtering by trace attributes**: To filter observations by trace-level attributes (`userId`, `sessionId`, `version`, `tags`, `metadata`, `traceName`), use [`propagate_attributes()`](/docs/observability/sdk/instrumentation#add-attributes-to-observations) in your instrumentation code. Without this, trace attributes will not be available on observations. If you do set up trace-level attribute filtering and are not propagating attributes to observations, your observations will not be matched by the evaluator.

</Tab>

<Tab>

<Callout type="info">
**Performance consideration**: We recommend using Observation-level evaluators for production monitoring. They complete in seconds (vs minutes for trace-level), eliminating evaluation delays and backlogs. They also offer better precision and cost efficiency. See [upgrade guide](/faq/all/llm-as-a-judge-migration).
</Callout>

**Configuration Steps**
- **When filtering by trace attributes**: To filter observations by trace-level attributes (`userId`, `sessionId`, `version`, `tags`, `metadata`, `traceName`), use [`propagate_attributes()`](/docs/observability/sdk/instrumentation#add-attributes) in your instrumentation code. Without this, trace attributes will not be available on observations. If you do set up trace-level attribute filtering and are not propagating attributes to observations, your observations will not be matched by the evaluator.

1. Select "Live Traces" as your evaluation target
2. Filter traces by name, tags, userId, and other trace-level attributes
3. Choose whether to run on new traces only or include existing traces (backfilling)
4. Configure sampling percentage (e.g., 5%) to manage evaluation costs and throughput
5. Preview matched traces from the last 24 hours to validate your filter configuration

<Frame fullWidth>
![Production tracing data](/images/docs/evaluator-trace-filter.png)
</Frame>

**Requirements**

- **OTel-based SDKs**: If you're using Python v3+ or JS/TS v4+, trace input/output is derived from the root observation by default. To explicitly set trace input/output for these evaluators, use `set_trace_io()` (Python) or `setTraceIO()` (JS/TS). See the [Python v3 → v4](/docs/observability/sdk/upgrade-path/python-v3-to-v4) and [JS/TS v4 → v5](/docs/observability/sdk/upgrade-path/js-v4-to-v5) migration guides.

<Callout type="info">
We recommend migrating to [observation-level evaluators](/faq/all/llm-as-a-judge-migration) instead of using `set_trace_io()` / `setTraceIO()`. Once migrated, you can remove these calls from your codebase entirely.
<Callout type="warning">
**Deprecation of trace-level evaluators:** Trace-level evaluators are built on the old trace-centric data model and are deprecated; the removal deadline will be announced (see the [Langfuse v4 rollout timeline](/docs/v4#rollout-timeline)). Multi-span evaluations will build on the new observation-centric data model. To move existing trace-level evaluators, follow the [upgrade guide](/faq/all/llm-as-a-judge-migration).
</Callout>

</Tab>
</Tabs>

</Tab>
<Tab>

Expand Down
16 changes: 9 additions & 7 deletions content/docs/v4.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ As agentic applications grow more complex, a single trace can contain hundreds o
/>
</Cards>

## Preview access and rollout timeline
## Preview access and rollout timeline [#rollout-timeline]

| Organization creation date (Langfuse Cloud) | Fast Preview default | "Preview" toggle visibility |
| ---------------------------------------------- | -------------------- | -------------------------------- |
Expand All @@ -73,6 +73,8 @@ The toggle remains reversible for organizations created before the cutoff date.

**Export source cutoff (2026-05-20):** Cloud projects created on or after this date are locked to **Enriched observations (recommended)** as the export source for blob storage, PostHog, and Mixpanel integrations. Legacy export sources are hidden from the UI for these projects. Projects created before this date retain full choice across all export sources.

**Trace-level evaluator deprecation (deadline will be announced):** Trace-level LLM-as-a-Judge evaluators are built on the old trace-centric data model and are deprecated; the removal deadline will be announced. Upcoming multi-span evaluations will build on the observation-centric data model. Follow the [evaluator upgrade guide](/faq/all/llm-as-a-judge-migration) to move existing evaluators to the observation level.

<Callout type="info">
Data from SDKs `langfuse-js` < `5.0.0`, `langfuse-python` < `4.0.0`, or direct OpenTelemetry exporters that do not send `x-langfuse-ingestion-version: 4` can be delayed by up to 10 minutes in the new UI. Upgrade to the latest SDKs or set that header on your OTEL span exporter to see new data in real time.
</Callout>
Expand Down Expand Up @@ -134,12 +136,12 @@ This preview is powered by a simplified observation-centric data model. Trace-le

### What changes

| | Classic model | Observation-centric model |
| ---------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Storage** | Separate mutable Traces and Observations tables | Single immutable Observations table |
| **Context attributes** | Stored on the trace, joined at query time | Propagated to every observation on SDK side. |
| **Trace input/output** | Set directly on the trace | Removed, use observation IO instead. (For legacy LLM-as-a-judge evaluators that depend on trace input and output, users can use the deprecated `set_trace_io` methods in the SDKs.) |
| **Mutability** | Traces and observations are mutable | Observations are immutable (written once) |
| | Classic model | Observation-centric model |
| ---------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Storage** | Separate mutable Traces and Observations tables | Single immutable Observations table |
| **Context attributes** | Stored on the trace, joined at query time | Propagated to every observation on SDK side. |
| **Trace input/output** | Set directly on the trace | Removed, use observation IO instead. (For legacy LLM-as-a-judge evaluators that depend on trace input and output, users can use the deprecated trace I/O methods: `set_current_trace_io()` / `span.set_trace_io()` in Python, `setActiveTraceIO()` / `span.setTraceIO()` in JS/TS.) |
| **Mutability** | Traces and observations are mutable | Observations are immutable (written once) |

## OSS and self-hosting

Expand Down
Loading
Loading