import os from firecrawl import FirecrawlApp from swarm import Agent from swarm.repl import run_demo_loop import dotenv from openai import OpenAI dotenv.load_dotenv() # Initialize FirecrawlApp and OpenAI app = FirecrawlApp(api_key=os.getenv("FIRECRAWL_API_KEY")) client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) def scrape_website(url): """Scrape a website using Firecrawl.""" scrape_status = app.scrape_url( url, params={'formats': ['markdown']} ) return scrape_status def analyze_website_content(content): """Analyze the scraped website content using OpenAI.""" response = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "You are a marketing analyst. Analyze the following website content and provide key insights for marketing strategy."}, {"role": "user", "content": content} ] ) return {"analysis": response.choices[0].message.content} def generate_copy(brief): """Generate marketing copy based on a brief using OpenAI.""" response = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "You are a copywriter. Create compelling marketing copy based on the following brief."}, {"role": "user", "content": brief} ] ) return {"copy": response.choices[0].message.content} def create_campaign_idea(target_audience, goals): """Create a campaign idea based on target audience and goals using OpenAI.""" response = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "You are a marketing strategist. Create an innovative campaign idea based on the target audience and goals provided."}, {"role": "user", "content": f"Target Audience: {target_audience}\nGoals: {goals}"} ] ) return {"campaign_idea": response.choices[0].message.content} def handoff_to_copywriter(): """Hand off the campaign idea to the copywriter agent.""" return copywriter_agent def handoff_to_analyst(): """Hand off the website content to the analyst agent.""" return analyst_agent def handoff_to_campaign_idea(): """Hand off the target audience and goals to the campaign idea agent.""" return campaign_idea_agent def handoff_to_website_scraper(): """Hand off the url to the website scraper agent.""" return website_scraper_agent user_interface_agent = Agent( name="User Interface Agent", instructions="You are a user interface agent that handles all interactions with the user. You need to always start with a URL that the user wants to create a marketing strategy for. Ask clarification questions if needed. Be concise.", functions=[handoff_to_website_scraper], ) website_scraper_agent = Agent( name="Website Scraper Agent", instructions="You are a website scraper agent specialized in scraping website content.", functions=[scrape_website, handoff_to_analyst], ) analyst_agent = Agent( name="Analyst Agent", instructions="You are an analyst agent that examines website content and provides insights for marketing strategies. Be concise.", functions=[analyze_website_content, handoff_to_campaign_idea], ) campaign_idea_agent = Agent( name="Campaign Idea Agent", instructions="You are a campaign idea agent that creates innovative marketing campaign ideas based on website content and target audience. Be concise.", functions=[create_campaign_idea, handoff_to_copywriter], ) copywriter_agent = Agent( name="Copywriter Agent", instructions="You are a copywriter agent specialized in creating compelling marketing copy based on website content and campaign ideas. Be concise.", functions=[generate_copy], ) if __name__ == "__main__": # Run the demo loop with the user interface agent run_demo_loop(user_interface_agent, stream=True)