agentlog

package
v0.5.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 18, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package agentlog provides unified logging for all LLM agents in the system.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AgentType

type AgentType string

AgentType represents the type of LLM agent.

const (
	AgentLaplace   AgentType = "laplace"
	AgentReranker  AgentType = "reranker"
	AgentSplitter  AgentType = "splitter"
	AgentMerger    AgentType = "merger"
	AgentEnricher  AgentType = "enricher"
	AgentArchivist AgentType = "archivist"
	AgentScout     AgentType = "scout"
)

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

func NewLogger(repo storage.AgentLogRepository, logger *slog.Logger, enabled bool) *Logger

NewLogger creates a new agent logger. If enabled is false, Log() calls will be no-ops.

func (*Logger) Enabled

func (l *Logger) Enabled() bool

Enabled returns whether logging is enabled.

func (*Logger) Log

func (l *Logger) Log(ctx context.Context, entry Entry)

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL