Documentation
¶
Overview ¶
Package agentlog provides unified logging for all LLM agents in the system.
Index ¶
- type AgentType
- type ConversationTurn
- type ConversationTurns
- type Entry
- type Logger
- func (l *Logger) Enabled() bool
- func (l *Logger) Log(ctx context.Context, entry Entry)
- func (l *Logger) LogError(ctx context.Context, userID int64, agentType AgentType, inputPrompt string, ...)
- func (l *Logger) LogSuccess(ctx context.Context, userID int64, agentType AgentType, inputPrompt string, ...)
- type TurnTracker
- func (t *TurnTracker) Build() *ConversationTurns
- func (t *TurnTracker) EndTurn(request, response string, promptTokens, completionTokens int, cost *float64)
- func (t *TurnTracker) FirstRequest() string
- func (t *TurnTracker) LastResponse() string
- func (t *TurnTracker) StartTurn()
- func (t *TurnTracker) TotalCost() *float64
- func (t *TurnTracker) TotalCostValue() float64
- func (t *TurnTracker) TotalDuration() time.Duration
- func (t *TurnTracker) TotalTokens() (promptTokens, completionTokens int)
- func (t *TurnTracker) TurnCount() int
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ConversationTurn ¶
type ConversationTurn struct {
Iteration int `json:"iteration"`
Request interface{} `json:"request"` // Raw OpenRouter request
Response interface{} `json:"response"` // Raw OpenRouter response
DurationMs int `json:"duration_ms"`
}
ConversationTurn represents one request-response cycle in a multi-turn conversation.
type ConversationTurns ¶
type ConversationTurns struct {
Turns []ConversationTurn `json:"turns"`
TotalDurationMs int `json:"total_duration_ms"`
TotalPromptTokens int `json:"total_prompt_tokens"`
TotalCompletionTokens int `json:"total_completion_tokens"`
TotalCost *float64 `json:"total_cost,omitempty"`
}
ConversationTurns holds all turns for multi-turn agents (e.g., Reranker with tool calls).
type Entry ¶
type Entry struct {
UserID int64
AgentType AgentType
InputPrompt string
InputContext interface{} // Will be JSON serialized (full API request)
OutputResponse string
OutputParsed interface{} // Will be JSON serialized
OutputContext interface{} // Will be JSON serialized (full API response)
Model string
PromptTokens int
CompletionTokens int
TotalCost *float64
DurationMs int
Metadata interface{} // Agent-specific data, will be JSON serialized
Success bool
ErrorMessage string
// ConversationTurns holds all request/response pairs for multi-turn agents.
// Used by Reranker (tool calls) and potentially Laplace (agentic mode).
ConversationTurns *ConversationTurns
}
Entry represents a log entry for an agent call.
type Logger ¶
type Logger struct {
// contains filtered or unexported fields
}
Logger handles logging for LLM agents.
func NewLogger ¶
NewLogger creates a new agent logger. If enabled is false, Log() calls will be no-ops.
func (*Logger) Log ¶
Log records an agent call entry. If the logger is disabled or repo is nil, this is a no-op.
func (*Logger) LogError ¶
func (l *Logger) LogError(ctx context.Context, userID int64, agentType AgentType, inputPrompt string, inputContext interface{}, errorMessage string, model string, durationMs int, metadata interface{})
LogError is a convenience method for logging failed agent calls.
func (*Logger) LogSuccess ¶
func (l *Logger) LogSuccess(ctx context.Context, userID int64, agentType AgentType, inputPrompt string, inputContext interface{}, outputResponse string, outputParsed interface{}, outputContext interface{}, model string, promptTokens, completionTokens int, totalCost *float64, durationMs int, metadata interface{})
LogSuccess is a convenience method for logging successful agent calls.
type TurnTracker ¶
type TurnTracker struct {
// contains filtered or unexported fields
}
TurnTracker captures LLM conversation turns for any agent. It provides a simple API for recording LLM calls and building ConversationTurns.
Usage:
tracker := agentlog.NewTurnTracker()
for {
tracker.StartTurn()
resp, err := client.CreateChatCompletion(ctx, req)
if err != nil { break }
tracker.EndTurn(resp.DebugRequestBody, resp.DebugResponseBody,
resp.Usage.PromptTokens, resp.Usage.CompletionTokens, resp.Usage.Cost)
if noToolCalls { break }
}
entry.ConversationTurns = tracker.Build()
func NewTurnTracker ¶
func NewTurnTracker() *TurnTracker
NewTurnTracker creates a new TurnTracker. Call this at the start of agent processing.
func (*TurnTracker) Build ¶
func (t *TurnTracker) Build() *ConversationTurns
Build returns the ConversationTurns struct for logging. Returns nil if no turns were recorded.
func (*TurnTracker) EndTurn ¶
func (t *TurnTracker) EndTurn(request, response string, promptTokens, completionTokens int, cost *float64)
EndTurn records a completed turn with request/response data. Call this immediately after CreateChatCompletion succeeds.
Parameters:
- request: DebugRequestBody from response (raw JSON string)
- response: DebugResponseBody from response (raw JSON string)
- promptTokens: from resp.Usage.PromptTokens
- completionTokens: from resp.Usage.CompletionTokens
- cost: from resp.Usage.Cost (can be nil)
func (*TurnTracker) FirstRequest ¶
func (t *TurnTracker) FirstRequest() string
FirstRequest returns the first turn's request body. Useful for backward compatibility with InputContext field.
func (*TurnTracker) LastResponse ¶
func (t *TurnTracker) LastResponse() string
LastResponse returns the last turn's response body. Useful for backward compatibility with OutputContext field.
func (*TurnTracker) StartTurn ¶
func (t *TurnTracker) StartTurn()
StartTurn marks the beginning of a new LLM call. Call this immediately before CreateChatCompletion.
func (*TurnTracker) TotalCost ¶
func (t *TurnTracker) TotalCost() *float64
TotalCost returns accumulated cost across all turns. Returns nil if no cost data was recorded.
func (*TurnTracker) TotalCostValue ¶
func (t *TurnTracker) TotalCostValue() float64
TotalCostValue returns accumulated cost as float64. Returns 0.0 if no cost data was recorded.
func (*TurnTracker) TotalDuration ¶
func (t *TurnTracker) TotalDuration() time.Duration
TotalDuration returns the total duration since tracker was created.
func (*TurnTracker) TotalTokens ¶
func (t *TurnTracker) TotalTokens() (promptTokens, completionTokens int)
TotalTokens returns accumulated token counts across all turns.
func (*TurnTracker) TurnCount ¶
func (t *TurnTracker) TurnCount() int
TurnCount returns the number of recorded turns.