mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
130 lines
3.0 KiB
Go
130 lines
3.0 KiB
Go
package agent
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// EventKind identifies a structured agent-loop event.
|
|
type EventKind uint8
|
|
|
|
const (
|
|
// EventKindTurnStart is emitted when a turn begins processing.
|
|
EventKindTurnStart EventKind = iota
|
|
// EventKindTurnEnd is emitted when a turn finishes, successfully or with an error.
|
|
EventKindTurnEnd
|
|
// EventKindLLMRequest is emitted before a provider chat request is made.
|
|
EventKindLLMRequest
|
|
// EventKindLLMResponse is emitted after a provider chat response is received.
|
|
EventKindLLMResponse
|
|
// EventKindToolExecStart is emitted immediately before a tool executes.
|
|
EventKindToolExecStart
|
|
// EventKindToolExecEnd is emitted immediately after a tool finishes executing.
|
|
EventKindToolExecEnd
|
|
// EventKindError is emitted when a turn encounters an execution error.
|
|
EventKindError
|
|
|
|
eventKindCount
|
|
)
|
|
|
|
var eventKindNames = [...]string{
|
|
"turn_start",
|
|
"turn_end",
|
|
"llm_request",
|
|
"llm_response",
|
|
"tool_exec_start",
|
|
"tool_exec_end",
|
|
"error",
|
|
}
|
|
|
|
// String returns the stable string form of an EventKind.
|
|
func (k EventKind) String() string {
|
|
if k >= eventKindCount {
|
|
return fmt.Sprintf("event_kind(%d)", k)
|
|
}
|
|
return eventKindNames[k]
|
|
}
|
|
|
|
// Event is the structured envelope broadcast by the agent EventBus.
|
|
type Event struct {
|
|
Kind EventKind
|
|
Time time.Time
|
|
Meta EventMeta
|
|
Payload any
|
|
}
|
|
|
|
// EventMeta contains correlation fields shared by all agent-loop events.
|
|
type EventMeta struct {
|
|
AgentID string
|
|
TurnID string
|
|
ParentTurnID string
|
|
SessionKey string
|
|
Iteration int
|
|
TracePath string
|
|
Source string
|
|
}
|
|
|
|
// TurnEndStatus describes the terminal state of a turn.
|
|
type TurnEndStatus string
|
|
|
|
const (
|
|
// TurnEndStatusCompleted indicates the turn finished normally.
|
|
TurnEndStatusCompleted TurnEndStatus = "completed"
|
|
// TurnEndStatusError indicates the turn ended because of an error.
|
|
TurnEndStatusError TurnEndStatus = "error"
|
|
)
|
|
|
|
// TurnStartPayload describes the start of a turn.
|
|
type TurnStartPayload struct {
|
|
Channel string
|
|
ChatID string
|
|
UserMessage string
|
|
MediaCount int
|
|
}
|
|
|
|
// TurnEndPayload describes the completion of a turn.
|
|
type TurnEndPayload struct {
|
|
Status TurnEndStatus
|
|
Iterations int
|
|
Duration time.Duration
|
|
FinalContentLen int
|
|
}
|
|
|
|
// LLMRequestPayload describes an outbound LLM request.
|
|
type LLMRequestPayload struct {
|
|
Model string
|
|
MessagesCount int
|
|
ToolsCount int
|
|
MaxTokens int
|
|
Temperature float64
|
|
}
|
|
|
|
// LLMResponsePayload describes an inbound LLM response.
|
|
type LLMResponsePayload struct {
|
|
ContentLen int
|
|
ToolCalls int
|
|
HasReasoning bool
|
|
}
|
|
|
|
// ToolExecStartPayload describes a tool execution request.
|
|
type ToolExecStartPayload struct {
|
|
Tool string
|
|
Arguments map[string]any
|
|
}
|
|
|
|
// ToolExecEndPayload describes the outcome of a tool execution.
|
|
type ToolExecEndPayload struct {
|
|
Tool string
|
|
Duration time.Duration
|
|
ForLLMLen int
|
|
ForUserLen int
|
|
IsError bool
|
|
Async bool
|
|
}
|
|
|
|
// ErrorPayload describes an execution error inside the agent loop.
|
|
type ErrorPayload struct {
|
|
Stage string
|
|
Message string
|
|
}
|