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}