Research component integration, Copilotkit implementation, SEO copilotkit implementation, Wix SEO metadata complete, Wix SEO metadata review
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional, Dict, Any
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class PersonaInfo(BaseModel):
|
||||
@@ -50,6 +51,51 @@ class GroundingMetadata(BaseModel):
|
||||
web_search_queries: List[str] = []
|
||||
|
||||
|
||||
class ResearchMode(str, Enum):
|
||||
"""Research modes for different depth levels."""
|
||||
BASIC = "basic"
|
||||
COMPREHENSIVE = "comprehensive"
|
||||
TARGETED = "targeted"
|
||||
|
||||
|
||||
class SourceType(str, Enum):
|
||||
"""Types of sources to include in research."""
|
||||
WEB = "web"
|
||||
ACADEMIC = "academic"
|
||||
NEWS = "news"
|
||||
INDUSTRY = "industry"
|
||||
EXPERT = "expert"
|
||||
|
||||
|
||||
class DateRange(str, Enum):
|
||||
"""Date range filters for research."""
|
||||
LAST_WEEK = "last_week"
|
||||
LAST_MONTH = "last_month"
|
||||
LAST_3_MONTHS = "last_3_months"
|
||||
LAST_6_MONTHS = "last_6_months"
|
||||
LAST_YEAR = "last_year"
|
||||
ALL_TIME = "all_time"
|
||||
|
||||
|
||||
class ResearchProvider(str, Enum):
|
||||
"""Research provider options."""
|
||||
GOOGLE = "google" # Gemini native grounding
|
||||
EXA = "exa" # Exa neural search
|
||||
|
||||
|
||||
class ResearchConfig(BaseModel):
|
||||
"""Configuration for research execution."""
|
||||
mode: ResearchMode = ResearchMode.BASIC
|
||||
provider: ResearchProvider = ResearchProvider.GOOGLE
|
||||
date_range: Optional[DateRange] = None
|
||||
source_types: List[SourceType] = []
|
||||
max_sources: int = 10
|
||||
include_statistics: bool = True
|
||||
include_expert_quotes: bool = True
|
||||
include_competitors: bool = True
|
||||
include_trends: bool = True
|
||||
|
||||
|
||||
class BlogResearchRequest(BaseModel):
|
||||
keywords: List[str]
|
||||
topic: Optional[str] = None
|
||||
@@ -58,6 +104,8 @@ class BlogResearchRequest(BaseModel):
|
||||
tone: Optional[str] = None
|
||||
word_count_target: Optional[int] = 1500
|
||||
persona: Optional[PersonaInfo] = None
|
||||
research_mode: Optional[ResearchMode] = ResearchMode.BASIC
|
||||
config: Optional[ResearchConfig] = None
|
||||
|
||||
|
||||
class BlogResearchResponse(BaseModel):
|
||||
|
||||
@@ -34,6 +34,7 @@ class APIProvider(enum.Enum):
|
||||
METAPHOR = "metaphor"
|
||||
FIRECRAWL = "firecrawl"
|
||||
STABILITY = "stability"
|
||||
EXA = "exa"
|
||||
|
||||
class BillingCycle(enum.Enum):
|
||||
MONTHLY = "monthly"
|
||||
@@ -66,6 +67,7 @@ class SubscriptionPlan(Base):
|
||||
metaphor_calls_limit = Column(Integer, default=0)
|
||||
firecrawl_calls_limit = Column(Integer, default=0)
|
||||
stability_calls_limit = Column(Integer, default=0) # Image generation
|
||||
exa_calls_limit = Column(Integer, default=0) # Exa neural search
|
||||
|
||||
# Token Limits (for LLM providers)
|
||||
gemini_tokens_limit = Column(Integer, default=0)
|
||||
@@ -182,6 +184,7 @@ class UsageSummary(Base):
|
||||
metaphor_calls = Column(Integer, default=0)
|
||||
firecrawl_calls = Column(Integer, default=0)
|
||||
stability_calls = Column(Integer, default=0)
|
||||
exa_calls = Column(Integer, default=0)
|
||||
|
||||
# Token Usage
|
||||
gemini_tokens = Column(Integer, default=0)
|
||||
@@ -199,6 +202,7 @@ class UsageSummary(Base):
|
||||
metaphor_cost = Column(Float, default=0.0)
|
||||
firecrawl_cost = Column(Float, default=0.0)
|
||||
stability_cost = Column(Float, default=0.0)
|
||||
exa_cost = Column(Float, default=0.0)
|
||||
|
||||
# Totals
|
||||
total_calls = Column(Integer, default=0)
|
||||
|
||||
Reference in New Issue
Block a user