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()