import gradio as gr import torch from transformers import pipeline from datetime import datetime class GeradorTrilhaAprendizado: def __init__(self): self.device = 0 if torch.cuda.is_available() else -1 self.transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base", device=self.device) self.generator = pipeline("text-generation", model="gpt2-large", device=self.device) self.historico = [] def processar_audio(self, audio_path: str, nome_trilha: str, nivel: str = "intermediário", area: str = "geral", duracao: str = "3 meses", incluir_recursos: bool = True) -> tuple: try: transcricao = self.transcriber(audio_path)["text"] prompt = f""" Crie uma trilha de aprendizado estruturada para nível {nivel} na área de {area} com duração de {duracao} com base no seguinte objetivo: {transcricao} Inclua: 1. Objetivos de aprendizagem específicos 2. Pré-requisitos necessários 3. Módulos de estudo sequenciais 4. Projetos práticos 5. Marcos de avaliação 6. Cronograma sugerido Trilha de aprendizado para {nome_trilha}: """ analise = self.generator(prompt, max_length=500, num_return_sequences=1, temperature=0.7, top_p=0.95)[0]["generated_text"] if incluir_recursos: recursos = self._gerar_recursos(nivel, area, transcricao) analise += "\n\n" + recursos # Salvar no histórico self.historico.append({ "data": datetime.now().strftime("%d/%m/%Y %H:%M"), "nome": nome_trilha, "nivel": nivel, "area": area, "duracao": duracao, "transcricao": transcricao, "analise": analise }) return ( transcricao, analise, self._formatar_historico(), "✅ Trilha gerada com sucesso!" ) except Exception as e: return ( f"Erro: {str(e)}", "Não foi possível gerar a análise.", self._formatar_historico(), "❌ Ocorreu um erro" ) def _formatar_historico(self) -> str: if not self.historico: return "Nenhuma trilha gerada ainda" historico_fmt = "📋 Histórico de Trilhas:\n\n" for h in self.historico[-5:]: # Últimas 5 trilhas historico_fmt += f"• {h['data']} - {h['nome']} ({h['nivel']}, {h['area']})\n" return historico_fmt def _gerar_recursos(self, nivel: str, area: str, objetivo: str) -> str: recursos_por_nivel = { "iniciante": { "cursos": ["Fundamentos Básicos", "Introdução Prática"], "livros": ["Guia do Iniciante", "Primeiros Passos"], "projetos": ["Projeto inicial guiado", "Mini-projetos práticos"] }, "intermediário": { "cursos": ["Especialização Prática", "Técnicas Avançadas"], "livros": ["Guia Completo", "Estudos de Caso"], "projetos": ["Projetos de média complexidade", "Desafios práticos"] }, "avançado": { "cursos": ["Masterclass Avançada", "Especialização Profissional"], "livros": ["Técnicas Avançadas", "Estado da Arte"], "projetos": ["Projetos complexos", "Contribuições open-source"] } } recursos = recursos_por_nivel[nivel] return f""" 📚 Recursos Recomendados para {area} - Nível {nivel}: 1. Cursos Recomendados: - {recursos['cursos'][0]} - {recursos['cursos'][1]} 2. Material de Estudo: - {recursos['livros'][0]} - {recursos['livros'][1]} 3. Projetos Práticos: - {recursos['projetos'][0]} - {recursos['projetos'][1]} 4. Recursos Adicionais: - Comunidades de prática - Mentoria entre pares - Workshops práticos - Avaliações periódicas """ def criar_interface(): with gr.Blocks(theme=gr.themes.Soft()) 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(): audio_input = gr.Audio( type="filepath", label="Áudio", sources=["microphone", "upload"] ) nome_trilha = gr.Textbox( label="Nome da Trilha", placeholder="Dê um nome para sua trilha" ) nivel = gr.Dropdown( choices=["iniciante", "intermediário", "avançado"], value="intermediário", label="Nível de Dificuldade" ) area = gr.Dropdown( choices=["programação", "data science", "design", "marketing", "negócios", "geral"], value="geral", label="Área de Conhecimento" ) duracao = gr.Dropdown( choices=["1 mês", "3 meses", "6 meses", "1 ano"], value="3 meses", label="Duração Estimada" ) incluir_recursos = gr.Checkbox( label="Incluir Recursos Recomendados", value=True ) processar_btn = gr.Button("🚀 Gerar Trilha de Aprendizado") with gr.Row(): with gr.Column(): status = gr.Markdown() transcricao = gr.Textbox(label="Transcrição do Áudio", lines=4) analise = gr.Textbox(label="Sua Trilha de Aprendizado", lines=10) historico = gr.Markdown(label="Histórico") # Botão de ajuda with gr.Accordion("ℹ️ Como usar"): gr.Markdown(""" 1. Grave um áudio descrevendo seus objetivos de aprendizado 2. Escolha o nome da trilha, nível, área e duração 3. Clique em 'Gerar Trilha de Aprendizado' 4. Revise a transcrição e a trilha gerada 5. O histórico mostra suas últimas 5 trilhas geradas """) processar_btn.click( fn=GeradorTrilhaAprendizado().processar_audio, inputs=[audio_input, nome_trilha, nivel, area, duracao, incluir_recursos], outputs=[transcricao, analise, historico, status] ) return app if __name__ == "__main__": app = criar_interface() app.queue() app.launch()