68 lines
3.5 KiB
Python
68 lines
3.5 KiB
Python
"""Pydantic models for Facebook Group Post functionality."""
|
|
|
|
from typing import Optional, List, Dict, Any
|
|
from pydantic import BaseModel, Field
|
|
from enum import Enum
|
|
|
|
|
|
class GroupType(str, Enum):
|
|
"""Group type options."""
|
|
INDUSTRY = "Industry/Professional"
|
|
HOBBY = "Hobby/Interest"
|
|
LOCAL = "Local community"
|
|
SUPPORT = "Support group"
|
|
EDUCATIONAL = "Educational"
|
|
BUSINESS = "Business networking"
|
|
LIFESTYLE = "Lifestyle"
|
|
CUSTOM = "Custom"
|
|
|
|
|
|
class PostPurpose(str, Enum):
|
|
"""Post purpose in group."""
|
|
SHARE_KNOWLEDGE = "Share knowledge"
|
|
ASK_QUESTION = "Ask question"
|
|
PROMOTE_BUSINESS = "Promote business"
|
|
BUILD_RELATIONSHIPS = "Build relationships"
|
|
PROVIDE_VALUE = "Provide value"
|
|
SEEK_ADVICE = "Seek advice"
|
|
ANNOUNCE_NEWS = "Announce news"
|
|
CUSTOM = "Custom"
|
|
|
|
|
|
class GroupRules(BaseModel):
|
|
"""Group rules and guidelines."""
|
|
no_promotion: bool = Field(default=False, description="No promotion allowed")
|
|
value_first: bool = Field(default=True, description="Must provide value first")
|
|
no_links: bool = Field(default=False, description="No external links allowed")
|
|
community_focused: bool = Field(default=True, description="Must be community-focused")
|
|
relevant_only: bool = Field(default=True, description="Only relevant content allowed")
|
|
|
|
|
|
class FacebookGroupPostRequest(BaseModel):
|
|
"""Request model for Facebook group post generation."""
|
|
group_name: str = Field(..., description="Name of the Facebook group")
|
|
group_type: GroupType = Field(..., description="Type of group")
|
|
custom_group_type: Optional[str] = Field(None, description="Custom group type if 'Custom' is selected")
|
|
post_purpose: PostPurpose = Field(..., description="Purpose of the post")
|
|
custom_purpose: Optional[str] = Field(None, description="Custom purpose if 'Custom' is selected")
|
|
business_type: str = Field(..., description="Your business type")
|
|
topic: str = Field(..., description="Main topic or subject of the post")
|
|
target_audience: str = Field(..., description="Target audience within the group")
|
|
value_proposition: str = Field(..., description="What value are you providing to the group")
|
|
group_rules: GroupRules = Field(default_factory=GroupRules, description="Group rules to follow")
|
|
include: Optional[str] = Field(None, description="Elements to include")
|
|
avoid: Optional[str] = Field(None, description="Elements to avoid")
|
|
call_to_action: Optional[str] = Field(None, description="Desired call-to-action")
|
|
|
|
|
|
class FacebookGroupPostResponse(BaseModel):
|
|
"""Response model for Facebook group post generation."""
|
|
success: bool = Field(..., description="Whether the generation was successful")
|
|
content: Optional[str] = Field(None, description="Generated group post content")
|
|
engagement_starters: Optional[List[str]] = Field(None, description="Questions or prompts to encourage engagement")
|
|
value_highlights: Optional[List[str]] = Field(None, description="Key value points highlighted in the post")
|
|
community_guidelines: Optional[List[str]] = Field(None, description="How the post follows community guidelines")
|
|
follow_up_suggestions: Optional[List[str]] = Field(None, description="Suggestions for follow-up engagement")
|
|
relationship_building_tips: Optional[List[str]] = Field(None, description="Tips for building relationships in the group")
|
|
error: Optional[str] = Field(None, description="Error message if generation failed")
|
|
metadata: Optional[Dict[str, Any]] = Field(None, description="Additional metadata about the generation") |