@@ -860,6 +860,44 @@ func GetAgentModel(agentID AgentID) Model {
860860 return Model{}
861861}
862862
863+// GetAgentEffectiveMaxTokens returns the effective max tokens for an agent,
864+// considering any overrides from the preferred model configuration
865+func GetAgentEffectiveMaxTokens(agentID AgentID) int64 {
866+ cfg := Get()
867+ agent, ok := cfg.Agents[agentID]
868+ if !ok {
869+ logging.Error("Agent not found", "agent_id", agentID)
870+ return 0
871+ }
872+
873+ var preferredModel PreferredModel
874+ switch agent.Model {
875+ case LargeModel:
876+ preferredModel = cfg.Models.Large
877+ case SmallModel:
878+ preferredModel = cfg.Models.Small
879+ default:
880+ logging.Warn("Unknown model type for agent", "agent_id", agentID, "model_type", agent.Model)
881+ preferredModel = cfg.Models.Large // Fallback to large model
882+ }
883+
884+ // Get the base model configuration
885+ baseModel := GetAgentModel(agentID)
886+ if baseModel.ID == "" {
887+ return 0
888+ }
889+
890+ // Start with the default max tokens from the base model
891+ maxTokens := baseModel.DefaultMaxTokens
892+
893+ // Override with preferred model max tokens if set
894+ if preferredModel.MaxTokens > 0 {
895+ maxTokens = preferredModel.MaxTokens
896+ }
897+
898+ return maxTokens
899+}
900+
863901func GetAgentProvider(agentID AgentID) ProviderConfig {
864902 cfg := Get()
865903 agent, ok := cfg.Agents[agentID]