File size: 2,197 Bytes
bb41dbe
 
 
ef58f28
bb41dbe
ef58f28
bb41dbe
 
 
 
 
 
 
ef58f28
 
 
bb41dbe
 
 
ef58f28
 
 
 
 
bb41dbe
ef58f28
 
bb41dbe
ef58f28
 
bb41dbe
ef58f28
 
bb41dbe
ef58f28
 
bb41dbe
ef58f28
 
 
bb41dbe
 
ef58f28
bb41dbe
 
 
ef58f28
 
 
 
 
 
 
 
bb41dbe
 
 
 
 
 
 
 
 
 
 
 
 
 
ef58f28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import json
from dotenv import load_dotenv
from pathlib import Path
from datetime import datetime

from langchain_core.messages import HumanMessage, SystemMessage, ToolMessage
from langgraph.graph import START, StateGraph
from langgraph.prebuilt import ToolNode
from langgraph.prebuilt import tools_condition
import requests

from agent_state import AgentState
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_openai import ChatOpenAI
from logging_config import setup_logging, get_logger
from prompts import ASSISTANT_PROMPT

load_dotenv()

# Initialize logging FIRST (before importing agent_tools)
# Create logs folder and generate timestamped log file
logs_dir = Path("logs")
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
log_file = logs_dir / f"agent_run_{timestamp}.log"

setup_logging(log_level="INFO", log_file=str(log_file))
logger = get_logger(__name__)

# Now import agent_tools after logging is configured
from agent_tools import download_file, query_spreadsheet, query_media_file, web_search

logger.info("πŸš€ Starting agent...")
logger.info(f"πŸ“ Logs will be saved to: {log_file}")

DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
questions_url = f"{DEFAULT_API_URL}/random-question"

llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash")
tools = [web_search, download_file, query_spreadsheet, query_media_file]
llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False)


sys_msg = SystemMessage(content=ASSISTANT_PROMPT)


def assistant(state: AgentState) -> AgentState:
    logger.info("πŸ€– Assistant function called")
    logger.info(f"πŸ€– Last message type: {type(state['messages'][-1])}")
    logger.info(f"πŸ€– Last message: {state['messages'][-1]}")
    
    result = llm_with_tools.invoke([sys_msg] + state["messages"])

    logger.info(f"πŸ€– Assistant response: {result.content[:100]}...")
    return {"messages": [result]}


graph = StateGraph(AgentState)

graph.add_node("assistant", assistant)
graph.add_node("tools", ToolNode(tools))

graph.add_edge(START, "assistant")
graph.add_conditional_edges(
    "assistant",
    tools_condition,
)
graph.add_edge("tools", "assistant")

gaia_hf_agent = graph.compile()