@@ -172,6 +172,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
173 history, files := a.preparePrompt(msgs, call.Attachments...)
173 history, files := a.preparePrompt(msgs, call.Attachments...)
175+ startTime := time.Now()
176+ a.eventPromptSent(call.SessionID)
175 var currentAssistant *message.Message
178 var currentAssistant *message.Message
176 var shouldSummarize bool
179 var shouldSummarize bool
177 result, err := agent.Stream(genCtx, fantasy.AgentStreamCall{
180 result, err := agent.Stream(genCtx, fantasy.AgentStreamCall{
@@ -354,6 +357,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
361+ a.eventPromptResponded(call.SessionID, time.Since(startTime).Truncate(time.Second))
357 if err != nil {
363 if err != nil {
358 isCancelErr := errors.Is(err, context.Canceled)
364 isCancelErr := errors.Is(err, context.Canceled)
359 isPermissionErr := errors.Is(err, permission.ErrorPermissionDenied)
365 isPermissionErr := errors.Is(err, permission.ErrorPermissionDenied)
@@ -684,6 +690,9 @@ func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session,
684 modelConfig.CostPer1MOutCached/1e6*float64(usage.CacheReadTokens) +
690 modelConfig.CostPer1MOutCached/1e6*float64(usage.CacheReadTokens) +
685 modelConfig.CostPer1MIn/1e6*float64(usage.InputTokens) +
691 modelConfig.CostPer1MIn/1e6*float64(usage.InputTokens) +
686 modelConfig.CostPer1MOut/1e6*float64(usage.OutputTokens)
692 modelConfig.CostPer1MOut/1e6*float64(usage.OutputTokens)
694+ a.eventTokensUsed(session.ID, model, usage, cost)
687 session.Cost += cost
696 session.Cost += cost
688 session.CompletionTokens = usage.OutputTokens + usage.CacheReadTokens
697 session.CompletionTokens = usage.OutputTokens + usage.CacheReadTokens
689 session.PromptTokens = usage.InputTokens + usage.CacheCreationTokens
698 session.PromptTokens = usage.InputTokens + usage.CacheCreationTokens