114 lines
5.5 KiB
Python
114 lines
5.5 KiB
Python
"""Pydantic models for Facebook Ad Copy functionality."""
|
|
|
|
from typing import Optional, List, Dict, Any
|
|
from pydantic import BaseModel, Field
|
|
from enum import Enum
|
|
|
|
|
|
class AdObjective(str, Enum):
|
|
"""Ad objective options."""
|
|
BRAND_AWARENESS = "Brand awareness"
|
|
REACH = "Reach"
|
|
TRAFFIC = "Traffic"
|
|
ENGAGEMENT = "Engagement"
|
|
APP_INSTALLS = "App installs"
|
|
VIDEO_VIEWS = "Video views"
|
|
LEAD_GENERATION = "Lead generation"
|
|
MESSAGES = "Messages"
|
|
CONVERSIONS = "Conversions"
|
|
CATALOG_SALES = "Catalog sales"
|
|
STORE_TRAFFIC = "Store traffic"
|
|
CUSTOM = "Custom"
|
|
|
|
|
|
class AdFormat(str, Enum):
|
|
"""Ad format options."""
|
|
SINGLE_IMAGE = "Single image"
|
|
SINGLE_VIDEO = "Single video"
|
|
CAROUSEL = "Carousel"
|
|
SLIDESHOW = "Slideshow"
|
|
COLLECTION = "Collection"
|
|
INSTANT_EXPERIENCE = "Instant experience"
|
|
|
|
|
|
class TargetAge(str, Enum):
|
|
"""Target age groups."""
|
|
TEENS = "13-17"
|
|
YOUNG_ADULTS = "18-24"
|
|
MILLENNIALS = "25-34"
|
|
GEN_X = "35-44"
|
|
MIDDLE_AGED = "45-54"
|
|
SENIORS = "55-64"
|
|
ELDERLY = "65+"
|
|
CUSTOM = "Custom"
|
|
|
|
|
|
class AdBudget(str, Enum):
|
|
"""Ad budget ranges."""
|
|
SMALL = "$10-50/day"
|
|
MEDIUM = "$50-200/day"
|
|
LARGE = "$200-1000/day"
|
|
ENTERPRISE = "$1000+/day"
|
|
CUSTOM = "Custom"
|
|
|
|
|
|
class TargetingOptions(BaseModel):
|
|
"""Targeting options for the ad."""
|
|
age_group: TargetAge = Field(..., description="Target age group")
|
|
custom_age: Optional[str] = Field(None, description="Custom age range if 'Custom' is selected")
|
|
gender: Optional[str] = Field(None, description="Gender targeting")
|
|
location: Optional[str] = Field(None, description="Geographic targeting")
|
|
interests: Optional[str] = Field(None, description="Interest-based targeting")
|
|
behaviors: Optional[str] = Field(None, description="Behavior-based targeting")
|
|
lookalike_audience: Optional[str] = Field(None, description="Lookalike audience description")
|
|
|
|
|
|
class FacebookAdCopyRequest(BaseModel):
|
|
"""Request model for Facebook ad copy generation."""
|
|
business_type: str = Field(..., description="Type of business")
|
|
product_service: str = Field(..., description="Product or service being advertised")
|
|
ad_objective: AdObjective = Field(..., description="Main objective of the ad campaign")
|
|
custom_objective: Optional[str] = Field(None, description="Custom objective if 'Custom' is selected")
|
|
ad_format: AdFormat = Field(..., description="Format of the ad")
|
|
target_audience: str = Field(..., description="Target audience description")
|
|
targeting_options: TargetingOptions = Field(..., description="Detailed targeting options")
|
|
unique_selling_proposition: str = Field(..., description="What makes your offer unique")
|
|
offer_details: Optional[str] = Field(None, description="Special offers, discounts, or promotions")
|
|
budget_range: AdBudget = Field(..., description="Ad budget range")
|
|
custom_budget: Optional[str] = Field(None, description="Custom budget if 'Custom' is selected")
|
|
campaign_duration: Optional[str] = Field(None, description="How long the campaign will run")
|
|
competitor_analysis: Optional[str] = Field(None, description="Information about competitor ads")
|
|
brand_voice: Optional[str] = Field(None, description="Brand voice and tone guidelines")
|
|
compliance_requirements: Optional[str] = Field(None, description="Any compliance or regulatory requirements")
|
|
|
|
|
|
class AdCopyVariations(BaseModel):
|
|
"""Different variations of ad copy."""
|
|
headline_variations: List[str] = Field(..., description="Multiple headline options")
|
|
primary_text_variations: List[str] = Field(..., description="Multiple primary text options")
|
|
description_variations: List[str] = Field(..., description="Multiple description options")
|
|
cta_variations: List[str] = Field(..., description="Multiple call-to-action options")
|
|
|
|
|
|
class AdPerformancePredictions(BaseModel):
|
|
"""Predicted ad performance metrics."""
|
|
estimated_reach: str = Field(..., description="Estimated reach")
|
|
estimated_ctr: str = Field(..., description="Estimated click-through rate")
|
|
estimated_cpc: str = Field(..., description="Estimated cost per click")
|
|
estimated_conversions: str = Field(..., description="Estimated conversions")
|
|
optimization_score: str = Field(..., description="Overall optimization score")
|
|
|
|
|
|
class FacebookAdCopyResponse(BaseModel):
|
|
"""Response model for Facebook ad copy generation."""
|
|
success: bool = Field(..., description="Whether the generation was successful")
|
|
primary_ad_copy: Optional[Dict[str, str]] = Field(None, description="Primary ad copy with headline, text, description")
|
|
ad_variations: Optional[AdCopyVariations] = Field(None, description="Multiple variations for A/B testing")
|
|
targeting_suggestions: Optional[List[str]] = Field(None, description="Additional targeting suggestions")
|
|
creative_suggestions: Optional[List[str]] = Field(None, description="Creative and visual suggestions")
|
|
performance_predictions: Optional[AdPerformancePredictions] = Field(None, description="Performance predictions")
|
|
optimization_tips: Optional[List[str]] = Field(None, description="Optimization tips for better performance")
|
|
compliance_notes: Optional[List[str]] = Field(None, description="Compliance and policy considerations")
|
|
budget_recommendations: Optional[List[str]] = Field(None, description="Budget allocation recommendations")
|
|
error: Optional[str] = Field(None, description="Error message if generation failed")
|
|
metadata: Optional[Dict[str, Any]] = Field(None, description="Additional metadata about the generation") |