mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-22 18:16:37 +08:00
feat: 支持自定义特殊模型补全倍率
This commit is contained in:
parent
ecd06cf2f8
commit
e8800415b8
@ -138,6 +138,12 @@ var DefaultModelPrice = map[string]float64{
|
|||||||
var modelPrice map[string]float64 = nil
|
var modelPrice map[string]float64 = nil
|
||||||
var modelRatio map[string]float64 = nil
|
var modelRatio map[string]float64 = nil
|
||||||
|
|
||||||
|
var CompletionRatio map[string]float64 = nil
|
||||||
|
var DefaultCompletionRatio = map[string]float64{
|
||||||
|
"gpt-4-gizmo-*": 2,
|
||||||
|
"gpt-4-all": 2,
|
||||||
|
}
|
||||||
|
|
||||||
func ModelPrice2JSONString() string {
|
func ModelPrice2JSONString() string {
|
||||||
if modelPrice == nil {
|
if modelPrice == nil {
|
||||||
modelPrice = DefaultModelPrice
|
modelPrice = DefaultModelPrice
|
||||||
@ -202,6 +208,22 @@ func GetModelRatio(name string) float64 {
|
|||||||
return ratio
|
return ratio
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CompletionRatio2JSONString() string {
|
||||||
|
if CompletionRatio == nil {
|
||||||
|
CompletionRatio = DefaultCompletionRatio
|
||||||
|
}
|
||||||
|
jsonBytes, err := json.Marshal(CompletionRatio)
|
||||||
|
if err != nil {
|
||||||
|
SysError("error marshalling completion ratio: " + err.Error())
|
||||||
|
}
|
||||||
|
return string(jsonBytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateCompletionRatioByJSONString(jsonStr string) error {
|
||||||
|
CompletionRatio = make(map[string]float64)
|
||||||
|
return json.Unmarshal([]byte(jsonStr), &CompletionRatio)
|
||||||
|
}
|
||||||
|
|
||||||
func GetCompletionRatio(name string) float64 {
|
func GetCompletionRatio(name string) float64 {
|
||||||
if strings.HasPrefix(name, "gpt-3.5") {
|
if strings.HasPrefix(name, "gpt-3.5") {
|
||||||
if name == "gpt-3.5-turbo" || strings.HasSuffix(name, "0125") {
|
if name == "gpt-3.5-turbo" || strings.HasSuffix(name, "0125") {
|
||||||
@ -214,7 +236,7 @@ func GetCompletionRatio(name string) float64 {
|
|||||||
}
|
}
|
||||||
return 4.0 / 3.0
|
return 4.0 / 3.0
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(name, "gpt-4") {
|
if strings.HasPrefix(name, "gpt-4") && name != "gpt-4-all" && !strings.HasPrefix(name, "gpt-4-gizmo") {
|
||||||
if strings.HasPrefix(name, "gpt-4-turbo") || strings.HasSuffix(name, "preview") {
|
if strings.HasPrefix(name, "gpt-4-turbo") || strings.HasSuffix(name, "preview") {
|
||||||
return 3
|
return 3
|
||||||
}
|
}
|
||||||
@ -248,7 +270,14 @@ func GetCompletionRatio(name string) float64 {
|
|||||||
}
|
}
|
||||||
switch name {
|
switch name {
|
||||||
case "llama2-70b-4096":
|
case "llama2-70b-4096":
|
||||||
return 0.8 / 0.7
|
return 0.8 / 0.64
|
||||||
|
case "llama3-8b-8192":
|
||||||
|
return 2
|
||||||
|
case "llama3-70b-8192":
|
||||||
|
return 0.79 / 0.59
|
||||||
|
}
|
||||||
|
if ratio, ok := CompletionRatio[name]; ok {
|
||||||
|
return ratio
|
||||||
}
|
}
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,7 @@ func InitOptionMap() {
|
|||||||
common.OptionMap["ModelRatio"] = common.ModelRatio2JSONString()
|
common.OptionMap["ModelRatio"] = common.ModelRatio2JSONString()
|
||||||
common.OptionMap["ModelPrice"] = common.ModelPrice2JSONString()
|
common.OptionMap["ModelPrice"] = common.ModelPrice2JSONString()
|
||||||
common.OptionMap["GroupRatio"] = common.GroupRatio2JSONString()
|
common.OptionMap["GroupRatio"] = common.GroupRatio2JSONString()
|
||||||
|
common.OptionMap["CompletionRatio"] = common.CompletionRatio2JSONString()
|
||||||
common.OptionMap["TopUpLink"] = common.TopUpLink
|
common.OptionMap["TopUpLink"] = common.TopUpLink
|
||||||
common.OptionMap["ChatLink"] = common.ChatLink
|
common.OptionMap["ChatLink"] = common.ChatLink
|
||||||
common.OptionMap["ChatLink2"] = common.ChatLink2
|
common.OptionMap["ChatLink2"] = common.ChatLink2
|
||||||
@ -290,6 +291,8 @@ func updateOptionMap(key string, value string) (err error) {
|
|||||||
err = common.UpdateModelRatioByJSONString(value)
|
err = common.UpdateModelRatioByJSONString(value)
|
||||||
case "GroupRatio":
|
case "GroupRatio":
|
||||||
err = common.UpdateGroupRatioByJSONString(value)
|
err = common.UpdateGroupRatioByJSONString(value)
|
||||||
|
case "CompletionRatio":
|
||||||
|
err = common.UpdateCompletionRatioByJSONString(value)
|
||||||
case "ModelPrice":
|
case "ModelPrice":
|
||||||
err = common.UpdateModelPriceByJSONString(value)
|
err = common.UpdateModelPriceByJSONString(value)
|
||||||
case "TopUpLink":
|
case "TopUpLink":
|
||||||
|
@ -20,6 +20,7 @@ const OperationSetting = () => {
|
|||||||
PreConsumedQuota: 0,
|
PreConsumedQuota: 0,
|
||||||
StreamCacheQueueLength: 0,
|
StreamCacheQueueLength: 0,
|
||||||
ModelRatio: '',
|
ModelRatio: '',
|
||||||
|
CompletionRatio: '',
|
||||||
ModelPrice: '',
|
ModelPrice: '',
|
||||||
GroupRatio: '',
|
GroupRatio: '',
|
||||||
TopUpLink: '',
|
TopUpLink: '',
|
||||||
@ -68,6 +69,7 @@ const OperationSetting = () => {
|
|||||||
if (
|
if (
|
||||||
item.key === 'ModelRatio' ||
|
item.key === 'ModelRatio' ||
|
||||||
item.key === 'GroupRatio' ||
|
item.key === 'GroupRatio' ||
|
||||||
|
item.key === 'CompletionRatio' ||
|
||||||
item.key === 'ModelPrice'
|
item.key === 'ModelPrice'
|
||||||
) {
|
) {
|
||||||
item.value = JSON.stringify(JSON.parse(item.value), null, 2);
|
item.value = JSON.stringify(JSON.parse(item.value), null, 2);
|
||||||
@ -157,6 +159,13 @@ const OperationSetting = () => {
|
|||||||
}
|
}
|
||||||
await updateOption('ModelRatio', inputs.ModelRatio);
|
await updateOption('ModelRatio', inputs.ModelRatio);
|
||||||
}
|
}
|
||||||
|
if (originInputs['CompletionRatio'] !== inputs.CompletionRatio) {
|
||||||
|
if (!verifyJSON(inputs.CompletionRatio)) {
|
||||||
|
showError('模型补全倍率不是合法的 JSON 字符串');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await updateOption('CompletionRatio', inputs.CompletionRatio);
|
||||||
|
}
|
||||||
if (originInputs['GroupRatio'] !== inputs.GroupRatio) {
|
if (originInputs['GroupRatio'] !== inputs.GroupRatio) {
|
||||||
if (!verifyJSON(inputs.GroupRatio)) {
|
if (!verifyJSON(inputs.GroupRatio)) {
|
||||||
showError('分组倍率不是合法的 JSON 字符串');
|
showError('分组倍率不是合法的 JSON 字符串');
|
||||||
@ -593,6 +602,17 @@ const OperationSetting = () => {
|
|||||||
placeholder='为一个 JSON 文本,键为模型名称,值为倍率'
|
placeholder='为一个 JSON 文本,键为模型名称,值为倍率'
|
||||||
/>
|
/>
|
||||||
</Form.Group>
|
</Form.Group>
|
||||||
|
<Form.Group widths='equal'>
|
||||||
|
<Form.TextArea
|
||||||
|
label='模型补全倍率(仅对自定义模型有效)'
|
||||||
|
name='CompletionRatio'
|
||||||
|
onChange={handleInputChange}
|
||||||
|
style={{ minHeight: 250, fontFamily: 'JetBrains Mono, Consolas' }}
|
||||||
|
autoComplete='new-password'
|
||||||
|
value={inputs.CompletionRatio}
|
||||||
|
placeholder='为一个 JSON 文本,键为分组名称,值为倍率'
|
||||||
|
/>
|
||||||
|
</Form.Group>
|
||||||
<Form.Group widths='equal'>
|
<Form.Group widths='equal'>
|
||||||
<Form.TextArea
|
<Form.TextArea
|
||||||
label='分组倍率'
|
label='分组倍率'
|
||||||
|
Loading…
Reference in New Issue
Block a user