File size: 2,599 Bytes
99668c4
46d8eae
7cc7b40
46d8eae
d38f804
7cc7b40
46d8eae
99668c4
7cc7b40
 
 
 
 
 
99668c4
7cc7b40
46d8eae
7cc7b40
ab805e6
 
 
f1e41b5
 
7cc7b40
 
 
 
 
 
46d8eae
 
7cc7b40
2bc0299
ab805e6
7cc7b40
2bc0299
46d8eae
 
7cc7b40
 
 
 
 
46d8eae
ab805e6
99668c4
7cc7b40
 
 
 
 
 
46d8eae
7cc7b40
 
46d8eae
7cc7b40
ab805e6
7cc7b40
b13ff53
7cc7b40
46d8eae
ab805e6
 
 
7cc7b40
 
 
 
46d8eae
7cc7b40
ab805e6
46d8eae
7cc7b40
b13ff53
7cc7b40
 
ab805e6
d38f804
 
46d8eae
ab805e6
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
import re
from langdetect import detect, DetectorFactory
from transformers import pipeline
import gradio as gr

# Garante consistência nos resultados do langdetect
DetectorFactory.seed = 0

# Carrega modelo de texto em português
generator = pipeline(
    "text2text-generation",
    model="unicamp-dl/ptt5-base-portuguese-vocab",
    tokenizer="unicamp-dl/ptt5-base-portuguese-vocab"
)

# Mapeamento de comandos (em português)
COMMANDS = {
    "resumo": ["resuma", "resumo", "resumir"],
    "reescrever": ["reescreva", "reformule", "reformular"],
    "expandir": ["expanda", "expansão", "expandir", "detalhe"],
    "corrigir": ["corrija", "corrigir", "melhore", "revise"]
}

PROMPTS = {
    "resumo": "Resuma o texto a seguir:\n\n",
    "reescrever": "Reescreva com mais clareza e estilo:\n\n",
    "expandir": "Expanda este texto, adicionando detalhes e explicações:\n\n",
    "corrigir": "Corrija a gramática, ortografia e estilo do seguinte texto:\n\n",
    "gerar": ""
}

def detect_language(text):
    try:
        lang = detect(text)
        return lang if lang in ["pt", "en", "fr"] else "pt"
    except:
        return "pt"

def find_command(text, lang):
    text_lower = text.lower()
    for cmd, keywords in COMMANDS.items():
        for kw in keywords:
            if kw in text_lower:
                return cmd
    return "gerar"

def clean_text(text):
    text = re.sub(r"\s+", " ", text).strip()
    for keywords in COMMANDS.values():
        for kw in keywords:
            text = re.sub(rf"\b{kw}\b", "", text, flags=re.IGNORECASE)
    return text.strip(": ").strip()

def build_prompt(core, cmd):
    return PROMPTS.get(cmd, "") + core

def gerar_resposta(texto):
    lang = detect_language(texto)
    cmd = find_command(texto, lang)
    core = clean_text(texto)
    prompt = build_prompt(core, cmd)

    output = generator(prompt, max_new_tokens=256, temperature=0.7, top_p=0.9)[0]["generated_text"]
    resposta = output.replace(prompt, "").strip()

    if resposta.lower().startswith(core.lower()):
        resposta = resposta[len(core):].strip()

    return resposta or "⚠️ A IA não conseguiu processar esse texto. Tente reformular."

# Interface
demo = gr.Interface(
    fn=gerar_resposta,
    inputs=gr.Textbox(lines=6, placeholder="Digite algo como: Corrija: O menino está brincano...", label="Entrada"),
    outputs=gr.Textbox(label="Resposta da IA"),
    title="🧠 IA Multilingue Sr. Nicolas",
    description="Detecta comando embutido e devolve resposta humanizada em português.",
    allow_flagging="never"
)

if __name__ == "__main__":
    demo.launch()