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 agent observation with new attributes.
Agent attributes to set
This agent 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 AI agent workflows and autonomous operations.
LangfuseAgent is designed for observing intelligent agent systems that combine reasoning, tool usage, memory management, and decision-making in autonomous workflows. It captures the complex multi-step nature of agent operations, including planning, execution, and self-correction cycles typical in advanced AI agent architectures.
Primary Use Cases
Key Features
Agent-Specific Patterns
Example
See
{ asType: 'agent' }
- Factory function{ asType: 'agent' }
- Function-scoped agent