Ultralearning / app.py
DHEIVER's picture
Update app.py
947bfcc verified
raw
history blame
6.42 kB
import gradio as gr
import torch
from transformers import pipeline
class GeradorTrilhaAprendizado:
def __init__(self):
self.device = 0 if torch.cuda.is_available() else -1
# Inicializa modelos
self.transcriber = pipeline("automatic-speech-recognition",
model="openai/whisper-base",
device=self.device)
self.generator = pipeline("text-generation",
model="gpt2",
device=self.device)
def processar_audio(self,
audio_path: str,
nome_trilha: str,
nivel: str = "intermediário",
incluir_recursos: bool = True) -> tuple:
try:
# Transcrição do áudio
transcricao = self.transcriber(audio_path)["text"]
# Geração da trilha
prompt = f"""
Com base no seguinte texto, crie uma trilha de aprendizado detalhada
para nível {nivel}:
{transcricao}
Trilha de aprendizado:
"""
analise = self.generator(prompt,
max_length=300,
num_return_sequences=1)[0]["generated_text"]
if incluir_recursos:
recursos = self._gerar_recursos()
analise += "\n\n" + recursos
return (
gr.Textbox.update(value=transcricao, visible=True),
gr.Textbox.update(value=analise, visible=True),
gr.Markdown.update(visible=True, value="✅ Trilha gerada com sucesso!"),
gr.Button.update(interactive=True)
)
except Exception as e:
return (
gr.Textbox.update(value=f"Erro: {str(e)}", visible=True),
gr.Textbox.update(value="Não foi possível gerar a análise.", visible=True),
gr.Markdown.update(visible=True, value="❌ Ocorreu um erro"),
gr.Button.update(interactive=True)
)
def _gerar_recursos(self) -> str:
return """
📚 Recursos Recomendados:
1. Livros:
- "Guia Essencial"
- "Técnicas Avançadas"
2. Cursos Online:
- Coursera: "Especialização no Tema"
- edX: "Curso Avançado"
3. Recursos Práticos:
- Tutoriais interativos
- Exercícios práticos
- Projetos do mundo real
"""
def criar_interface():
with gr.Blocks(theme=gr.themes.Soft(
primary_hue="blue",
secondary_hue="purple",
neutral_hue="gray"
)) as app:
gr.Markdown("""
# 🎓 Gerador de Trilha de Aprendizado
Grave ou faça upload de um áudio descrevendo seus objetivos e receba uma trilha personalizada!
""")
with gr.Row():
with gr.Column(scale=2):
# Componentes de entrada
with gr.Group():
gr.Markdown("### 📝 Entrada")
audio_input = gr.Audio(
type="filepath",
label="Áudio",
sources=["microphone", "upload"],
)
with gr.Row():
nome_trilha = gr.Textbox(
label="Nome da Trilha",
placeholder="Dê um nome para sua trilha",
scale=2
)
nivel = gr.Dropdown(
choices=["iniciante", "intermediário", "avançado"],
value="intermediário",
label="Nível de Dificuldade",
scale=1
)
incluir_recursos = gr.Checkbox(
label="Incluir Recursos Recomendados",
value=True,
info="Adicionar recursos de aprendizado curados à sua trilha"
)
processar_btn = gr.Button(
"🚀 Gerar Trilha de Aprendizado",
variant="primary",
scale=2
)
# Componentes de saída
with gr.Column(scale=2):
with gr.Group():
gr.Markdown("### 📊 Resultado")
status = gr.Markdown(visible=False)
with gr.Accordion("Transcrição do Áudio", open=False):
transcricao = gr.Textbox(
label="O que entendemos",
lines=4,
visible=False
)
analise = gr.Textbox(
label="Sua Trilha de Aprendizado",
lines=10,
visible=False
)
# Manipuladores de eventos
processar_btn.click(
fn=GeradorTrilhaAprendizado().processar_audio,
inputs=[audio_input, nome_trilha, nivel, incluir_recursos],
outputs=[transcricao, analise, status, processar_btn],
api_name="gerar_trilha"
)
# Exemplos
gr.Examples(
examples=[
["audio_exemplo.mp3", "Programação Python", "iniciante", True],
["audio_exemplo2.mp3", "Ciência de Dados", "intermediário", True],
],
inputs=[audio_input, nome_trilha, nivel, incluir_recursos],
outputs=[transcricao, analise, status, processar_btn],
cache_examples=True,
)
# Informações adicionais
gr.Markdown("""
### 📌 Dicas
- Fale claramente e descreva seus objetivos de aprendizado em detalhes
- Mencione qualquer experiência prévia no assunto
- Inclua áreas específicas em que deseja focar
""")
return app
if __name__ == "__main__":
app = criar_interface()
app.queue()
app.launch()