Merge pull request #1127 from aparekh02/demo_docs

[DOCS] Job Finding, M&A, and Real Estate Swarm Examples
pull/1173/head
Kye Gomez 7 days ago committed by GitHub
commit 1bb4dab6a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,396 @@
# Job Finding Swarm
## Overview
The Job Finding Swarm is an intelligent multi-agent system designed to automate and streamline the job search process using the Swarms framework. It leverages specialized AI agents to analyze user requirements, execute comprehensive job searches, and curate relevant opportunities, transforming traditional job hunting into an intelligent, collaborative process.
## Key Components
The Job Finding Swarm consists of three specialized agents, each responsible for a critical stage of the job search process:
| Agent Name | Role | Responsibilities |
| :-------------------------- | :-------------------------- | :----------------------------------------------------------------------------------------------- |
| **Sarah-Requirements-Analyzer** | Clarifies requirements | Gathers and analyzes user job preferences; generates 3-5 search queries. |
| **David-Search-Executor** | Runs job searches | Uses `exa_search` for each query; analyzes and categorizes job results by match strength. |
| **Lisa-Results-Curator** | Organizes results | Filters, prioritizes, and presents jobs; provides top picks and refines search with user input. |
## Step 1: Setup and Installation
### Prerequisites
| Requirement |
|-----------------------|
| Python 3.8 or higher |
| pip package manager |
1. **Install dependencies:**
Use the following command to download all dependencies.
```bash
# Install Swarms framework
pip install swarms
# Install environment and logging dependencies
pip install python-dotenv loguru
# Install HTTP client and tools
pip install httpx swarms_tools
```
2. **Set up API Keys:**
The `Property Research Agent` utilizes the `exa_search` tool, which requires an `EXA_API_KEY`.
Create a `.env` file in the root directory of your project (or wherever your application loads environment variables) and add your API keys:
```
EXA_API_KEY="YOUR_EXA_API_KEY"
OPENAI_API_KEY="OPENAI_API_KEY"
```
Replace `"YOUR_EXA_API_KEY"` & `"OPENAI_API_KEY"` with your actual API keys.
## Step 2: Running the Job Finding Swarm
```python
from swarms import Agent, SequentialWorkflow
import http.client
import json
import urllib.parse
def get_jobs(query: str, limit: int = 10) -> str:
"""
Fetches real-time jobs using JSearch API based on role, location, and experience.
Uses http.client to match verified working example.
"""
# Prepare query string for URL
encoded_query = urllib.parse.quote(query)
path = f"/search?query={encoded_query}&page=1&num_pages=1&country=us&limit={limit}&date_posted=all"
conn = http.client.HTTPSConnection("jsearch.p.rapidapi.com")
headers = {
"x-rapidapi-key": "", #<------- Add your RapidAPI key here otherwise it will not work
"x-rapidapi-host": "jsearch.p.rapidapi.com"
}
conn.request("GET", path, headers=headers)
res = conn.getresponse()
data = res.read()
decoded = data.decode("utf-8")
try:
result_dict = json.loads(decoded)
except Exception:
# fallback for unexpected output
return decoded
results = result_dict.get("data", [])
jobs_list = [
{
"title": job.get("job_title"),
"company": job.get("employer_name"),
"location": job.get("job_city") or job.get("job_country"),
"experience": job.get("job_required_experience", {}).get("required_experience_in_months"),
"url": job.get("job_apply_link")
}
for job in results
]
return json.dumps(jobs_list)
REQUIREMENTS_ANALYZER_PROMPT = """
You are the Requirements Analyzer Agent for Job Search.
ROLE:
Extract and clarify job search requirements from user input to create optimized search queries.
RESPONSIBILITIES:
- Engage with the user to understand:
* Desired job titles and roles
* Required skills and qualifications
* Preferred locations (remote, hybrid, on-site)
* Salary expectations
* Company size and culture preferences
* Industry preferences
* Experience level
* Work authorization status
* Career goals and priorities
- Analyze user responses to identify:
* Key search terms and keywords
* Must-have vs nice-to-have requirements
* Deal-breakers or constraints
* Priority factors in job selection
- Generate optimized search queries:
* Create 3-5 targeted search queries based on user requirements
OUTPUT FORMAT:
Provide a comprehensive requirements analysis:
1. User Profile Summary:
- Job titles of interest
- Key skills and qualifications
- Location preferences
- Salary range
- Priority factors
2. Search Strategy:
- List of 3-5 optimized search queries, formatted EXACTLY for linkedin.com/jobs/search/?keywords=...
- Rationale for each query
- Expected result types
3. Clarifications Needed (if any):
- Questions to refine search
- Missing information
IMPORTANT:
- Always include ALL user responses verbatim in your analysis
- Format search queries clearly for the next agent and fit directly to LinkedIn search URLs
- Be specific and actionable in your recommendations
- Ask follow-up questions if requirements are unclear
"""
SEARCH_EXECUTOR_PROMPT = """
You are the Search Executor Agent for Job Search.
ROLE:
Your job is to execute a job search by querying the tool EXACTLY ONCE using the following required format (FILL IN WHERE IT HAS [ ] WITH THE QUERY INFO OTHERWISE STATED):
The argument for the query is to be provided as a plain text string in the following format (DO NOT include technical addresses, just the core query string):
[jobrole] jobs in [geographiclocation/remoteorinpersonorhybrid]
For example:
developer jobs in chicago
senior product manager jobs in remote
data engineer jobs in new york hybrid
TOOLS:
You have access to three tools:
- get_jobs: helps find open job opportunities for your specific job and requirements.
RESPONSIBILITIES:
- Run ONE single query, in the above format, as the argument to get_jobs.
- Analyze search results for:
* Job title match
* Skills alignment
* Location compatibility
* Salary range fit
* Company reputation
* Role responsibilities
* Growth opportunities
- Categorize each result into one of:
* Strong Match (80-100% alignment)
* Good Match (60-79% alignment)
* Moderate Match (40-59% alignment)
* Weak Match (<40% alignment)
- For each job listing, extract:
* Job title and company
* Location and work arrangement
* Key requirements
* Salary range (if available)
* Application link or contact
* Match score and reasoning
OUTPUT FORMAT:
1. Search Execution Summary:
- The query executed (write ONLY the string argument supplied, e.g., "developer jobs in chicago" or "software engineer jobs in new york remote")
- Total results found
- Distribution by match category
2. Detailed Job Listings (grouped by match strength):
For each job:
- Company and Job Title
- Location and Work Type
- Key Requirements
- Why it's a match (or not)
- Match Score (percentage)
- Application link
- Source (specify get_jobs)
3. Search Insights:
- Common trends/themes in the results
- Gaps between results and requirements
- Market observations
INSTRUCTIONS:
- Run only the single query in the format described above, with no extra path, no technical addresses, and no full URLs.
- Use all three tools, as applicable, with that exact query argument.
- Clearly cite which results come from which source.
- Be objective in match assessment.
- Provide actionable, structured insights.
"""
RESULTS_CURATOR_PROMPT = """
You are the Results Curator Agent for Job Search.
ROLE:
Filter, organize, and present job search results to the user for decision-making.
RESPONSIBILITIES:
- Review all search results from the Search Executor
- Filter and prioritize based on:
* Match scores
* User requirements
* Application deadlines
* Job quality indicators
- Organize results into:
* Top Recommendations (top 3-5 best matches)
* Strong Alternatives (next 5-10 options)
* Worth Considering (other relevant matches)
- For top recommendations, provide:
* Detailed comparison
* Pros and cons for each
* Application strategy suggestions
* Next steps
- Engage user for feedback:
* Present curated results clearly
* Ask which jobs interest them
* Identify what's missing
* Determine if new search is needed
OUTPUT FORMAT:
Provide a curated job search report:
1. Executive Summary:
- Total jobs reviewed
- Number of strong matches
- Key findings
2. Top Recommendations (detailed):
For each (max 5):
- Company & Title
- Why it's a top match
- Key highlights
- Potential concerns
- Recommendation strength (1-10)
- Application priority (High/Medium/Low)
3. Strong Alternatives (brief list):
- Company & Title
- One-line match summary
- Match score
4. User Decision Point:
Ask the user:
- "Which of these jobs interest you most?"
- "What's missing from these results?"
- "Should we refine the search or proceed with applications?"
- "Any requirements you'd like to adjust?"
5. Next Steps:
Based on user response, either:
- Proceed with selected jobs
- Run new search with adjusted criteria
- Deep dive into specific opportunities
IMPORTANT:
- Make it easy for users to make decisions
- Be honest about job fit
- Provide clear paths forward
- Always ask for user feedback before concluding
"""
def main():
# User input for job requirements
user_requirements = """
I'm looking for a senior software engineer position with the following requirements:
- Job Title: Senior Software Engineer or Staff Engineer
- Skills: Python, distributed systems, cloud architecture (AWS/GCP), Kubernetes
- Location: Remote (US-based) or San Francisco Bay Area
- Salary: $180k - $250k
- Company: Mid-size to large tech companies, prefer companies with strong engineering culture
- Experience Level: 7+ years
- Industry: SaaS, Cloud Infrastructure, or Developer Tools
- Work Authorization: US Citizen
- Priorities: Technical challenges, work-life balance, remote flexibility, equity upside
- Deal-breakers: No pure management roles, no strict return-to-office policies
"""
# Define your agents in a list as in the example format
agents = [
Agent(
agent_name="Sarah-Requirements-Analyzer",
agent_description="Analyzes user requirements and creates optimized job search queries.",
system_prompt=REQUIREMENTS_ANALYZER_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
),
Agent(
agent_name="David-Search-Executor",
agent_description="Executes job searches and analyzes results for relevance.",
system_prompt=SEARCH_EXECUTOR_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
tools=[get_jobs],
),
Agent(
agent_name="Lisa-Results-Curator",
agent_description="Curates and presents job results for user decision-making.",
system_prompt=RESULTS_CURATOR_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
),
]
# Setup the SequentialWorkflow pipeline (following the style of the ETF example)
workflow = SequentialWorkflow(
name="job-search-sequential-workflow",
agents=agents,
max_loops=1,
team_awareness=True,
)
workflow.run(user_requirements)
if __name__ == "__main__":
main()
```
Upon execution, the swarm will:
1. Analyze the provided `user_requirements`.
2. Generate and execute search queries using Exa.
3. Curate and present the results in a structured format, including top recommendations and a prompt for user feedback.
The output will be printed to the console, showing the progression of the agents through each phase of the job search.
## Workflow Stages
The `JobSearchSwarm` processes the job search through a continuous, iterative workflow:
1. **Phase 1: Analyze Requirements (`analyze_requirements`)**: The `Sarah-Requirements-Analyzer` agent processes the user's input and conversation history to extract job criteria and generate optimized search queries.
2. **Phase 2: Execute Searches (`execute_searches`)**: The `David-Search-Executor` agent takes the generated queries, uses the `exa_search` tool to find job listings, and analyzes their relevance against the user's requirements.
3. **Phase 3: Curate Results (`curate_results`)**: The `Lisa-Results-Curator` agent reviews, filters, and organizes the search results, presenting top recommendations and asking for user feedback to guide further iterations.
4. **Phase 4: Get User Feedback (`end`)**: In a full implementation, this stage gathers explicit user feedback to determine if the search needs refinement or can be concluded. For demonstration, this is a simulated step.
The swarm continues these phases in a loop until the `search_concluded` flag is set to `True` or `max_iterations` is reached.
## Customization
You can customize the `JobSearchSwarm` by modifying the `JobSearchSwarm` class parameters or the agents' prompts:
* **`name` and `description`**: Customize the swarm's identity.
* **`user_name`**: Define the name of the user interacting with the swarm.
* **`output_type`**: Specify the desired output format for the conversation history (e.g., "json" or "list").
* **`max_loops`**: Control the number of internal reasoning iterations each agent performs (set during agent initialization).
* **`system_prompt`**: Modify the `REQUIREMENTS_ANALYZER_PROMPT`, `SEARCH_EXECUTOR_PROMPT`, and `RESULTS_CURATOR_PROMPT` to refine agent behavior and output.
* **`max_iterations`**: Limit the total number of search cycles the swarm performs.
## Best Practices
To get the most out of the AI Job Finding Swarm:
* **Provide Clear Requirements**: Start with a detailed and unambiguous `initial_user_input` to help the Requirements Analyzer generate effective queries.
* **Iterate and Refine**: In a live application, leverage the user feedback loop to continuously refine search criteria and improve result relevance.
* **Monitor Agent Outputs**: Regularly review the outputs from each agent to ensure they are performing as expected and to identify areas for prompt improvement.
* **Manage API Usage**: Be mindful of your Exa API key usage, especially when experimenting with `max_iterations` or a large number of search queries.
## Limitations
* **Prompt Engineering Dependency**: The quality of the search results heavily depends on the clarity and effectiveness of the agent `system_prompt`s and the initial user input.
* **Exa Search Scope**: The `exa_search` tool's effectiveness is tied to the breadth and depth of Exa's indexed web content.
* **Iteration Control**: The current `end` method in `examples/demos/apps/job_finding.py` is simplified for demonstration. A robust production system would require a more sophisticated user interaction mechanism to determine when to stop or refine the search.
* **Verification Needed**: All AI-generated outputs, including job matches and summaries, should be independently verified by the user.

@ -0,0 +1,638 @@
# Mergers & Acquisition (M&A) Advisory Swarm
The M&A Advisory Swarm is a sophisticated multi-agent system designed to automate and streamline the entire mergers & acquisitions advisory workflow. By orchestrating a series of specialized AI agents, this swarm provides comprehensive analysis from initial intake to final recommendation.
## What it Does
The `MAAdvisorySwarm` operates as a **sequential workflow**, where each agent's output builds upon previous analyses, ensuring a cohesive and comprehensive advisory process. The swarm consists of the following agents:
| Agent Name | Agent (Name) | Key Responsibilities |
|-----------|--------------|---------------------|
| Intake & Scoping | Emma | Gathers essential information about the potential deal, including deal type, industry, target profile, objectives, timeline, budget, and specific concerns. It generates an initial Deal Brief. |
| Market & Strategic Analysis | Marcus | Evaluates industry dynamics, competitive landscape, and strategic fit. It leverages the `exa_search` tool to gather real-time market intelligence on trends, key players, and external factors. |
| Financial Valuation & Risk Assessment | Sophia | Performs comprehensive financial health analysis, various valuation methodologies (comparable companies, precedent transactions, DCF), synergy assessment, and a detailed risk assessment (financial, operational, legal, market). |
| Deal Structuring | David | Recommends the optimal transaction structure, considering asset vs. stock purchase, cash vs. stock consideration, earnouts, financing strategies, tax optimization, and deal protection mechanisms. |
| Integration Planning | Nathan | Develops a comprehensive post-merger integration roadmap, including Day 1 priorities, a 100-day plan, functional integration strategies (operations, systems, sales, HR), and synergy realization timelines. |
| Final Recommendation | Alex | Synthesizes all prior agent analyses into a comprehensive, executive-ready M&A Advisory Report, including an executive summary, investment thesis, key risks, deal structure, integration approach, and a clear GO/NO-GO/CONDITIONAL recommendation. |
## How to Set Up
To set up and run the M&A Advisory Swarm, follow these steps:
## Step 1: Setup and Installation
### Prerequisites
| Requirement |
|-----------------------|
| Python 3.8 or higher |
| pip package manager |
1. **Install dependencies:**
Use the following command to download all dependencies.
```bash
# Install Swarms framework
pip install swarms
# Install environment and logging dependencies
pip install python-dotenv loguru
# Install HTTP client and tools
pip install httpx swarms_tools
```
2. **Set up API Keys:**
The `Property Research Agent` utilizes the `exa_search` tool, which requires an `EXA_API_KEY`.
Create a `.env` file in the root directory of your project (or wherever your application loads environment variables) and add your API keys:
```
EXA_API_KEY="YOUR_EXA_API_KEY"
OPENAI_API_KEY="OPENAI_API_KEY"
```
Replace `"YOUR_EXA_API_KEY"` & `"OPENAI_API_KEY"` with your actual API keys.
## Step 2: Running the Mergers & Acquisitions Advisory Swarm
```python
from typing import List
from loguru import logger
from swarms.structs.agent import Agent
from swarms.structs.conversation import Conversation
from swarms.utils.history_output_formatter import history_output_formatter
from swarms_tools import exa_search
# System prompts for each agent
INTAKE_AGENT_PROMPT = """
You are an M&A Intake Specialist responsible for gathering comprehensive information about a potential transaction.
ROLE:
Engage with the user to understand the full context of the potential M&A deal, extracting critical details that will guide subsequent analyses.
RESPONSIBILITIES:
- Conduct a thorough initial interview to understand:
* Transaction type (acquisition, merger, divestiture)
* Industry and sector specifics
* Target company profile and size
* Strategic objectives
* Buyer/seller perspective
* Timeline and urgency
* Budget constraints
* Specific concerns or focus areas
OUTPUT FORMAT:
Provide a comprehensive Deal Brief that includes:
1. Transaction Overview
- Proposed transaction type
- Key parties involved
- Initial strategic rationale
2. Stakeholder Context
- Buyer's background and motivations
- Target company's current position
- Key decision-makers
3. Initial Assessment
- Preliminary strategic fit
- Potential challenges or red flags
- Recommended focus areas for deeper analysis
4. Information Gaps
- Questions that need further clarification
- Additional data points required
IMPORTANT:
- Be thorough and systematic
- Ask probing questions to uncover nuanced details
- Maintain a neutral, professional tone
- Prepare a foundation for subsequent in-depth analysis
"""
MARKET_ANALYSIS_PROMPT = """
You are an M&A Market Intelligence Analyst tasked with conducting comprehensive market research.
ROLE:
Perform an in-depth analysis of market dynamics, competitive landscape, and strategic implications for the potential transaction.
TOOLS:
You have access to the exa_search tool for gathering real-time market intelligence.
RESPONSIBILITIES:
1. Conduct Market Research
- Use exa_search to gather current market insights
- Analyze industry trends, size, and growth potential
- Identify key players and market share distribution
2. Competitive Landscape Analysis
- Map out competitive ecosystem
- Assess target company's market positioning
- Identify potential competitive advantages or vulnerabilities
3. Strategic Fit Evaluation
- Analyze alignment with buyer's strategic objectives
- Assess potential market entry or expansion opportunities
- Evaluate potential for market disruption
4. External Factor Assessment
- Examine regulatory environment
- Analyze technological disruption potential
- Consider macroeconomic impacts
OUTPUT FORMAT:
Provide a comprehensive Market Analysis Report:
1. Market Overview
- Market size and growth trajectory
- Key industry trends
- Competitive landscape summary
2. Strategic Fit Assessment
- Market attractiveness score (1-10)
- Strategic alignment evaluation
- Potential synergies and opportunities
3. Risk and Opportunity Mapping
- Key market opportunities
- Potential competitive threats
- Regulatory and technological risk factors
4. Recommended Next Steps
- Areas requiring deeper investigation
- Initial strategic recommendations
"""
FINANCIAL_VALUATION_PROMPT = """
You are an M&A Financial Analysis and Risk Expert. Perform comprehensive financial evaluation and risk assessment.
RESPONSIBILITIES:
1. Financial Health Analysis
- Analyze revenue trends and quality
- Evaluate profitability metrics (EBITDA, margins)
- Conduct cash flow analysis
- Assess balance sheet strength
- Review working capital requirements
2. Valuation Analysis
- Perform comparable company analysis
- Conduct precedent transaction analysis
- Develop Discounted Cash Flow (DCF) model
- Assess asset-based valuation
3. Synergy and Risk Assessment
- Quantify potential revenue and cost synergies
- Identify financial and operational risks
- Evaluate integration complexity
- Assess potential deal-breakers
OUTPUT FORMAT:
1. Comprehensive Financial Analysis Report
2. Valuation Range (low, mid, high scenarios)
3. Synergy Potential Breakdown
4. Detailed Risk Matrix
5. Recommended Pricing Strategy
"""
DEAL_STRUCTURING_PROMPT = """
You are an M&A Deal Structuring Advisor. Recommend the optimal transaction structure.
RESPONSIBILITIES:
1. Transaction Structure Design
- Evaluate asset vs stock purchase options
- Analyze cash vs stock consideration
- Design earnout provisions
- Develop contingent payment structures
2. Financing Strategy
- Recommend debt/equity mix
- Identify optimal financing sources
- Assess impact on buyer's capital structure
3. Tax and Legal Optimization
- Design tax-efficient structure
- Consider jurisdictional implications
- Minimize tax liabilities
4. Deal Protection Mechanisms
- Develop escrow arrangements
- Design representations and warranties
- Create indemnification provisions
- Recommend non-compete agreements
OUTPUT FORMAT:
1. Recommended Deal Structure
2. Detailed Payment Terms
3. Key Contractual Protections
4. Tax Optimization Strategy
5. Rationale for Proposed Structure
"""
INTEGRATION_PLANNING_PROMPT = """
You are an M&A Integration Planning Expert. Develop a comprehensive post-merger integration roadmap.
RESPONSIBILITIES:
1. Immediate Integration Priorities
- Define critical day-1 actions
- Develop communication strategy
- Identify quick win opportunities
2. 100-Day Integration Plan
- Design organizational structure alignment
- Establish governance framework
- Create detailed integration milestones
3. Functional Integration Strategy
- Plan operations consolidation
- Design systems and technology integration
- Align sales and marketing approaches
- Develop cultural integration plan
4. Synergy Realization
- Create detailed synergy capture timeline
- Establish performance tracking mechanisms
- Define accountability framework
OUTPUT FORMAT:
1. Comprehensive Integration Roadmap
2. Detailed 100-Day Plan
3. Functional Integration Strategies
4. Synergy Realization Timeline
5. Risk Mitigation Recommendations
"""
FINAL_RECOMMENDATION_PROMPT = """
You are the Senior M&A Advisory Partner. Synthesize all analyses into a comprehensive recommendation.
RESPONSIBILITIES:
1. Executive Summary
- Summarize transaction overview
- Highlight strategic rationale
- Articulate key value drivers
2. Investment Thesis Validation
- Assess strategic benefits
- Evaluate financial attractiveness
- Project long-term potential
3. Comprehensive Risk Assessment
- Summarize top risks
- Provide mitigation strategies
- Identify potential deal-breakers
4. Final Recommendation
- Provide clear GO/NO-GO recommendation
- Specify recommended offer range
- Outline key proceeding conditions
OUTPUT FORMAT:
1. Executive-Level Recommendation Report
2. Decision Framework
3. Risk-Adjusted Strategic Perspective
4. Actionable Next Steps
5. Recommendation Confidence Level
"""
class MAAdvisorySwarm:
def __init__(
self,
name: str = "M&A Advisory Swarm",
description: str = "Comprehensive AI-driven M&A advisory system",
max_loops: int = 1,
user_name: str = "M&A Advisor",
output_type: str = "json",
):
self.max_loops = max_loops
self.name = name
self.description = description
self.user_name = user_name
self.output_type = output_type
self.agents = self._initialize_agents()
self.conversation = Conversation()
self.exa_search_results = []
self.search_queries = []
self.current_iteration = 0
self.max_iterations = 1 # Limiting to 1 iteration for full sequential demo
self.analysis_concluded = False
self.handle_initial_processing()
def handle_initial_processing(self):
self.conversation.add(
role="System",
content=f"Company: {self.name}\n"
f"Description: {self.description}\n"
f"Mission: Provide comprehensive M&A advisory for {self.user_name}"
)
def _initialize_agents(self) -> List[Agent]:
return [
Agent(
agent_name="Emma-Intake-Specialist",
agent_description="Gathers comprehensive initial information about the potential M&A transaction.",
system_prompt=INTAKE_AGENT_PROMPT,
max_loops=self.max_loops,
dynamic_temperature_enabled=True,
output_type="final",
),
Agent(
agent_name="Marcus-Market-Analyst",
agent_description="Conducts in-depth market research and competitive analysis.",
system_prompt=MARKET_ANALYSIS_PROMPT,
max_loops=self.max_loops,
dynamic_temperature_enabled=True,
output_type="final",
),
Agent(
agent_name="Sophia-Financial-Analyst",
agent_description="Performs comprehensive financial valuation and risk assessment.",
system_prompt=FINANCIAL_VALUATION_PROMPT,
max_loops=self.max_loops,
dynamic_temperature_enabled=True,
output_type="final",
),
Agent(
agent_name="David-Deal-Structuring-Advisor",
agent_description="Recommends optimal deal structure and terms.",
system_prompt=DEAL_STRUCTURING_PROMPT,
max_loops=self.max_loops,
dynamic_temperature_enabled=True,
output_type="final",
),
Agent(
agent_name="Nathan-Integration-Planner",
agent_description="Develops comprehensive post-merger integration roadmap.",
system_prompt=INTEGRATION_PLANNING_PROMPT,
max_loops=self.max_loops,
dynamic_temperature_enabled=True,
output_type="final",
),
Agent(
agent_name="Alex-Final-Recommendation-Partner",
agent_description="Synthesizes all analyses into a comprehensive recommendation.",
system_prompt=FINAL_RECOMMENDATION_PROMPT,
max_loops=self.max_loops,
dynamic_temperature_enabled=True,
output_type="final",
)
]
def find_agent_by_name(self, name: str) -> Agent:
for agent in self.agents:
if name in agent.agent_name:
return agent
return None
def intake_and_scoping(self, user_input: str):
"""Phase 1: Intake and initial deal scoping"""
emma_agent = self.find_agent_by_name("Intake-Specialist")
emma_output = emma_agent.run(
f"User Input: {user_input}\n\n"
f"Conversation History: {self.conversation.get_str()}\n\n"
f"Analyze the potential M&A transaction, extract key details, and prepare a comprehensive deal brief. "
f"If information is unclear, ask clarifying questions."
)
self.conversation.add(
role="Intake-Specialist", content=emma_output
)
# Extract potential search queries for market research
self.search_queries = self._extract_search_queries(emma_output)
return emma_output
def _extract_search_queries(self, intake_output: str) -> List[str]:
"""Extract search queries from Intake Specialist output"""
queries = []
lines = intake_output.split('\n')
# Look for lines that could be good search queries
for line in lines:
line = line.strip()
# Simple heuristic: lines with potential research keywords
if any(keyword in line.lower() for keyword in ['market', 'industry', 'trend', 'competitor', 'analysis']):
if len(line) > 20: # Ensure query is substantial
queries.append(line)
# Fallback queries if none found
if not queries:
queries = [
"M&A trends in technology sector",
"Market analysis for potential business acquisition",
"Competitive landscape in enterprise software"
]
return queries[:3] # Limit to 3 queries
def market_research(self):
"""Phase 2: Conduct market research using exa_search"""
# Execute exa_search for each query
self.exa_search_results = []
for query in self.search_queries:
result = exa_search(query)
self.exa_search_results.append({
"query": query,
"exa_result": result
})
# Pass results to Market Analysis agent
marcus_agent = self.find_agent_by_name("Market-Analyst")
# Build exa context
exa_context = "\n\n[Exa Market Research Results]\n"
for item in self.exa_search_results:
exa_context += f"Query: {item['query']}\nResults: {item['exa_result']}\n\n"
marcus_output = marcus_agent.run(
f"Conversation History: {self.conversation.get_str()}\n\n"
f"{exa_context}\n"
f"Analyze these market research results. Provide comprehensive market intelligence and strategic insights."
)
self.conversation.add(
role="Market-Analyst", content=marcus_output
)
return marcus_output
def financial_valuation(self):
"""Phase 3: Perform comprehensive financial valuation and risk assessment"""
sophia_agent = self.find_agent_by_name("Financial-Analyst")
sophia_output = sophia_agent.run(
f"Conversation History: {self.conversation.get_str()}\n\n"
f"Perform comprehensive financial analysis and risk assessment based on previous insights."
)
self.conversation.add(
role="Financial-Analyst", content=sophia_output
)
return sophia_output
def deal_structuring(self):
"""Phase 4: Recommend optimal deal structure"""
david_agent = self.find_agent_by_name("Deal-Structuring-Advisor")
david_output = david_agent.run(
f"Conversation History: {self.conversation.get_str()}\n\n"
f"Recommend the optimal transaction structure and terms based on all prior analyses."
)
self.conversation.add(
role="Deal-Structuring-Advisor", content=david_output
)
return david_output
def integration_planning(self):
"""Phase 5: Develop post-merger integration roadmap"""
nathan_agent = self.find_agent_by_name("Integration-Planner")
nathan_output = nathan_agent.run(
f"Conversation History: {self.conversation.get_str()}\n\n"
f"Create a comprehensive integration plan to realize deal value."
)
self.conversation.add(
role="Integration-Planner", content=nathan_output
)
return nathan_output
def final_recommendation(self):
"""Phase 6: Synthesize all analyses into a comprehensive recommendation"""
alex_agent = self.find_agent_by_name("Final-Recommendation-Partner")
alex_output = alex_agent.run(
f"Conversation History: {self.conversation.get_str()}\n\n"
f"Synthesize all agent analyses into a comprehensive, actionable M&A recommendation."
)
self.conversation.add(
role="Final-Recommendation-Partner", content=alex_output
)
return alex_output
def run(self, initial_user_input: str):
"""
Run the M&A advisory swarm with continuous analysis.
Args:
initial_user_input: User's initial M&A transaction details
"""
self.conversation.add(role=self.user_name, content=initial_user_input)
while not self.analysis_concluded and self.current_iteration < self.max_iterations:
self.current_iteration += 1
logger.info(f"Starting analysis iteration {self.current_iteration}")
# Phase 1: Intake and Scoping
print(f"\n{'='*60}")
print("ITERATION - INTAKE AND SCOPING")
print(f"{'='*60}\n")
self.intake_and_scoping(initial_user_input)
# Phase 2: Market Research (with exa_search)
print(f"\n{'='*60}")
print("ITERATION - MARKET RESEARCH")
print(f"{'='*60}\n")
self.market_research()
# Phase 3: Financial Valuation
print(f"\n{'='*60}")
print("ITERATION - FINANCIAL VALUATION")
print(f"{'='*60}\n")
self.financial_valuation()
# Phase 4: Deal Structuring
print(f"\n{'='*60}")
print("ITERATION - DEAL STRUCTURING")
print(f"{'='*60}\n")
self.deal_structuring()
# Phase 5: Integration Planning
print(f"\n{'='*60}")
print("ITERATION - INTEGRATION PLANNING")
print(f"{'='*60}\n")
self.integration_planning()
# Phase 6: Final Recommendation
print(f"\n{'='*60}")
print("ITERATION - FINAL RECOMMENDATION")
print(f"{'='*60}\n")
self.final_recommendation()
# Conclude analysis after one full sequence for demo purposes
self.analysis_concluded = True
# Return formatted conversation history
return history_output_formatter(
self.conversation, type=self.output_type
)
def main():
"""Main entry point for M&A advisory swarm"""
# Example M&A transaction details
transaction_details = """
We are exploring a potential acquisition of DataPulse Analytics by TechNova Solutions.
Transaction Context:
- Buyer: TechNova Solutions (NASDAQ: TNVA) - $500M annual revenue enterprise software company
- Target: DataPulse Analytics - Series B AI-driven analytics startup based in San Francisco
- Primary Objectives:
* Expand predictive analytics capabilities in healthcare and financial services
* Accelerate AI-powered business intelligence product roadmap
* Acquire top-tier machine learning engineering talent
Key Considerations:
- Deep integration of DataPulse's proprietary AI models into TechNova's existing platform
- Retention of key DataPulse leadership and engineering team
- Projected 3-year ROI and synergy potential
- Regulatory and compliance alignment
- Technology stack compatibility
"""
# Initialize the swarm
ma_advisory_swarm = MAAdvisorySwarm(
name="AI-Powered M&A Advisory System",
description="Comprehensive AI-driven M&A advisory and market intelligence platform",
user_name="Corporate Development Team",
output_type="json",
max_loops=1,
)
# Run the swarm
print("\n" + "="*60)
print("INITIALIZING M&A ADVISORY SWARM")
print("="*60 + "\n")
ma_advisory_swarm.run(initial_user_input=transaction_details)
if __name__ == "__main__":
main()
```
## How it Can Be Used for M&A
The M&A Advisory Swarm can be utilized for a variety of M&A tasks, providing an automated and efficient approach to complex deal workflows:
* **Automated Deal Scoping**: Quickly gather and structure initial information about a potential transaction.
* **Real-time Market Intelligence**: Leverage web search capabilities to rapidly research industry trends, competitive landscapes, and strategic fit.
* **Comprehensive Financial & Risk Analysis**: Perform detailed financial evaluations, valuation modeling, synergy assessments, and identify critical risks.
* **Optimized Deal Structuring**: Recommend the most advantageous transaction structures, financing strategies, and deal protection mechanisms.
* **Proactive Integration Planning**: Develop robust integration roadmaps to ensure seamless post-merger transitions and value realization.
* **Executive-Ready Recommendations**: Synthesize complex analyses into clear, actionable recommendations for decision-makers.
By chaining these specialized agents, the M&A Advisory Swarm provides an end-to-end solution for corporate development teams, investment bankers, and M&A professionals, reducing manual effort and increasing the speed and quality of strategic decision-making.
## Contributing to Swarms
| Platform | Link | Description |
| :--------- | :----- | :------------ |
| 📚 Documentation | [docs.swarms.world](https://docs.swarms.world) | Official documentation and guides |
| 📝 Blog | [Medium](https://medium.com/@kyeg) | Latest updates and technical articles |
| 💬 Discord | [Join Discord](https://discord.gg/EamjgSaEQf) | Live chat and community support |
| 🐦 Twitter | [@kyegomez](https://twitter.com/kyegomez) | Latest news and announcements |
| 👥 LinkedIn | [The Swarm Corporation](https://www.linkedin.com/company/the-swarm-corporation) | Professional network and updates |
| 📺 YouTube | [Swarms Channel](https://www.youtube.com/channel/UC9yXyitkbU_WSy7bd_41SqQ) | Tutorials and demos |
| 🎫 Events | [Sign up here](https://lu.ma/5p2jnc2v) | Join our community events |

@ -0,0 +1,339 @@
# Real Estate Swarm
The Real Estate Swarm is a multi-agent system designed to automate and streamline the entire real estate transaction workflow. From lead generation to property maintenance, this swarm orchestrates a series of specialized AI agents to handle various aspects of buying, selling, and managing properties.
## What it Does
The `RealEstateSwarm` operates as a **sequential workflow**, where each agent's output feeds into the next, ensuring a cohesive and comprehensive process. The swarm consists of the following agents:
1. **Lead Generation Agent (Alex)**: Identifies and qualifies potential real estate clients by gathering their property requirements, budget, preferred locations, and investment goals. This agent also uses the `exa_search` tool for initial lead information.
2. **Property Research Agent (Emma)**: Conducts in-depth research on properties matching client criteria and market trends. It leverages the `exa_search` tool to gather up-to-date information on local market trends, property values, investment potential, and neighborhood insights.
3. **Marketing Agent (Jack)**: Develops and executes marketing strategies to promote properties. This includes creating compelling listings, implementing digital marketing campaigns, and managing client interactions.
4. **Transaction Management Agent (Sophia)**: Handles all documentation, legal, and financial aspects of property transactions, ensuring compliance and smooth closing processes.
5. **Property Maintenance Agent (Michael)**: Manages property condition, oversees maintenance and repairs, and prepares properties for sale or rental, including staging and enhancing curb appeal.
## How to Set Up
To set up and run the Real Estate Swarm, follow these steps:
## Step 1: Setup and Installation
### Prerequisites
| Requirement |
|-----------------------|
| Python 3.8 or higher |
| pip package manager |
1. **Install dependencies:**
Use the following command to download all dependencies.
```bash
# Install Swarms framework
pip install swarms
# Install environment and logging dependencies
pip install python-dotenv loguru
# Install HTTP client and tools
pip install httpx swarms_tools
```
2. **Set up API Keys:**
The `Property Research Agent` utilizes the `exa_search` tool, which requires an `EXA_API_KEY`.
Create a `.env` file in the root directory of your project (or wherever your application loads environment variables) and add your API keys:
```
EXA_API_KEY="YOUR_EXA_API_KEY"
OPENAI_API_KEY="OPENAI_API_KEY"
```
Replace `"YOUR_EXA_API_KEY"` & `"OPENAI_API_KEY"` with your actual API keys.
## Step 2: Running the Real Estate Swarm
```python
from swarms import Agent, SequentialWorkflow
import http.client
import json
def get_properties(postal_code: str, min_price: int, max_price: int, limit: int = 1) -> str:
"""
Fetches real estate properties from Realty-in-US API using given zipcode, min price, and max price.
All other payload fields remain constant.
Returns the property's data as a string (JSON-encoded).
"""
payload_dict = {
"limit": limit,
"offset": 0,
"postal_code": postal_code,
"status": ["for_sale", "ready_to_build"],
"sort": {"direction": "desc", "field": "list_date"},
"price_min": min_price,
"price_max": max_price
}
payload = json.dumps(payload_dict)
conn = http.client.HTTPSConnection("realty-in-us.p.rapidapi.com")
headers = {
"x-rapidapi-key": "35ae958601msh5c0eae51c54f989p1463c4jsn098ec5be18b8",
"x-rapidapi-host": "realty-in-us.p.rapidapi.com",
"Content-Type": "application/json"
}
conn.request("POST", "/properties/v3/list", payload, headers)
res = conn.getresponse()
data = res.read()
decoded = data.decode("utf-8")
try:
result_dict = json.loads(decoded)
except Exception:
return decoded
props_data = (
result_dict.get("data", {})
.get("home_search", {})
.get("results", [])
)
if not props_data:
return json.dumps({"error": "No properties found for that query."})
return json.dumps(props_data[:limit])
REQUIREMENTS_ANALYZER_PROMPT = """
You are the Requirements Analyzer Agent for Real Estate.
ROLE:
Extract and clarify requirements from user input to create optimized property search queries.
RESPONSIBILITIES:
- Engage with the user to understand:
* Desired property types and features
* Required amenities and specifications
* Preferred locations (city/area/zip)
* Price/budget range
* Timeline and purchase situation
* Additional constraints or priorities
- Analyze user responses to identify:
* Key search terms and must-have features
* Priority factors in selection
* Deal-breakers or constraints
* Missing or unclear information to be clarified
- Generate search strategies:
* Formulate 3-5 targeted search queries based on user requirements
OUTPUT FORMAT:
Provide a comprehensive requirements analysis:
1. User Profile Summary:
- Property types/requirements of interest
- Key features and specifications
- Location and budget preferences
- Priority factors
2. Search Strategy:
- 3-5 optimized search queries (plain language, suitable for next agent's use)
- Rationale for each query
- Expected property/result types
3. Clarifications Needed:
- Questions to refine search
- Any missing info
IMPORTANT:
- INCLUDE all user responses verbatim in your analysis.
- Format queries clearly for the next agent.
- Ask follow-up questions if requirements are unclear.
"""
PROPERTY_RESEARCH_PROMPT = """
You are the Property Research Agent for Real Estate.
ROLE:
Conduct in-depth research on properties that match client criteria and market trends.
TOOLS:
You have access to get_properties. Use get_properties to find up-to-date and relevant information about properties for sale. Use ALL search queries produced by the previous agent (REQUIREMENTS_ANALYZER) as arguments to get_properties.
RESPONSIBILITIES:
- Perform property research using get_properties:
* Seek properties by each proposed query and shortlist promising results.
* Analyze each result by price, location, features, and comparables.
* Highlight market trends if apparent from results.
* Assess investment or suitability potential.
- Structure and cite property search findings.
OUTPUT FORMAT:
Provide a structured property research report:
1. Shortlist of matching properties (show summaries of each from get_properties results)
2. Detailed property analysis for each option
3. Insights on price, area, trends
4. Investment or suitability assessment
5. Recommendations for client
INSTRUCTIONS:
- Always use get_properties for up-to-date listing info; do not fabricate.
- Clearly indicate which properties are found from which query.
"""
MARKETING_PROMPT = """
You are the Marketing Agent for Real Estate.
ROLE:
Develop and execute marketing strategies to promote properties and attract potential buyers.
RESPONSIBILITIES:
- Create compelling property listings:
* Professional photography
* Detailed property descriptions
* Highlight unique selling points
- Implement digital marketing strategies:
* Social media campaigns
* Email marketing
* Online property platforms
* Targeted advertising
- Manage client interactions:
* Respond to property inquiries
* Schedule property viewings
* Facilitate initial negotiations
OUTPUT FORMAT:
Provide a comprehensive marketing report:
1. Marketing strategy overview
2. Property listing details
3. Marketing channel performance
4. Client inquiry and viewing logs
5. Initial negotiation summaries
"""
TRANSACTION_MANAGEMENT_PROMPT = """
You are the Transaction Management Agent for Real Estate.
ROLE:
Handle all documentation, legal, and financial aspects of property transactions.
RESPONSIBILITIES:
- Manage transaction documentation:
* Prepare purchase agreements
* Coordinate legal paperwork
* Ensure compliance with real estate regulations
- Facilitate transaction process:
* Coordinate with attorneys
* Liaise with lenders
* Manage escrow processes
* Coordinate property inspections
- Ensure smooth closing:
* Verify all financial requirements
* Coordinate final document signings
* Manage fund transfers
OUTPUT FORMAT:
Provide a detailed transaction management report:
1. Transaction document status
2. Legal and financial coordination details
3. Inspection and verification logs
4. Closing process timeline
5. Recommendations for transaction completion
"""
PROPERTY_MAINTENANCE_PROMPT = """
You are the Property Maintenance Agent for Real Estate.
ROLE:
Manage property condition, maintenance, and preparation for sale or rental.
RESPONSIBILITIES:
- Conduct regular property inspections:
* Assess property condition
* Identify maintenance needs
* Ensure safety standards
- Coordinate maintenance and repairs:
* Hire and manage contractors
* Oversee repair and renovation work
* Manage landscaping and cleaning
- Prepare properties for market:
* Stage properties
* Enhance curb appeal
* Recommend cost-effective improvements
OUTPUT FORMAT:
Provide a comprehensive property maintenance report:
1. Inspection findings
2. Maintenance and repair logs
3. Improvement recommendations
4. Property readiness status
5. Contractor and service provider details
"""
def main():
user_requirements = """
I'm looking for a spacious 3-bedroom apartment with modern amenities.
- Price: $1,000,000 - $1,500,000
- Location: Downtown Manhattan, Upper East Side
- Investment: Long-term, high ROI preferred
- Contact: john.doe@email.com, +1-555-123-4567
- Timeline: Within the next 3 months
- Financials: Pre-approved for mortgage
"""
agents = [
Agent(
agent_name="Alex-Requirements-Analyzer",
agent_description="Analyzes user property requirements and creates optimized property search queries.",
system_prompt=REQUIREMENTS_ANALYZER_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
),
Agent(
agent_name="Emma-Property-Research",
agent_description="Conducts comprehensive property search and market analysis.",
system_prompt=PROPERTY_RESEARCH_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
tools=[get_properties],
),
Agent(
agent_name="Jack-Marketing",
agent_description="Develops and executes marketing strategies for properties.",
system_prompt=MARKETING_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
),
Agent(
agent_name="Sophia-Transaction-Management",
agent_description="Handles legal, financial, and document aspects of property transactions.",
system_prompt=TRANSACTION_MANAGEMENT_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
),
Agent(
agent_name="Michael-Property-Maintenance",
agent_description="Oversees property condition, maintenance, and market readiness.",
system_prompt=PROPERTY_MAINTENANCE_PROMPT,
model_name="gpt-4.1",
max_loops=1,
temperature=0.7,
),
]
workflow = SequentialWorkflow(
name="real-estate-sequential-workflow",
agents=agents,
max_loops=1,
team_awareness=True,
)
workflow.run(user_requirements)
if __name__ == "__main__":
main()
```
## How it Can Be Used for Real Estate
The Real Estate Swarm can be utilized for a variety of real estate tasks, providing an automated and efficient approach to complex workflows:
* **Automated Lead Qualification**: Automatically gather and assess potential client needs and financial readiness.
* **Comprehensive Property Analysis**: Rapidly research and generate detailed reports on properties and market trends using real-time web search capabilities.
* **Streamlined Marketing**: Develop and execute marketing strategies, including listing creation and social media campaigns.
* **Efficient Transaction Management**: Automate the handling of legal documents, financial coordination, and closing processes.
* **Proactive Property Maintenance**: Manage property upkeep and prepare assets for optimal market presentation.
By chaining these specialized agents, the Real Estate Swarm provides an end-to-end solution for real estate professionals, reducing manual effort and increasing operational efficiency.
## Contributing to Swarms
| Platform | Link | Description |
|----------|------|-------------|
| 📚 Documentation | [docs.swarms.world](https://docs.swarms.world) | Official documentation and guides |
| 📝 Blog | [Medium](https://medium.com/@kyeg) | Latest updates and technical articles |
| 💬 Discord | [Join Discord](https://discord.gg/EamjgSaEQf) | Live chat and community support |
| 🐦 Twitter | [@kyegomez](https://twitter.com/kyegomez) | Latest news and announcements |
| 👥 LinkedIn | [The Swarm Corporation](https://www.linkedin.com/company/the-swarm-corporation) | Professional network and updates |
| 📺 YouTube | [Swarms Channel](https://www.youtube.com/channel/UC9yXyitkbU_WSy7bd_41SqQ) | Tutorials and demos |
| 🎫 Events | [Sign up here](https://lu.ma/5p2jnc2v) | Join our community events |

@ -413,6 +413,9 @@ nav:
- Gold ETF Research with HeavySwarm: "examples/gold_etf_research.md"
- Hiring Swarm: "examples/hiring_swarm.md"
- Advanced Research: "examples/av.md"
- Real Estate Swarm: "examples/realestate_swarm.md"
- Job Finding Swarm: "examples/job_finding.md"
- Mergers & Aquisition (M&A) Advisory Swarm: "examples/ma_swarm.md"
- Tools & Integrations:
- Web Search with Exa: "examples/exa_search.md"

Loading…
Cancel
Save