Spaces:
Sleeping
Sleeping
| import re | |
| from langgraph.prebuilt import create_react_agent | |
| from agent_util import Agent_Util | |
| from prompts import * | |
| from tools import * | |
| from langgraph_supervisor import create_supervisor | |
| from langchain.chat_models import init_chat_model | |
| from langchain_core.messages import AIMessage | |
| import glob | |
| class Agent: | |
| def __init__(self): | |
| print("Initializing Agent....") | |
| print("**************************************************************************************") | |
| print('........ Versão: Ajuste prompt para tentar resolver as receitas .....') | |
| print("**************************************************************************************") | |
| print("--> Audio Agent") | |
| self.audio_agent = create_react_agent( | |
| model=init_chat_model("openai:gpt-4o-mini"), | |
| tools=[extract_text_from_url_tool, extract_text_from_file_tool, clean_ingredient_measure_tool], | |
| prompt= AUDIO_AGENT_PROMPT, | |
| name="audio_agent", | |
| ) | |
| print("--> Web Search Agent") | |
| self.web_search_agent = create_react_agent( | |
| model=init_chat_model("openai:gpt-4o-mini"), | |
| tools=[search_web_tool], | |
| prompt= WEB_SEARCH_AGENT_PROMPT, | |
| name="web_research_agent", | |
| ) | |
| print("--> Supervisor") | |
| self.supervisor = create_supervisor( | |
| model=init_chat_model("openai:gpt-4o-mini", temperature=0), | |
| agents=[self.web_search_agent, self.audio_agent], | |
| tools=[bird_video_count_tool,chess_image_to_fen_tool,chess_fen_get_best_next_move_tool, | |
| get_excel_columns_tool, calculate_excel_sum_by_columns_tool,execute_python_code_tool, | |
| text_inverter_tool, check_table_commutativity_tool, filter_vegetables_from_list_tool], | |
| prompt= SUPERVISOR_PROMPT, | |
| add_handoff_back_messages=True, | |
| output_mode="last_message", | |
| ).compile() | |
| print("Agent initialized.") | |
| def __call__(self, question: str, task_id: str, task_file_name: str) -> str: | |
| print(f"Agent received question({task_id}) (first 50 chars): {question[:50]}...") | |
| file_prefix = "" | |
| if task_file_name: | |
| print(f"Task com arquivo {task_file_name}") | |
| File_Util.baixa_arquivo_task(task_file_name) | |
| file_prefix = f"File: {task_file_name} . " | |
| # Chamando sem stream | |
| response = self.supervisor.invoke( | |
| { | |
| "messages": [ | |
| { | |
| "role": "user", | |
| "content": f"{file_prefix}{question}", | |
| } | |
| ] | |
| } | |
| ) | |
| print(f"Resposta LLM: {response}") | |
| # Extrair o conteúdo das mensagens do tipo AIMessage | |
| final_content = "" | |
| for m in reversed(response['messages']): | |
| print(f"buscando resposta em {m.content}") | |
| if isinstance(m, AIMessage): | |
| print('AI Message') | |
| if "FINAL ANSWER:" in m.content.upper(): | |
| print("Tem Final Answer") | |
| final_content = m.content | |
| break | |
| # Extrair o valor final | |
| print(f"Final Content: {final_content}") | |
| match = re.search(r"(?i)FINAL ANSWER:\s*(.*)", final_content) | |
| final_answer = match.group(1).strip() if match else "" | |
| print("Final Answer:", final_answer) | |
| return final_answer |