fix: #1054 Add model mapping to abilities

- Update Abilities model to include model mapping key
- Parse model mapping in Channel model and filter models by model mapping in Update function
This commit is contained in:
Laisky.Cai 2024-02-29 08:58:54 +00:00
parent b747cdbc6f
commit f564245e34
4 changed files with 36 additions and 4 deletions

View File

@ -16,7 +16,7 @@ import (
)
// Regex to match data URL pattern
var dataURLPattern = regexp.MustCompile(`data:image/([^;]+);base64,(.*)`)
var dataURLPattern = regexp.MustCompile(`data:image/([^;]+);base64,(.*)`)
func IsImageUrl(url string) (bool, error) {
resp, err := http.Head(url)

View File

@ -60,7 +60,7 @@ func Relay(c *gin.Context) {
for i := retryTimes; i > 0; i-- {
channel, err := dbmodel.CacheGetRandomSatisfiedChannel(group, originalModel)
if err != nil {
logger.Errorf(ctx, "CacheGetRandomSatisfiedChannel failed: %w", err)
logger.Errorf(ctx, "CacheGetRandomSatisfiedChannel failed: %v", err)
break
}
logger.Infof(ctx, "using channel #%d to retry (remain times %d)", channel.Id, i)

View File

@ -55,6 +55,21 @@ func (channel *Channel) AddAbilities() error {
abilities = append(abilities, ability)
}
}
// add keys of model mapping to abilities
for model := range channel.GetModelMapping() {
for _, group := range groups_ {
ability := Ability{
Group: group,
Model: model,
ChannelId: channel.Id,
Enabled: channel.Status == common.ChannelStatusEnabled,
Priority: channel.Priority,
}
abilities = append(abilities, ability)
}
}
return DB.Create(&abilities).Error
}

View File

@ -3,6 +3,8 @@ package model
import (
"encoding/json"
"fmt"
"strings"
"github.com/songquanpeng/one-api/common"
"github.com/songquanpeng/one-api/common/config"
"github.com/songquanpeng/one-api/common/helper"
@ -115,8 +117,23 @@ func (channel *Channel) Insert() error {
return err
}
func (channel *Channel) Update() error {
var err error
func (channel *Channel) Update() (err error) {
// https://github.com/songquanpeng/one-api/issues/1054
// for compatability, filter models by model-mapping.
mapping := channel.GetModelMapping()
if len(mapping) != 0 {
models := strings.Split(channel.Models, ",")
var filteredModels []string
for _, model := range models {
if _, ok := mapping[model]; !ok {
filteredModels = append(filteredModels, model)
}
}
channel.Models = strings.Join(filteredModels, ",")
}
// update
err = DB.Model(channel).Updates(channel).Error
if err != nil {
return err