feat: add API endpoint to retrieve model configuration template

Introduce a new interface for fetching model configuration templates to enhance model management flexibility.
This commit is contained in:
sunanzhi
2025-03-07 11:15:49 +08:00
parent b8e9b87c88
commit 56289058fc
7 changed files with 39 additions and 6 deletions
+2 -3
View File
@@ -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
}
+1
View File
@@ -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() {
+4
View File
@@ -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")
+7
View File
@@ -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"`
}
+23 -3
View File
@@ -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")
+1
View File
@@ -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() {
+1
View File
@@ -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),
}