Fix: not use connect check result as model verify result (#18492)

This commit is contained in:
Lynn
2026-08-19 15:15:04 +08:00
committed by GitHub
parent d82c48eaf1
commit 993e84106b
2 changed files with 4 additions and 97 deletions

View File

@@ -502,7 +502,6 @@ type AlterProviderInstanceRequest struct {
BaseURL string `json:"base_url"`
Region string `json:"region"`
ModelInfo []service.CreateInstanceModelInfo `json:"model_info"`
Verify *bool `json:"verify"`
}
func (h *ProviderHandler) AlterProviderInstance(c *gin.Context) {
@@ -531,12 +530,7 @@ func (h *ProviderHandler) AlterProviderInstance(c *gin.Context) {
return
}
verify := true
if req.Verify != nil {
verify = *req.Verify
}
code, err := h.modelProviderService.AlterProviderInstance(ctx, userID, providerName, instanceName, req.InstanceName, normalizeAPIKey(req.APIKey), req.BaseURL, req.Region, req.ModelInfo, verify)
code, err := h.modelProviderService.AlterProviderInstance(ctx, userID, providerName, instanceName, req.InstanceName, normalizeAPIKey(req.APIKey), req.BaseURL, req.Region, req.ModelInfo)
if err != nil {
common.ErrorWithCode(c, code, err.Error())
return

View File

@@ -570,10 +570,6 @@ func (m *ModelProviderService) CreateProviderInstance(ctx context.Context, provi
apiKey = "x"
}
// Verify the API key against the provider.
// Mirrors Python's verify_api_key (provider_api_service.py:596).
modelVerifyResult := m.verifyProviderAPIKey(ctx, providerName, apiKey, region, baseURL, modelInfo)
instanceID := utility.GenerateToken()
extra := make(map[string]string)
@@ -598,17 +594,9 @@ func (m *ModelProviderService) CreateProviderInstance(ctx context.Context, provi
return common.CodeServerError, fmt.Errorf("fail to create model instance: %s", err.Error())
}
// Add models with verify result in extra.
// Add models to the instance.
if len(modelInfo) > 0 {
for _, model := range modelInfo {
if model.Extra == nil {
model.Extra = make(map[string]interface{})
}
verifyStatus := modelVerifyResult[model.ModelName]
if verifyStatus == "" {
verifyStatus = entity.ModelVerifyUnknown
}
model.Extra["verify"] = verifyStatus
if err = m.addModelToInstance(ctx, tenantID, providerName, instanceName, model); err != nil {
return common.CodeServerError, err
}
@@ -624,13 +612,7 @@ func (m *ModelProviderService) CreateProviderInstance(ctx context.Context, provi
factoryProvider := dao.GetModelProviderManager().FindProvider(targetFactoryName)
if factoryProvider != nil {
for _, llm := range factoryProvider.Models {
verifyStatus := modelVerifyResult[llm.Name]
if verifyStatus == "" {
verifyStatus = entity.ModelVerifyUnknown
}
extraMap := map[string]interface{}{
"verify": verifyStatus,
}
extraMap := make(map[string]interface{})
if llm.Tools != nil {
extraMap["is_tools"] = llm.Tools.Support
}
@@ -698,58 +680,6 @@ func (m *ModelProviderService) CreateNameOnlyProviderInstance(ctx context.Contex
return common.CodeSuccess, nil
}
// verifyProviderAPIKey verifies the API key against the provider by calling
// the driver's CheckConnection. It returns a map from model name to verify
// status (success/fail/unknown).
func (m *ModelProviderService) verifyProviderAPIKey(ctx context.Context, providerName, apiKey, region, baseURL string, modelInfo []CreateInstanceModelInfo) map[string]string {
result := make(map[string]string)
providerInfo := dao.GetModelProviderManager().FindProvider(providerName)
if providerInfo == nil {
// Provider not in system pool — mark all models as unknown.
for _, model := range modelInfo {
result[model.ModelName] = entity.ModelVerifyUnknown
}
return result
}
apiKey = strings.TrimSpace(apiKey)
region = strings.TrimSpace(region)
baseURL = strings.TrimSpace(baseURL)
if region == "" {
region = "default"
}
driver := providerInfo.ModelDriver
if strings.EqualFold(providerInfo.Class, "local") {
var err error
driver, err = newModelDriverForBaseURL(driver, providerName, region, baseURL)
if err != nil {
for _, model := range modelInfo {
result[model.ModelName] = entity.ModelVerifyFail
}
return result
}
}
apiConfig := &modelModule.APIConfig{
ApiKey: &apiKey,
Region: &region,
BaseURL: &baseURL,
}
verifyErr := driver.CheckConnection(ctx, apiConfig)
verifyStatus := entity.ModelVerifySuccess
if verifyErr != nil {
verifyStatus = entity.ModelVerifyFail
}
for _, model := range modelInfo {
result[model.ModelName] = verifyStatus
}
return result
}
// addModelToInstance creates a single model under the given provider instance.
func (m *ModelProviderService) addModelToInstance(ctx context.Context, tenantID, providerName, instanceName string, model CreateInstanceModelInfo) error {
provider, err := m.modelProviderDAO.GetByTenantIDAndProviderName(ctx, dao.DB, tenantID, providerName)
@@ -1982,7 +1912,7 @@ func (m *ModelProviderService) ensureOCRProviderFromEnv(ctx context.Context, ten
return nil
}
func (m *ModelProviderService) AlterProviderInstance(ctx context.Context, userID, providerIDOrName, instanceIDOrName, newInstanceName, apiKey, baseURL, region string, modelInfo []CreateInstanceModelInfo, verify bool) (common.ErrorCode, error) {
func (m *ModelProviderService) AlterProviderInstance(ctx context.Context, userID, providerIDOrName, instanceIDOrName, newInstanceName, apiKey, baseURL, region string, modelInfo []CreateInstanceModelInfo) (common.ErrorCode, error) {
providerIDOrName = strings.TrimSpace(providerIDOrName)
tenants, err := m.userTenantDAO.GetByUserIDAndRole(ctx, dao.DB, userID, "owner")
@@ -2014,12 +1944,6 @@ func (m *ModelProviderService) AlterProviderInstance(ctx context.Context, userID
apiKey = "x"
}
// Verify API key if requested.
modelVerifyResult := make(map[string]string)
if verify {
modelVerifyResult = m.verifyProviderAPIKey(ctx, providerName, apiKey, region, baseURL, modelInfo)
}
// Update instance record.
instanceUpdates := map[string]interface{}{
"api_key": apiKey,
@@ -2097,17 +2021,6 @@ func (m *ModelProviderService) AlterProviderInstance(ctx context.Context, userID
if mdl.ModelName == "" {
continue
}
// Attach verify status.
if verify {
verifyStatus := modelVerifyResult[mdl.ModelName]
if verifyStatus == "" {
verifyStatus = entity.ModelVerifyUnknown
}
if mdl.Extra == nil {
mdl.Extra = make(map[string]interface{})
}
mdl.Extra["verify"] = verifyStatus
}
if existingMdl, exists := existingModelMap[mdl.ModelName]; exists {
// Update existing model.