File size: 1,721 Bytes
3002e1b
3f5fe23
3002e1b
3f5fe23
3002e1b
 
3f5fe23
3002e1b
 
 
872d043
3002e1b
 
 
 
3f5fe23
 
 
3002e1b
 
 
3f5fe23
 
3002e1b
8ce97f0
 
a6a0614
3f5fe23
 
 
 
 
 
 
a6a0614
93d50e5
3f5fe23
 
93d50e5
3f5fe23
93d50e5
3f5fe23
872d043
6f57d05
3002e1b
3f5fe23
 
abd776c
3f5fe23
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import ast
import os
import json
import hashlib
import logging
from fastapi import APIRouter
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 api.schemas.analytics_chatbot import UserMessage

app_logger = logging.getLogger("app_logger")
error_logger = logging.getLogger("error_logger")
password=os.environ['REDIS_PASSWORD']
host = os.environ['REDIS_HOST']
port = os.environ['REDIS_PORT']

router = APIRouter()
agent=ChatbotAgent()
graph = agent.chatbot_graph() 
redis_client = Redis(host=host, port=port, db=0, decode_responses=True, username="default",password=password) 

@router.get("/analytics-chatbot")
def get_analytics(msg:str):
    # user_query=process_query(msg)
    cache_key = f"analytics:{hashlib.md5(msg.encode()).hexdigest()}"
    
    cached_response = redis_client.get(cache_key)
    if cached_response:
        print("Cache hit")
        return json.loads(cached_response)
    
    config={"configurable": {"thread_id": "analytics-chatbot-thread"},"run_name":"analytics-chatbot"}
    result=graph.invoke({'messages':msg},config=config)
    print('Final Result:', result)
    response_to_cache = {}
    if result.get('backup_data') is not None:
        response_to_cache = {'backup_response': result['backup_data']}
    else:
        response_to_cache = {
            'response': result['response'],
            'endpoint': result['endpoint']
        }

    # Save to Redis with TTL (e.g., 1 hour)
    redis_client.set(cache_key, json.dumps(response_to_cache), ex=60)  # ex=seconds

    return response_to_cache