import os from unittest import result from dotenv import load_dotenv from openai import OpenAI from backend.app.agents.crewai_agent import CrewAIAgent from backend.app.rag.embedding_manager import EmbeddingManager from backend.app.tools.tool_registry import ToolRegistry from backend.app.core.memory import ConversationMemory from backend.app.agents.planner import Planner from configs.logging_config import setup_logger from backend.app.core.feedback_store import FeedbackStore from configs.settings import config from backend.app.agents.langgraph_agent import langgraph_app from backend.app.agents.langchain_agent import LangChainAgent load_dotenv() logger = setup_logger("agent_v2") client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) MODEL_NAME = config["llm"]["model"] EMBD_MODEL_NAME = config["embedding"]["model"] embedding_manager = EmbeddingManager(EMBD_MODEL_NAME) class AgentV2: def __init__(self): self.tools = ToolRegistry() self.memory = ConversationMemory() self.planner = Planner() self.feedback_store = FeedbackStore() self.embedding_manager = embedding_manager self.crewai_agent = CrewAIAgent( self.tools, self.memory, self.planner, self.embedding_manager, self.feedback_store ) self.langchain_agent = LangChainAgent( self.tools, self.memory, self.planner, self.embedding_manager, self.feedback_store ) def run(self, query, llm_model, framework="LangGraph", api_key=None, auth_mode=None): logger.info(f"[Framework Selected]: {framework}") if auth_mode == "external" and api_key: logger.info("Using external API key for OpenAI client") os.environ["OPENAI_API_KEY"] = api_key if framework == "LangGraph": logger.info("Running with LangGraph Agent") return self.run_langgraph(query, llm_model) if framework == "CrewAI": logger.info("Running with CrewAI Agent") return self.crewai_agent.run(query, llm_model) elif framework == "LangChain": logger.info("Running with LangChain Agent") return self.run_langchain(query, llm_model) else: logger.warning(f"Unknown framework: {framework}, defaulting to LangGraph") return self.run_langgraph(query, llm_model) def run_langgraph(self, query, llm_model=MODEL_NAME): result = langgraph_app.invoke({ "query": query, "llm_model": llm_model }, config={"recursion_limit": 10}) return { "final_answer": result.get("final_answer"), "trace": result.get("trace", []) } def run_langchain(self, query, llm_model=MODEL_NAME): return self.langchain_agent.run(query, llm_model) def run_cli(): agent = AgentV2() print("=== Agent V2 (Memory + Planning) ===") print("Type 'exit' to quit\n") while True: query = input("Enter your query: ") if query.lower() == "exit": break result = agent.run(query) print(f"\nAgent Response:\n{result}\n") feedback = input("Was this helpful? (yes/no): ") if feedback.lower() == "yes": agent.feedback_store.save_feedback(query, result, "positive") else: agent.feedback_store.save_feedback(query, result, "negative") if __name__ == "__main__": run_cli()