davidtran999 commited on
Commit
bb539d7
·
verified ·
1 Parent(s): f73e877

Upload backend/hue_portal/hue-portal-backendDocker/backend/hue_portal/chatbot/views.py with huggingface_hub

Browse files
backend/hue_portal/hue-portal-backendDocker/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,25 @@ class ChatThrottle(AnonRateThrottle):
28
  rate = '30/minute'
29
 
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  @csrf_exempt
32
  def chat_simple(request: HttpRequest) -> JsonResponse:
33
  """
@@ -48,6 +67,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 +86,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 +151,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 +183,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
+ """Persist or clear the selected document code for a session."""
33
+ if not session_id:
34
+ return
35
+ if not code:
36
+ return
37
+ normalized = str(code).strip()
38
+ if not normalized:
39
+ ConversationContext.clear_session_metadata_keys(session_id, ["selected_document_code"])
40
+ return
41
+ if normalized == "__other__":
42
+ ConversationContext.clear_session_metadata_keys(session_id, ["selected_document_code"])
43
+ return
44
+ ConversationContext.update_session_metadata(
45
+ session_id,
46
+ {"selected_document_code": normalized.upper()},
47
+ )
48
+
49
+
50
  @csrf_exempt
51
  def chat_simple(request: HttpRequest) -> JsonResponse:
52
  """
 
67
  session_id_raw = payload.get("session_id") or ""
68
  session_id: str = str(session_id_raw).strip() if session_id_raw else ""
69
  reset_session: bool = bool(payload.get("reset_session", False))
70
+ selected_document_code = payload.get("selected_document_code") or payload.get("clarification_option")
71
+ if isinstance(selected_document_code, str):
72
+ selected_document_code = selected_document_code.strip()
73
+ else:
74
+ selected_document_code = None
75
 
76
  if not message:
77
  return JsonResponse({"error": "message is required"}, status=400)
 
86
  uuid.UUID(session_id)
87
  except ValueError:
88
  session_id = str(uuid.uuid4())
89
+
90
+ if selected_document_code is not None:
91
+ _apply_selected_document_code(session_id, selected_document_code)
92
 
93
  try:
94
  chatbot = get_chatbot()
 
151
  else:
152
  session_id = ""
153
  reset_session = request.data.get("reset_session", False)
154
+ selected_document_code = request.data.get("selected_document_code") or request.data.get("clarification_option")
155
+ if isinstance(selected_document_code, str):
156
+ selected_document_code = selected_document_code.strip()
157
+ else:
158
+ selected_document_code = None
159
 
160
  # Log received message for debugging
161
  message_preview = message[:100] + "..." if len(message) > 100 else message
 
183
  # Invalid UUID format, generate new one
184
  session_id = str(uuid.uuid4())
185
 
186
+ if selected_document_code is not None:
187
+ _apply_selected_document_code(session_id, selected_document_code)
188
+
189
  try:
190
  logger.info(f"[CHAT] ⏳ Starting response generation for message (length: {len(message)})")
191
  print(f"[CHAT] ⏳ Starting response generation for message (length: {len(message)})", flush=True)