@@ -103,6 +103,7 @@ type Model struct {
103 Model fantasy.LanguageModel
103 Model fantasy.LanguageModel
104 CatwalkCfg catwalk.Model
104 CatwalkCfg catwalk.Model
105 ModelCfg config.SelectedModel
105 ModelCfg config.SelectedModel
108type sessionAgent struct {
109type sessionAgent struct {
@@ -1079,6 +1080,11 @@ func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, user
1079 cost = *openrouterCost
1080 cost = *openrouterCost
1083+ // Skip cost accumulation
1084+ if model.FlatRate {
1082 promptTokens := resp.TotalUsage.InputTokens + resp.TotalUsage.CacheCreationTokens
1088 promptTokens := resp.TotalUsage.InputTokens + resp.TotalUsage.CacheCreationTokens
1083 completionTokens := resp.TotalUsage.OutputTokens
1089 completionTokens := resp.TotalUsage.OutputTokens
@@ -1113,12 +1119,17 @@ func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session,
1114 a.eventTokensUsed(session.ID, model, usage, cost)
1120 a.eventTokensUsed(session.ID, model, usage, cost)
1122+ // Use override cost if available (e.g., from OpenRouter).
1116 if overrideCost != nil {
1123 if overrideCost != nil {
1117− session.Cost += *overrideCost
1124+ cost = *overrideCost
1119− session.Cost += cost
1126+
1127+ // Skip cost accumulation
1128+ if model.FlatRate {
1132+ session.Cost += cost
1122 session.CompletionTokens = usage.OutputTokens
1133 session.CompletionTokens = usage.OutputTokens
1123 session.PromptTokens = usage.InputTokens + usage.CacheReadTokens
1134 session.PromptTokens = usage.InputTokens + usage.CacheReadTokens