File size: 3,420 Bytes
e77665f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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()