CoolFace
Apppublic

MWBadra/Context-Aware-Conversational-Agent

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
agent_runner.py64 linesDownload Raw Back to agent
1import logging2from typing import List, Optional3import os4 5from langchain.agents import AgentExecutor, create_react_agent6from langchain.prompts import PromptTemplate7from langchain.tools import BaseTool8from langchain_groq import ChatGroq9 10logger = logging.getLogger(__name__)11 12class ContextAwareAgentManager:13    def __init__(self, llm: ChatGroq, tools: List[BaseTool]):14        self.llm = llm15        self.tools = tools16        self.agent_executor: Optional[AgentExecutor] = None17 18    def _load_custom_prompt(self) -> str:19        base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))20        prompt_path = os.path.join(base_dir, "prompts", "agent_prompt.txt")21        with open(prompt_path, "r", encoding="utf-8") as file:22            return file.read()23 24    def _handle_parsing_error(self, error: Exception) -> str:25        """Prevent the agent from crashing if the model makes a formatting error."""26        logger.warning(f"Parsing error caught: {error}")27        return "Observation: Invalid format. Please use Thought/Action/Action Input format."28 29    def build_agent(self) -> AgentExecutor:30        try:31            prompt_text = self._load_custom_prompt()32            33            tool_descriptions = "\n".join([f"{t.name}: {t.description}" for t in self.tools])34            tool_names = ", ".join([t.name for t in self.tools])35            36            prompt = PromptTemplate(37                template=prompt_text,38                input_variables=["input", "agent_scratchpad", "chat_history"],39                partial_variables={40                    "tools": tool_descriptions,41                    "tool_names": tool_names42                }43            )44 45            agent = create_react_agent(46                llm=self.llm,47                tools=self.tools,48                prompt=prompt49            )50 51            self.agent_executor = AgentExecutor(52                agent=agent,53                tools=self.tools,54                verbose=True,55                handle_parsing_errors=self._handle_parsing_error,56                max_iterations=15, 57                early_stopping_method="force"58            )59            60            logger.info("Agent built successfully.")61            return self.agent_executor62        except Exception as e:63            logger.critical(f"Failed to build agent: {e}")64            raise