| import os |
| from typing import TypedDict, List, Dict, Any, Optional |
| from langchain_google_genai import ChatGoogleGenerativeAI |
| from langchain_core.messages import AnyMessage, SystemMessage, HumanMessage, AIMessage |
| from langgraph.graph.message import add_messages |
| from langgraph.graph import START, StateGraph |
| from langgraph.prebuilt import ToolNode, tools_condition |
|
|
| import sys |
| from pathlib import Path |
| from pydantic import BaseModel |
| import json |
|
|
| class OneResponse(BaseModel): |
| question_id: str |
| answer: str |
|
|
| root_path = Path(__file__).parent.parent.parent |
| print(f"Root path for imports: {root_path}") |
| sys.path.insert(0, str(Path(__file__).parent.parent)) |
|
|
| from agent.tools.search_tool import search_tool |
|
|
| |
|
|
| class zBottaAgent: |
| def __init__(self): |
| print("zBottaAgent initialized.") |
| chat = ChatGoogleGenerativeAI(model="gemini-2.0-flash", temperature=0.7) |
| tools = [search_tool] |
| response_schema = OneResponse.model_json_schema() |
| self.chat_with_tools = chat.bind( |
| tools=tools, |
| response_mime_type="application/json", |
| response_schema=response_schema, |
| ) |
|
|
| def __call__(self, question: str) -> str: |
| print(f"Agent received question (first 50 chars): {question[:50]}...") |
| messages = [ |
| SystemMessage(content="You are a general AI assistant. I will ask you a question. " \ |
| "Report your thoughts, and finish your answer. " \ |
| "Your answer SHOULD BE: a number OR as few words as possible OR a comma separated list of numbers " |
| "and/or strings. If you are asked for a number, don't use comma to write your number neither use " \ |
| "units such as $ or percent sign unless specified otherwise. If you are asked for a string, " \ |
| "don't use articles, neither abbreviations (e.g. for cities), and write the digits in plain text " \ |
| "unless specified otherwise. If you are asked for a comma separated list, apply the above rules " \ |
| "depending of whether the element to be put in the list is a number or a string."), |
| HumanMessage(content=question) |
| ] |
| response = self.chat_with_tools.invoke(messages) |
| print(f"Agent raw response: {response}") |
| answer = json.loads(response.content) |
| final_answer = answer["answer"] |
| print(f"Final answer: {final_answer}") |
| return final_answer |
|
|
| if __name__ == "__main__": |
| os.environ["GOOGLE_API_KEY"] = "AIzaSyA28oI_EEL3Io4I1OGF_Yj890ioKcCKWlo" |
| agent = zBottaAgent() |
| test_question = "What is the capital of France?" |
| print(f"Testing agent with question: {test_question}") |
| answer = agent(test_question) |