Spaces:
Sleeping
Sleeping
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)
|