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