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