on main help sign in
fix: bring back metrics on fantasy
commitf7b78df7c58fbff00d13b0f592f4b7e3cd05ee0f authorAndrey Nering <andreynering@users.noreply.github.com> dateThu 23 Oct 2025, 17:53 (1 year ago) parent232fa9a
2 files changed+59
internal/agent/agent.go+9 internal/agent/event.go+50
internal/agent/agent.go+9
@@ -172,6 +172,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
172172
173173 history, files := a.preparePrompt(msgs, call.Attachments...)
174174
175+ startTime := time.Now()
176+ a.eventPromptSent(call.SessionID)
177+
175178 var currentAssistant *message.Message
176179 var shouldSummarize bool
177180 result, err := agent.Stream(genCtx, fantasy.AgentStreamCall{
@@ -354,6 +357,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
354357 },
355358 },
356359 })
360+
361+ a.eventPromptResponded(call.SessionID, time.Since(startTime).Truncate(time.Second))
362+
357363 if err != nil {
358364 isCancelErr := errors.Is(err, context.Canceled)
359365 isPermissionErr := errors.Is(err, permission.ErrorPermissionDenied)
@@ -684,6 +690,9 @@ func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session,
684690 modelConfig.CostPer1MOutCached/1e6*float64(usage.CacheReadTokens) +
685691 modelConfig.CostPer1MIn/1e6*float64(usage.InputTokens) +
686692 modelConfig.CostPer1MOut/1e6*float64(usage.OutputTokens)
693+
694+ a.eventTokensUsed(session.ID, model, usage, cost)
695+
687696 session.Cost += cost
688697 session.CompletionTokens = usage.OutputTokens + usage.CacheReadTokens
689698 session.PromptTokens = usage.InputTokens + usage.CacheCreationTokens
internal/agent/event.gonew file+50
@@ -0,0 +1,50 @@
1+package agent
2+
3+import (
4+ "time"
5+
6+ "charm.land/fantasy"
7+ "github.com/charmbracelet/crush/internal/event"
8+)
9+
10+func (a sessionAgent) eventPromptSent(sessionID string) {
11+ event.PromptSent(
12+ a.eventCommon(sessionID, a.largeModel)...,
13+ )
14+}
15+
16+func (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+
26+func (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+
40+func (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+}