Ctrl K
ComunidadGuías…

instrumentation.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { LangfuseSpanProcessor } from '@langfuse/otel'
import { LangfuseVercelAiSdkIntegration } from '@langfuse/vercel-ai-sdk'
import { registerOTel } from '@vercel/otel'
import { registerTelemetry } from 'ai'

import { isTracingEnabled } from '@/lib/utils/telemetry'

// Exported so request handlers can force-flush pending spans before the
// serverless function exits
export const langfuseSpanProcessor = new LangfuseSpanProcessor()

// registerTelemetry appends without deduping, so a second register() would
// double every span.
let telemetryRegistered = false

export async function register() {
  registerOTel({
    serviceName: 'morphic-ai-search',
    spanProcessors: [langfuseSpanProcessor]
  })

  // The AI SDK emits no spans until a telemetry integration is registered.
  // The integration creates the spans, the processor above exports them.
  if (isTracingEnabled() && !telemetryRegistered) {
    registerTelemetry(new LangfuseVercelAiSdkIntegration())
    telemetryRegistered = true
  }

  // Initialize Ollama validation on server startup (only when configured)
  if (process.env.OLLAMA_BASE_URL) {
    const { initializeOllamaValidation } = await import(
      '@/lib/config/ollama-validator'
    )
    await initializeOllamaValidation().catch(err => {
      console.error('Failed to initialize Ollama validation:', err)
    })
  }
}