Mojentic.Tracer (Mojentic v1.2.0)

Copy Markdown View Source

Public API for the Mojentic Tracer System.

The tracer system provides observability and debugging capabilities by recording LLM calls, tool executions, and agent interactions. All events include correlation IDs for tracing related operations across the system.

Quick Start

# Start a tracer
{:ok, tracer} = Tracer.start_link()

# Pass to components
broker = Broker.new("gpt-4", gateway, tracer: tracer)
{:ok, response} = Broker.generate(broker, messages, tools: [tool])

# Query events
events = Tracer.get_events(tracer)
llm_calls = Tracer.get_events(tracer, event_type: LLMCallTracerEvent)

Null Tracer

When tracing is not needed, use the null tracer to avoid overhead:

broker = Broker.new("gpt-4", gateway, tracer: Tracer.null_tracer())

Event Types

  • TracerEvent - Base event type
  • LLMCallTracerEvent - Records LLM calls
  • LLMResponseTracerEvent - Records LLM responses
  • ToolCallTracerEvent - Records tool executions
  • AgentInteractionTracerEvent - Records agent-to-agent interactions

Filtering Events

# By type
llm_calls = Tracer.get_events(tracer, event_type: LLMCallTracerEvent)

# By time range
recent = Tracer.get_events(tracer,
  start_time: start_timestamp,
  end_time: end_timestamp
)

# By correlation ID
related = Tracer.get_events(tracer,
  filter_func: fn event -> event.correlation_id == "abc-123" end
)

# Last N events
recent = Tracer.get_last_n_tracer_events(tracer, 10)

Correlation IDs

Correlation IDs allow tracing related events across system boundaries:

alias UUID

correlation_id = UUID.uuid4()

# Pass the same correlation_id to all related operations
Tracer.record_llm_call(tracer,
  model: "gpt-4",
  messages: messages,
  correlation_id: correlation_id
)

Tracer.record_tool_call(tracer,
  tool_name: "date_resolver",
  arguments: args,
  result: result,
  correlation_id: correlation_id
)

# Query all related events
related_events = Tracer.get_events(tracer,
  filter_func: fn e -> e.correlation_id == correlation_id end
)

Summary

Functions

Clears all events from the tracer.

Disables the tracer system.

Enables the tracer system.

Checks if the tracer is enabled.

Retrieves events from the tracer.

Gets the last N tracer events.

Returns the singleton null tracer instance.

Records an agent interaction event.

Records a generic tracer event.

Records an LLM call event.

Records an LLM response event.

Records a tool call event.

Functions

clear(server)

Clears all events from the tracer.

disable(server)

Disables the tracer system.

enable(server)

Enables the tracer system.

enabled?(server)

Checks if the tracer is enabled.

get_events(server, opts \\ [])

Retrieves events from the tracer.

get_last_n_tracer_events(server, n, opts \\ [])

Gets the last N tracer events.

null_tracer()

@spec null_tracer() :: :null_tracer

Returns the singleton null tracer instance.

The null tracer implements the same API as TracerSystem but performs no operations, following the Null Object Pattern. This eliminates conditional checks in code.

Examples

# Use null tracer when tracing is not needed
broker = Broker.new("gpt-4", gateway, tracer: Tracer.null_tracer())

# All operations are no-ops
Tracer.record_llm_call(Tracer.null_tracer(), ...)  # Does nothing
Tracer.get_events(Tracer.null_tracer())            # Returns []

record_agent_interaction(server, opts)

Records an agent interaction event.

record_event(server, event)

Records a generic tracer event.

record_llm_call(server, opts)

Records an LLM call event.

record_llm_response(server, opts)

Records an LLM response event.

record_tool_call(server, opts)

Records a tool call event.

start_link(opts \\ [])

See Mojentic.Tracer.TracerSystem.start_link/1.