prompt.ai / app.py
DHEIVER's picture
Update app.py
eeed458 verified
raw
history blame
9.18 kB
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()