antigravity-backend / execution /extract_topics.py
Bot
Upload
5c9380d
"""
Script: extract_topics.py
Obiettivo: Estrarre i topic principali da una trascrizione usando Claude.
"""
import os
import sys
import json
from dotenv import load_dotenv
from openai import OpenAI # Usiamo client OpenAI compatibile con OpenRouter
load_dotenv()
def extract_topics(transcript_text: str) -> list:
"""
Estrae 3-5 topic principali dalla trascrizione.
Restituisce una lista di stringhe.
"""
api_key = os.getenv("OPENROUTER_API_KEY")
model = os.getenv("OPENROUTER_MODEL_CLAUDE", "anthropic/claude-3.5-sonnet")
if not api_key:
raise ValueError("OPENROUTER_API_KEY mancante nel file .env")
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=api_key,
)
prompt = f"""
Analizza la seguente trascrizione di un video YouTube ed estrai i 3-5 argomenti principali (Key Topics).
Restituisci SOLO una lista JSON di stringhe, senza altro testo.
Trascrizione:
{transcript_text[:15000]} # Tronca per evitare limiti di token se troppo lungo
"""
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "Sei un esperto analista di contenuti. Estrai topic rilevanti e specifici."},
{"role": "user", "content": prompt}
],
extra_headers={
"HTTP-Referer": "https://antigravity.app",
"X-Title": "Antigravity App"
}
)
content = response.choices[0].message.content.strip()
# Pulisci il markdown json se presente
if "```json" in content:
content = content.replace("```json", "").replace("```", "")
try:
topics = json.loads(content)
return topics
except json.JSONDecodeError:
# Fallback se non è JSON puro
return [line.strip("- ") for line in content.split("\n") if line.strip()]
if __name__ == "__main__":
# Leggi da stdin (pipe) o file
if len(sys.argv) > 1:
# Se c'è un file argomento, leggilo
with open(sys.argv[1], 'r', encoding='utf-8') as f:
text = f.read()
else:
# Altrimenti leggi da stdin
text = sys.stdin.read()
try:
data = json.loads(text)
transcript = data.get("text", "")
except:
transcript = text
if not transcript:
print("Errore: Nessun testo in input", file=sys.stderr)
sys.exit(1)
try:
topics = extract_topics(transcript)
print(json.dumps(topics, indent=2, ensure_ascii=False))
except Exception as e:
print(f"Errore: {str(e)}", file=sys.stderr)
sys.exit(1)