Langfuse JS/TS SDKs
    Preparing search index...

    Specialized observation wrapper for tracking individual tool calls and external API interactions.

    LangfuseTool is designed for observing discrete tool invocations within agent workflows, function calling scenarios, or standalone API integrations. It captures the input parameters, execution results, performance metrics, and error conditions of tool operations, making it essential for debugging tool reliability and optimizing tool selection strategies.

    • Function Calling: OpenAI function calls, Anthropic tool use, Claude function calling
    • External APIs: REST API calls, GraphQL queries, database operations
    • System Tools: File operations, shell commands, system integrations
    • Data Processing Tools: Calculators, converters, validators, parsers
    • Search Tools: Web search, vector search, document retrieval
    • Content Tools: Image generation, text processing, format conversion
    • Parameter Tracking: Complete input parameter logging and validation
    • Result Capture: Full output data and metadata from tool execution
    • Performance Monitoring: Execution time, success rates, retry attempts
    • Error Analysis: Detailed error tracking with context and recovery info
    • Usage Analytics: Frequency, patterns, and efficiency metrics
    • Integration Health: API status, rate limits, and service availability
    • Input Validation: Parameter checking and sanitization before execution
    • Execution Monitoring: Real-time performance and status tracking
    • Result Processing: Output validation, transformation, and formatting
    • Error Handling: Retry logic, fallbacks, and graceful degradation
    • Caching Integration: Result caching and cache hit/miss tracking
    • Rate Limiting: Request throttling and quota management
    // Web search tool
    const searchTool = startObservation('web-search', {
    input: {
    query: 'latest AI developments',
    maxResults: 10
    },
    metadata: { provider: 'google-api' }
    }, { asType: 'tool' });

    try {
    const results = await webSearch('latest AI developments');

    searchTool.update({
    output: {
    results: results,
    count: results.length
    },
    metadata: {
    latency: 1200,
    cacheHit: false
    }
    });
    } catch (error) {
    searchTool.update({
    level: 'ERROR',
    statusMessage: 'Search failed',
    output: { error: error.message }
    });
    } finally {
    searchTool.end();
    }

    // Database query tool
    const dbTool = startObservation('db-query', {
    input: {
    query: 'SELECT * FROM users WHERE active = true',
    timeout: 30000
    }
    }, { asType: 'tool' });

    const result = await db.query('SELECT * FROM users WHERE active = true');
    dbTool.update({
    output: { rowCount: result.length },
    metadata: { executionTime: 150 }
    });
    dbTool.end();

    Hierarchy

    • LangfuseBaseObservation
      • LangfuseTool
    Index

    Constructors

    • Parameters

      • params: LangfuseToolParams

      Returns LangfuseTool

    Properties

    id: string

    The span ID from the OpenTelemetry span context

    otelSpan: Span

    The underlying OpenTelemetry span

    traceId: string

    The trace ID from the OpenTelemetry span context

    The underlying OpenTelemetry span

    Accessors

    • get tracer(): Tracer

      Gets the Langfuse OpenTelemetry tracer instance

      Returns Tracer

    Methods

    • Ends the observation, marking it as complete.

      Parameters

      • OptionalendTime: TimeInput

        Optional end time, defaults to current time

      Returns void

    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseGenerationAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "generation" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseGeneration

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "event" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseEvent

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "agent" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseAgent

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "tool" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseTool

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "chain" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseChain

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "retriever" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseRetriever

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "evaluator" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseEvaluator

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "guardrail" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseGuardrail

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • attributes: LangfuseGenerationAttributes

        Type-specific attributes (varies by observation type)

      • options: { asType: "embedding" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseEmbedding

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Creates a new child observation within this observation's context with full type safety.

      This method enables hierarchical tracing by creating child observations that inherit the parent's trace context. It supports all observation types with automatic TypeScript type inference based on the asType parameter, ensuring compile-time safety for attributes and return types.

      • Child observations automatically inherit the parent's trace ID and span context
      • Creates proper parent-child relationships in the trace structure
      • Enables distributed tracing across nested operations
      • Maintains correlation between related operations
      • Return type is automatically inferred from asType parameter
      • Attributes parameter is type-checked based on observation type
      • Compile-time validation prevents type mismatches
      • Full IntelliSense support for observation-specific attributes

      Parameters

      • name: string

        Descriptive name for the child observation

      • Optionalattributes: LangfuseSpanAttributes

        Type-specific attributes (varies by observation type)

      • Optionaloptions: { asType?: "span" }

        Configuration including observation type (defaults to 'span')

      Returns LangfuseSpan

      Strongly-typed observation instance based on asType

      // Within any observation (span, generation, agent, etc.)
      const parentObservation = startObservation('ai-workflow');

      // Create child span (default)
      const dataProcessing = parentObservation.startObservation('data-processing', {
      input: { userId: '123', dataSize: 1024 },
      metadata: { processor: 'fast-lane', version: '2.1' }
      }); // Returns LangfuseSpan

      // Create child generation with full LLM attributes
      const llmCall = parentObservation.startObservation('openai-gpt-4', {
      input: [{ role: 'system', content: 'You are a helpful assistant' },
      { role: 'user', content: 'Explain machine learning' }],
      model: 'gpt-4-turbo',
      modelParameters: {
      temperature: 0.7,
      maxTokens: 500,
      topP: 1.0
      },
      metadata: { priority: 'high', timeout: 30000 }
      }, { asType: 'generation' }); // Returns LangfuseGeneration

      // Create child agent for complex reasoning
      const reasoningAgent = parentObservation.startObservation('reasoning-agent', {
      input: {
      task: 'Analyze market trends',
      context: 'Q4 2024 financial data'
      },
      metadata: {
      model: 'gpt-4',
      tools: ['calculator', 'web-search', 'data-analysis'],
      maxIterations: 5
      }
      }, { asType: 'agent' }); // Returns LangfuseAgent

      // Create child tool for external API calls
      const apiCall = reasoningAgent.startObservation('market-data-api', {
      input: {
      endpoint: '/market/trends',
      params: { symbol: 'AAPL', period: '1Y' }
      },
      metadata: {
      provider: 'alpha-vantage',
      rateLimit: 5,
      timeout: 10000
      }
      }, { asType: 'tool' }); // Returns LangfuseTool

      // Create child retriever for document search
      const docSearch = parentObservation.startObservation('document-retrieval', {
      input: {
      query: 'sustainable energy solutions',
      filters: { year: '2024', category: 'research' },
      topK: 10
      },
      metadata: {
      vectorStore: 'pinecone',
      embeddingModel: 'text-embedding-ada-002',
      similarity: 'cosine'
      }
      }, { asType: 'retriever' }); // Returns LangfuseRetriever

      // Create child evaluator for quality assessment
      const qualityCheck = parentObservation.startObservation('response-evaluator', {
      input: {
      response: llmCall.output?.content,
      reference: 'Expected high-quality explanation',
      criteria: ['accuracy', 'clarity', 'completeness']
      },
      metadata: {
      evaluator: 'custom-bert-scorer',
      threshold: 0.8,
      metrics: ['bleu', 'rouge', 'semantic-similarity']
      }
      }, { asType: 'evaluator' }); // Returns LangfuseEvaluator

      // Create child guardrail for safety checking
      const safetyCheck = parentObservation.startObservation('content-guardrail', {
      input: {
      text: llmCall.output?.content,
      policies: ['no-harmful-content', 'no-personal-info', 'professional-tone']
      },
      metadata: {
      guardrailVersion: 'v2.1',
      strictMode: true,
      confidence: 0.95
      }
      }, { asType: 'guardrail' }); // Returns LangfuseGuardrail

      // Create child embedding for vector generation
      const textEmbedding = parentObservation.startObservation('text-embedder', {
      input: {
      texts: ['Document summary', 'Key insights', 'Conclusions'],
      batchSize: 3
      },
      model: 'text-embedding-ada-002',
      metadata: {
      dimensions: 1536,
      normalization: 'l2',
      purpose: 'semantic-search'
      }
      }, { asType: 'embedding' }); // Returns LangfuseEmbedding

      // Create child event for point-in-time logging
      const userAction = parentObservation.startObservation('user-interaction', {
      input: {
      action: 'button-click',
      element: 'generate-report',
      timestamp: new Date().toISOString()
      },
      level: 'DEFAULT',
      metadata: {
      sessionId: 'sess_123',
      userId: 'user_456',
      browser: 'Chrome 120.0'
      }
      }, { asType: 'event' }); // Returns LangfuseEvent (auto-ended)

      // Chain operations - each child inherits context
      dataProcessing.update({ output: { processed: true, records: 1000 } });
      dataProcessing.end();

      llmCall.update({
      output: { role: 'assistant', content: 'Machine learning is...' },
      usageDetails: { promptTokens: 25, completionTokens: 150 }
      });
      llmCall.end();

      parentObservation.update({
      output: {
      workflowCompleted: true,
      childOperations: 8,
      totalDuration: Date.now() - startTime
      }
      });
      parentObservation.end();
    • Updates this tool observation with new attributes.

      Parameters

      Returns LangfuseTool

      This tool for method chaining

      tool.update({
      output: {
      result: searchResults,
      count: searchResults.length,
      relevanceScore: 0.89,
      executionTime: 1250
      },
      metadata: {
      cacheHit: false,
      apiCost: 0.025,
      rateLimitRemaining: 950
      }
      });
    • Updates the parent trace with new attributes.

      This sets trace-level attributes that apply to the entire trace, not just this specific observation.

      Parameters

      Returns LangfuseTool

      This observation for method chaining