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 modelos e temperatura .....') | |
print("**************************************************************************************") | |
print("--> Audio Agent") | |
self.audio_agent = create_react_agent( | |
model=init_chat_model(GPT_4_0_MINI_MODEL), | |
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(GPT_4_1_MINI_MODEL), | |
tools=[search_web_tool], | |
prompt= WEB_SEARCH_AGENT_PROMPT, | |
name="web_research_agent", | |
) | |
print("--> Supervisor") | |
self.supervisor = create_supervisor( | |
model=init_chat_model(GPT_4_0_MINI_MODEL, 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 |