GenAI-FASTAPI / api /routers /context_analysis.py
subashpoudel's picture
next commit
9f72bcf
raw
history blame
2.58 kB
import ast
import json
import logging
from fastapi import APIRouter
from fastapi.responses import StreamingResponse
from api.stored_data import stored_data
from src.genai.context_analysis_agent.agent import IntroductionChatbot
from api.schemas.context_analysis import UserMessage
app_logger = logging.getLogger("app_logger")
error_logger = logging.getLogger("error_logger")
router = APIRouter()
context_analysis_graph = IntroductionChatbot()
@router.post("/context-analysis")
def context_analysis(msg: UserMessage):
def event_generator():
try:
accumulated_response = ""
for chunk in context_analysis_graph.chat(msg.message):
accumulated_response += chunk
payload = {
"streamed_response": chunk,
}
yield json.dumps(payload) + "\n"
app_logger.info('Executed context analysis agent')
last_response = context_analysis_graph.messages[-1]["content"]
print('Last-Response:', last_response)
if context_analysis_graph.is_complete(last_response) == 'complete':
app_logger.info('Context analysis completed.')
try:
details = context_analysis_graph.extract_details()
app_logger.info('Details extracted after context analysis.')
except Exception as e:
error_logger.error(f'Unable to extract details: {e}')
if type(details) != dict:details = details.model_dump()
if isinstance(details, str):details = ast.literal_eval(details)
stored_data["business_details"] = details
try:
context_analysis_graph.reset()
app_logger.info('Context analysis memory reset after details extraction.')
except Exception as e:
error_logger.error('Unable to reset memory:', e)
final_payload = {
"response": accumulated_response,
"complete": True,
"business_details": details
}
else:
final_payload = {
"response": accumulated_response,
"complete": False
}
yield json.dumps(final_payload) + "\n"
except Exception as e:
error_logger.error('Unable to run context analysis agent:', e)
return StreamingResponse(event_generator(), media_type="text/event-stream")