An LLM heavy startup uses LangChain today but expects to add Mastra (TS service) and DSPy (compile pipeline) in year two. They are choosing between LangSmith and Langfuse for observability. Make a recommendation and defend it on architecture grounds, not personal preference.
Pick Langfuse. It is OpenTelemetry-based, so LangChain, Mastra, and DSPy all flow into one trace store; LangSmith is LangChain-coupled and would leave two of three year-two frameworks dark.
Imagine choosing between two delivery companies for a growing business. Company A only delivers parcels from one specific shipping label brand. Company B accepts parcels from any brand that follows the standard postal format. Today you only ship with that one brand, so both companies work fine. Next year you plan to add two more brands. Pick company A and you will need separate delivery contracts for the new brands, or those parcels will pile up in your warehouse with nobody to pick them up. Pick company B and the new brands slot in for free because they all follow the same postal format. The right pick gets easier the further out you look.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
The LangSmith versus Langfuse choice is one of those decisions where the screenshot comparison hides the actual call. Both UIs look like trace explorers with span trees and evaluation views. The architectural difference is what they ingest, and that difference is what determines whether the choice ages well or becomes a future migration project.
This deep dive walks through the ingest formats, the four facts that decide the call for a multi-framework future, the honest cases where LangSmith remains the right pick, and the pragmatic adoption plan that follows from the recommendation.
The architectural divide: callbacks versus OpenTelemetry
LangSmith and Langfuse look superficially similar. Both render LLM traces, both support evaluation datasets, both have alerting and dashboards. The difference is one layer down, at the ingest format.
LangSmith ingests LangChain callbacks
LangSmith is built by the LangChain team. Its data model maps directly onto the callback events LangChain emits: on_llm_start, on_chain_start, on_tool_start, the run-id tree. The integration is one import and one environment variable, and every nuance of the LangChain runtime, chain composition, agent steps, retriever calls, shows up in the trace with the right shape.
Non-LangChain frameworks do not emit these callbacks. Mastra has its own observability surface. DSPy has its own tracer. Vercel AI SDK emits OpenTelemetry spans. None of them produce LangChain callback events, and LangSmith has no native way to ingest from them.
Langfuse ingests OpenTelemetry GenAI spans
Langfuse is built on the OpenTelemetry GenAI semantic conventions, a vendor-neutral specification for how LLM operations should be represented in traces. Attribute names like gen_ai.system, gen_ai.request.model, gen_ai.usage.input_tokens are standardized.
Any framework that emits OTel-compliant spans flows into Langfuse with the same shape. LangChain ships an OTel exporter that turns callbacks into OTel spans. Mastra ships native OTel support. DSPy can be instrumented with a generic OTel exporter around its tracer. The Langfuse instance ingests all three and renders them in a unified trace view.
What this means for the choice
The ingest format is the contract between the application and the observability backend. LangSmith's contract is a framework-internal API; Langfuse's contract is an industry-wide specification. As the application grows beyond one framework, the contract is what determines whether the backend keeps up.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
| Axis | LangSmith | Langfuse |
|---|---|---|
| Ingest format | LangChain callbacks | OpenTelemetry GenAI conventions |
| Multi-framework support | Requires parallel instrumentation | Native via OTel |
| Hosting | Vendor-hosted only | Vendor-hosted or self-hosted |
| Data residency | Vendor controls | Team controls |
| Eval dataset UI | Polished, LangChain-tight | Solid, framework-agnostic |
| Lock-in trajectory | Grows with usage | Portable via OTel |
Real products, models, and research that use this idea.
- Anthropic and OpenAI both publish OpenTelemetry GenAI traces from their server SDKs in 2026; both flow into Langfuse with no custom code.
- Vercel ships AI SDK telemetry as OTel spans; the same Langfuse instance ingests them alongside LangChain.
What an interviewer would ask next. Try answering before peeking at the approach.
QHow would you instrument a Mastra service so it emits compatible traces alongside the LangChain ones?
Use Mastra's built-in OTel exporter targeting the same Langfuse OTLP endpoint; ensure trace context propagation across service boundaries via the standard W3C TraceContext headers.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Picking LangSmith for the dataset-eval UI without thinking through what happens when the next service is not LangChain-shaped.
60 second bullets to scan on the way to the call.
The ingest format each platform uses
Why OpenTelemetry GenAI conventions matter for multi-framework stacks
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.