File size: 1,784 Bytes
9710d1d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Auto-metadatos v铆a LLM HuggingFace."""
from transformers import pipeline
import os

# Por defecto usa Gemma 2B instruct, puedes cambiarlo.
LLM_MODEL = os.getenv("LLM_METADATA_MODEL", "google/gemma-1.1-2b-it")

# S贸lo cargar el pipeline una vez (lazy).
_llm = None

def get_llm():
    global _llm
    if _llm is None:
        _llm = pipeline(
            "text-generation",
            model=LLM_MODEL,
            device_map="auto",
            max_new_tokens=256,
            trust_remote_code=True
        )
    return _llm

def build_prompt(text: str) -> str:
    # Puedes personalizar el prompt aqu铆
    return (
        "Analiza el siguiente texto y responde en JSON con las claves:\n"
        "\"summary\": resumen en una frase;\n"
        "\"topics\": lista de hasta 5 palabras clave o temas principales;\n"
        "\"language\": idioma detectado ('es', 'en', etc.);\n"
        "\"vertical\": vertical tem谩tica (SEO-LLM, eCommerce, etc).\n\n"
        "TEXTO:\n" + text.strip() + "\n\nJSON:"
    )

def extract_metadata(text: str) -> dict:
    llm = get_llm()
    prompt = build_prompt(text)
    output = llm(prompt)[0]['generated_text']
    # Extraer s贸lo el bloque JSON del resultado
    import re, json
    m = re.search(r'\\{.*\\}', output, re.DOTALL)
    if not m:
        return {}
    try:
        result = json.loads(m.group(0))
        return result
    except Exception:
        return {}

# --- CLI de prueba r谩pida
if __name__ == "__main__":
    chunk = "El SEO para LLMs consiste en optimizar contenido pensando en c贸mo los grandes modelos de lenguaje recuperan informaci贸n relevante, mejorando la estructura, claridad y contexto del texto para aumentar la calidad de las respuestas generadas por IA."
    meta = extract_metadata(chunk)
    print(meta)