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:
parent
b747cdbc6f
commit
f564245e34
@ -16,7 +16,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Regex to match data URL pattern
|
// 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) {
|
func IsImageUrl(url string) (bool, error) {
|
||||||
resp, err := http.Head(url)
|
resp, err := http.Head(url)
|
||||||
|
@ -60,7 +60,7 @@ func Relay(c *gin.Context) {
|
|||||||
for i := retryTimes; i > 0; i-- {
|
for i := retryTimes; i > 0; i-- {
|
||||||
channel, err := dbmodel.CacheGetRandomSatisfiedChannel(group, originalModel)
|
channel, err := dbmodel.CacheGetRandomSatisfiedChannel(group, originalModel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf(ctx, "CacheGetRandomSatisfiedChannel failed: %w", err)
|
logger.Errorf(ctx, "CacheGetRandomSatisfiedChannel failed: %v", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
logger.Infof(ctx, "using channel #%d to retry (remain times %d)", channel.Id, i)
|
logger.Infof(ctx, "using channel #%d to retry (remain times %d)", channel.Id, i)
|
||||||
|
@ -55,6 +55,21 @@ func (channel *Channel) AddAbilities() error {
|
|||||||
abilities = append(abilities, ability)
|
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
|
return DB.Create(&abilities).Error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@ package model
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/songquanpeng/one-api/common"
|
"github.com/songquanpeng/one-api/common"
|
||||||
"github.com/songquanpeng/one-api/common/config"
|
"github.com/songquanpeng/one-api/common/config"
|
||||||
"github.com/songquanpeng/one-api/common/helper"
|
"github.com/songquanpeng/one-api/common/helper"
|
||||||
@ -115,8 +117,23 @@ func (channel *Channel) Insert() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (channel *Channel) Update() error {
|
func (channel *Channel) Update() (err error) {
|
||||||
var 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
|
err = DB.Model(channel).Updates(channel).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Loading…
Reference in New Issue
Block a user