From bc16d7f5ce63e16f1d18344d9f42f6701fcec23b Mon Sep 17 00:00:00 2001 From: sunanzhi Date: Fri, 7 Mar 2025 11:15:49 +0800 Subject: [PATCH] feat: add API endpoint to retrieve model configuration template Introduce a new interface for fetching model configuration templates to enhance model management flexibility. --- ai-provider/model-runtime/model.go | 5 ++--- controller/ai-model/controller.go | 1 + controller/ai-model/iml.go | 4 ++++ module/ai-model/dto/output.go | 7 +++++++ module/ai-model/iml.go | 26 +++++++++++++++++++++++--- module/ai-model/module.go | 1 + plugins/core/ai.go | 1 + 7 files changed, 39 insertions(+), 6 deletions(-) diff --git a/ai-provider/model-runtime/model.go b/ai-provider/model-runtime/model.go index ecdfcd81..9ee7caa6 100644 --- a/ai-provider/model-runtime/model.go +++ b/ai-provider/model-runtime/model.go @@ -3,7 +3,6 @@ package model_runtime import ( "encoding/json" "github.com/APIParkLab/APIPark/ai-provider/model-runtime/entity" - "github.com/APIParkLab/APIPark/common" "gopkg.in/yaml.v3" "strconv" ) @@ -70,14 +69,14 @@ func NewCustomizeModel(id string, name string, logo string, accessConfiguration logo = GetCustomizeLogo() } // handle access_config & model_config - config := common.MergeJSON(accessConfiguration, modelParameters) return &Model{ id: id, name: name, logo: logo, source: "customize", accessConfiguration: accessConfiguration, - IConfig: NewConfig(config, nil), + modelParameters: modelParameters, + IConfig: NewConfig(modelParameters, nil), }, nil } diff --git a/controller/ai-model/controller.go b/controller/ai-model/controller.go index 84cefe5e..e5e7a1e3 100644 --- a/controller/ai-model/controller.go +++ b/controller/ai-model/controller.go @@ -11,6 +11,7 @@ type IProviderModelController interface { AddProviderModel(ctx *gin.Context, provider string, input *model_dto.Model) (*model_dto.SimpleModel, error) UpdateProviderModel(ctx *gin.Context, provider string, input *model_dto.EditModel) error DeleteProviderModel(ctx *gin.Context, provider string, id string) error + GetModelParametersTemplate(ctx *gin.Context) ([]*model_dto.ModelParametersTemplate, error) } func init() { diff --git a/controller/ai-model/iml.go b/controller/ai-model/iml.go index 04d7341a..fcb48134 100644 --- a/controller/ai-model/iml.go +++ b/controller/ai-model/iml.go @@ -17,6 +17,10 @@ type imlProviderModelController struct { module ai_model.IProviderModelModule `autowired:""` } +func (i *imlProviderModelController) GetModelParametersTemplate(ctx *gin.Context) ([]*model_dto.ModelParametersTemplate, error) { + return i.module.GetModelParametersTemplate(ctx) +} + func (i *imlProviderModelController) UpdateProviderModel(ctx *gin.Context, provider string, input *model_dto.EditModel) error { if strings.TrimSpace(input.Name) == "" { return fmt.Errorf("name is empty") diff --git a/module/ai-model/dto/output.go b/module/ai-model/dto/output.go index 936845fc..7ec1f010 100644 --- a/module/ai-model/dto/output.go +++ b/module/ai-model/dto/output.go @@ -4,3 +4,10 @@ type SimpleModel struct { Id string `json:"id"` Name string `json:"name"` } + +type ModelParametersTemplate struct { + Id string `json:"id"` + ProviderName string `json:"provider_name"` + ModelName string `json:"model_name"` + ModelParameters string `json:"model_parameters"` +} diff --git a/module/ai-model/iml.go b/module/ai-model/iml.go index 2196b36e..4a163f8a 100644 --- a/module/ai-model/iml.go +++ b/module/ai-model/iml.go @@ -8,6 +8,7 @@ import ( ai_model "github.com/APIParkLab/APIPark/service/ai-model" "github.com/gin-gonic/gin" "github.com/google/uuid" + "slices" "github.com/eolinker/go-common/store" ) @@ -22,7 +23,26 @@ type imlProviderModelModule struct { transaction store.ITransaction `autowired:""` } -func (i imlProviderModelModule) UpdateProviderModel(ctx *gin.Context, provider string, input *model_dto.EditModel) error { +func (i *imlProviderModelModule) GetModelParametersTemplate(ctx *gin.Context) ([]*model_dto.ModelParametersTemplate, error) { + templates := make([]*model_dto.ModelParametersTemplate, 0) + providerNames := []string{"openai", "google", "anthropic", "deepseek", "tongyi"} + providers := model_runtime.Providers() + for _, provider := range providers { + if slices.Contains(providerNames, provider.ID()) { + defaultModel, _ := provider.DefaultModel(model_runtime.ModelTypeLLM) + templates = append(templates, &model_dto.ModelParametersTemplate{ + Id: provider.ID(), + ProviderName: provider.Name(), + ModelName: defaultModel.Name(), + ModelParameters: defaultModel.DefaultConfig(), + }) + } + } + + return templates, nil +} + +func (i *imlProviderModelModule) UpdateProviderModel(ctx *gin.Context, provider string, input *model_dto.EditModel) error { p, has := model_runtime.GetProvider(provider) if !has { return fmt.Errorf("ai provider not found") @@ -57,7 +77,7 @@ func (i imlProviderModelModule) UpdateProviderModel(ctx *gin.Context, provider s return nil } -func (i imlProviderModelModule) DeleteProviderModel(ctx *gin.Context, provider string, id string) error { +func (i *imlProviderModelModule) DeleteProviderModel(ctx *gin.Context, provider string, id string) error { // check provider exist providerInfo, err := i.providerService.Get(ctx, provider) if err != nil { @@ -73,7 +93,7 @@ func (i imlProviderModelModule) DeleteProviderModel(ctx *gin.Context, provider s return i.providerModelService.Delete(ctx, id) } -func (i imlProviderModelModule) AddProviderModel(ctx *gin.Context, provider string, input *model_dto.Model) (*model_dto.SimpleModel, error) { +func (i *imlProviderModelModule) AddProviderModel(ctx *gin.Context, provider string, input *model_dto.Model) (*model_dto.SimpleModel, error) { p, has := model_runtime.GetProvider(provider) if !has { return nil, fmt.Errorf("ai provider not found") diff --git a/module/ai-model/module.go b/module/ai-model/module.go index 6f9f22d7..71dbe86c 100644 --- a/module/ai-model/module.go +++ b/module/ai-model/module.go @@ -12,6 +12,7 @@ type IProviderModelModule interface { AddProviderModel(ctx *gin.Context, provider string, input *model_dto.Model) (*model_dto.SimpleModel, error) UpdateProviderModel(ctx *gin.Context, provider string, input *model_dto.EditModel) error DeleteProviderModel(ctx *gin.Context, provider string, id string) error + GetModelParametersTemplate(ctx *gin.Context) ([]*model_dto.ModelParametersTemplate, error) } func init() { diff --git a/plugins/core/ai.go b/plugins/core/ai.go index 2cc76219..18d572a4 100644 --- a/plugins/core/ai.go +++ b/plugins/core/ai.go @@ -23,6 +23,7 @@ func (p *plugin) aiAPIs() []pm3.Api { pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/ai/provider/model", []string{"context", "query:provider", "body"}, []string{"model"}, p.aiProviderModelController.AddProviderModel, access.SystemSettingsAiProviderManager), pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai/provider/model", []string{"context", "query:provider", "body"}, nil, p.aiProviderModelController.UpdateProviderModel, access.SystemSettingsAiProviderManager), pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/ai/provider/model", []string{"context", "query:provider", "query:id"}, nil, p.aiProviderModelController.DeleteProviderModel, access.SystemSettingsAiProviderManager), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/provider/model/templates", []string{"context"}, []string{"templates"}, p.aiProviderModelController.GetModelParametersTemplate, access.SystemSettingsAiProviderView), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/apis", []string{"context", "query:keyword", "query:provider", "query:start", "query:end", "query:page", "query:page_size", "query:sort", "query:asc", "query:models", "query:services"}, []string{"apis", "condition", "total"}, p.aiStatisticController.APIs), }