diff --git a/controller/ai/controller.go b/controller/ai/controller.go index 14a2822a..581425d9 100644 --- a/controller/ai/controller.go +++ b/controller/ai/controller.go @@ -3,18 +3,16 @@ package ai import ( "reflect" - "github.com/eolinker/go-common/auto" - ai_dto "github.com/APIParkLab/APIPark/module/ai/dto" "github.com/eolinker/go-common/autowire" "github.com/gin-gonic/gin" ) type IProviderController interface { - ConfiguredProviders(ctx *gin.Context) ([]*ai_dto.ConfiguredProviderItem, *auto.Label, error) + ConfiguredProviders(ctx *gin.Context) ([]*ai_dto.ConfiguredProviderItem, *ai_dto.BackupProvider, error) UnConfiguredProviders(ctx *gin.Context) ([]*ai_dto.ProviderItem, error) SimpleProviders(ctx *gin.Context) ([]*ai_dto.SimpleProviderItem, error) - SimpleConfiguredProviders(ctx *gin.Context) ([]*ai_dto.SimpleProviderItem, error) + SimpleConfiguredProviders(ctx *gin.Context) ([]*ai_dto.SimpleProviderItem, *ai_dto.BackupProvider, error) Provider(ctx *gin.Context, id string) (*ai_dto.Provider, error) SimpleProvider(ctx *gin.Context, id string) (*ai_dto.SimpleProvider, error) LLMs(ctx *gin.Context, driver string) ([]*ai_dto.LLMItem, *ai_dto.ProviderItem, error) diff --git a/controller/ai/iml.go b/controller/ai/iml.go index 019a6564..5c526785 100644 --- a/controller/ai/iml.go +++ b/controller/ai/iml.go @@ -6,7 +6,6 @@ import ( "github.com/APIParkLab/APIPark/module/ai" ai_dto "github.com/APIParkLab/APIPark/module/ai/dto" - "github.com/eolinker/go-common/auto" "github.com/gin-gonic/gin" ) @@ -22,7 +21,7 @@ func (i *imlProviderController) Sort(ctx *gin.Context, input *ai_dto.Sort) error return i.module.Sort(ctx, input) } -func (i *imlProviderController) ConfiguredProviders(ctx *gin.Context) ([]*ai_dto.ConfiguredProviderItem, *auto.Label, error) { +func (i *imlProviderController) ConfiguredProviders(ctx *gin.Context) ([]*ai_dto.ConfiguredProviderItem, *ai_dto.BackupProvider, error) { return i.module.ConfiguredProviders(ctx) } @@ -34,7 +33,7 @@ func (i *imlProviderController) SimpleProviders(ctx *gin.Context) ([]*ai_dto.Sim return i.module.SimpleProviders(ctx) } -func (i *imlProviderController) SimpleConfiguredProviders(ctx *gin.Context) ([]*ai_dto.SimpleProviderItem, error) { +func (i *imlProviderController) SimpleConfiguredProviders(ctx *gin.Context) ([]*ai_dto.SimpleProviderItem, *ai_dto.BackupProvider, error) { return i.module.SimpleConfiguredProviders(ctx) } diff --git a/module/ai/dto/output.go b/module/ai/dto/output.go index bfb8ef09..8895be8e 100644 --- a/module/ai/dto/output.go +++ b/module/ai/dto/output.go @@ -56,9 +56,16 @@ type SimpleProviderItem struct { Configured bool `json:"configured"` DefaultConfig string `json:"default_config"` Status ProviderStatus `json:"status"` + Model *BasicInfo `json:"model,omitempty"` Priority int `json:"-"` } +type BackupProvider struct { + Id string `json:"id"` + Name string `json:"name"` + Model *BasicInfo `json:"model,omitempty"` +} + type LLMItem struct { Id string `json:"id"` Logo string `json:"logo"` diff --git a/module/ai/iml.go b/module/ai/iml.go index 10009114..0eacef1d 100644 --- a/module/ai/iml.go +++ b/module/ai/iml.go @@ -102,7 +102,7 @@ func (i *imlProviderModule) Sort(ctx context.Context, input *ai_dto.Sort) error }) } -func (i *imlProviderModule) ConfiguredProviders(ctx context.Context) ([]*ai_dto.ConfiguredProviderItem, *auto.Label, error) { +func (i *imlProviderModule) ConfiguredProviders(ctx context.Context) ([]*ai_dto.ConfiguredProviderItem, *ai_dto.BackupProvider, error) { // 获取已配置的AI服务商 list, err := i.providerService.List(ctx) if err != nil { @@ -184,10 +184,10 @@ func (i *imlProviderModule) ConfiguredProviders(ctx context.Context) ([]*ai_dto. } return providers[i].Name < providers[j].Name }) - var backup *auto.Label + var backup *ai_dto.BackupProvider for _, p := range providers { if p.Status == ai_dto.ProviderEnabled { - backup = &auto.Label{ + backup = &ai_dto.BackupProvider{ Id: p.Id, Name: p.Name, } @@ -238,17 +238,25 @@ func (i *imlProviderModule) SimpleProviders(ctx context.Context) ([]*ai_dto.Simp return items, nil } -func (i *imlProviderModule) SimpleConfiguredProviders(ctx context.Context) ([]*ai_dto.SimpleProviderItem, error) { +func (i *imlProviderModule) SimpleConfiguredProviders(ctx context.Context) ([]*ai_dto.SimpleProviderItem, *ai_dto.BackupProvider, error) { list, err := i.providerService.List(ctx) if err != nil { - return nil, err + return nil, nil, err } items := make([]*ai_dto.SimpleProviderItem, 0, len(list)) + var backup *ai_dto.BackupProvider for _, l := range list { p, has := model_runtime.GetProvider(l.Id) if !has { continue } + model, has := p.GetModel(l.DefaultLLM) + if !has { + model, has = p.DefaultModel(model_runtime.ModelTypeLLM) + if !has { + continue + } + } item := &ai_dto.SimpleProviderItem{ Id: l.Id, Name: l.Name, @@ -257,6 +265,10 @@ func (i *imlProviderModule) SimpleConfiguredProviders(ctx context.Context) ([]*a Status: ai_dto.ToProviderStatus(l.Status), Priority: l.Priority, Configured: true, + Model: &ai_dto.BasicInfo{ + Id: model.ID(), + Name: model.ID(), + }, } items = append(items, item) @@ -273,7 +285,17 @@ func (i *imlProviderModule) SimpleConfiguredProviders(ctx context.Context) ([]*a } return items[i].Name < items[j].Name }) - return items, nil + for _, item := range items { + if item.Status == ai_dto.ProviderEnabled { + backup = &ai_dto.BackupProvider{ + Id: item.Id, + Name: item.Name, + Model: item.Model, + } + break + } + } + return items, backup, nil } func (i *imlProviderModule) UnConfiguredProviders(ctx context.Context) ([]*ai_dto.ProviderItem, error) { diff --git a/module/ai/module.go b/module/ai/module.go index b5387dd6..f9682700 100644 --- a/module/ai/module.go +++ b/module/ai/module.go @@ -4,18 +4,16 @@ import ( "context" "reflect" - "github.com/eolinker/go-common/auto" - "github.com/APIParkLab/APIPark/gateway" ai_dto "github.com/APIParkLab/APIPark/module/ai/dto" "github.com/eolinker/go-common/autowire" ) type IProviderModule interface { - ConfiguredProviders(ctx context.Context) ([]*ai_dto.ConfiguredProviderItem, *auto.Label, error) + ConfiguredProviders(ctx context.Context) ([]*ai_dto.ConfiguredProviderItem, *ai_dto.BackupProvider, error) UnConfiguredProviders(ctx context.Context) ([]*ai_dto.ProviderItem, error) SimpleProviders(ctx context.Context) ([]*ai_dto.SimpleProviderItem, error) - SimpleConfiguredProviders(ctx context.Context) ([]*ai_dto.SimpleProviderItem, error) + SimpleConfiguredProviders(ctx context.Context) ([]*ai_dto.SimpleProviderItem, *ai_dto.BackupProvider, error) Provider(ctx context.Context, id string) (*ai_dto.Provider, error) SimpleProvider(ctx context.Context, id string) (*ai_dto.SimpleProvider, error) LLMs(ctx context.Context, driver string) ([]*ai_dto.LLMItem, *ai_dto.ProviderItem, error) diff --git a/plugins/core/ai.go b/plugins/core/ai.go index 572791fb..e42a09db 100644 --- a/plugins/core/ai.go +++ b/plugins/core/ai.go @@ -13,7 +13,7 @@ func (p *plugin) aiAPIs() []pm3.Api { pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/providers/unconfigured", []string{"context"}, []string{"providers"}, p.aiProviderController.UnConfiguredProviders, access.SystemSettingsAiProviderView), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/providers/configured", []string{"context"}, []string{"providers", "backup"}, p.aiProviderController.ConfiguredProviders, access.SystemSettingsAiProviderView), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/ai/providers", []string{"context"}, []string{"providers"}, p.aiProviderController.SimpleProviders), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/ai/providers/configured", []string{"context"}, []string{"providers"}, p.aiProviderController.SimpleConfiguredProviders), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/ai/providers/configured", []string{"context"}, []string{"providers", "backup"}, p.aiProviderController.SimpleConfiguredProviders), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/provider/config", []string{"context", "query:provider"}, []string{"provider"}, p.aiProviderController.Provider, access.SystemSettingsAiProviderView), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/ai/provider", []string{"context", "query:provider"}, []string{"provider"}, p.aiProviderController.SimpleProvider), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/provider/llms", []string{"context", "query:provider"}, []string{"llms", "provider"}, p.aiProviderController.LLMs),