Spaces:
Build error
Build error
porla
Add functionality to load and execute Python files; refactor test script for output capture
fde6ed4
| import os | |
| from IPython.display import Image, display | |
| from langchain_core.messages import SystemMessage | |
| from langchain_openai import AzureChatOpenAI | |
| from langgraph.graph import StateGraph, START, END | |
| from langgraph.prebuilt import tools_condition | |
| from .state import State | |
| from .custom_tool_node import CustomToolNode | |
| from .tools import get_avaiable_tools | |
| class CustomAgent: | |
| def __init__(self): | |
| print("CustomAgent initialized.") | |
| self.graph = build_graph() # Build the state graph for the agent | |
| def __call__(self, question: str, task_id: str) -> str: | |
| print(f"Agent received question (first 50 chars): {question[:50]}...") | |
| system_prompt = SystemMessage(content=get_prompt()) | |
| messages = self.graph.invoke({ | |
| "messages": [ | |
| system_prompt, | |
| {"role": "user", "content": question} | |
| ], | |
| "task_id": task_id | |
| }) | |
| answer = messages['messages'][-1].content | |
| return answer[14:] | |
| def get_prompt() -> str: | |
| with open("system_prompt.txt", "r", encoding="utf-8") as f: | |
| return f.read() | |
| def build_graph(): | |
| """Builds the state graph for the React agent.""" | |
| # Initialize our LLM | |
| llm = AzureChatOpenAI( | |
| azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"), # Corrected variable name | |
| openai_api_version=os.getenv("AZURE_OPENAI_API_VERSION"), | |
| deployment_name=os.getenv("AZURE_OPENAI_DEPLOYMENT"), # Corrected variable name | |
| openai_api_key=os.getenv("AZURE_OPENAI_API_KEY"), | |
| temperature=0.0, | |
| ) | |
| avaiable_tools = get_avaiable_tools() | |
| llm_with_tools = llm.bind_tools(avaiable_tools) | |
| def assistant(state: State): | |
| """Assistant node""" | |
| response = llm_with_tools.invoke(state["messages"]) | |
| if response.content == '': | |
| messages = [response] # tool calling message | |
| else: | |
| final_message = response.content | |
| # final_message += f"\n\nTask ID: {state['task_id']}" | |
| messages = [final_message] | |
| return {"messages": messages, | |
| "task_id": state["task_id"] | |
| } | |
| # Initialize the state graph | |
| graph_builder = StateGraph(State) | |
| # Add nodes | |
| # graph_builder.add_node("check_question_reversed", is_question_reversed) | |
| # graph_builder.add_node("reverse_text", reverse_text) | |
| graph_builder.add_node("assistant", assistant) | |
| tools_dict = {tool.name: tool for tool in avaiable_tools} | |
| graph_builder.add_node("tools", CustomToolNode(tools_dict)) | |
| # graph_builder.add_edge(START, "check_question_reversed") | |
| # graph_builder.add_conditional_edges( | |
| # "check_question_reversed", | |
| # route_question, | |
| # { | |
| # "question_reversed": "reverse_text", | |
| # "question_not_reversed": "assistant" | |
| # } | |
| # ) | |
| # graph_builder.add_edge("reverse_text", "assistant") | |
| graph_builder.add_edge(START, "assistant") | |
| graph_builder.add_conditional_edges( | |
| "assistant", | |
| tools_condition, | |
| ) | |
| graph_builder.add_edge("tools", "assistant") | |
| graph_builder.add_edge("assistant", END) | |
| return graph_builder.compile() | |
| if __name__ == "__main__": | |
| # Build the graph | |
| react_graph = build_graph() | |
| # Display the graph visualization | |
| # graph = react_graph.get_graph(xray=True) | |
| # display(Image(graph.draw_mermaid_png(output_file_path='graph.png'))) | |
| # Example question to test the agent | |
| # question = "How many studio albums were published by Mercedes Sosa between 2000 and 2009 (included)? You can use the latest 2022 version of english wikipedia." | |
| # question = ".rewsna eht sa \"tfel\" drow eht fo etisoppo eht etirw ,ecnetnes siht dnatsrednu uoy fI" | |
| # question = "Who nominated the only Featured Article on English Wikipedia about a dinosaur that was promoted in November 2016?" | |
| #question = """Examine the video at https://www.youtube.com/watch?v=1htKBjuUWec.\n\nWhat does Teal'c say in response to the question \"Isn't that hot?\"""" | |
| # question = """Hi, I was out sick from my classes on Friday, so I'm trying to figure out what I need to study for my Calculus mid-term next week. My friend from class sent me an audio recording of Professor Willowbrook giving out the recommended reading for the test, but my headphones are broken :(\n\nCould you please listen to the recording for me and tell me the page numbers I'm supposed to go over? I've attached a file called Homework.mp3 that has the recording. Please provide just the page numbers as a comma-delimited list. And please provide the list in ascending order.""" | |
| # question = """The attached Excel file contains the sales of menu items for a local fast-food chain. What were the total sales that the chain made from food (not including drinks)? Express your answer in USD with two decimal places.""" | |
| question = """What is the final numeric output from the attached Python code?""" | |
| task_id = "f918266a-b3e0-4914-865d-4faa564f1aef" | |
| system_prompt = SystemMessage(content=get_prompt()) | |
| messages = react_graph.invoke({ | |
| "messages": [ | |
| system_prompt, | |
| {"role": "user", "content": question} | |
| ], | |
| "task_id": task_id | |
| }) | |
| for m in messages["messages"]: | |
| m.pretty_print() | |
| answer = messages['messages'][-1].content | |
| print(f"Final Answer: {answer[14:]}") | |
| # Stream the response from the agent | |
| # events = react_graph.stream( | |
| # {"messages": [("user", question)]}, | |
| # config={"configurable": {"return_intermediate_steps": True}}, | |
| # stream_mode="values" | |
| # ) | |
| # for event in events: | |
| # print(event) # Replace `_print_event(event, _printed)` with direct printing | |
| # print("----\n---") | |