mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-08-23 00:31:06 +08:00
Fix: not use connect check result as model verify result (#18492)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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: ®ion,
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user