| 3600 | } |
| 3601 | |
| 3602 | func (p *Server) resolveManualTitleModel( |
| 3603 | ctx context.Context, |
| 3604 | store database.Store, |
| 3605 | chat database.Chat, |
| 3606 | keys chatprovider.ProviderAPIKeys, |
| 3607 | modelOpts modelBuildOptions, |
| 3608 | ) (fantasy.LanguageModel, database.ChatModelConfig, chatprovider.ProviderAPIKeys, error) { |
| 3609 | overrideConfig, overrideModel, overrideKeys, _, overrideSet, overrideErr := p.resolveTitleGenerationModelOverride( |
| 3610 | ctx, |
| 3611 | chat, |
| 3612 | keys, |
| 3613 | modelOpts, |
| 3614 | ) |
| 3615 | if overrideErr != nil { |
| 3616 | if overrideSet { |
| 3617 | return nil, database.ChatModelConfig{}, chatprovider.ProviderAPIKeys{}, xerrors.Errorf( |
| 3618 | "resolve manual title generation model override: %w", |
| 3619 | overrideErr, |
| 3620 | ) |
| 3621 | } |
| 3622 | p.logger.Debug(ctx, "failed to resolve title generation model override for manual title", |
| 3623 | slog.F("chat_id", chat.ID), |
| 3624 | slog.Error(overrideErr), |
| 3625 | ) |
| 3626 | } else if overrideSet { |
| 3627 | return overrideModel, overrideConfig, overrideKeys, nil |
| 3628 | } |
| 3629 | |
| 3630 | configs, err := store.GetEnabledChatModelConfigs(ctx) |
| 3631 | if err != nil { |
| 3632 | p.logger.Debug(ctx, "failed to list manual title model configs", |
| 3633 | slog.F("chat_id", chat.ID), |
| 3634 | slog.Error(err), |
| 3635 | ) |
| 3636 | return p.resolveFallbackManualTitleModel(ctx, chat, keys, modelOpts) |
| 3637 | } |
| 3638 | |
| 3639 | config, ok := selectPreferredConfiguredShortTextModelConfig(configs) |
| 3640 | if !ok { |
| 3641 | return p.resolveFallbackManualTitleModel(ctx, chat, keys, modelOpts) |
| 3642 | } |
| 3643 | |
| 3644 | route, err := p.resolveModelRouteForConfig(ctx, chat.OwnerID, config, keys) |
| 3645 | if err != nil { |
| 3646 | p.logger.Debug(ctx, "manual title preferred model unavailable", |
| 3647 | slog.F("chat_id", chat.ID), |
| 3648 | slog.F("provider", config.Provider), |
| 3649 | slog.F("model", config.Model), |
| 3650 | slog.Error(err), |
| 3651 | ) |
| 3652 | return p.resolveFallbackManualTitleModel(ctx, chat, keys, modelOpts) |
| 3653 | } |
| 3654 | model, err := p.newModel(ctx, modelClientRequest{ |
| 3655 | Chat: chat, |
| 3656 | ModelName: config.Model, |
| 3657 | UserAgent: chatprovider.UserAgent(), |
| 3658 | ExtraHeaders: chatprovider.CoderHeaders(chat), |
| 3659 | }, route, modelOpts) |