From d8a38d9c93e3e9ada4be331622a60056465aab7e Mon Sep 17 00:00:00 2001 From: Nimar Date: Tue, 19 May 2026 21:37:27 +0200 Subject: [PATCH 01/39] docs: add web callback docs --- content/docs/observability/features/meta.json | 1 + .../observability/features/web-callbacks.mdx | 165 ++++++++++++++++++ src/github-stars.ts | 2 +- 3 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 content/docs/observability/features/web-callbacks.mdx diff --git a/content/docs/observability/features/meta.json b/content/docs/observability/features/meta.json index d1837b110b..6afb1d609c 100644 --- a/content/docs/observability/features/meta.json +++ b/content/docs/observability/features/meta.json @@ -12,6 +12,7 @@ "comments", "corrections", "user-feedback", + "web-callbacks", "log-levels", "agent-graphs", "masking", diff --git a/content/docs/observability/features/web-callbacks.mdx b/content/docs/observability/features/web-callbacks.mdx new file mode 100644 index 0000000000..c02141726b --- /dev/null +++ b/content/docs/observability/features/web-callbacks.mdx @@ -0,0 +1,165 @@ +--- +title: Web callbacks +description: Trigger a browser-side HTTP callback from a trace or observation in Langfuse. +sidebarTitle: Web Callbacks +--- + +# Web callbacks + +Web callbacks let project members trigger an HTTP `POST` request from a trace or observation in Langfuse. Use them to connect trace debugging to your own tools, for example opening an internal investigation workflow, notifying an external system, or sending a selected trace ID to a local helper service. + +Unlike [prompt webhooks](/docs/prompt-management/features/webhooks-slack-integrations), web callbacks are not event-driven automations. A project member manually triggers them from the trace detail menu. + + + Web callbacks send only identifiers. Trace input, output, metadata, scores, + and user data are not included in the callback payload. + + +## Configure a web callback + +1. Open your project in Langfuse. +2. Go to `Project Settings` > `Integrations` > `Web Callbacks`. +3. Create or edit the callback endpoint. +4. Configure the endpoint name, URL, toast message, request timeout, and optional browser-visible headers. +5. Save the endpoint and make sure it is enabled. + +Only one web callback endpoint can be enabled per project. + +## Trigger a callback + +Open a trace or observation and click the three-dot actions menu in the detail header. If an enabled endpoint exists, the menu shows `Call `. + +When you click the action, Langfuse immediately shows the configured toast message and sends the request from your browser to the configured endpoint. + +## Request payload + +Langfuse sends a JSON `POST` request with the following payload: + +```json filename="web-callback-payload.json" +{ + "version": 1, + "items": [ + { + "projectId": "project-id", + "traceId": "trace-id", + "observationId": null + } + ] +} +``` + +Payload fields: + +- `version`: Payload contract version. The current version is `1`. +- `items`: List of selected objects. V1 sends one item. +- `projectId`: Langfuse project ID. +- `traceId`: Trace ID for the selected trace or observation. +- `observationId`: `null` for trace-level callbacks, or the selected observation ID for observation-level callbacks. + +If your receiver needs the full trace, observation, session, or score data, use the IDs from the payload to query the [Langfuse API](/docs/api-and-data-platform/features/public-api) from your own backend. + +## Endpoint requirements + +Your endpoint must: + +- Accept `POST` requests with a JSON body. +- Return any HTTP `2xx` status for success. +- Respond before the configured timeout. +- Allow browser requests from your Langfuse origin via CORS. +- Respond to CORS preflight `OPTIONS` requests if you configure custom headers. + +Langfuse treats non-2xx responses, timeouts, network errors, and CORS failures as failed callbacks and shows an error toast. + +## Browser-side delivery + +Web callbacks are delivered directly from the user's browser with `fetch`. + +This has a few practical consequences: + +- The receiver sees the user's browser as the client, not Langfuse servers. +- The receiver must allow CORS from the Langfuse origin. +- Custom headers are visible in browser developer tools. +- Headers are not suitable for secrets or private API keys. +- Langfuse does not retry failed callback requests in the background. + + + Do not put secrets into web callback headers. If the receiver needs privileged + access to Langfuse data, let the receiver call the Langfuse API with credentials + stored on the receiver side. + + +## Minimal receiver + +The receiver can be any HTTP server. This example validates the payload shape and acknowledges the callback: + +```ts filename="server.ts" +import http from "node:http"; + +type WebCallbackPayload = { + version: 1; + items: Array<{ + projectId: string; + traceId: string; + observationId: string | null; + }>; +}; + +const server = http.createServer((req, res) => { + res.setHeader("Access-Control-Allow-Origin", "https://cloud.langfuse.com"); + res.setHeader("Access-Control-Allow-Methods", "POST, OPTIONS"); + res.setHeader("Access-Control-Allow-Headers", "content-type"); + + if (req.method === "OPTIONS") { + res.writeHead(204); + res.end(); + return; + } + + if (req.method !== "POST") { + res.writeHead(405); + res.end("Method not allowed"); + return; + } + + let body = ""; + + req.on("data", (chunk: Buffer) => { + body += chunk.toString("utf8"); + }); + + req.on("end", () => { + const payload = JSON.parse(body) as WebCallbackPayload; + + console.log("Received Langfuse web callback", payload); + + res.writeHead(202, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ ok: true })); + }); +}); + +server.listen(4047, "127.0.0.1", () => { + console.log("Listening on http://127.0.0.1:4047"); +}); +``` + +For production, set `Access-Control-Allow-Origin` to your Langfuse deployment URL, validate the request body, and keep any Langfuse API credentials on the server. + +## Troubleshooting + +### Callback endpoint returned HTTP 404 + +The request reached your endpoint, but the path does not exist. Check the configured URL path and make sure the receiver handles `POST` requests at that route. + +### CORS error + +Because the request is sent from the browser, the receiver must allow the Langfuse origin. If you use custom headers, the browser may send an `OPTIONS` preflight request before the `POST`; your server must handle that request too. + +### Callback request timed out + +Increase the timeout in the endpoint settings or make the receiver return a `2xx` response faster. For longer jobs, acknowledge the callback quickly and process the work asynchronously. + +## Related + +- [Trace URLs](/docs/observability/features/url) +- [Sessions](/docs/observability/features/sessions) +- [Prompt webhooks](/docs/prompt-management/features/webhooks-slack-integrations) diff --git a/src/github-stars.ts b/src/github-stars.ts index acdb3283e6..f249cf21f0 100644 --- a/src/github-stars.ts +++ b/src/github-stars.ts @@ -1 +1 @@ -export const GITHUB_STARS = 23619; \ No newline at end of file +export const GITHUB_STARS = 27501; \ No newline at end of file From 822ef7d59688872a0d6e419c4f1c481542c6e284 Mon Sep 17 00:00:00 2001 From: Nimar Date: Fri, 22 May 2026 10:04:13 +0200 Subject: [PATCH 02/39] bump --- content/docs/observability/features/web-callbacks.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/observability/features/web-callbacks.mdx b/content/docs/observability/features/web-callbacks.mdx index c02141726b..7d8b2091a7 100644 --- a/content/docs/observability/features/web-callbacks.mdx +++ b/content/docs/observability/features/web-callbacks.mdx @@ -23,7 +23,7 @@ Unlike [prompt webhooks](/docs/prompt-management/features/webhooks-slack-integra 4. Configure the endpoint name, URL, toast message, request timeout, and optional browser-visible headers. 5. Save the endpoint and make sure it is enabled. -Only one web callback endpoint can be enabled per project. +Only one web callback endpoint can be configured per project. ## Trigger a callback @@ -90,7 +90,7 @@ This has a few practical consequences: ## Minimal receiver -The receiver can be any HTTP server. This example validates the payload shape and acknowledges the callback: +The receiver can be any HTTP server. This example logs the payload and acknowledges the callback: ```ts filename="server.ts" import http from "node:http"; From 18402dab9e8c93e257ff2e4207e8517299df8cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jannik=20Maierh=C3=B6fer?= <48529566+jannikmaierhoefer@users.noreply.github.com> Date: Fri, 22 May 2026 22:41:02 +0800 Subject: [PATCH 03/39] feat(launch-week-5): add teaser landing page (#2980) Co-authored-by: Claude Co-authored-by: Clemo <121163007+clemra@users.noreply.github.com> --- app/launch-week-5/layout.tsx | 17 + app/launch-week-5/page.tsx | 27 ++ .../launch-week-5/LaunchWeek5Landing.tsx | 396 ++++++++++++++++++ components/launch-week-5/styles.tsx | 295 +++++++++++++ content/blog/launch-week-1.mdx | 4 - lib/redirects.js | 2 +- 6 files changed, 736 insertions(+), 5 deletions(-) create mode 100644 app/launch-week-5/layout.tsx create mode 100644 app/launch-week-5/page.tsx create mode 100644 components/launch-week-5/LaunchWeek5Landing.tsx create mode 100644 components/launch-week-5/styles.tsx diff --git a/app/launch-week-5/layout.tsx b/app/launch-week-5/layout.tsx new file mode 100644 index 0000000000..e1d9aa69d0 --- /dev/null +++ b/app/launch-week-5/layout.tsx @@ -0,0 +1,17 @@ +import type { ReactNode } from "react"; +import { HomeLayout } from "@/components/layout"; + +export default function LaunchWeek5Layout({ + children, +}: { + children: ReactNode; +}) { + return ( + + {children} + + ); +} diff --git a/app/launch-week-5/page.tsx b/app/launch-week-5/page.tsx new file mode 100644 index 0000000000..bbf42e95e7 --- /dev/null +++ b/app/launch-week-5/page.tsx @@ -0,0 +1,27 @@ +import type { Metadata } from "next"; +import { LaunchWeek5Landing } from "@/components/launch-week-5/LaunchWeek5Landing"; +import { buildDefaultSiteOgImageUrl } from "@/lib/og-url"; + +const ogImageUrl = buildDefaultSiteOgImageUrl(); + +export const metadata: Metadata = { + title: "Langfuse Launch Week #5", + description: + "Five days, five feature drops, May 25–29, 2026. New building blocks for taking AI from prototype to production — unveiled live at ClickHouse OpenHouse.", + alternates: { + canonical: "https://langfuse.com/launch-week-5", + }, + // Next.js replaces (not deep-merges) openGraph across segments, so the root + // layout's default `images` is dropped unless re-supplied here. + openGraph: { + title: "Langfuse Launch Week #5", + description: + "Five days, five feature drops, May 25–29, 2026. Live demos at ClickHouse OpenHouse.", + url: "https://langfuse.com/launch-week-5", + images: [{ url: ogImageUrl }], + }, +}; + +export default function LaunchWeek5Page() { + return ; +} diff --git a/components/launch-week-5/LaunchWeek5Landing.tsx b/components/launch-week-5/LaunchWeek5Landing.tsx new file mode 100644 index 0000000000..8e5afad01b --- /dev/null +++ b/components/launch-week-5/LaunchWeek5Landing.tsx @@ -0,0 +1,396 @@ +"use client"; + +import Link from "next/link"; +import { LaunchWeek5Styles } from "./styles"; +import { ProductUpdateSignup } from "@/components/ProductUpdateSignup"; + +const cornerBoxBase = + "relative bg-surface-bg border border-line-structure lw5-corners"; + +type DayCard = { + n: string; + weekday: string; + date: string; + hint?: string; +}; + +const DAYS: DayCard[] = [ + { n: "01", weekday: "Monday", date: "May 25", hint: "Ship faster" }, + { n: "02", weekday: "Tuesday", date: "May 26", hint: "Built for agents" }, + { n: "03", weekday: "Wednesday", date: "May 27", hint: "Find anything" }, + { n: "04", weekday: "Thursday", date: "May 28", hint: "Evals as code" }, + { n: "05", weekday: "Friday", date: "May 29", hint: "Never miss a thing" }, +]; + +function LockIcon() { + return ( + + + + + ); +} + +function Hero() { + return ( +
+
+ + + Live · May 25–29, 2026 + + + + 5 days · 5 drops + + + + Live demos at{" "} + + ClickHouse OpenHouse + + +
+ +
+
+ +
+
Langfuse · May 25–29, 2026
+

+ Launch Week #5 +

+

+ Five days. Five drops. New building blocks for taking AI + applications from prototype to production. Unveiled live at{" "} + + ClickHouse OpenHouse + + . +

+
+
+ Get every drop in your inbox · No spam +
+ +
+
+ + + Follow @langfuse on X + + + + + + LinkedIn + + + +
+
+ + +
+ +
+ {[ + ["5 days", "5 feature drops"], + ["Live demos", "ClickHouse OpenHouse"], + ["Open source", "MIT · self-host anytime"], + ["Monday → Friday", "May 25–29, 2026"], + ].map(([top, bot], i) => ( +
+ + {top} + + + {bot} + +
+ ))} +
+
+ ); +} + +function HeroArt() { + // Cards arranged clockwise on a circle starting from the top (Day 01). + // Coordinates are in the same SVG viewBox space (400×400) as the ring and + // arrows so the layout stays aligned at any container width. + const CENTER = 200; + const CARD_RADIUS = 105; + const ARROW_RADIUS = 150; + const CARD_SIZE = 110; + const CARD_HEIGHT = 132; + const tilts = [-8, 6, -4, 8, -6]; + const cards = [0, 1, 2, 3, 4].map((i) => { + const angle = (i * 72 * Math.PI) / 180; + return { + label: String(i + 1).padStart(2, "0"), + cx: CENTER + CARD_RADIUS * Math.sin(angle), + cy: CENTER - CARD_RADIUS * Math.cos(angle), + rot: tilts[i], + }; + }); + const arrows = [0, 1, 2, 3, 4].map((i) => { + const angleDeg = i * 72 + 36; + const angle = (angleDeg * Math.PI) / 180; + return { + x: CENTER + ARROW_RADIUS * Math.sin(angle), + y: CENTER - ARROW_RADIUS * Math.cos(angle), + rotation: angleDeg + 90, + }; + }); + + return ( +
+ + + + + + + + + {/* loop ring */} + + + {/* arrow heads between consecutive cards, pointing clockwise */} + {arrows.map((a, i) => ( + + + + ))} + + {/* Day cards — pure SVG so they scale with the viewBox */} + {cards.map((c) => { + const left = c.cx - CARD_SIZE / 2; + const top = c.cy - CARD_HEIGHT / 2; + return ( + + + + + {c.label} + + {/* lock icon */} + + + + + {/* caption */} + + DAY {c.label} + + + ); + })} + + + + + + + +
+ ); +} + +function Schedule() { + return ( +
+
+
The Week · May 25–29, 2026
+

+ One drop a day, every day. +
+ Monday through Friday. +

+

+ We'll unwrap a new feature each day and update this page as each one + ships. Subscribe to the newsletter or follow us so you don't miss a + drop. +

+
+ +
+ {DAYS.map((day) => ( +
+
+ + Day {day.n} + + + + +
+
{day.n}
+
+
+ {day.weekday} +
+
+ {day.date}, 2026 +
+
+
+
+ {day.hint ?? "Stay tuned"} +
+
+
+ ))} +
+
+ ); +} + +export function LaunchWeek5Landing() { + return ( +
+ +
+ + +
+
+ ); +} diff --git a/components/launch-week-5/styles.tsx b/components/launch-week-5/styles.tsx new file mode 100644 index 0000000000..76ad355d3d --- /dev/null +++ b/components/launch-week-5/styles.tsx @@ -0,0 +1,295 @@ +export function LaunchWeek5Styles() { + return ( + + ); +} diff --git a/content/blog/launch-week-1.mdx b/content/blog/launch-week-1.mdx index ba3c8ae53f..9dbb6c249d 100644 --- a/content/blog/launch-week-1.mdx +++ b/content/blog/launch-week-1.mdx @@ -27,10 +27,6 @@ We’re excited to announce Langfuse's first launch week. We're kicking it off o - [Twitter](https://x.com/langfuse) will be our main channel for all of Launch Week #1 - Join our [first town hall](#townhall) on Wednesday -import { Tweet } from "@/components/Tweet"; - - - ## Launches ### Day 0: OpenAI JS SDK Integration diff --git a/lib/redirects.js b/lib/redirects.js index 0f004da53c..442ee0ca45 100644 --- a/lib/redirects.js +++ b/lib/redirects.js @@ -9,7 +9,7 @@ // All redirects that should be non-permanent such as temporary /launch pages const nonPermanentRedirects = [ - ["/launch", "/blog/2025-10-29-launch-week-4"], + ["/launch", "/launch-week-5"], [ "/loom-gpt4-PR", "https://www.loom.com/share/5c044ca77be44ff7821967834dd70cba", From 6251be4f2d368603b40ec834fefc676f915d4ca9 Mon Sep 17 00:00:00 2001 From: Clemo <121163007+clemra@users.noreply.github.com> Date: Fri, 22 May 2026 16:49:21 +0200 Subject: [PATCH 04/39] docs: update website banner for launch week --- components/layout/Banner.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/layout/Banner.tsx b/components/layout/Banner.tsx index 7633c6d19c..ce1a0ce22e 100644 --- a/components/layout/Banner.tsx +++ b/components/layout/Banner.tsx @@ -8,9 +8,9 @@ export function Banner() { height="2rem" className="bg-black text-white [&_a]:text-white [&_button]:text-white" > - - The Langfuse Academy is here → - The Langfuse Academy is here → + + Langfuse Launch Week #5, a week of new features → + Langfuse Launch Week #5 → ); From 049e044c28613d806385900718a3fd2a9f07c5ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 18:45:27 +0200 Subject: [PATCH 05/39] ci(deps): bump the github-actions group with 2 updates (#2983) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Tobias Wochinger --- .github/workflows/ci.yml | 6 +++--- .github/workflows/nextjs_bundle_analysis.yml | 2 +- .../update-available-internal-links-cursor-rule.yml | 2 +- .github/workflows/zizmor.yml | 2 +- components/layout/Banner.tsx | 4 +++- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index acd333d5df..b3cc022c92 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: with: persist-credentials: false - - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 with: version: 9.5.0 run_install: false @@ -115,7 +115,7 @@ jobs: fetch-depth: 0 persist-credentials: false - - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 id: pnpm-install with: version: 9.5.0 @@ -164,7 +164,7 @@ jobs: fetch-depth: 0 persist-credentials: false - - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 id: pnpm-install with: version: 9.5.0 diff --git a/.github/workflows/nextjs_bundle_analysis.yml b/.github/workflows/nextjs_bundle_analysis.yml index f623dbe52b..a3c7cbde30 100644 --- a/.github/workflows/nextjs_bundle_analysis.yml +++ b/.github/workflows/nextjs_bundle_analysis.yml @@ -28,7 +28,7 @@ jobs: with: persist-credentials: false - - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 id: pnpm-install with: version: 9.5.0 diff --git a/.github/workflows/update-available-internal-links-cursor-rule.yml b/.github/workflows/update-available-internal-links-cursor-rule.yml index 39a3429998..326cbcc868 100644 --- a/.github/workflows/update-available-internal-links-cursor-rule.yml +++ b/.github/workflows/update-available-internal-links-cursor-rule.yml @@ -24,7 +24,7 @@ jobs: node-version: 22 - name: Setup pnpm - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 with: version: "9.5.0" diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 8e90c5e47d..0be6632325 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -26,7 +26,7 @@ jobs: with: persist-credentials: false - name: Run zizmor - uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3 + uses: zizmorcore/zizmor-action@a16621b09c6db4281f81a93cb393b05dcd7b7165 # v0.5.5 with: advanced-security: ${{ github.event_name == 'push' && 'true' || 'false' }} min-severity: low diff --git a/components/layout/Banner.tsx b/components/layout/Banner.tsx index ce1a0ce22e..365cd189f0 100644 --- a/components/layout/Banner.tsx +++ b/components/layout/Banner.tsx @@ -9,7 +9,9 @@ export function Banner() { className="bg-black text-white [&_a]:text-white [&_button]:text-white" > - Langfuse Launch Week #5, a week of new features → + + Langfuse Launch Week #5, a week of new features → + Langfuse Launch Week #5 → From 796cba75d0282cfcd24b2cf493e98dc452f97ee0 Mon Sep 17 00:00:00 2001 From: Caleb <58306894+CodeCLS@users.noreply.github.com> Date: Sun, 24 May 2026 17:57:47 +0200 Subject: [PATCH 06/39] docs(claude-code): add YouTube video embed to integration page (#2999) Co-authored-by: Claude Opus 4.7 (1M context) --- content/integrations/other/claude-code.mdx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/content/integrations/other/claude-code.mdx b/content/integrations/other/claude-code.mdx index 991a1a8192..4a12af74f9 100644 --- a/content/integrations/other/claude-code.mdx +++ b/content/integrations/other/claude-code.mdx @@ -10,6 +10,17 @@ import { Details, Summary } from "@/components/Details"; # Claude Code Tracing with Langfuse + + > **What is Claude Code?**: [Claude Code](https://claude.com/product/claude-code) is Anthropic's agentic coding tool that lives in your terminal. It can understand your codebase, help you write and edit code, execute commands, create and run tests, and help you accomplish complex coding tasks with natural language. Claude Code brings the power of Claude's AI capabilities directly into your development workflow. > **What is Langfuse?**: [Langfuse](https://langfuse.com/) is an open-source LLM engineering platform. It helps teams trace LLM applications, debug issues, evaluate quality, and monitor costs in production. From 7eb58815b127b2e1ce82e072679dd0dd81ec84eb Mon Sep 17 00:00:00 2001 From: Max Deichmann Date: Mon, 25 May 2026 16:44:10 +0200 Subject: [PATCH 07/39] docs: correct annotation queues typo (#3001) --- .../docs/evaluation/evaluation-methods/annotation-queues.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/evaluation/evaluation-methods/annotation-queues.mdx b/content/docs/evaluation/evaluation-methods/annotation-queues.mdx index 7e301c4261..9f3639624e 100644 --- a/content/docs/evaluation/evaluation-methods/annotation-queues.mdx +++ b/content/docs/evaluation/evaluation-methods/annotation-queues.mdx @@ -5,7 +5,7 @@ description: Manage your annotation tasks with ease using our new workflow tooli # Annotation Queues [#annotation-queues] -Annotation Queues are a manual [evaluation method](/docs/evaluation/core-concepts#evaluation-methods) which is build for domain experts to add [scores](/docs/evaluation/scores/overview) and comments to traces, observations or sessions. +Annotation Queues are a manual [evaluation method](/docs/evaluation/core-concepts#evaluation-methods) which is built for domain experts to add [scores](/docs/evaluation/scores/overview) and comments to traces, observations or sessions.