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)