Spaces:
Sleeping
Sleeping
import re | |
import constants | |
import time | |
from langchain_google_genai import ChatGoogleGenerativeAI | |
from langchain.agents import AgentExecutor, create_tool_calling_agent | |
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder | |
from langchain_core.messages import SystemMessage | |
# --- Custom Tools --- | |
from wikipedia_tool import wikipedia_revision_by_year_keyword | |
from count_max_bird_species_tool import count_max_bird_species_in_video | |
from image_to_text_tool import image_to_text | |
from internet_search_tool import internet_search | |
from botanical_classification_tool import get_botanical_classification | |
from excel_parser_tool import parse_excel | |
class LangChainAgent: | |
def __init__(self): | |
llm = ChatGoogleGenerativeAI( | |
model=constants.MODEL, | |
api_key=constants.API_KEY, | |
temperature=0.7) | |
tools = [ | |
wikipedia_revision_by_year_keyword, | |
count_max_bird_species_in_video, | |
image_to_text, | |
internet_search, | |
get_botanical_classification, | |
parse_excel | |
] | |
prompt = ChatPromptTemplate.from_messages([ | |
SystemMessage(content=constants.PROMPT_LIMITADOR_LLM), | |
MessagesPlaceholder(variable_name="chat_history"), | |
("human", "{input}"), | |
MessagesPlaceholder(variable_name="agent_scratchpad"), | |
]) | |
agent = create_tool_calling_agent(llm, tools, prompt=prompt) | |
self.executor = AgentExecutor(agent=agent, tools=tools, verbose=True) | |
def __call__(self, question: str) -> str: | |
print(f"LangChain agent received: {question[:50]}...") | |
result = self.executor.invoke({ | |
"input": question, | |
"chat_history": [] | |
}) | |
output = result.get("output", "No answer returned.") | |
print(f"Agent response: {output}") | |
match = re.search(r"FINAL ANSWER:\s*(.*)", output) | |
if match: | |
return match.group(1).strip() | |
else: | |
return output | |