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