import ast import logging from fastapi import APIRouter from api.stored_data import stored_data from src.genai.ideation_agent.agent import IdeationAgent from langgraph.errors import GraphRecursionError from api.schemas.ideation import IdeationMessage app_logger = logging.getLogger("app_logger") error_logger = logging.getLogger("error_logger") router = APIRouter() agent = IdeationAgent() idea_graph = agent.ideation_graph() @router.post("/ideation") def ideation_endpoint(msg:IdeationMessage): config={"recursion_limit":25, "configurable": {"thread_id": "ideation_thread123"},"run_name":"ideation"} scores=msg.scores.model_dump() try: result = idea_graph.invoke( { 'scores': [scores], 'business_details': [stored_data['business_details']], 'image_caption': [stored_data['image_caption'] if 'image_caption' in stored_data else ""] }, config=config) stored_data['final_ideation'] = result['unique_selected_ideas'][-1] # stored_data['final_ideation']=ast.literal_eval(stored_data['final_ideation']) top_ideas = [{k: v for k, v in idea.items() if k != "scores"} for idea in result['unique_selected_ideas'][-1]] more_ideas = [idea for idea in result['normalizer_response'][-1]['ideas'] if idea not in top_ideas] app_logger.info('Executed the ideation pipeline.') return {'response': {'top_ideas': top_ideas, 'more_ideas': more_ideas} } except GraphRecursionError: error_logger.error('Ideation loop ran more than specified.') result = idea_graph.get_state({"configurable": {"thread_id": "ideation_thread123"}}) return {'response': result[0]} except Exception as e: error_logger.error(f'Unable to execute the ideation: {e}') raise