| 413 | } |
| 414 | |
| 415 | func (i *imlProviderModule) UnConfiguredProviders(ctx context.Context) ([]*ai_dto.ProviderItem, error) { |
| 416 | list, err := i.providerService.List(ctx) |
| 417 | if err != nil { |
| 418 | return nil, err |
| 419 | } |
| 420 | providers := model_runtime.Providers() |
| 421 | providerMap := utils.SliceToMap(list, func(e *ai.Provider) string { |
| 422 | return e.Id |
| 423 | }) |
| 424 | items := make([]*ai_dto.ProviderItem, 0, len(providers)) |
| 425 | for _, v := range providers { |
| 426 | if _, has := providerMap[v.ID()]; has { |
| 427 | // 已配置,跳过 |
| 428 | continue |
| 429 | } |
| 430 | defaultLLMID := "" |
| 431 | defaultLLM, _ := v.DefaultModel(model_runtime.ModelTypeLLM) |
| 432 | if defaultLLM != nil { |
| 433 | defaultLLMID = defaultLLM.ID() |
| 434 | } |
| 435 | item := &ai_dto.ProviderItem{ |
| 436 | Id: v.ID(), |
| 437 | Name: v.Name(), |
| 438 | Logo: v.Logo(), |
| 439 | DefaultLLM: defaultLLMID, |
| 440 | Sort: v.Sort(), |
| 441 | } |
| 442 | items = append(items, item) |
| 443 | } |
| 444 | sort.Slice(items, func(i, j int) bool { |
| 445 | if items[i].Sort != items[j].Sort { |
| 446 | if items[i].Sort == 0 { |
| 447 | return false |
| 448 | } |
| 449 | if items[j].Sort == 0 { |
| 450 | return true |
| 451 | } |
| 452 | return items[i].Sort < items[j].Sort |
| 453 | } |
| 454 | return items[i].Name < items[j].Name |
| 455 | }) |
| 456 | return items, nil |
| 457 | } |
| 458 | |
| 459 | func (i *imlProviderModule) Provider(ctx context.Context, id string) (*ai_dto.Provider, error) { |
| 460 | p, has := model_runtime.GetProvider(id) |