Files
APIPark/ai-provider/model-runtime/model.go
T
2024-10-08 12:09:33 +08:00

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
}