diff --git a/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs b/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs index 73674ec..3810d39 100644 --- a/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs +++ b/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs @@ -1039,13 +1039,43 @@ impl GeminiService { // 1. 确定或创建会话 let session_id = match &request.session_id { - Some(id) => id.clone(), + Some(id) => { + println!("📋 使用现有会话ID: {}", id); + id.clone() + }, None => { - // 如果没有提供session_id,生成一个新的 - uuid::Uuid::new_v4().to_string() + let new_id = uuid::Uuid::new_v4().to_string(); + println!("🆕 生成新会话ID: {}", new_id); + new_id } }; + // 如果有会话仓库,确保会话存在 + if let Some(repo) = &conversation_repo { + println!("🔍 检查会话是否存在..."); + match repo.get_session(&session_id) { + Ok(Some(_)) => { + println!("✅ 会话已存在"); + } + Ok(None) => { + println!("🆕 会话不存在,创建新会话..."); + // 创建新会话 + use crate::data::models::conversation::CreateConversationSessionRequest; + let create_request = CreateConversationSessionRequest { + title: Some("RAG对话会话".to_string()), + metadata: None, + }; + match repo.create_session(create_request) { + Ok(_) => println!("✅ 新会话创建成功"), + Err(e) => println!("⚠️ 创建会话失败: {}", e), + } + } + Err(e) => { + println!("⚠️ 检查会话失败: {}", e); + } + } + } + // 2. 获取历史消息(如果需要且有会话仓库) let mut contents = Vec::new(); let mut conversation_context = ConversationContext { @@ -1098,7 +1128,9 @@ impl GeminiService { }); // 4. 执行RAG查询 + println!("🚀 准备执行RAG查询,contents数量: {}", contents.len()); let response = self.execute_rag_grounding_with_contents(contents, rag_config).await?; + println!("📥 RAG查询响应已收到"); // 5. 保存消息到会话历史(如果有会话仓库) let message_id = if let Some(repo) = &conversation_repo { @@ -1183,8 +1215,10 @@ impl GeminiService { contents: Vec, rag_config: RagGroundingConfig, ) -> Result { + println!("🔑 开始获取访问令牌..."); // 获取访问令牌 let access_token = self.get_access_token().await?; + println!("✅ 访问令牌获取成功"); // 创建客户端配置 let client_config = self.create_gemini_client(&access_token); @@ -1229,10 +1263,13 @@ impl GeminiService { // 发送请求到Cloudflare Gateway (使用beta API) let generate_url = format!("{}/{}:generateContent", client_config.gateway_url, rag_config.model_id); + println!("🌐 准备发送请求到: {}", generate_url); + println!("📊 请求数据大小: {} bytes", serde_json::to_string(&request_data).unwrap_or_default().len()); // 重试机制 let mut last_error = None; for attempt in 0..self.config.max_retries { + println!("🔄 尝试第 {} 次请求...", attempt + 1); match self.send_rag_grounding_request(&generate_url, &client_config, &request_data).await { Ok(response) => { return Ok(RagGroundingResponse { @@ -1293,6 +1330,7 @@ impl GeminiService { client_config: &ClientConfig, request_data: &serde_json::Value, ) -> Result { + println!("📤 构建HTTP请求..."); let mut request_builder = self.client .post(url) .json(request_data); @@ -1302,19 +1340,27 @@ impl GeminiService { request_builder = request_builder.header(key, value); } + println!("🚀 发送HTTP请求..."); let response = request_builder .send() .await .map_err(|e| anyhow!("发送RAG请求失败: {}", e))?; + println!("📨 收到HTTP响应,状态码: {}", response.status()); + let status = response.status(); + println!("📖 开始读取响应内容..."); let response_text = response.text().await .map_err(|e| anyhow!("读取RAG响应失败: {}", e))?; + println!("📄 响应内容长度: {} 字符", response_text.len()); + if !status.is_success() { + println!("❌ HTTP请求失败,状态码: {}", status); return Err(anyhow!("RAG请求失败 ({}): {}", status, response_text)); } + println!("🔍 开始解析响应内容..."); // 解析响应 self.parse_rag_grounding_response(&response_text) }