feat: add EN/ES/RO language selector for AI pitch generation

- db.py: add `language` column to ai_queue; migration; queue_ai() accepts
  language param and re-queues with ON CONFLICT UPDATE so changing language works
- main.py: batch and single assess endpoints accept `language` from request body
- enricher.py: ai_worker_loop reads language column, passes to _assess_one()
- replicate_ai.py: assess_domain() and _build_prompt() accept language param;
  OUTPUT LANGUAGE section injected into prompt so Gemini writes pitch/email in
  the requested language (EN/ES/RO)
- index.html: flag dropdown (🇪🇸/🇬🇧/🇷🇴) next to AI Assess button; aiLang
  state default ES; language sent in all batch assessment requests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-14 08:39:27 +02:00
parent 88c27bfff5
commit 22eae3f9b7
5 changed files with 37 additions and 19 deletions

View File

@@ -52,7 +52,8 @@ CREATE TABLE IF NOT EXISTS ai_queue (
status TEXT DEFAULT 'pending',
created_at TEXT DEFAULT (datetime('now')),
completed_at TEXT,
error TEXT
error TEXT,
language TEXT DEFAULT 'ES'
);
CREATE TABLE IF NOT EXISTS scores (
domain TEXT PRIMARY KEY,
@@ -74,6 +75,7 @@ _MIGRATIONS = [
"ALTER TABLE enriched_domains ADD COLUMN ai_assessed_at TEXT",
"ALTER TABLE enriched_domains ADD COLUMN site_analysis TEXT",
"CREATE TABLE IF NOT EXISTS ai_queue (domain TEXT PRIMARY KEY, status TEXT DEFAULT 'pending', created_at TEXT DEFAULT (datetime('now')), completed_at TEXT, error TEXT)",
"ALTER TABLE ai_queue ADD COLUMN language TEXT DEFAULT 'ES'",
]
# Index build state
@@ -332,11 +334,12 @@ async def get_enriched(min_score=0, cms=None, country=None, kit_digital=None, pa
return total, rows
async def queue_ai(domains: list[str]):
async def queue_ai(domains: list[str], language: str = "ES"):
async with aiosqlite.connect(SQLITE_PATH) as db:
await db.executemany(
"INSERT OR IGNORE INTO ai_queue (domain) VALUES (?)",
[(d,) for d in domains],
"""INSERT INTO ai_queue (domain, language) VALUES (?, ?)
ON CONFLICT(domain) DO UPDATE SET language=excluded.language, status='pending'""",
[(d, language) for d in domains],
)
await db.commit()