mirror of
https://github.com/bendtherules/ask262.git
synced 2026-08-19 00:31:06 +00:00
feat(langfuse): add opt-in Langfuse observability integration
Add Langfuse as an OTel trace transport for MCP request lifecycle tracking.
Changes:
- New src/lib/langfuse-transport.ts: initializes LangfuseSpanProcessor when
ASK262_LANGFUSE_ENABLED=true with valid credentials
- src/lib/tracing.ts: add metadata to TraceContext, propagate it to child spans,
use startActiveSpan for proper OTel context, add setupTracing() entry point,
add getSessionMetadata() for version/transport metadata
- src/lib/logger.ts: include TraceContext.metadata in JSON log mixin
- src/mcp-server-{http,stdio}.ts: call setupTracing() at startup, pass
version/transport metadata through withSpan/withSpanContext
- src/lib/fireworks-embeddings.ts: wrap API calls in withSpan() with gen_ai
attributes for Langfuse generation/cost tracking
- .env.example: add LANGFUSE_* configuration variables
- AGENTS.md: document Langfuse integration
- package.json: add @langfuse/tracing, @langfuse/otel, @opentelemetry/sdk-node
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
|
||||
import { LangfuseSpanProcessor } from "@langfuse/otel";
|
||||
|
||||
let provider: NodeTracerProvider | null = null;
|
||||
|
||||
/**
|
||||
* Initialize Langfuse OTel span processor.
|
||||
* Called once at server startup before any spans are created.
|
||||
*/
|
||||
export function initializeLangfuseTransport(): void {
|
||||
if (process.env.ASK262_LANGFUSE_ENABLED !== "true") return;
|
||||
|
||||
const publicKey = process.env.LANGFUSE_PUBLIC_KEY;
|
||||
const secretKey = process.env.LANGFUSE_SECRET_KEY;
|
||||
|
||||
if (!publicKey || !secretKey) {
|
||||
console.error(
|
||||
"[LANGFUSE] Missing LANGFUSE_PUBLIC_KEY or LANGFUSE_SECRET_KEY, skipping",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
provider = new NodeTracerProvider({
|
||||
spanProcessors: [
|
||||
new LangfuseSpanProcessor({
|
||||
// Export all spans, not just LLM-relevant ones
|
||||
shouldExportSpan: () => true,
|
||||
}),
|
||||
],
|
||||
});
|
||||
provider.register();
|
||||
}
|
||||
Reference in New Issue
Block a user