modelx / src /graphs /socialAgentGraph.py
nivakaran's picture
Upload folder using huggingface_hub
b4c4175 verified
"""
socialAgentGraph.py - Social Agent Graph with Subgraph Architecture
"""
import uuid
from langgraph.graph import StateGraph, END
from src.states.socialAgentState import SocialAgentState
from src.nodes.socialAgentNode import SocialAgentNode
from src.llms.groqllm import GroqLLM
class SocialGraphBuilder:
def __init__(self, llm):
self.llm = llm
def build_trending_subgraph(self, node: SocialAgentNode) -> StateGraph:
subgraph = StateGraph(SocialAgentState)
subgraph.add_node("collect_trends", node.collect_sri_lanka_trends)
subgraph.set_entry_point("collect_trends")
subgraph.add_edge("collect_trends", END)
return subgraph.compile()
def build_social_media_subgraph(self, node: SocialAgentNode) -> StateGraph:
subgraph = StateGraph(SocialAgentState)
subgraph.add_node("sri_lanka_social", node.collect_sri_lanka_social_media)
subgraph.add_node("asia_social", node.collect_asia_social_media)
subgraph.add_node("world_social", node.collect_world_social_media)
subgraph.set_entry_point("sri_lanka_social")
subgraph.set_entry_point("asia_social")
subgraph.set_entry_point("world_social")
subgraph.add_edge("sri_lanka_social", END)
subgraph.add_edge("asia_social", END)
subgraph.add_edge("world_social", END)
return subgraph.compile()
def build_feed_generation_subgraph(self, node: SocialAgentNode) -> StateGraph:
subgraph = StateGraph(SocialAgentState)
subgraph.add_node("categorize", node.categorize_by_geography)
subgraph.add_node("llm_summary", node.generate_llm_summary)
subgraph.add_node("format_output", node.format_final_output)
subgraph.set_entry_point("categorize")
subgraph.add_edge("categorize", "llm_summary")
subgraph.add_edge("llm_summary", "format_output")
subgraph.add_edge("format_output", END)
return subgraph.compile()
def build_user_targets_subgraph(self, node: SocialAgentNode) -> StateGraph:
"""Build subgraph for user-defined keywords and profiles."""
subgraph = StateGraph(SocialAgentState)
subgraph.add_node("collect_user_targets", node.collect_user_defined_targets)
subgraph.set_entry_point("collect_user_targets")
subgraph.add_edge("collect_user_targets", END)
return subgraph.compile()
def build_graph(self):
node = SocialAgentNode(self.llm)
trending_subgraph = self.build_trending_subgraph(node)
social_subgraph = self.build_social_media_subgraph(node)
user_targets_subgraph = self.build_user_targets_subgraph(node)
feed_subgraph = self.build_feed_generation_subgraph(node)
main_graph = StateGraph(SocialAgentState)
main_graph.add_node(
"trending_module", lambda state: trending_subgraph.invoke(state)
)
main_graph.add_node(
"social_media_module", lambda state: social_subgraph.invoke(state)
)
main_graph.add_node(
"user_targets_module", lambda state: user_targets_subgraph.invoke(state)
)
main_graph.add_node(
"feed_generation_module", lambda state: feed_subgraph.invoke(state)
)
main_graph.add_node("feed_aggregator", node.aggregate_and_store_feeds)
# Parallel entry points - all 3 modules start together
main_graph.set_entry_point("trending_module")
main_graph.set_entry_point("social_media_module")
main_graph.set_entry_point("user_targets_module")
# All modules converge to feed generation
main_graph.add_edge("trending_module", "feed_generation_module")
main_graph.add_edge("social_media_module", "feed_generation_module")
main_graph.add_edge("user_targets_module", "feed_generation_module")
main_graph.add_edge("feed_generation_module", "feed_aggregator")
main_graph.add_edge("feed_aggregator", END)
return main_graph.compile()
llm = GroqLLM().get_llm()
graph = SocialGraphBuilder(llm).build_graph()