diff --git a/llm/ant/ant.go b/llm/ant/ant.go
index 1dcff4e..92b55f9 100644
--- a/llm/ant/ant.go
+++ b/llm/ant/ant.go
@@ -34,6 +34,26 @@
 	Claude4Opus    = "claude-opus-4-20250514"
 )
 
+// TokenContextWindow returns the maximum token context window size for this service
+func (s *Service) TokenContextWindow() int {
+	model := s.Model
+	if model == "" {
+		model = DefaultModel
+	}
+
+	switch model {
+	case Claude35Sonnet, Claude37Sonnet:
+		return 200000
+	case Claude35Haiku:
+		return 200000
+	case Claude4Sonnet, Claude4Opus:
+		return 200000
+	default:
+		// Default for unknown models
+		return 200000
+	}
+}
+
 // Service provides Claude completions.
 // Fields should not be altered concurrently with calling any method on Service.
 type Service struct {
diff --git a/llm/conversation/convo.go b/llm/conversation/convo.go
index 12c334f..f4ed0bd 100644
--- a/llm/conversation/convo.go
+++ b/llm/conversation/convo.go
@@ -98,6 +98,8 @@
 	mu *sync.Mutex
 	// usage tracks usage for this conversation and all sub-conversations.
 	usage *CumulativeUsage
+	// lastUsage tracks the usage from the most recent API call
+	lastUsage llm.Usage
 }
 
 // newConvoID generates a new 8-byte random id.
@@ -327,6 +329,10 @@
 	// Propagate usage to all ancestors (including us).
 	for x := c; x != nil; x = x.Parent {
 		x.usage.Add(resp.Usage)
+		// Store the most recent usage (only on the current conversation, not ancestors)
+		if x == c {
+			x.lastUsage = resp.Usage
+		}
 	}
 	c.Listener.OnResponse(c.Ctx, c, id, resp)
 	return resp, err
@@ -545,6 +551,16 @@
 	return c.usage.Clone()
 }
 
+// LastUsage returns the usage from the most recent API call
+func (c *Convo) LastUsage() llm.Usage {
+	if c == nil {
+		return llm.Usage{}
+	}
+	c.mu.Lock()
+	defer c.mu.Unlock()
+	return c.lastUsage
+}
+
 func (u *CumulativeUsage) WallTime() time.Duration {
 	return time.Since(u.StartTime)
 }
diff --git a/llm/gem/gem.go b/llm/gem/gem.go
index e5cbcf0..178df68 100644
--- a/llm/gem/gem.go
+++ b/llm/gem/gem.go
@@ -442,6 +442,29 @@
 	}
 }
 
+// TokenContextWindow returns the maximum token context window size for this service
+func (s *Service) TokenContextWindow() int {
+	model := s.Model
+	if model == "" {
+		model = DefaultModel
+	}
+
+	// Gemini models generally have large context windows
+	switch model {
+	case "gemini-2.5-pro-preview-03-25":
+		return 1000000 // 1M tokens for Gemini 2.5 Pro
+	case "gemini-2.0-flash-exp":
+		return 1000000 // 1M tokens for Gemini 2.0 Flash
+	case "gemini-1.5-pro", "gemini-1.5-pro-latest":
+		return 2000000 // 2M tokens for Gemini 1.5 Pro
+	case "gemini-1.5-flash", "gemini-1.5-flash-latest":
+		return 1000000 // 1M tokens for Gemini 1.5 Flash
+	default:
+		// Default for unknown models
+		return 1000000
+	}
+}
+
 // Do sends a request to Gemini.
 func (s *Service) Do(ctx context.Context, ir *llm.Request) (*llm.Response, error) {
 	// Log the incoming request for debugging
diff --git a/llm/llm.go b/llm/llm.go
index 0e14c7f..2aea24e 100644
--- a/llm/llm.go
+++ b/llm/llm.go
@@ -13,6 +13,8 @@
 type Service interface {
 	// Do sends a request to an LLM.
 	Do(context.Context, *Request) (*Response, error)
+	// TokenContextWindow returns the maximum token context window size for this service
+	TokenContextWindow() int
 }
 
 // MustSchema validates that schema is a valid JSON schema and returns it as a json.RawMessage.
diff --git a/llm/oai/oai.go b/llm/oai/oai.go
index 40524f3..840a922 100644
--- a/llm/oai/oai.go
+++ b/llm/oai/oai.go
@@ -627,6 +627,25 @@
 	return dollars
 }
 
+// TokenContextWindow returns the maximum token context window size for this service
+func (s *Service) TokenContextWindow() int {
+	model := cmp.Or(s.Model, DefaultModel)
+
+	// OpenAI models generally have 128k context windows
+	// Some newer models have larger windows, but 128k is a safe default
+	switch model.ModelName {
+	case "gpt-4.1-2025-04-14", "gpt-4.1-mini-2025-04-14", "gpt-4.1-nano-2025-04-14":
+		return 200000 // 200k for newer GPT-4.1 models
+	case "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18":
+		return 128000 // 128k for GPT-4o models
+	case "o3-2025-04-16", "o3-mini-2025-04-16":
+		return 200000 // 200k for O3 models
+	default:
+		// Default for unknown models
+		return 128000
+	}
+}
+
 // Do sends a request to OpenAI using the go-openai package.
 func (s *Service) Do(ctx context.Context, ir *llm.Request) (*llm.Response, error) {
 	// Configure the OpenAI client
