ListConfiguredModels returns a model catalog from enabled DB-backed model configs. The second return value reports whether DB-backed models were used.
(
configuredProviders []ConfiguredProvider,
configuredModels []ConfiguredModel,
availabilityByProvider map[string]ProviderAvailability,
enabledProviders map[string]struct{},
)
| 422 | // ListConfiguredModels returns a model catalog from enabled DB-backed model |
| 423 | // configs. The second return value reports whether DB-backed models were used. |
| 424 | func (*ModelCatalog) ListConfiguredModels( |
| 425 | configuredProviders []ConfiguredProvider, |
| 426 | configuredModels []ConfiguredModel, |
| 427 | availabilityByProvider map[string]ProviderAvailability, |
| 428 | enabledProviders map[string]struct{}, |
| 429 | ) (codersdk.ChatModelsResponse, bool) { |
| 430 | if len(configuredModels) == 0 { |
| 431 | return codersdk.ChatModelsResponse{}, false |
| 432 | } |
| 433 | |
| 434 | modelsByProvider := make(map[string][]codersdk.ChatModel) |
| 435 | seenByProvider := make(map[string]map[string]struct{}) |
| 436 | providerSet := make(map[string]struct{}) |
| 437 | |
| 438 | for _, provider := range configuredProviders { |
| 439 | normalized := NormalizeProvider(provider.Provider) |
| 440 | if normalized == "" { |
| 441 | continue |
| 442 | } |
| 443 | providerSet[normalized] = struct{}{} |
| 444 | } |
| 445 | |
| 446 | for _, model := range configuredModels { |
| 447 | provider, modelID, err := ResolveModelWithProviderHint(model.Model, model.Provider) |
| 448 | if err != nil { |
| 449 | continue |
| 450 | } |
| 451 | |
| 452 | providerSet[provider] = struct{}{} |
| 453 | if seenByProvider[provider] == nil { |
| 454 | seenByProvider[provider] = make(map[string]struct{}) |
| 455 | } |
| 456 | normalizedModelID := strings.ToLower(strings.TrimSpace(modelID)) |
| 457 | if _, ok := seenByProvider[provider][normalizedModelID]; ok { |
| 458 | continue |
| 459 | } |
| 460 | seenByProvider[provider][normalizedModelID] = struct{}{} |
| 461 | modelsByProvider[provider] = append( |
| 462 | modelsByProvider[provider], |
| 463 | newChatModel(provider, modelID, model.DisplayName), |
| 464 | ) |
| 465 | } |
| 466 | |
| 467 | providers := orderProviders(providerSet) |
| 468 | if len(providers) == 0 { |
| 469 | return codersdk.ChatModelsResponse{}, false |
| 470 | } |
| 471 | |
| 472 | response := codersdk.ChatModelsResponse{ |
| 473 | Providers: make([]codersdk.ChatModelProvider, 0, len(providers)), |
| 474 | } |
| 475 | for _, provider := range providers { |
| 476 | if _, ok := enabledProviders[provider]; !ok { |
| 477 | continue |
| 478 | } |
| 479 | |
| 480 | models := modelsByProvider[provider] |
| 481 | sortChatModels(models) |