@@ -33,9 +33,10 @@ func FormatReasoningEffort(effort string) string {
34// ModelContextInfo contains token usage and cost information for a model.
34// ModelContextInfo contains token usage and cost information for a model.
35type ModelContextInfo struct {
35type ModelContextInfo struct {
36− ContextUsed int64
36+ ContextUsed int64
37− ModelContext int64
37+ ModelContext int64
38− Cost float64
38+ Cost float64
41// ModelInfo renders model information including name, provider, reasoning
42// ModelInfo renders model information including name, provider, reasoning
@@ -74,7 +75,7 @@ func ModelInfo(t *styles.Styles, modelName, providerName, reasoningInfo string,
76 if context != nil {
77 if context != nil {
77− formattedInfo := formatTokensAndCost(t, context.ContextUsed, context.ModelContext, context.Cost)
78+ formattedInfo := formatTokensAndCost(t, context.ContextUsed, context.ModelContext, context.Cost, context.EstimatedUsage)
78 parts = append(parts, lipgloss.NewStyle().PaddingLeft(2).Render(formattedInfo))
79 parts = append(parts, lipgloss.NewStyle().PaddingLeft(2).Render(formattedInfo))
@@ -92,7 +93,7 @@ func ModelInfo(t *styles.Styles, modelName, providerName, reasoningInfo string,
93// formatTokensAndCost formats token usage and cost with appropriate units
94// formatTokensAndCost formats token usage and cost with appropriate units
94// (K/M) and percentage of context window.
95// (K/M) and percentage of context window.
95−func formatTokensAndCost(t *styles.Styles, tokens, contextWindow int64, cost float64) string {
96+func formatTokensAndCost(t *styles.Styles, tokens, contextWindow int64, cost float64, estimated bool) string {
96 var formattedTokens string
97 var formattedTokens string
98 case tokens >= 1_000_000:
99 case tokens >= 1_000_000:
@@ -115,7 +116,11 @@ func formatTokensAndCost(t *styles.Styles, tokens, contextWindow int64, cost flo
115 formattedCost := t.ModelInfo.Cost.Render(fmt.Sprintf("$%.2f", cost))
116 formattedCost := t.ModelInfo.Cost.Render(fmt.Sprintf("$%.2f", cost))
117 formattedTokens = t.ModelInfo.TokenCount.Render(fmt.Sprintf("(%s)", formattedTokens))
118 formattedTokens = t.ModelInfo.TokenCount.Render(fmt.Sprintf("(%s)", formattedTokens))
118− formattedPercentage := t.ModelInfo.TokenPercentage.Render(fmt.Sprintf("%d%%", int(percentage)))
119+ percentageText := fmt.Sprintf("%d%%", int(percentage))
121+ percentageText = t.ModelInfo.EstimatedUsagePrefix.Render("~") + percentageText
123+ formattedPercentage := t.ModelInfo.TokenPercentage.Render(percentageText)
119 formattedTokens = fmt.Sprintf("%s %s", formattedPercentage, formattedTokens)
124 formattedTokens = fmt.Sprintf("%s %s", formattedPercentage, formattedTokens)
120 if percentage > 80 {
125 if percentage > 80 {
121 formattedTokens = fmt.Sprintf("%s %s", styles.LSPWarningIcon, formattedTokens)
126 formattedTokens = fmt.Sprintf("%s %s", styles.LSPWarningIcon, formattedTokens)