import gradio as gr import random from transformers import AutoModelForCausalLM, AutoTokenizer import torch from typing import Dict, List class PromptGenerator: def __init__(self): print("Carregando modelo... (pode demorar alguns minutos na primeira vez)") self.model_name = "beomi/llama-2-ko-7b" self.tokenizer = AutoTokenizer.from_pretrained(self.model_name) self.model = AutoModelForCausalLM.from_pretrained( self.model_name, torch_dtype=torch.float16, device_map="auto" ) print("Modelo carregado!") def generate_with_model(self, prompt: str) -> str: inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device) outputs = self.model.generate( **inputs, max_new_tokens=512, temperature=0.7, top_p=0.9, do_sample=True, pad_token_id=self.tokenizer.eos_token_id ) return self.tokenizer.decode(outputs[0], skip_special_tokens=True) TEMPLATES = { "história": { "creative": "Crie uma história {gênero} sobre {tema} com {personagens} personagens. A história deve ter {comprimento} palavras e incluir {elementos}.", "analysis": "Analise a seguinte história considerando {aspectos}. Foque em {elementos} e forneça exemplos específicos do texto.", "continuation": "Continue a seguinte história mantendo o {tom} e desenvolvendo {elementos}." }, "técnico": { "tutorial": "Crie um tutorial detalhado sobre {tema} para {público}. Inclua {elementos} e forneça {exemplos} exemplos práticos.", "documentation": "Documente {sistema} incluindo {aspectos}. Foque em {elementos} e forneça {exemplos} exemplos de uso.", "troubleshooting": "Crie um guia de solução de problemas para {sistema} cobrindo {problemas}." }, "educacional": { "lesson": "Prepare uma aula sobre {tema} para {público}. Inclua {objetivos} e atividades práticas.", "exercise": "Crie exercícios sobre {tema} com {dificuldade} níveis de dificuldade.", "explanation": "Explique {conceito} para {público} usando {analogias} e exemplos práticos." } } generator = PromptGenerator() def generate_prompt(categoria: str, subcategoria: str, tema: str, elementos: str, público_alvo: str, tom: str, comprimento: int, usar_llm: bool = True) -> str: if categoria not in TEMPLATES or subcategoria not in TEMPLATES[categoria]: return "Categoria ou subcategoria não encontrada" template = TEMPLATES[categoria][subcategoria] params = { "tema": tema, "elementos": elementos, "público": público_alvo, "tom": tom, "comprimento": comprimento, "gênero": random.choice(["de aventura", "de mistério", "de fantasia", "de ficção científica"]), "personagens": random.randint(2, 5), "aspectos": "caracterização, desenvolvimento do enredo, temas principais", "exemplos": random.randint(3, 5), "sistema": tema, "problemas": "problemas comuns e casos específicos", "dificuldade": random.randint(3, 5), "conceito": tema, "analogias": "analogias cotidianas" } base_prompt = template.format(**params) base_prompt += f"\n\nTom desejado: {tom}" if comprimento: base_prompt += f"\nComprimento aproximado: {comprimento} palavras" if usar_llm: instruction = f""" Você é um assistente especializado em criar prompts detalhados em português para LLMs. Expanda e melhore o seguinte prompt base, adicionando mais detalhes, exemplos e estrutura: {base_prompt} Crie uma versão mais completa e detalhada deste prompt, mantendo o objetivo original mas adicionando mais contexto e especificidade. """ return generator.generate_with_model(instruction) return base_prompt def create_interface(): with gr.Blocks( title="Gerador de Prompts para LLMs", theme=gr.themes.Soft( primary_hue="indigo", secondary_hue="blue", ), ) as app: gr.Markdown( """ # 🤖 Gerador de Prompts Inteligente ### Crie prompts estruturados e detalhados usando IA """ ) with gr.Tabs(): with gr.TabItem("✨ Gerador de Prompts"): with gr.Group(): with gr.Row(): with gr.Column(scale=1): categoria = gr.Dropdown( choices=list(TEMPLATES.keys()), label="📚 Categoria", value="história", container=False, ) subcategoria = gr.Dropdown( choices=list(TEMPLATES["história"].keys()), label="🔍 Subcategoria", value="creative", container=False, ) with gr.Column(scale=2): tema = gr.Textbox( label="💡 Tema Principal", placeholder="Ex: inteligência artificial, sustentabilidade", container=False, ) elementos = gr.Textbox( label="🔮 Elementos Específicos", placeholder="Ex: conflitos, conceitos, exemplos práticos", container=False, ) with gr.Row(): with gr.Column(scale=1): público_alvo = gr.Textbox( label="👥 Público Alvo", placeholder="Ex: iniciantes, profissionais, estudantes", container=False, ) tom = gr.Dropdown( choices=["formal", "informal", "técnico", "conversacional", "educativo"], label="🎭 Tom", value="formal", container=False, ) with gr.Column(scale=2): comprimento = gr.Slider( minimum=100, maximum=2000, step=100, label="📏 Comprimento (palavras)", value=500, container=False, ) usar_llm = gr.Checkbox( label="🤖 Usar IA para expandir prompt", value=True, container=False, ) with gr.Row(): gerar_btn = gr.Button( "🚀 Gerar Prompt", variant="primary", scale=1, ) with gr.Row(): saida = gr.TextArea( label="📝 Prompt Gerado", lines=10, container=False, ) with gr.TabItem("ℹ️ Sobre"): gr.Markdown( """ ### Sobre o Gerador de Prompts Este é um gerador de prompts inteligente que utiliza IA para criar prompts estruturados e detalhados para diversos tipos de conteúdo. Ele pode ser usado para: - 📚 Criação de histórias - 📖 Análise de textos - 💻 Documentação técnica - 🎓 Conteúdo educacional O gerador usa um modelo de linguagem avançado para expandir e melhorar os prompts básicos, tornando-os mais detalhados e específicos para suas necessidades. """ ) def atualizar_subcategorias(categoria): return gr.Dropdown(choices=list(TEMPLATES[categoria].keys())) categoria.change(atualizar_subcategorias, inputs=[categoria], outputs=[subcategoria]) gerar_btn.click( generate_prompt, inputs=[categoria, subcategoria, tema, elementos, público_alvo, tom, comprimento, usar_llm], outputs=[saida] ) return app if __name__ == "__main__": app = create_interface() app.launch()