1package agent
2
3import (
4 "time"
5
6 "github.com/charmbracelet/crush/internal/event"
7 "github.com/charmbracelet/crush/internal/llm/provider"
8)
9
10func (a *agent) eventPromptSent(sessionID string) {
11 event.PromptSent(
12 a.eventCommon(sessionID)...,
13 )
14}
15
16func (a *agent) eventPromptResponded(sessionID string, duration time.Duration) {
17 event.PromptResponded(
18 append(
19 a.eventCommon(sessionID),
20 "prompt duration pretty", duration.String(),
21 "prompt duration in seconds", int64(duration.Seconds()),
22 )...,
23 )
24}
25
26func (a *agent) eventTokensUsed(sessionID string, usage provider.TokenUsage, cost float64) {
27 event.TokensUsed(
28 append(
29 a.eventCommon(sessionID),
30 "input tokens", usage.InputTokens,
31 "output tokens", usage.OutputTokens,
32 "cache read tokens", usage.CacheReadTokens,
33 "cache creation tokens", usage.CacheCreationTokens,
34 "total tokens", usage.InputTokens+usage.OutputTokens+usage.CacheReadTokens+usage.CacheCreationTokens,
35 "cost", cost,
36 )...,
37 )
38}
39
40func (a *agent) eventCommon(sessionID string) []any {
41 currentModel := a.cfg.Models[a.cfg.Agents["coder"].Model]
42
43 return []any{
44 "session id", sessionID,
45 "provider", currentModel.Provider,
46 "model", currentModel.Model,
47 "reasoning effort", currentModel.ReasoningEffort,
48 "thinking mode", currentModel.Think,
49 "yolo mode", a.permissions.SkipRequests(),
50 }
51}