event.go

 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}