1package agent
 2
 3import (
 4	"time"
 5
 6	"charm.land/fantasy"
 7	"github.com/charmbracelet/crush/internal/event"
 8)
 9
10func (a sessionAgent) eventPromptSent(sessionID string) {
11	event.PromptSent(
12		a.eventCommon(sessionID, a.largeModel)...,
13	)
14}
15
16func (a sessionAgent) eventPromptResponded(sessionID string, duration time.Duration) {
17	event.PromptResponded(
18		append(
19			a.eventCommon(sessionID, a.largeModel),
20			"prompt duration pretty", duration.String(),
21			"prompt duration in seconds", int64(duration.Seconds()),
22		)...,
23	)
24}
25
26func (a sessionAgent) eventTokensUsed(sessionID string, model Model, usage fantasy.Usage, cost float64) {
27	event.TokensUsed(
28		append(
29			a.eventCommon(sessionID, model),
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 sessionAgent) eventCommon(sessionID string, model Model) []any {
41	m := model.ModelCfg
42
43	return []any{
44		"session id", sessionID,
45		"provider", m.Provider,
46		"model", m.Model,
47		"reasoning effort", m.ReasoningEffort,
48		"thinking mode", m.Think,
49	}
50}