Overview
Theobserve decorator (Python) or function wrapper (JavaScript/TypeScript) is the simplest way to structure your traces in Laminar. It allows you to:
- Create a parent span that groups multiple LLM calls into a single trace
- Capture inputs and outputs of your functions automatically
- Structure your application’s tracing in a logical way
Basic Usage
- JavaScript/TypeScript
- Python
You can instrument specific functions by wrapping them in
observe().
This is especially helpful when you want to trace functions, or group
separate functions into a single trace.my_function and the OpenAI call, which is nested inside it, in the same trace. Notice that the OpenAI span is a child of my_function. Parent-child relationships are automatically detected and visualized with tree hierarchy.
Input arguments to the function are automatically recorded as inputs of the span. The return value is automatically recorded as the output of the span.
To pass arguments to the observed function, you can pass them as additional arguments to the observe call after the function. Example:
Detailed Reference
- JavaScript/TypeScript
- Python
General syntax
Parameters (ObserveOptions)
name(string): name of the span. If not passed, and the function to observe is not an anonymous arrow function, the function name will be used.sessionId(string): session ID for the wrapped trace.userId(string): user ID for the wrapped trace.metadata(Record<string, any>): metadata for the wrapped trace, must be json serializable.traceType('DEFAULT'|'EVALUATION'): Type of the trace. Unless it is within evaluation, it must be'DEFAULT'.spanType('DEFAULT'|'LLM') - Type of the span.'DEFAULT'is used if not specified. If the type is'LLM', you must manually specify some attributes. This translates tolmnr.span.typeattribute on the span.traceId(string): [experimental] trace ID for the current trace. This is useful if you want to continue an existing trace. IMPORTANT: must be a valid UUID, i.e. has to include 8-4-4-4-12 hex digits.input: a dictionary of input parameters. Is preferred over function parameters.ignoreInput(boolean): iftrue, the input will not be recorded.ignoreOutput(boolean): iftrue, the output will not be recorded.tags(string[]): array of tags to add to the span.
Inputs and outputs
- Function parameters and their values are serialized to JSON and recorded as span input.
- Function return value is serialized to JSON and recorded as span output.
- Span input (
lmnr.span.input) will be[1, 2] - Span output (
lmnr.span.output) will be3
Use Cases
Grouping LLM Calls
One of the most common use cases forobserve is to group multiple LLM calls into a single trace:
- JavaScript/TypeScript
- Python
Alternative Methods
In Python, you can also useLaminar.start_as_current_span if you want to trace a specific block of code:

