From 319e3e93bbb4807da58db2ac72bb8f3029738dd7 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期二, 03 十二月 2024 13:48:40 +0800 Subject: [PATCH] dify报告合并 --- app/service/difyService.py | 101 +++++++++++++++++++++++++++++++++++++------------- 1 files changed, 74 insertions(+), 27 deletions(-) diff --git a/app/service/difyService.py b/app/service/difyService.py index 3e588cf..93bc62b 100644 --- a/app/service/difyService.py +++ b/app/service/difyService.py @@ -5,6 +5,7 @@ from typing import Union, Dict, List from fastapi import HTTPException from starlette import status + from app.config.config import settings from app.utils.rsa_crypto import RagflowCrypto @@ -15,6 +16,8 @@ def _handle_response(self, response: httpx.Response) -> Union[Dict, List]: if response.status_code != 200: + if response.status_code == 201: + return response.json() return {} data = response.json() @@ -24,8 +27,8 @@ status_code=status.HTTP_401_UNAUTHORIZED, detail="鐧诲綍杩囨湡", ) - if ret_code != 0: - return {} + # if ret_code != 0: + # return {} # 妫�鏌ヨ繑鍥炵殑鏁版嵁绫诲瀷 if isinstance(data.get("data"), dict): @@ -33,7 +36,7 @@ elif isinstance(data.get("data"), list): return data.get("data", []) else: - return {} + return data async def register(self, username: str, password: str): password = RagflowCrypto(settings.PUBLIC_KEY, settings.PRIVATE_KEY).encrypt(password) @@ -62,7 +65,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 +83,7 @@ "query": message, "response_mode": "streaming", "conversation_id": conversation_id, - "user": chat_id, + "user": str(user_id), "files": files } @@ -93,7 +96,7 @@ if response.status_code == 200: try: async for answer in response.aiter_text(): - print(f"response of ragflow chat: {answer}") + # print(f"response of ragflow chat: {answer}") yield answer except GeneratorExit as e: print(e) @@ -103,44 +106,88 @@ - async def get_session_history(self, token: str, chat_id: str, is_all: int=0): - url = f"{self.base_url}/v1/conversation/get?conversation_id={chat_id}" - headers = {"Authorization": token} + async def get_session_history(self, token: str, conversation_id: str, user: str): + url = f"{self.base_url}/v1/messages" + params = { + 'user': user, + 'conversation_id': conversation_id + } + headers = {"Authorization": f'Bearer {token}'} async with httpx.AsyncClient() as client: - response = await client.get(url, headers=headers) + response = await client.get(url, params=params, headers=headers) + # print(response.text) + # print(response.status_code) + # print(response.res) data = self._handle_response(response) # print("----------------data----------------------:", data) - if is_all: - 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" + return data + + 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 = { - "file_path": data + + return data + + async def save_images(self, url: str, filename: str): + url = f"{self.base_url}{url}" + + async with httpx.AsyncClient() as client: + response = await client.get(url) + + response.raise_for_status() + + # 鎵撳紑涓�涓枃浠剁敤浜庡啓鍏� + with open(f"app/images/{filename}", 'wb') as f: + # 鍐欏叆璇锋眰鐨勫唴瀹� + f.write(response.content) + + + async def workflow(self, token: str, user_id: int, inputs: dict): + + target_url = f"{self.base_url}/v1/workflows/run" + data = { + "inputs": inputs, + "response_mode": "streaming", + "user": str(user_id), + "files":[] + } + + async with httpx.AsyncClient(timeout=1800) as client: + headers = { + 'Content-Type': 'application/json', + 'Authorization': f'Bearer {token}' } - - return result - + async with client.stream("POST", target_url, data=json.dumps(data), headers=headers) as response: + if response.status_code == 200: + try: + async for answer in response.aiter_text(): + # print(f"response of ragflow chat: {answer}") + yield answer + except GeneratorExit as e: + print(e) + return + else: + yield f"Error: {response.status_code}" if __name__ == "__main__": async def a(): - a = DifyService("http://192.168.20.119:11080") - b = await a.get_knowledge_list("ImY3ZTZlZWQwYTY2NTExZWY5ZmFiMDI0MmFjMTMwMDA2Ig.Zzxwmw.uI_HAWzOkipQuga1aeQtoeIc3IM", 1, - 10) + a = DifyService("http://192.168.20.116") + b = await a.get_session_history("app-YmOAMDsPpDDlqryMHnc9TzTO", "f94c6328-8ff0-4713-af3f-e823d547682d", + "63") print(b) import asyncio -- Gitblit v1.8.0