|
|
""" |
|
|
Fast Path Handler - Returns cached responses from golden dataset. |
|
|
""" |
|
|
from typing import Dict, Any |
|
|
from hue_portal.core.models import GoldenQuery |
|
|
|
|
|
|
|
|
class FastPathHandler: |
|
|
"""Handle Fast Path queries using golden dataset.""" |
|
|
|
|
|
def handle(self, query: str, golden_query_id: int) -> Dict[str, Any]: |
|
|
""" |
|
|
Get cached response from golden dataset. |
|
|
|
|
|
Args: |
|
|
query: User query (for logging). |
|
|
golden_query_id: ID of matched golden query. |
|
|
|
|
|
Returns: |
|
|
Response dict (same format as Slow Path) with additional metadata. |
|
|
""" |
|
|
try: |
|
|
golden_query = GoldenQuery.objects.get(id=golden_query_id, is_active=True) |
|
|
except GoldenQuery.DoesNotExist: |
|
|
|
|
|
return { |
|
|
"message": "Xin lỗi, không tìm thấy thông tin trong cơ sở dữ liệu.", |
|
|
"intent": "error", |
|
|
"results": [], |
|
|
"count": 0, |
|
|
"_source": "fast_path", |
|
|
"_error": "golden_query_not_found" |
|
|
} |
|
|
|
|
|
|
|
|
golden_query.usage_count += 1 |
|
|
golden_query.save(update_fields=['usage_count']) |
|
|
|
|
|
|
|
|
response = golden_query.response_data.copy() |
|
|
|
|
|
|
|
|
response['_source'] = 'fast_path' |
|
|
response['_golden_query_id'] = golden_query_id |
|
|
response['_verified_by'] = golden_query.verified_by |
|
|
response['_accuracy_score'] = golden_query.accuracy_score |
|
|
|
|
|
|
|
|
if 'message' not in response: |
|
|
response['message'] = golden_query.response_message |
|
|
|
|
|
if 'intent' not in response: |
|
|
response['intent'] = golden_query.intent |
|
|
|
|
|
if 'count' not in response: |
|
|
response['count'] = len(response.get('results', [])) |
|
|
|
|
|
return response |
|
|
|
|
|
|