From b991b79b608e3b811399cb59b2776ce23ba6d1e0 Mon Sep 17 00:00:00 2001
From: zhaoqingang <zhaoqg0118@163.com>
Date: 星期四, 02 一月 2025 09:56:50 +0800
Subject: [PATCH] tmp test

---
 app/service/v2/app_driver/chat_dialog.py |    3 +
 app/service/v2/chat.py                   |   19 +++++++++
 app/models/v2/session_model.py           |   65 ++++++++++++++++++++++++++++++++
 main.py                                  |    2 +
 app/api/v2/chat.py                       |   15 +++++++
 app/models/v2/__init__.py                |    0 
 6 files changed, 103 insertions(+), 1 deletions(-)

diff --git a/app/api/v2/chat.py b/app/api/v2/chat.py
index e69de29..d656655 100644
--- a/app/api/v2/chat.py
+++ b/app/api/v2/chat.py
@@ -0,0 +1,15 @@
+from fastapi import Depends, APIRouter
+from sqlalchemy.orm import Session
+from starlette.responses import StreamingResponse
+from app.api import get_current_user
+from app.models import UserModel
+from app.models.base_model import get_db
+from app.models.v2.session_model import ChatDialogData
+from app.service.v2.chat import service_chat_dialog
+
+chat1_router = APIRouter()
+
+
+@chat1_router.get("/chat_dialog")
+async def api_chat_dialog(dialog: ChatDialogData, db: Session = Depends(get_db), current_user: UserModel = Depends(get_current_user)):
+    return StreamingResponse(await service_chat_dialog(dialog.question, dialog.sessionId), media_type="text/event-stream")
\ No newline at end of file
diff --git a/app/models/v2/__init__.py b/app/models/v2/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/app/models/v2/__init__.py
diff --git a/app/models/v2/session_model.py b/app/models/v2/session_model.py
new file mode 100644
index 0000000..f6894c0
--- /dev/null
+++ b/app/models/v2/session_model.py
@@ -0,0 +1,65 @@
+import json
+from datetime import datetime
+from enum import IntEnum
+from typing import Optional
+
+import pytz
+from pydantic import BaseModel
+from sqlalchemy import Column, String, Enum as SQLAlchemyEnum, Integer, DateTime, JSON, TEXT
+
+from app.models.agent_model import AgentType
+# from app.models import current_time
+from app.models.base_model import Base
+
+def current_time():
+    tz = pytz.timezone('Asia/Shanghai')
+    return datetime.now(tz)
+
+class SessionModel(Base):
+    __tablename__ = "sessions"
+    id = Column(String(255), primary_key=True)
+    name = Column(String(255))
+    agent_id = Column(String(255))
+    agent_type = Column(SQLAlchemyEnum(AgentType), nullable=False)  # 鐩墠鍙瓨basic鐨勶紝ragflow鍜宐isheng鐨勮皟鎺ュ彛鑾峰彇
+    create_date = Column(DateTime, default=current_time)  # 鍒涘缓鏃堕棿锛岄粯璁ゅ�间负褰撳墠鏃跺尯鏃堕棿
+    update_date = Column(DateTime, default=current_time, onupdate=current_time)  # 鏇存柊鏃堕棿锛岄粯璁ゅ�间负褰撳墠鏃跺尯鏃堕棿锛屾洿鏂版椂鑷姩鏇存柊
+    tenant_id = Column(Integer)  # 鍒涘缓浜�
+    message = Column(TEXT)  # 璇存槑
+    conversation_id = Column(String(64))
+
+    # to_dict 鏂规硶
+    def to_dict(self):
+        return {
+            'id': self.id,
+            'name': self.name,
+            'agent_type': self.agent_type,
+            'agent_id': self.agent_id,
+            'create_date': self.create_date.strftime("%Y-%m-%d %H:%M:%S"),
+            'update_date': self.update_date.strftime("%Y-%m-%d %H:%M:%S"),
+        }
+
+    def log_to_json(self):
+        return {
+            'id': self.id,
+            'name': self.name,
+            'agent_type': self.agent_type,
+            'agent_id': self.agent_id,
+            'create_date': self.create_date.strftime("%Y-%m-%d %H:%M:%S"),
+            'update_date': self.update_date.strftime("%Y-%m-%d %H:%M:%S"),
+            'message': json.loads(self.message)
+        }
+
+    def add_message(self, message: dict):
+        if self.message is None:
+            self.message = '[]'
+        try:
+            msg = json.loads(self.message)
+            msg.append(message)
+        except Exception as e:
+            return
+        self.message = json.dumps(msg)
+
+
+class ChatDialogData(BaseModel):
+    sessionId: Optional[str] = ""
+    question: str
diff --git a/app/service/v2/app_driver/chat_dialog.py b/app/service/v2/app_driver/chat_dialog.py
index 0ad7c3c..550bde9 100644
--- a/app/service/v2/app_driver/chat_dialog.py
+++ b/app/service/v2/app_driver/chat_dialog.py
@@ -17,4 +17,5 @@
 
     async def chat_completions(self):
         async for rag_response in self.http_stream(token, chat_id, chat_history):
-            ...
\ No newline at end of file
+
+            yield rag_response
diff --git a/app/service/v2/chat.py b/app/service/v2/chat.py
index e69de29..df8cb0f 100644
--- a/app/service/v2/chat.py
+++ b/app/service/v2/chat.py
@@ -0,0 +1,19 @@
+
+
+async def service_chat_dialog(question: str, session_id: str):
+
+    if session_id:
+        ...
+
+
+
+    try:
+        for ans in chat(dia, msg, True, **req):
+
+            yield "data:" + json.dumps({"code": 0, "message": "", "data": ans}, ensure_ascii=False) + "\n\n"
+        ConversationService.update_by_id(conv.id, conv.to_dict())
+    except Exception as e:
+        yield "data:" + json.dumps({"code": 500, "message": str(e),
+                                    "data": {"answer": "**ERROR**: " + str(e), "reference": []}},
+                                   ensure_ascii=False) + "\n\n"
+    yield "data:" + json.dumps({"code": 0, "message": "", "data": True}, ensure_ascii=False) + "\n\n"
\ No newline at end of file
diff --git a/main.py b/main.py
index fc2f567..16f7a3b 100644
--- a/main.py
+++ b/main.py
@@ -15,6 +15,7 @@
 from app.api.label import label_router
 from app.api.llm import llm_router
 from app.api.organization import dept_router
+from app.api.v2.chat import chat1_router
 from app.api.v2.public_api import public_api
 from app.api.report import router as report_router
 from app.api.resource import menu_router
@@ -85,6 +86,7 @@
 app.include_router(canvas_router, prefix='/api/canvas', tags=["canvas"])
 app.include_router(label_router, prefix='/api/label', tags=["label"])
 app.include_router(public_api, prefix='/v1/api', tags=["public_api"])
+app.include_router(chat1_router, prefix='/v1/chat', tags=["chat1"])
 app.mount("/static", StaticFiles(directory="app/images"), name="static")
 
 if __name__ == "__main__":

--
Gitblit v1.8.0