Spaces:
Sleeping
Sleeping
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() |