diff --git a/admin/server/service/gaia/gaia_login.go b/admin/server/service/gaia/gaia_login.go index 7b250ff01..bea91d2b1 100644 --- a/admin/server/service/gaia/gaia_login.go +++ b/admin/server/service/gaia/gaia_login.go @@ -135,6 +135,7 @@ func (e *SystemIntegratedService) OAuth2CodeLogin( return nil, fmt.Errorf("无法从 OAuth2 用户信息中获取邮箱或用户唯一标识") } + fmt.Println("OAuth2CodeLogin", email, username) sysUser, err := e.findUserByEmailOrPhone(email, userID) if err != nil { return nil, err @@ -187,7 +188,8 @@ func (e *SystemIntegratedService) DingTalkTestCallback(code string) error { } // DingTalkCodeLogin 钉钉 code 换用户并登录(扫码/OAuth2 回调带 code) -func (e *SystemIntegratedService) DingTalkCodeLogin(req request.GaiaDingTalkLoginReq) (*response.GaiaLoginResult, error) { +func (e *SystemIntegratedService) DingTalkCodeLogin( + req request.GaiaDingTalkLoginReq) (*response.GaiaLoginResult, error) { integrate := e.getIntegratedConfigRaw(gaia.SystemIntegrationDingTalk) if !integrate.Status { return nil, fmt.Errorf("钉钉登录未启用") @@ -277,6 +279,7 @@ func (e *SystemIntegratedService) DingTalkCodeLogin(req request.GaiaDingTalkLogi if emailConfig.Enabled && dingId != "" { emailList, err = e.callEmailApi(dingId, emailConfig) if err == nil && len(emailList) > 0 { + fmt.Println("钉钉 code 换用户并登录(扫码/OAuth2 回调带 code)", emailList) sysUser, findErr := e.findUserByEmail(emailList) if findErr != nil { return nil, findErr @@ -301,6 +304,7 @@ func (e *SystemIntegratedService) DingTalkCodeLogin(req request.GaiaDingTalkLogi return nil, fmt.Errorf("钉钉未返回邮箱") } + fmt.Println("钉钉 code 换用户并登录第三方邮箱 API 获取失败", email) sysUser, err := e.findUserByEmail([]string{email}) if err != nil { return nil, err @@ -404,7 +408,8 @@ func (e *SystemIntegratedService) findUserByEmail(mailList []string) (*system.Sy } // findUserByEmailOrPhone 按邮箱或用户唯一标识(如手机号)查找用户,优先邮箱 -func (e *SystemIntegratedService) findUserByEmailOrPhone(mail, userID string) (u *system.SysUser, err error) { +func (e *SystemIntegratedService) findUserByEmailOrPhone( + mail, userID string) (u *system.SysUser, err error) { if mail != "" { if u, err = e.findUserByEmail([]string{mail}); err == nil { return u, nil diff --git a/admin/server/service/gaia/model_provider.go b/admin/server/service/gaia/model_provider.go index ff80d35d0..864c10d6e 100644 --- a/admin/server/service/gaia/model_provider.go +++ b/admin/server/service/gaia/model_provider.go @@ -398,7 +398,8 @@ func (s *ModelProviderService) getAvailableModelsFromProviderModelCredentials(pr Distinct("model_name"). Pluck("model_name", &modelNames).Error if err != nil { - global.GVA_LOG.Warn("从 provider_model_credentials 拉取模型列表失败", zap.String("provider", providerName), zap.Error(err)) + global.GVA_LOG.Warn("从 provider_model_credentials 拉取模型列表失败", zap.String( + "provider", providerName), zap.Error(err)) return nil, nil } list := make([]gaiaResponse.ModelInfo, 0, len(modelNames)) @@ -456,7 +457,8 @@ func (s *ModelProviderService) GetAvailableModelsFromDify(providerName string) ( // 兼容两种响应格式: // 1) OpenAI: { "data": [ { "id": "..." }, ... ] } // 2) 通义: { "success": true, "output": { "models": [ { "model": "...", "name": "..." }, ... ] } } -func (s *ModelProviderService) fetchOpenAICompatibleModels(client *http.Client, baseURL, apiKey string) ([]gaiaResponse.ModelInfo, error) { +func (s *ModelProviderService) fetchOpenAICompatibleModels(client *http.Client, baseURL, apiKey string) ( + []gaiaResponse.ModelInfo, error) { url := strings.TrimSuffix(baseURL, "/") + "/v1/models" req, err := http.NewRequest("GET", url, nil) if err != nil { @@ -471,7 +473,8 @@ func (s *ModelProviderService) fetchOpenAICompatibleModels(client *http.Client, defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) if resp.StatusCode != http.StatusOK { - global.GVA_LOG.Warn("拉取模型列表接口非 200", zap.String("url", url), zap.Int("status", resp.StatusCode), zap.String("body", string(body))) + global.GVA_LOG.Warn("拉取模型列表接口非 200", zap.String("url", url), zap.Int( + "status", resp.StatusCode), zap.String("body", string(body))) return nil, fmt.Errorf("接口返回 %d", resp.StatusCode) } @@ -510,7 +513,8 @@ func (s *ModelProviderService) fetchOpenAICompatibleModels(client *http.Client, // fetchGeminiModels 调用 Google Gemini GET /v1beta/models?key=API_KEY,解析 models[],支持分页。 // 认证使用 query 参数 key,响应格式:{ "models": [ { "name": "models/xxx", "baseModelId": "xxx", "displayName": "..." } ], "nextPageToken": "..." } -func (s *ModelProviderService) fetchGeminiModels(client *http.Client, baseURL, apiKey string) ([]gaiaResponse.ModelInfo, error) { +func (s *ModelProviderService) fetchGeminiModels(client *http.Client, baseURL, apiKey string) ( + []gaiaResponse.ModelInfo, error) { baseURL = strings.TrimSuffix(baseURL, "/") all := make([]gaiaResponse.ModelInfo, 0) pageToken := "" @@ -532,7 +536,9 @@ func (s *ModelProviderService) fetchGeminiModels(client *http.Client, baseURL, a body, _ := io.ReadAll(resp.Body) resp.Body.Close() if resp.StatusCode != http.StatusOK { - global.GVA_LOG.Warn("拉取 Gemini 模型列表非 200", zap.String("url", baseURL+"/v1beta/models"), zap.Int("status", resp.StatusCode), zap.String("body", string(body))) + global.GVA_LOG.Warn("拉取 Gemini 模型列表非 200", zap.String( + "url", baseURL+"/v1beta/models"), zap.Int("status", resp.StatusCode), zap.String( + "body", string(body))) return nil, fmt.Errorf("接口返回 %d", resp.StatusCode) } @@ -568,7 +574,8 @@ func (s *ModelProviderService) fetchGeminiModels(client *http.Client, baseURL, a // fetchAzureOpenAIModels 调用 Azure OpenAI GET {endpoint}/openai/models?api-version={version},解析 data[]。 // 认证使用 api-key 请求头,响应格式:{ "data": [ { "id": "...", "object": "model" } ] } -func (s *ModelProviderService) fetchAzureOpenAIModels(client *http.Client, baseURL, apiKey, apiVersion string) ([]gaiaResponse.ModelInfo, error) { +func (s *ModelProviderService) fetchAzureOpenAIModels(client *http.Client, baseURL, apiKey, apiVersion string) ( + []gaiaResponse.ModelInfo, error) { baseURL = strings.TrimSuffix(baseURL, "/") if apiVersion == "" { apiVersion = "2024-08-01-preview" // 默认 API 版本 @@ -590,7 +597,8 @@ func (s *ModelProviderService) fetchAzureOpenAIModels(client *http.Client, baseU body, _ := io.ReadAll(resp.Body) if resp.StatusCode != http.StatusOK { - global.GVA_LOG.Warn("拉取 Azure OpenAI 模型列表非 200", zap.String("url", url), zap.Int("status", resp.StatusCode), zap.String("body", string(body))) + global.GVA_LOG.Warn("拉取 Azure OpenAI 模型列表非 200", zap.String("url", url), zap.Int( + "status", resp.StatusCode), zap.String("body", string(body))) return nil, fmt.Errorf("接口返回 %d", resp.StatusCode) } @@ -920,7 +928,7 @@ func (s *ModelProviderService) ProxyChat(userID string, req gaiaRequest.ChatRequ defer func() { // 记录日志 - log := gaia.ModelProxyLog{ + global.GVA_DB.Create(&gaia.ModelProxyLog{ UserId: userID, ProviderName: providerName, ModelName: req.Model, @@ -929,8 +937,7 @@ func (s *ModelProviderService) ProxyChat(userID string, req gaiaRequest.ChatRequ Status: status, ErrorMessage: errorMsg, CreatedAt: startTime, - } - global.GVA_DB.Create(&log) + }) }() // 处理流式响应 @@ -938,7 +945,7 @@ func (s *ModelProviderService) ProxyChat(userID string, req gaiaRequest.ChatRequ scanner := bufio.NewScanner(resp.Body) for scanner.Scan() { line := scanner.Text() - if _, err := writer.Write([]byte(line + "\n")); err != nil { + if _, err = writer.Write([]byte(line + "\n")); err != nil { status = "error" errorMsg = err.Error() return err @@ -948,14 +955,14 @@ func (s *ModelProviderService) ProxyChat(userID string, req gaiaRequest.ChatRequ flusher.Flush() } } - if err := scanner.Err(); err != nil { + if err = scanner.Err(); err != nil { status = "error" errorMsg = err.Error() return err } } else { // 非流式响应 - if _, err := io.Copy(writer, resp.Body); err != nil { + if _, err = io.Copy(writer, resp.Body); err != nil { status = "error" errorMsg = err.Error() return err