Spaces:
Runtime error
Runtime error
| 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 generate_completion(role, task, content): | |
| """Generate a completion using OpenAI.""" | |
| response = client.chat.completions.create( | |
| model="gpt-4o-mini", | |
| messages=[ | |
| {"role": "system", "content": f"You are a {role}. {task}"}, | |
| {"role": "user", "content": content} | |
| ] | |
| ) | |
| return response.choices[0].message.content | |
| def analyze_website_content(content): | |
| """Analyze the scraped website content using OpenAI.""" | |
| analysis = generate_completion( | |
| "marketing analyst", | |
| "Analyze the following website content and provide key insights for marketing strategy.", | |
| content | |
| ) | |
| return {"analysis": analysis} | |
| def generate_copy(brief): | |
| """Generate marketing copy based on a brief using OpenAI.""" | |
| copy = generate_completion( | |
| "copywriter", | |
| "Create compelling marketing copy based on the following brief.", | |
| brief | |
| ) | |
| return {"copy": copy} | |
| def create_campaign_idea(target_audience, goals): | |
| """Create a campaign idea based on target audience and goals using OpenAI.""" | |
| campaign_idea = generate_completion( | |
| "marketing strategist", | |
| "Create an innovative campaign idea based on the target audience and goals provided.", | |
| f"Target Audience: {target_audience}\nGoals: {goals}" | |
| ) | |
| return {"campaign_idea": campaign_idea} | |
| 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) |