File size: 3,742 Bytes
b4856f1 2473009 b4856f1 752f5cc b4856f1 752f5cc b4856f1 2473009 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 b4c4175 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 752f5cc b4856f1 2473009 b4856f1 |
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 98 99 100 101 |
"""
RogerGraph.py - Main Roger Graph with Fan-Out/Fan-In Architecture
"""
from __future__ import annotations
import logging
from langgraph.graph import StateGraph, START, END
from src.states.combinedAgentState import CombinedAgentState
from src.nodes.combinedAgentNode import CombinedAgentNode
from src.graphs.dataRetrievalAgentGraph import DataRetrievalAgentGraph
from src.graphs.meteorologicalAgentGraph import MeteorologicalGraphBuilder
from src.graphs.politicalAgentGraph import PoliticalGraphBuilder
from src.graphs.economicalAgentGraph import EconomicalGraphBuilder
from src.graphs.intelligenceAgentGraph import IntelligenceGraphBuilder
from src.graphs.socialAgentGraph import SocialGraphBuilder
from src.llms.groqllm import GroqLLM
logger = logging.getLogger("Roger_graph")
logger.setLevel(logging.INFO)
if not logger.handlers:
ch = logging.StreamHandler()
ch.setFormatter(logging.Formatter("[%(levelname)s] %(message)s"))
logger.addHandler(ch)
class CombinedAgentGraphBuilder:
def __init__(self, llm):
self.llm = llm
def build_graph(self):
logger.info("Building Roger Combined Agent Graph")
social_builder = SocialGraphBuilder(self.llm)
intelligence_builder = IntelligenceGraphBuilder(self.llm)
economical_builder = EconomicalGraphBuilder(self.llm)
political_builder = PoliticalGraphBuilder(self.llm)
meteorological_builder = MeteorologicalGraphBuilder(self.llm)
data_retrieval_builder = DataRetrievalAgentGraph(self.llm)
orchestrator = CombinedAgentNode(self.llm)
workflow = StateGraph(CombinedAgentState)
workflow.add_node("GraphInitiator", orchestrator.graph_initiator)
workflow.add_node("FeedAggregatorAgent", orchestrator.feed_aggregator_agent)
workflow.add_node("DataRefresherAgent", orchestrator.data_refresher_agent)
workflow.add_node("DataRefreshRouter", orchestrator.data_refresh_router)
workflow.add_node("SocialAgent", social_builder.build_graph())
workflow.add_node("IntelligenceAgent", intelligence_builder.build_graph())
workflow.add_node("EconomicalAgent", economical_builder.build_graph())
workflow.add_node("PoliticalAgent", political_builder.build_graph())
workflow.add_node("MeteorologicalAgent", meteorological_builder.build_graph())
workflow.add_node(
"DataRetrievalAgent",
data_retrieval_builder.build_data_retrieval_agent_graph(),
)
workflow.add_edge(START, "GraphInitiator")
domain_agents = [
"SocialAgent",
"IntelligenceAgent",
"EconomicalAgent",
"PoliticalAgent",
"MeteorologicalAgent",
"DataRetrievalAgent",
]
for agent in domain_agents:
workflow.add_edge("GraphInitiator", agent)
for agent in domain_agents:
workflow.add_edge(agent, "FeedAggregatorAgent")
workflow.add_edge("FeedAggregatorAgent", "DataRefresherAgent")
workflow.add_edge("DataRefresherAgent", "DataRefreshRouter")
def route_decision(state):
route = getattr(state, "route", [])
if route is None or route == "":
return END
if route == "GraphInitiator":
return "GraphInitiator"
return END
workflow.add_conditional_edges(
"DataRefreshRouter",
route_decision,
{"GraphInitiator": "GraphInitiator", END: END},
)
graph = workflow.compile()
logger.info("Roger Graph compiled successfully")
return graph
llm = GroqLLM().get_llm()
builder = CombinedAgentGraphBuilder(llm)
graph = builder.build_graph()
|