mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-04-18 23:27:26 +00:00
🚀 fix(model-sync): avoid unnecessary upstream fetch while keeping overwrite updates working
- Only short-circuit when there are no missing models AND no overwrite fields requested - Preserve overwrite behavior even when the missing-model list is empty - Always return empty arrays (not null) for list fields to keep API responses stable - Clarify SyncUpstreamModels behavior in comments (create missing models + optional overwrite updates)
This commit is contained in:
@@ -249,7 +249,9 @@ func ensureVendorID(vendorName string, vendorByName map[string]upstreamVendor, v
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// SyncUpstreamModels 同步上游模型与供应商,仅对「未配置模型」生效
|
// SyncUpstreamModels 同步上游模型与供应商:
|
||||||
|
// - 默认仅创建「未配置模型」
|
||||||
|
// - 可通过 overwrite 选择性覆盖更新本地已有模型的字段(前提:sync_official <> 0)
|
||||||
func SyncUpstreamModels(c *gin.Context) {
|
func SyncUpstreamModels(c *gin.Context) {
|
||||||
var req syncRequest
|
var req syncRequest
|
||||||
// 允许空体
|
// 允许空体
|
||||||
@@ -261,6 +263,28 @@ func SyncUpstreamModels(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 若既无缺失模型需要创建,也未指定覆盖更新字段,则无需请求上游数据,直接返回
|
||||||
|
if len(missing) == 0 && len(req.Overwrite) == 0 {
|
||||||
|
modelsURL, vendorsURL := getUpstreamURLs(req.Locale)
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": true,
|
||||||
|
"data": gin.H{
|
||||||
|
"created_models": 0,
|
||||||
|
"created_vendors": 0,
|
||||||
|
"updated_models": 0,
|
||||||
|
"skipped_models": []string{},
|
||||||
|
"created_list": []string{},
|
||||||
|
"updated_list": []string{},
|
||||||
|
"source": gin.H{
|
||||||
|
"locale": req.Locale,
|
||||||
|
"models_url": modelsURL,
|
||||||
|
"vendors_url": vendorsURL,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 2) 拉取上游 vendors 与 models
|
// 2) 拉取上游 vendors 与 models
|
||||||
timeoutSec := common.GetEnvOrDefault("SYNC_HTTP_TIMEOUT_SECONDS", 15)
|
timeoutSec := common.GetEnvOrDefault("SYNC_HTTP_TIMEOUT_SECONDS", 15)
|
||||||
ctx, cancel := context.WithTimeout(c.Request.Context(), time.Duration(timeoutSec)*time.Second)
|
ctx, cancel := context.WithTimeout(c.Request.Context(), time.Duration(timeoutSec)*time.Second)
|
||||||
@@ -307,9 +331,9 @@ func SyncUpstreamModels(c *gin.Context) {
|
|||||||
createdModels := 0
|
createdModels := 0
|
||||||
createdVendors := 0
|
createdVendors := 0
|
||||||
updatedModels := 0
|
updatedModels := 0
|
||||||
var skipped []string
|
skipped := make([]string, 0)
|
||||||
var createdList []string
|
createdList := make([]string, 0)
|
||||||
var updatedList []string
|
updatedList := make([]string, 0)
|
||||||
|
|
||||||
// 本地缓存:vendorName -> id
|
// 本地缓存:vendorName -> id
|
||||||
vendorIDCache := make(map[string]int)
|
vendorIDCache := make(map[string]int)
|
||||||
|
|||||||
@@ -401,7 +401,7 @@ func StreamResponseOpenAI2Claude(openAIResponse *dto.ChatCompletionsStreamRespon
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(toolCall.Function.Arguments) > 0 {
|
if len(toolCall.Function.Arguments) > 0 {
|
||||||
claudeResponses = append(claudeResponses, &dto.ClaudeResponse{
|
claudeResponses = append(claudeResponses, &dto.ClaudeResponse{
|
||||||
Index: &idx,
|
Index: &idx,
|
||||||
|
|||||||
Reference in New Issue
Block a user