Spaces:
Sleeping
Sleeping
File size: 2,647 Bytes
5c9380d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | """
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)
|