The span ID from the OpenTelemetry span context
Readonly
otelThe underlying OpenTelemetry span
The trace ID from the OpenTelemetry span context
Readonly
typeThe underlying OpenTelemetry span
Protected
tracerGets the Langfuse OpenTelemetry tracer instance
Ends the observation, marking it as complete.
Optional
endTime: TimeInputOptional end time, defaults to current time
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Type-specific attributes (varies by observation type)
Configuration including observation type (defaults to 'span')
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.
asType
parameterDescriptive name for the child observation
Optional
attributes: LangfuseSpanAttributesType-specific attributes (varies by observation type)
Optional
options: { asType?: "span" }Configuration including observation type (defaults to 'span')
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 evaluator observation with new attributes.
Evaluator attributes to set
This evaluator for method chaining
Updates the parent trace with new attributes.
This sets trace-level attributes that apply to the entire trace, not just this specific observation.
Trace attributes to set
This observation for method chaining
Specialized observation wrapper for tracking quality assessment and evaluation operations.
LangfuseEvaluator is designed for observing evaluation systems that assess, score, and validate the quality of AI outputs, content, or system performance. It captures evaluation criteria, scoring methodologies, benchmark comparisons, and quality metrics, making it essential for AI system validation, content moderation, and performance monitoring.
Primary Use Cases
Key Features
Example
See
{ asType: 'evaluator' }
- Factory function