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.
You can nest as many spans as you want inside each other. By observing both the functions and the LLM/vector DB calls
you can have better visualization of execution flow which is useful for debugging and better understanding of the application.
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.type
attribute 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{"param1": 1, "param2": 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: