ai-seo-analyzer / models.py
lsdf's picture
Tune optimizer acceptance policy and add optimization modes
eb8813a
raw
history blame
3.11 kB
from pydantic import BaseModel, Field
from typing import List, Dict, Optional, Any
class CompetitorText(BaseModel):
id: int
text: str
class AnalysisRequest(BaseModel):
target_text: str # Текст пользователя
competitors: List[str] # Список текстов конкурентов
keywords: List[str] # Список ключевых фраз (сырых)
language: str = "en" # en, ru, de, es, it, pl, pt
target_title: str = "" # Title пользователя
competitor_titles: List[str] = Field(default_factory=list) # Title конкурентов
class AnalysisResponse(BaseModel):
ngram_stats: dict # Статистика униграм/биграм
bm25_recommendations: List[dict] # Рекомендации "добавить/убрать"
bert_analysis: Dict[str, Any] # Векторный анализ
word_counts: Dict[str, Any] # {'target': 500, 'competitors': [600, 450], 'avg': 525}
title_analysis: Dict[str, Any] = Field(default_factory=dict) # Анализ Title
class SemanticAnalyzeRequest(BaseModel):
text: str
competitors: List[str] = Field(default_factory=list)
language: str = "ru"
threshold: int = 50
compression_ratio: float = 0.1
class SemanticAnalyzeResponse(BaseModel):
target: Dict[str, Any]
competitors: List[Dict[str, Any]]
comparison: Dict[str, Any]
class SemanticSearchRequest(BaseModel):
query_text: str
text: str
language: str = "ru"
top_n: int = 20
class SemanticSearchResponse(BaseModel):
results: List[Dict[str, Any]]
class UrlFetchRequest(BaseModel):
url: str
user_agent: str = "chrome_desktop"
timeout_seconds: int = 15
class UrlFetchResponse(BaseModel):
ok: bool = False
url: str = ""
final_url: str = ""
status_code: int = 0
user_agent_key: str = ""
user_agent_value: str = ""
title: str = ""
text: str = ""
error: str = ""
class UserAgentInfo(BaseModel):
key: str
name: str
value: str
class UserAgentsResponse(BaseModel):
user_agents: List[UserAgentInfo] = Field(default_factory=list)
class OptimizerRequest(BaseModel):
target_text: str
competitors: List[str] = Field(default_factory=list)
keywords: List[str] = Field(default_factory=list)
language: str = "en"
target_title: str = ""
competitor_titles: List[str] = Field(default_factory=list)
api_key: str
api_base_url: str = "https://api.deepseek.com/v1"
model: str = "deepseek-chat"
max_iterations: int = 2
candidates_per_iteration: int = 2
temperature: float = 0.25
optimization_mode: str = "balanced"
class OptimizerResponse(BaseModel):
ok: bool = True
optimized_text: str = ""
baseline_metrics: Dict[str, Any] = Field(default_factory=dict)
final_metrics: Dict[str, Any] = Field(default_factory=dict)
iterations: List[Dict[str, Any]] = Field(default_factory=list)
applied_changes: int = 0
optimization_mode: str = "balanced"
error: str = ""