davidtran999 commited on
Commit
a924bfc
·
verified ·
1 Parent(s): eb3aafe

Upload backend/hue_portal/chatbot/views.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. backend/hue_portal/chatbot/views.py +39 -1
backend/hue_portal/chatbot/views.py CHANGED
@@ -4,7 +4,7 @@ Chatbot API views for handling conversational queries.
4
  import json
5
  import logging
6
  import uuid
7
- from typing import Any, Dict
8
 
9
  from django.http import HttpRequest, JsonResponse
10
  from django.views.decorators.csrf import csrf_exempt
@@ -28,6 +28,28 @@ class ChatThrottle(AnonRateThrottle):
28
  rate = '30/minute'
29
 
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  @csrf_exempt
32
  def chat_simple(request: HttpRequest) -> JsonResponse:
33
  """
@@ -48,6 +70,11 @@ def chat_simple(request: HttpRequest) -> JsonResponse:
48
  session_id_raw = payload.get("session_id") or ""
49
  session_id: str = str(session_id_raw).strip() if session_id_raw else ""
50
  reset_session: bool = bool(payload.get("reset_session", False))
 
 
 
 
 
51
 
52
  if not message:
53
  return JsonResponse({"error": "message is required"}, status=400)
@@ -62,6 +89,9 @@ def chat_simple(request: HttpRequest) -> JsonResponse:
62
  uuid.UUID(session_id)
63
  except ValueError:
64
  session_id = str(uuid.uuid4())
 
 
 
65
 
66
  try:
67
  chatbot = get_chatbot()
@@ -124,6 +154,11 @@ def chat(request: Request) -> Response:
124
  else:
125
  session_id = ""
126
  reset_session = request.data.get("reset_session", False)
 
 
 
 
 
127
 
128
  # Log received message for debugging
129
  message_preview = message[:100] + "..." if len(message) > 100 else message
@@ -151,6 +186,9 @@ def chat(request: Request) -> Response:
151
  # Invalid UUID format, generate new one
152
  session_id = str(uuid.uuid4())
153
 
 
 
 
154
  try:
155
  logger.info(f"[CHAT] ⏳ Starting response generation for message (length: {len(message)})")
156
  print(f"[CHAT] ⏳ Starting response generation for message (length: {len(message)})", flush=True)
 
4
  import json
5
  import logging
6
  import uuid
7
+ from typing import Any, Dict, Optional
8
 
9
  from django.http import HttpRequest, JsonResponse
10
  from django.views.decorators.csrf import csrf_exempt
 
28
  rate = '30/minute'
29
 
30
 
31
+ def _apply_selected_document_code(session_id: Optional[str], code: Optional[str]) -> None:
32
+ """
33
+ Persist or clear the selected document code for a session.
34
+ Chỉ lưu một mã văn bản duy nhất để làm “plan” cho các câu hỏi tiếp theo.
35
+ """
36
+ if not session_id:
37
+ return
38
+ if not code:
39
+ return
40
+ normalized = str(code).strip()
41
+ if not normalized:
42
+ ConversationContext.clear_session_metadata_keys(session_id, ["selected_document_code"])
43
+ return
44
+ if normalized == "__other__":
45
+ ConversationContext.clear_session_metadata_keys(session_id, ["selected_document_code"])
46
+ return
47
+ ConversationContext.update_session_metadata(
48
+ session_id,
49
+ {"selected_document_code": normalized.upper()},
50
+ )
51
+
52
+
53
  @csrf_exempt
54
  def chat_simple(request: HttpRequest) -> JsonResponse:
55
  """
 
70
  session_id_raw = payload.get("session_id") or ""
71
  session_id: str = str(session_id_raw).strip() if session_id_raw else ""
72
  reset_session: bool = bool(payload.get("reset_session", False))
73
+ selected_document_code = payload.get("selected_document_code") or payload.get("clarification_option")
74
+ if isinstance(selected_document_code, str):
75
+ selected_document_code = selected_document_code.strip()
76
+ else:
77
+ selected_document_code = None
78
 
79
  if not message:
80
  return JsonResponse({"error": "message is required"}, status=400)
 
89
  uuid.UUID(session_id)
90
  except ValueError:
91
  session_id = str(uuid.uuid4())
92
+
93
+ if selected_document_code is not None:
94
+ _apply_selected_document_code(session_id, selected_document_code)
95
 
96
  try:
97
  chatbot = get_chatbot()
 
154
  else:
155
  session_id = ""
156
  reset_session = request.data.get("reset_session", False)
157
+ selected_document_code = request.data.get("selected_document_code") or request.data.get("clarification_option")
158
+ if isinstance(selected_document_code, str):
159
+ selected_document_code = selected_document_code.strip()
160
+ else:
161
+ selected_document_code = None
162
 
163
  # Log received message for debugging
164
  message_preview = message[:100] + "..." if len(message) > 100 else message
 
186
  # Invalid UUID format, generate new one
187
  session_id = str(uuid.uuid4())
188
 
189
+ if selected_document_code is not None:
190
+ _apply_selected_document_code(session_id, selected_document_code)
191
+
192
  try:
193
  logger.info(f"[CHAT] ⏳ Starting response generation for message (length: {len(message)})")
194
  print(f"[CHAT] ⏳ Starting response generation for message (length: {len(message)})", flush=True)