From 1ab90de913405b45050e0f732a03004087134fda Mon Sep 17 00:00:00 2001
From: zhaoqingang <zhaoqg0118@163.com>
Date: 星期一, 25 十一月 2024 11:11:04 +0800
Subject: [PATCH] 上传dify文件

---
 app/api/chat.py            |    4 ++--
 app/service/difyService.py |   16 +++++++++-------
 app/api/agent.py           |    6 ++++++
 app/api/files.py           |   30 +++++++++++++++---------------
 4 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/app/api/agent.py b/app/api/agent.py
index 5e72c15..b8c1b9d 100644
--- a/app/api/agent.py
+++ b/app/api/agent.py
@@ -64,6 +64,12 @@
         result = [item.to_dict() for item in records]
         return ResponseList(code=200, msg="", data=result)
 
+    elif agent.agent_type == AgentType.DIFY:
+        offset = (page - 1) * limit
+        records = db.query(SessionModel).filter(SessionModel.agent_id == agent_id, SessionModel.tenant_id==current_user.id).order_by(SessionModel.create_date.desc()).offset(offset).limit(limit).all()
+        result = [item.to_dict() for item in records]
+        return ResponseList(code=200, msg="", data=result)
+
     else:
         return ResponseList(code=200, msg="Unsupported agent type")
 
diff --git a/app/api/chat.py b/app/api/chat.py
index 2932d45..483a69a 100644
--- a/app/api/chat.py
+++ b/app/api/chat.py
@@ -314,7 +314,7 @@
                     except Exception as e:
                         logger.error(e)
                     complete_response = ""
-                    async for rag_response in dify_service.chat(token, chat_id, question, upload_file_id, conversation_id):
+                    async for rag_response in dify_service.chat(token, current_user.id, question, upload_file_id, conversation_id):
                         try:
                             if rag_response[:5] == "data:":
                                 # 濡傛灉鏄紝鍒欐埅鍙栨帀鍓�5涓瓧绗︼紝骞跺幓闄ら灏剧┖鐧界
@@ -326,7 +326,7 @@
                             try:
                                 data = json.loads(complete_response)
                                 # data = json_data.get("data")
-                                if "answer" not in  data or isinstance(data["answer"], dict):  # 淇℃伅杩囨护
+                                if "answer" not in  data or not isinstance(data["answer"], dict):  # 淇℃伅杩囨护
                                     continue
                                 else:  # 姝e父杈撳嚭
                                     answer = data.get("answer", "")
diff --git a/app/api/files.py b/app/api/files.py
index dd9166a..22c2216 100644
--- a/app/api/files.py
+++ b/app/api/files.py
@@ -94,21 +94,21 @@
             service = BasicService(base_url=settings.basic_paper_url)
             result = await service.paper_file_upload(chat_id, file.filename, file_content)
 
-        elif agent.agent_type == AgentType.DIFY:
-            file = file[0]
-            # 璇诲彇涓婁紶鐨勬枃浠跺唴瀹�
-            try:
-                file_content = await file.read()
-            except Exception as e:
-                return Response(code=400, msg=str(e))
-            dify_service = DifyService(base_url=settings.dify_base_url)
-            try:
-                token = get_bisheng_token(db, current_user.id)
-                result = await dify_service.upload(token, file.filename, file_content)
-            except Exception as e:
-                raise HTTPException(status_code=500, detail=str(e))
-            result["file_name"] = file.filename
-            return Response(code=200, msg="", data=result)
+    elif agent.agent_type == AgentType.DIFY:
+        file = file[0]
+        # 璇诲彇涓婁紶鐨勬枃浠跺唴瀹�
+        try:
+            file_content = await file.read()
+        except Exception as e:
+            return Response(code=400, msg=str(e))
+        dify_service = DifyService(base_url=settings.dify_base_url)
+        try:
+            token = get_bisheng_token(db, current_user.id)
+            result = await dify_service.upload(token, file.filename, file_content, current_user.id)
+        except Exception as e:
+            raise HTTPException(status_code=500, detail=str(e))
+        result["file_name"] = file.filename
+        return Response(code=200, msg="", data=result)
 
         return Response(code=200, msg="", data=result)
 
diff --git a/app/service/difyService.py b/app/service/difyService.py
index 3e588cf..0444387 100644
--- a/app/service/difyService.py
+++ b/app/service/difyService.py
@@ -62,7 +62,7 @@
                 raise Exception("Authorization header not found in response")
             return authorization
 
-    async def chat(self, token: str, chat_id: str,  message: str, upload_file_id: str, conversation_id: str):
+    async def chat(self, token: str, user_id: int,  message: str, upload_file_id: str, conversation_id: str):
 
         target_url = f"{self.base_url}/v1/chat-messages"
         files = []
@@ -80,7 +80,7 @@
             "query": message,
             "response_mode": "streaming",
             "conversation_id": conversation_id,
-            "user": chat_id,
+            "user": str(user_id),
             "files": files
         }
 
@@ -114,17 +114,19 @@
                 return data
             return data.get("message", [])
 
-    async def upload(self, token: str, filename: str, file: bytes) -> dict:
-        url = f"{self.base_url}/console/api/files/upload"
+    async def upload(self, token: str, filename: str, file: bytes, user_id) -> dict:
+        url = f"{self.base_url}/v1/files/upload"
         headers = {
-            'Content-Type': 'application/json',
+            # 'Content-Type': 'application/json',
             'Authorization': f'Bearer {token}'
         }
-
+        data = {
+            'user': str(user_id)
+        }
         # 鍒涘缓琛ㄥ崟鏁版嵁锛屽寘鍚枃浠�
         files = {"file": (filename, file)}
         async with httpx.AsyncClient() as client:
-            response = await client.post(url, headers=headers, files=files)
+            response = await client.post(url, headers=headers, files=files, data=data)
             data = self._handle_response(response)
             # file_path = data.get("file_path", "")
             result = {

--
Gitblit v1.8.0