mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-12 18:11:34 +08:00
108 lines
2.1 KiB
Go
108 lines
2.1 KiB
Go
package model_runtime
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/APIParkLab/APIPark/ai-provider/model-runtime/entity"
|
|
"gopkg.in/yaml.v3"
|
|
"strconv"
|
|
)
|
|
|
|
type IModel interface {
|
|
ID() string
|
|
Logo() string
|
|
IConfig
|
|
}
|
|
|
|
type Model struct {
|
|
id string
|
|
logo string
|
|
//defaultConfig string
|
|
IConfig
|
|
//validator IParamValidator
|
|
}
|
|
|
|
func (m *Model) ID() string {
|
|
return m.id
|
|
}
|
|
|
|
func (m *Model) Logo() string {
|
|
return m.logo
|
|
}
|
|
|
|
func NewModel(data string, logo string) (IModel, error) {
|
|
var cfg entity.AIModel
|
|
err := yaml.Unmarshal([]byte(data), &cfg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
params := make(ParamValidator, 0, len(cfg.ParameterRules))
|
|
defaultConfig := make(map[string]interface{})
|
|
for _, p := range cfg.ParameterRules {
|
|
t := p.Type
|
|
if t == "" {
|
|
t = ParameterTypeStr
|
|
}
|
|
switch t {
|
|
case ParameterTypeInt:
|
|
switch t := p.Default.(type) {
|
|
case int:
|
|
defaultConfig[p.Name] = t
|
|
case float64:
|
|
defaultConfig[p.Name] = int(t)
|
|
default:
|
|
defaultConfig[p.Name] = 0
|
|
}
|
|
case ParameterTypeStr:
|
|
switch t := p.Default.(type) {
|
|
case int:
|
|
defaultConfig[p.Name] = t
|
|
case float64:
|
|
defaultConfig[p.Name] = int(t)
|
|
case string:
|
|
defaultConfig[p.Name] = t
|
|
case bool:
|
|
defaultConfig[p.Name] = strconv.FormatBool(t)
|
|
default:
|
|
defaultConfig[p.Name] = ""
|
|
}
|
|
case ParameterTypeFloat:
|
|
switch t := p.Default.(type) {
|
|
case int:
|
|
defaultConfig[p.Name] = float64(t)
|
|
case float64:
|
|
defaultConfig[p.Name] = t
|
|
default:
|
|
defaultConfig[p.Name] = float64(0)
|
|
}
|
|
case ParameterTypeBool:
|
|
switch t := p.Default.(type) {
|
|
case bool:
|
|
defaultConfig[p.Name] = t
|
|
case string:
|
|
defaultConfig[p.Name] = t == "true"
|
|
default:
|
|
defaultConfig[p.Name] = false
|
|
}
|
|
default:
|
|
continue
|
|
}
|
|
params = append(params, Param{
|
|
Name: p.Name,
|
|
Default: p.Default,
|
|
Type: t,
|
|
Min: p.Min,
|
|
Max: p.Max,
|
|
Required: p.Required,
|
|
})
|
|
}
|
|
dCfg, err := json.MarshalIndent(defaultConfig, "", " ")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &Model{
|
|
id: cfg.Model,
|
|
logo: logo,
|
|
IConfig: NewConfig(string(dCfg), params),
|
|
}, nil
|
|
}
|