from pydantic import BaseModel
# Custom events for inter-agent communication
class LeadIdentified(BaseModel):
company_name: str
contact_info: dict
interest_level: str
class CompanyResearch(BaseModel):
company_name: str
industry: str
revenue: str
decision_makers: list
async def setup_multi_agent_system(system: VoiceAgentSystem):
# Main sales agent (speaking)
sales_node = SalesNode(
system_prompt="You are a helpful sales representative."
)
sales_bridge = Bridge(sales_node)
system.with_speaking_node(sales_node, bridge=sales_bridge)
# Background lead extraction agent
leads_node = LeadExtractionNode()
leads_bridge = Bridge(leads_node)
system.with_node(leads_node, leads_bridge)
# Background research agent
research_node = CompanyResearchNode()
research_bridge = Bridge(research_node)
system.with_node(research_node, research_bridge)
# Route user input to all agents
sales_bridge.on(UserTranscriptionReceived).map(
sales_node.add_event
)
leads_bridge.on(UserTranscriptionReceived).map(
leads_node.add_event
)
# Sales agent responds to user
(
sales_bridge.on(UserStoppedSpeaking)
.stream(sales_node.generate)
.broadcast()
)
# Background lead analysis
(
leads_bridge.on(UserStoppedSpeaking)
.stream(leads_node.generate)
.broadcast()
)
# Research agent processes identified leads
research_bridge.on(LeadIdentified).map(research_node.add_event)
(
research_bridge.on(LeadIdentified)
.stream(research_node.generate)
.broadcast()
)
# Sales agent receives research insights
sales_bridge.on(CompanyResearch).map(sales_node.add_context)