Files
ALwrity/backend/models/research_trends_models.py

52 lines
2.4 KiB
Python

"""
Google Trends Data Models
Pydantic models for Google Trends API responses.
"""
from typing import List, Dict, Any, Optional
from pydantic import BaseModel, Field
from datetime import datetime
class GoogleTrendsData(BaseModel):
"""Structured Google Trends data."""
interest_over_time: List[Dict[str, Any]] = Field(default_factory=list, description="Time series interest data")
interest_by_region: List[Dict[str, Any]] = Field(default_factory=list, description="Geographic interest data")
related_topics: Dict[str, List[Dict[str, Any]]] = Field(
default_factory=dict,
description="Related topics: {top: [...], rising: [...]}"
)
related_queries: Dict[str, List[Dict[str, Any]]] = Field(
default_factory=dict,
description="Related queries: {top: [...], rising: [...]}"
)
trending_searches: Optional[List[str]] = Field(None, description="Current trending searches")
timeframe: str = Field(..., description="Timeframe used (e.g., 'today 12-m')")
geo: str = Field(..., description="Geographic region (e.g., 'US', 'GB')")
keywords: List[str] = Field(..., description="Keywords analyzed")
timestamp: datetime = Field(default_factory=datetime.utcnow, description="When data was fetched")
class TrendsConfig(BaseModel):
"""Google Trends configuration with AI-driven justifications."""
enabled: bool = Field(True, description="Whether trends analysis is enabled")
keywords: List[str] = Field(..., description="AI-optimized keywords for trends analysis")
keywords_justification: str = Field(..., description="Why these keywords were chosen")
timeframe: str = Field(default="today 12-m", description="Timeframe: 'today 1-y', 'today 12-m', 'all', etc.")
timeframe_justification: str = Field(..., description="Why this timeframe was chosen")
geo: str = Field(default="US", description="Country code (e.g., 'US', 'GB', 'IN')")
geo_justification: str = Field(..., description="Why this geographic region was chosen")
expected_insights: List[str] = Field(
default_factory=list,
description="What insights trends will uncover for content generation"
)
class TrendsAnalysisResponse(BaseModel):
"""Response from trends analysis endpoint."""
success: bool
data: Optional[GoogleTrendsData] = None
error_message: Optional[str] = None
cached: bool = Field(False, description="Whether data was served from cache")