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