| 8581 | } |
| 8582 | |
| 8583 | func (p *Server) resolveChatModel( |
| 8584 | ctx context.Context, |
| 8585 | chat database.Chat, |
| 8586 | modelOpts modelBuildOptions, |
| 8587 | ) ( |
| 8588 | model fantasy.LanguageModel, |
| 8589 | dbConfig database.ChatModelConfig, |
| 8590 | keys chatprovider.ProviderAPIKeys, |
| 8591 | route resolvedModelRoute, |
| 8592 | debugEnabled bool, |
| 8593 | resolvedProvider string, |
| 8594 | resolvedModel string, |
| 8595 | err error, |
| 8596 | ) { |
| 8597 | dbConfig, err = p.resolveModelConfig(ctx, chat) |
| 8598 | if err != nil { |
| 8599 | return nil, database.ChatModelConfig{}, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, false, "", "", xerrors.Errorf("resolve model config: %w", err) |
| 8600 | } |
| 8601 | |
| 8602 | if !dbConfig.Enabled { |
| 8603 | return nil, database.ChatModelConfig{}, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, false, "", "", xerrors.Errorf("chat model config %s is disabled", dbConfig.ID) |
| 8604 | } |
| 8605 | |
| 8606 | route, err = p.resolveModelRouteForConfig(ctx, chat.OwnerID, dbConfig, chatprovider.ProviderAPIKeys{}) |
| 8607 | if err != nil { |
| 8608 | return nil, database.ChatModelConfig{}, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, false, "", "", err |
| 8609 | } |
| 8610 | keys = route.directProviderKeys() |
| 8611 | |
| 8612 | providerHint, err := route.providerHint() |
| 8613 | if err != nil { |
| 8614 | return nil, database.ChatModelConfig{}, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, false, "", "", err |
| 8615 | } |
| 8616 | resolvedProvider, resolvedModel, err = chatprovider.ResolveModelWithProviderHint( |
| 8617 | dbConfig.Model, |
| 8618 | providerHint, |
| 8619 | ) |
| 8620 | if err != nil { |
| 8621 | return nil, database.ChatModelConfig{}, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, false, "", "", xerrors.Errorf( |
| 8622 | "resolve model metadata: %w", err, |
| 8623 | ) |
| 8624 | } |
| 8625 | |
| 8626 | model, debugEnabled, err = p.newDebugAwareModel(ctx, modelClientRequest{ |
| 8627 | Chat: chat, |
| 8628 | ModelName: dbConfig.Model, |
| 8629 | UserAgent: chatprovider.UserAgent(), |
| 8630 | ExtraHeaders: chatprovider.CoderHeaders(chat), |
| 8631 | }, route, modelOpts) |
| 8632 | if err != nil { |
| 8633 | return nil, database.ChatModelConfig{}, chatprovider.ProviderAPIKeys{}, resolvedModelRoute{}, false, "", "", xerrors.Errorf( |
| 8634 | "create model: %w", err, |
| 8635 | ) |
| 8636 | } |
| 8637 | return model, dbConfig, keys, route, debugEnabled, resolvedProvider, resolvedModel, nil |
| 8638 | } |
| 8639 | |
| 8640 | func (p *Server) aiProviderConfig(ctx context.Context, provider database.AIProvider) (chatprovider.ConfiguredProvider, error) { |