Ultralearning / app.py
DHEIVER's picture
Update app.py
934e488 verified
raw
history blame
7.65 kB
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()