chat.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import json
  2. import uuid
  3. from fastapi import Depends, APIRouter
  4. from sqlalchemy.orm import Session
  5. from starlette.responses import StreamingResponse, Response
  6. from app.api import get_current_user
  7. from app.config.const import dialog_chat, advanced_chat, base_chat, agent_chat, workflow_chat, basic_chat, \
  8. smart_message_error, http_400, http_500, http_200
  9. from app.models import UserModel
  10. from app.models.base_model import get_db
  11. from app.models.v2.session_model import ChatData
  12. from app.service.v2.chat import service_chat_dialog, get_chat_info, service_chat_basic, \
  13. service_chat_workflow, service_chat_parameters, service_chat_sessions
  14. chat_router_v2 = APIRouter()
  15. # 对话
  16. @chat_router_v2.post("/{chatId}/dialog")
  17. async def api_chat_dialog(chatId:str, dialog: ChatData, current_user: UserModel = Depends(get_current_user),db: Session = Depends(get_db)): # current_user: UserModel = Depends(get_current_user)
  18. chat_info = await get_chat_info(db, chatId)
  19. if not chat_info:
  20. error_msg = json.dumps(
  21. {"message": smart_message_error, "error": "\n**ERROR**: parameter exception", "status": http_400})
  22. return StreamingResponse(f"data: {error_msg}\n\n",
  23. media_type="text/event-stream")
  24. session_id = dialog.sessionId
  25. if not dialog.query:
  26. error_msg = json.dumps(
  27. {"message": smart_message_error, "error": "\n**ERROR**: question cannot be empty.", "status": http_400})
  28. return StreamingResponse(f"data: {error_msg}\n\n",
  29. media_type="text/event-stream")
  30. if not session_id:
  31. session = await service_chat_sessions(db, chatId, dialog.query)
  32. if not session or session.get("code") != 0:
  33. error_msg = json.dumps(
  34. {"message": smart_message_error, "error": "\n**ERROR**: chat agent error", "status": http_500})
  35. return StreamingResponse(f"data: {error_msg}\n\n",
  36. media_type="text/event-stream")
  37. session_id = session.get("data", {}).get("id")
  38. return StreamingResponse(service_chat_dialog(db, chatId, dialog.query, session_id, current_user.id, chat_info.mode),
  39. media_type="text/event-stream")
  40. @chat_router_v2.post("/{chatId}/agent")
  41. async def api_chat_dialog(chatId:str, dialog: ChatData, current_user: UserModel = Depends(get_current_user),db: Session = Depends(get_db)): # current_user: UserModel = Depends(get_current_user)
  42. chat_info = await get_chat_info(db, chatId)
  43. if not chat_info:
  44. error_msg = json.dumps(
  45. {"message": smart_message_error, "error": "\n**ERROR**: parameter exception", "status": http_400})
  46. return StreamingResponse(f"data: {error_msg}\n\n",
  47. media_type="text/event-stream")
  48. session_id = dialog.sessionId
  49. if not session_id:
  50. session_id = str(uuid.uuid4()).replace("-", "")
  51. return StreamingResponse(service_chat_workflow(db, chatId, dialog, session_id, current_user.id, chat_info.mode),
  52. media_type="text/event-stream")
  53. @chat_router_v2.post("/{chatId}/workflow")
  54. async def api_chat_dialog(chatId:str, dialog: ChatData, current_user: UserModel = Depends(get_current_user), db: Session = Depends(get_db)): # current_user: UserModel = Depends(get_current_user)
  55. chat_info = await get_chat_info(db, chatId)
  56. if not chat_info:
  57. error_msg = json.dumps(
  58. {"message": smart_message_error, "error": "\n**ERROR**: parameter exception", "status": http_400})
  59. return StreamingResponse(f"data: {error_msg}\n\n",
  60. media_type="text/event-stream")
  61. session_id = dialog.sessionId
  62. if not session_id:
  63. session_id = str(uuid.uuid4()).replace("-", "")
  64. return StreamingResponse(service_chat_workflow(db, chatId, dialog, session_id, current_user.id, chat_info.mode),
  65. media_type="text/event-stream")
  66. @chat_router_v2.post("/{chatId}/basic")
  67. async def api_chat_dialog(chatId:str, dialog: ChatData, current_user: UserModel = Depends(get_current_user), db: Session = Depends(get_db)): # current_user: UserModel = Depends(get_current_user)
  68. chat_info = await get_chat_info(db, chatId)
  69. if not chat_info:
  70. error_msg = json.dumps(
  71. {"message": smart_message_error, "error": "\n**ERROR**: parameter exception", "status": http_400})
  72. return StreamingResponse(f"data: {error_msg}\n\n",
  73. media_type="text/event-stream")
  74. session_id = dialog.sessionId
  75. if not session_id:
  76. session_id = str(uuid.uuid4()).replace("-", "")
  77. return StreamingResponse(service_chat_basic(db, chatId, dialog, session_id, current_user.id, chat_info.mode),
  78. media_type="text/event-stream")
  79. @chat_router_v2.get("/{chatId}/parameters")
  80. async def api_chat_parameters(chatId:str, db: Session = Depends(get_db)): # current_user: UserModel = Depends(get_current_user)
  81. status_code = http_200
  82. data = await service_chat_parameters(db, chatId, 1)
  83. if not data:
  84. status_code = http_400
  85. data = "{}"
  86. return Response(data, media_type="application/json", status_code=status_code)
  87. # @chat_router_v2.get("/{chatId}/parameters")
  88. # async def api_chat_parameters(chatId:str, db: Session = Depends(get_db)): # current_user: UserModel = Depends(get_current_user)
  89. # status_code = http_200
  90. # data = await service_chat_parameters(db, chatId, 1)
  91. # if not data:
  92. # status_code = http_400
  93. # return Response(json.dumps(data), media_type="application/json", status_code=status_code)