event.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package agent
  2. import (
  3. "time"
  4. "charm.land/fantasy"
  5. "github.com/charmbracelet/crush/internal/event"
  6. )
  7. func (a *sessionAgent) eventPromptSent(sessionID string) {
  8. event.PromptSent(
  9. a.eventCommon(sessionID, a.largeModel.Get())...,
  10. )
  11. }
  12. func (a *sessionAgent) eventPromptResponded(sessionID string, duration time.Duration) {
  13. event.PromptResponded(
  14. append(
  15. a.eventCommon(sessionID, a.largeModel.Get()),
  16. "prompt duration pretty", duration.String(),
  17. "prompt duration in seconds", int64(duration.Seconds()),
  18. )...,
  19. )
  20. }
  21. func (a *sessionAgent) eventTokensUsed(sessionID string, model Model, usage fantasy.Usage, cost float64) {
  22. event.TokensUsed(
  23. append(
  24. a.eventCommon(sessionID, model),
  25. "input tokens", usage.InputTokens,
  26. "output tokens", usage.OutputTokens,
  27. "cache read tokens", usage.CacheReadTokens,
  28. "cache creation tokens", usage.CacheCreationTokens,
  29. "total tokens", usage.InputTokens+usage.OutputTokens+usage.CacheReadTokens+usage.CacheCreationTokens,
  30. "cost", cost,
  31. )...,
  32. )
  33. }
  34. func (a *sessionAgent) eventCommon(sessionID string, model Model) []any {
  35. m := model.ModelCfg
  36. return []any{
  37. "session id", sessionID,
  38. "provider", m.Provider,
  39. "model", m.Model,
  40. "reasoning effort", m.ReasoningEffort,
  41. "thinking mode", m.Think,
  42. "yolo mode", a.isYolo,
  43. }
  44. }