pig/obs/events
Telemetry event definitions for the pig library.
A single Event union type with typed variants for every pig event.
One emit(Event) function, one event_name(Event) accessor.
Uses a thin Erlang FFI (pig_obs_ffi) that wraps :telemetry.execute/3
and converts string-keyed dicts to atom-keyed maps.
All pig telemetry events as typed variants. Construct these directly
and pass to emit().
Types
pub type Event {
InferenceStart(model: String, message_count: Int)
InferenceStop(
model: String,
message_count: Int,
duration_ms: Int,
response_id: option.Option(String),
stop_reason: option.Option(stop_reason.StopReason),
input_tokens: option.Option(Int),
output_tokens: option.Option(Int),
)
InferenceException(
model: String,
message_count: Int,
error_type: String,
)
ToolStart(
tool_name: String,
tool_call_id: String,
arguments_json: String,
)
ToolStop(
tool_name: String,
tool_call_id: String,
duration_ms: Int,
result: String,
)
ToolException(
tool_name: String,
tool_call_id: String,
arguments_json: String,
)
}
Constructors
-
InferenceStart(model: String, message_count: Int) -
InferenceStop( model: String, message_count: Int, duration_ms: Int, response_id: option.Option(String), stop_reason: option.Option(stop_reason.StopReason), input_tokens: option.Option(Int), output_tokens: option.Option(Int), ) -
InferenceException( model: String, message_count: Int, error_type: String, ) -
ToolStart( tool_name: String, tool_call_id: String, arguments_json: String, ) -
ToolStop( tool_name: String, tool_call_id: String, duration_ms: Int, result: String, ) -
ToolException( tool_name: String, tool_call_id: String, arguments_json: String, )
Details of a hook’s action.
pub type HookActionDetail {
HookActionDetail(action_type: String, description: String)
}
Constructors
-
HookActionDetail(action_type: String, description: String)
Hook points for lifecycle events.
pub type HookPoint {
BeforeToolCall
AfterToolCall
BeforeInference
AfterInference
OnError
OnComplete
OnSessionStart
OnSessionShutdown
}
Constructors
-
BeforeToolCall -
AfterToolCall -
BeforeInference -
AfterInference -
OnError -
OnComplete -
OnSessionStart -
OnSessionShutdown
Reasons why a session ended.
pub type SessionEndReason {
NormalEnd
ErrorEnd(error.AiError)
MaxIterationsExceeded(Int)
Interrupted
}
Constructors
-
NormalEnd -
ErrorEnd(error.AiError) -
MaxIterationsExceeded(Int) -
Interrupted
Rich session events for pig consumers (session writer, terminal printer, OTel). Carries full message content, tool args/results, token counts, and timing.
pub type SessionEvent {
SessionStarted(
agent_id: option.Option(String),
agent_name: option.Option(String),
model: String,
provider_name: option.Option(String),
system_prompt: option.Option(String),
)
InferenceStarted(model: String, message_count: Int)
InferenceCompleted(
message: message.Message,
response_id: option.Option(String),
response_model: option.Option(String),
stop_reason: option.Option(stop_reason.StopReason),
input_tokens: option.Option(Int),
output_tokens: option.Option(Int),
duration_ms: Int,
input_messages: List(message.Message),
)
ToolStarted(tool_call: message.ToolCall)
ToolExecuted(
tool_call: message.ToolCall,
result: String,
duration_ms: Int,
)
ToolBlocked(
tool_call: message.ToolCall,
hook_name: String,
reason: String,
)
HookActed(
hook_name: String,
hook_point: HookPoint,
action: HookActionDetail,
)
InferenceFailed(
error: error.AiError,
duration_ms: Int,
input_messages: List(message.Message),
)
SessionEnded(reason: SessionEndReason)
}
Constructors
-
SessionStarted( agent_id: option.Option(String), agent_name: option.Option(String), model: String, provider_name: option.Option(String), system_prompt: option.Option(String), ) -
InferenceStarted(model: String, message_count: Int) -
InferenceCompleted( message: message.Message, response_id: option.Option(String), response_model: option.Option(String), stop_reason: option.Option(stop_reason.StopReason), input_tokens: option.Option(Int), output_tokens: option.Option(Int), duration_ms: Int, input_messages: List(message.Message), ) -
ToolStarted(tool_call: message.ToolCall) -
ToolExecuted( tool_call: message.ToolCall, result: String, duration_ms: Int, ) -
ToolBlocked( tool_call: message.ToolCall, hook_name: String, reason: String, ) -
HookActed( hook_name: String, hook_point: HookPoint, action: HookActionDetail, ) -
InferenceFailed( error: error.AiError, duration_ms: Int, input_messages: List(message.Message), ) -
SessionEnded(reason: SessionEndReason)
Values
pub fn all_event_names() -> List(List(String))
All pig event names, useful for attaching a listener to everything.
pub fn decode(raw: RawCapturedEvent) -> Event
Decode a raw captured event into a typed Event. Panics on unknown event names or missing fields (internal consistency).
pub fn emit_exception(
name: List(String),
meta: dict.Dict(String, String),
) -> Nil
Emit a custom exception event with auto-populated system_time measurement.
pub fn emit_start(
name: List(String),
meta: dict.Dict(String, String),
) -> Nil
Emit a custom start event with auto-populated system_time measurement.
pub fn emit_stop(
name: List(String),
duration_ms: Int,
meta: dict.Dict(String, String),
) -> Nil
Emit a custom stop event with duration and system_time measurements.
pub fn event_name(event: Event) -> List(String)
Get the telemetry event name for a given event.
pub fn execute_telemetry(
name: List(String),
measurements: dict.Dict(String, Int),
metadata: dict.Dict(String, String),
) -> Nil
Public wrapper for the FFI execute function. This allows other modules (like the dispatcher) to emit telemetry events without exposing the FFI implementation directly.
pub fn inference_exception_name() -> List(String)
pub fn inference_start_name() -> List(String)
pub fn inference_stop_name() -> List(String)
pub fn name_to_string(name: List(String)) -> String
Convert an event name list to a dot-separated string for display.
pub fn system_time() -> Int
Get the current monotonic system time. Used for duration measurements.
pub fn tool_blocked_name() -> List(String)
pub fn tool_exception_name() -> List(String)
pub fn tool_start_name() -> List(String)
pub fn tool_stop_name() -> List(String)