on main help sign in
Merge pull request #557 from charmbracelet/change-summarize-model

fix: summarize provider should be large

commitfac2d43536d7abbdae730ff0745f02b8833e44b3 authorKujtim Hoxha <kujtimii.h@gmail.com> dateMon 4 Aug 2025, 23:17 (1 year ago) parent123b19c7c6e39d
1 file changed+37−31
internal/llm/agent/agent.go+37−31
internal/llm/agent/agent.go+37−31
@@ -159,11 +159,12 @@ func NewAgent(
159159 if err != nil {
160160 return nil, err
161161 }
162+
162163 summarizeOpts := []provider.ProviderClientOption{
163− provider.WithModel(config.SelectedModelTypeSmall),
164− provider.WithSystemMessage(prompt.GetPrompt(prompt.PromptSummarizer, smallModelProviderCfg.ID)),
164+ provider.WithModel(config.SelectedModelTypeLarge),
165+ provider.WithSystemMessage(prompt.GetPrompt(prompt.PromptSummarizer, providerCfg.ID)),
165166 }
166− summarizeProvider, err := provider.NewProvider(*smallModelProviderCfg, summarizeOpts...)
167+ summarizeProvider, err := provider.NewProvider(*providerCfg, summarizeOpts...)
167168 if err != nil {
168169 return nil, err
169170 }
@@ -224,7 +225,7 @@ func NewAgent(
224225 sessions: sessions,
225226 titleProvider: titleProvider,
226227 summarizeProvider: summarizeProvider,
227− summarizeProviderID: string(smallModelProviderCfg.ID),
228+ summarizeProviderID: string(providerCfg.ID),
228229 activeRequests: csync.NewMap[string, context.CancelFunc](),
229230 tools: csync.NewLazySlice(toolFn),
230231 }, nil
@@ -904,54 +905,59 @@ func (a *agent) UpdateModel() error {
904905 a.providerID = string(currentProviderCfg.ID)
905906 }
906907
907− // Check if small model provider has changed (affects title and summarize providers)
908+ // Check if providers have changed for title (small) and summarize (large)
908909 smallModelCfg := cfg.Models[config.SelectedModelTypeSmall]
909910 var smallModelProviderCfg config.ProviderConfig
910−
911911 for p := range cfg.Providers.Seq() {
912912 if p.ID == smallModelCfg.Provider {
913913 smallModelProviderCfg = p
914914 break
915915 }
916916 }
917−
918917 if smallModelProviderCfg.ID == "" {
919918 return fmt.Errorf("provider %s not found in config", smallModelCfg.Provider)
920919 }
921920
922− // Check if summarize provider has changed
923− if string(smallModelProviderCfg.ID) != a.summarizeProviderID {
924− smallModel := cfg.GetModelByType(config.SelectedModelTypeSmall)
925− if smallModel == nil {
926− return fmt.Errorf("model %s not found in provider %s", smallModelCfg.Model, smallModelProviderCfg.ID)
921+ largeModelCfg := cfg.Models[config.SelectedModelTypeLarge]
922+ var largeModelProviderCfg config.ProviderConfig
923+ for p := range cfg.Providers.Seq() {
924+ if p.ID == largeModelCfg.Provider {
925+ largeModelProviderCfg = p
926+ break
927927 }
928+ }
929+ if largeModelProviderCfg.ID == "" {
930+ return fmt.Errorf("provider %s not found in config", largeModelCfg.Provider)
931+ }
928932
929− // Recreate title provider
930− titleOpts := []provider.ProviderClientOption{
931− provider.WithModel(config.SelectedModelTypeSmall),
932− provider.WithSystemMessage(prompt.GetPrompt(prompt.PromptTitle, smallModelProviderCfg.ID)),
933− // We want the title to be short, so we limit the max tokens
934− provider.WithMaxTokens(40),
935− }
936− newTitleProvider, err := provider.NewProvider(smallModelProviderCfg, titleOpts...)
937− if err != nil {
938− return fmt.Errorf("failed to create new title provider: %w", err)
939− }
933+ // Recreate title provider
934+ titleOpts := []provider.ProviderClientOption{
935+ provider.WithModel(config.SelectedModelTypeSmall),
936+ provider.WithSystemMessage(prompt.GetPrompt(prompt.PromptTitle, smallModelProviderCfg.ID)),
937+ provider.WithMaxTokens(40),
938+ }
939+ newTitleProvider, err := provider.NewProvider(smallModelProviderCfg, titleOpts...)
940+ if err != nil {
941+ return fmt.Errorf("failed to create new title provider: %w", err)
942+ }
943+ a.titleProvider = newTitleProvider
940944
941− // Recreate summarize provider
945+ // Recreate summarize provider if provider changed (now large model)
946+ if string(largeModelProviderCfg.ID) != a.summarizeProviderID {
947+ largeModel := cfg.GetModelByType(config.SelectedModelTypeLarge)
948+ if largeModel == nil {
949+ return fmt.Errorf("model %s not found in provider %s", largeModelCfg.Model, largeModelProviderCfg.ID)
950+ }
942951 summarizeOpts := []provider.ProviderClientOption{
943− provider.WithModel(config.SelectedModelTypeSmall),
944− provider.WithSystemMessage(prompt.GetPrompt(prompt.PromptSummarizer, smallModelProviderCfg.ID)),
952+ provider.WithModel(config.SelectedModelTypeLarge),
953+ provider.WithSystemMessage(prompt.GetPrompt(prompt.PromptSummarizer, largeModelProviderCfg.ID)),
945954 }
946− newSummarizeProvider, err := provider.NewProvider(smallModelProviderCfg, summarizeOpts...)
955+ newSummarizeProvider, err := provider.NewProvider(largeModelProviderCfg, summarizeOpts...)
947956 if err != nil {
948957 return fmt.Errorf("failed to create new summarize provider: %w", err)
949958 }
950−
951− // Update the providers and provider ID
952− a.titleProvider = newTitleProvider
953959 a.summarizeProvider = newSummarizeProvider
954− a.summarizeProviderID = string(smallModelProviderCfg.ID)
960+ a.summarizeProviderID = string(largeModelProviderCfg.ID)
955961 }
956962
957963 return nil