Download app.py from decodingdatascience/fromprompttopost: direct link, hf CLI and curl.
- Browser
- Download file 5.5 kB
-
https://huggingface.co/spaces/decodingdatascience/fromprompttopost/resolve/main/app.py
- Command line
-
hf download hf://spaces/decodingdatascience/fromprompttopost/app.py
-
curl -L -o app.py https://huggingface.co/spaces/decodingdatascience/fromprompttopost/resolve/main/app.py
5.5 kB
| from crewai import Agent, Task, Crew | |
| import gradio as gr | |
| import re | |
| from datetime import datetime | |
| from pathlib import Path | |
| import os | |
| from openai import OpenAI # make sure `openai` is in requirements.txt | |
| # ---- OpenAI setup (explicit) ------------------------------------------------- | |
| OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") | |
| if not OPENAI_API_KEY: | |
| raise RuntimeError( | |
| "OPENAI_API_KEY is not set. In your Hugging Face Space, go to " | |
| "Settings → Secrets and add OPENAI_API_KEY." | |
| ) | |
| # ---------- Agents ---------- | |
| lead_market_analyst = Agent( | |
| role="Lead Market Analyst", | |
| goal="Deliver sharp, data-driven market insights for {product_brand}", | |
| backstory=( | |
| "A senior analyst skilled in competitor intelligence, audience segmentation, " | |
| "channel dynamics, and market sizing, with a bias for actionable insights." | |
| ), | |
| allow_delegation=False, | |
| verbose=True | |
| ) | |
| chief_marketing_strategist = Agent( | |
| role="Chief Marketing Strategist", | |
| goal="Turn research into a focused, measurable go-to-market strategy for {product_brand}", | |
| backstory=( | |
| "A veteran strategist who crafts positioning, messaging pillars, channel mix, " | |
| "and KPI frameworks—aligning cross-functional stakeholders and timelines." | |
| ), | |
| # Manager/orchestrator: can hand off sub-tasks or ask questions to teammates | |
| allow_delegation=True, | |
| verbose=True | |
| ) | |
| creative_content_creator = Agent( | |
| role="Creative Content Creator", | |
| goal="Transform the strategy into compelling creative concepts and a content calendar", | |
| backstory=( | |
| "A concept-to-copy creative who converts strategy into campaign ideas, ad copy, " | |
| "social posts, and SEO-ready long-form content." | |
| ), | |
| allow_delegation=False, | |
| verbose=True | |
| ) | |
| # ---------- Crew runner ---------- | |
| def run_crewai_marketing_strategy(product_brand: str, target_audience: str, objective: str): | |
| # Compose a shared topic string for clarity across tasks | |
| topic = f"{product_brand} | Audience: {target_audience} | Objective: {objective}" | |
| # 1) Market Analysis | |
| market_analysis_task = Task( | |
| description=( | |
| "Conduct a concise but thorough market analysis for the topic: {topic}. " | |
| "Cover: (1) ICP & segments, (2) JTBD/pain points & objections, " | |
| "(3) competitive landscape & whitespace, (4) demand signals & seasonality, " | |
| "(5) channel dynamics (search/social/email/partners/events), " | |
| "(6) keyword themes & content gaps, (7) risks/assumptions." | |
| ), | |
| expected_output=( | |
| "A structured brief with bullet points for each section above, " | |
| "ending with a 5–8 point summary of the most actionable insights." | |
| ), | |
| agent=lead_market_analyst, | |
| input_variables={"topic": topic} | |
| ) | |
| # 2) Strategy Formulation (manager) | |
| strategy_task = Task( | |
| description=( | |
| "Using the Market Analysis brief, craft a go-to-market strategy for {topic}. " | |
| "Include: positioning statement, value prop, 3–5 messaging pillars, " | |
| "priority segments, channel mix with rationale, offer/CTA ideas, " | |
| "90-day roadmap (phases & owners), KPI tree (primary/leading indicators), " | |
| "and a lightweight budget allocation (% by channel)." | |
| ), | |
| expected_output=( | |
| "A strategy document with clear sections as listed, plus a one-page executive summary." | |
| ), | |
| agent=chief_marketing_strategist, | |
| input_variables={"topic": topic}, | |
| context=[market_analysis_task] | |
| ) | |
| # 3) Creative & Content Plan | |
| creative_task = Task( | |
| description=( | |
| "Based on the Strategy, produce: (a) 3 campaign concepts (hook, angle, proof), " | |
| "(b) ad copy variants (paid search, paid social), " | |
| "(c) a 4-week content calendar (blog/LI/X/YouTube/Newsletter) with titles, " | |
| "briefs, CTAs, and intended KPIs, and (d) landing-page wireframe outline " | |
| "(hero, value blocks, social proof, FAQ)." | |
| ), | |
| expected_output=( | |
| "Campaign concepts + copy, a tabular content calendar, and a structured LP outline." | |
| ), | |
| agent=creative_content_creator, | |
| input_variables={"topic": topic}, | |
| context=[strategy_task] | |
| ) | |
| crew = Crew( | |
| agents=[lead_market_analyst, chief_marketing_strategist, creative_content_creator], | |
| tasks=[market_analysis_task, strategy_task, creative_task] | |
| ) | |
| result = crew.kickoff() | |
| return result | |
| # ---------- Gradio app ---------- | |
| def generate_strategy(product_brand, target_audience, objective): | |
| return run_crewai_marketing_strategy(product_brand, target_audience, objective) | |
| iface = gr.Interface( | |
| fn=generate_strategy, | |
| inputs=[ | |
| gr.Textbox(lines=1, label="Product / Brand", placeholder="e.g., SaaS analytics platform"), | |
| gr.Textbox(lines=1, label="Target Audience", placeholder="e.g., mid-market product managers in EMEA"), | |
| gr.Textbox(lines=1, label="Primary Objective", placeholder="e.g., drive free trials / demo requests") | |
| ], | |
| outputs=gr.Textbox(lines=28, label="Marketing Strategy & Content Plan"), | |
| title="DDS • AI Crew for Marketing Strategy", | |
| description="Provide brand, audience, and objective. The crew analyzes the market, builds a GTM strategy, and outputs creative + a content calendar." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |