Spaces:
Sleeping
Sleeping
| import ast | |
| import os | |
| import json | |
| import hashlib | |
| import base64 | |
| import logging | |
| from fastapi import APIRouter | |
| from typing import Optional | |
| from redis import Redis | |
| from fastapi.responses import StreamingResponse | |
| from api.stored_data import stored_data | |
| from src.genai.analytics_chatbot.agent import ChatbotAgent | |
| from src.genai.analytics_chatbot.utils.utils import process_query | |
| from src.genai.analytics_chatbot.handlers.analytics_description import generate_analytics_description | |
| from api.schemas.analytics_chatbot import AnalyticsChatRequest | |
| from config.redis_config import redis_client | |
| from openai import OpenAI | |
| app_logger = logging.getLogger("app_logger") | |
| error_logger = logging.getLogger("error_logger") | |
| router = APIRouter() | |
| agent=ChatbotAgent() | |
| graph = agent.chatbot_graph() | |
| def get_analytics(request: AnalyticsChatRequest): | |
| user_query = process_query(request.msg) | |
| print('Processed user query:', user_query) | |
| cache_key = f"analytics:{hashlib.md5(user_query.encode()).hexdigest()}" | |
| cached_response = redis_client.get(cache_key) | |
| print('cached-response:', cached_response) | |
| if cached_response: | |
| response_to_cache = json.loads(cached_response) | |
| else: | |
| response_to_cache = {} | |
| if not response_to_cache.get('response') or not response_to_cache.get('endpoint'): | |
| config = {"configurable": {"thread_id": "analytics-chatbot-thread"}, | |
| "run_name": "analytics-chatbot"} | |
| result = graph.invoke({'messages': user_query}, config=config) | |
| if result.get('backup_data') is not None: | |
| response_to_cache['backup_response'] = result['backup_data'] | |
| else: | |
| response_to_cache['response'] = result['response'] | |
| response_to_cache['endpoint'] = result['endpoint'] | |
| if request.image_base64 and not response_to_cache.get('description'): | |
| description = generate_analytics_description(user_query, request.image_base64) | |
| if description is not None: | |
| response_to_cache['description'] = description | |
| redis_client.set(cache_key, json.dumps(response_to_cache), ex=3000) | |
| return response_to_cache | |