ProjectIntent Over Keywords: From Stitched Embeddings to a Production Fashion Agent · Module 19: Tracing with Langfuse and OpenTelemetry · part 21 of 26
Part 21 · Module 19: Tracing with Langfuse and OpenTelemetry

Module 19: Tracing with Langfuse and OpenTelemetry

21 min read·
About 45 minutes · Needs: Module 12 (high-level design: the graph and its routes), Module 14 (the planner), Module 16 (the implementer), Module 17 (the generator) · Code: part3-styleme/backend/src/styleme/tracing.py, part3-styleme/backend/src/styleme/agent/graph.py, part3-styleme/backend/src/styleme/llm.py, part3-styleme/backend/src/styleme/logging_setup.py, part3-styleme/backend/tests/test_tracing.py

Where this fits

WHERE THIS FITS Intent Over Keywords this module PART 1: STITCHED VIDEO RAG three models, two spaces, RRF PART 2: UNIFIED VIDEO RAG one model, one space PART 3: STYLEME FastAPI, LangGraph, React QUALITY AND OPERATIONS evals, Docker, Cloud Run Frames ffmpeg, one per 5 s CLIP ViT-B/32 frames + text, 512 d Whisper base speech to text MiniLM 64-word chunks, 384 d Two collections p1_visual, p1_text Rank fusion RRF, k = 60 Gemini answer from transcript text API + Streamlit upload, ask, sources Windows ffmpeg, video + audio Embedding 2 Gemini, one vector One collection p2_unified, no fusion Notes + answer Gemini, cited times React web chat, photo, chips nginx one URL, /api proxy FastAPI /api/chat, limits Sessions in memory, cap of 3 Planner intent before retrieval Implementer batched embed, search Generator stylist reply, ids Grounding check no LLM, drops invented Gemini flash-lite, embedding 2 Qdrant styleme_products Catalogue ingest image + title vectors Langfuse optional traces Test video 26 questions, 4 kinds Video eval Part 1 vs Part 2 Agent evals intent, grounding Guards uploads, limits, secrets Containers compose profiles Cloud Run StyleMe only CI/CD GitHub Actions, WIF Original code v1, v2, fashion-agent
This module (blue): the optional Langfuse tracing around the planner, the implementer and the generator. Blue marks our own code in every figure.

A StyleMe search turn makes three Gemini calls in a row: the planner, one batched embedding, the generator. When a shopper says "it gave me sarees when I asked for juttis", the reply alone cannot tell you which step went wrong. This module adds the record of each turn: one trace per chat turn with the three nodes and every model call inside it, plus structured logs that carry the same request and session ids. Tracing is optional; without Langfuse keys the app runs exactly the same.

The rest of this project is yours to keep

This project is bought on its own, once, and stays readable afterwards, including the parts added to it later.

Or open everything with a plan