From 7a9f9cb3c34ebc0836720d0f5738bbe70070bbb3 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期四, 05 十二月 2024 14:22:24 +0800 Subject: [PATCH] 增加菜单和路由控制 --- app/service/difyService.py | 88 ++++++++++++++++++++++++++++++++------------ 1 files changed, 64 insertions(+), 24 deletions(-) diff --git a/app/service/difyService.py b/app/service/difyService.py index d3b4b20..93bc62b 100644 --- a/app/service/difyService.py +++ b/app/service/difyService.py @@ -6,7 +6,6 @@ from fastapi import HTTPException from starlette import status -from Log import logger from app.config.config import settings from app.utils.rsa_crypto import RagflowCrypto @@ -17,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() @@ -26,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): @@ -35,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) @@ -81,7 +82,7 @@ "inputs": {}, "query": message, "response_mode": "streaming", - "conversation_id": "", + "conversation_id": conversation_id, "user": str(user_id), "files": files } @@ -105,16 +106,22 @@ - 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", []) + + return data async def upload(self, token: str, filename: str, file: bytes, user_id) -> dict: url = f"{self.base_url}/v1/files/upload" @@ -130,24 +137,57 @@ async with httpx.AsyncClient() as client: response = await client.post(url, headers=headers, files=files, data=data) data = self._handle_response(response) - logger.error("----------------------------ffff-------------------------------") - logger.error(response.status_code) - logger.error(response.text) - # 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