Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
import gradio as gr
|
2 |
import torch
|
3 |
from transformers import pipeline
|
|
|
4 |
|
5 |
class GeradorTrilhaAprendizado:
|
6 |
def __init__(self):
|
@@ -9,19 +10,23 @@ class GeradorTrilhaAprendizado:
|
|
9 |
model="openai/whisper-base",
|
10 |
device=self.device)
|
11 |
self.generator = pipeline("text-generation",
|
12 |
-
model="gpt2-large",
|
13 |
device=self.device)
|
|
|
14 |
|
15 |
def processar_audio(self,
|
16 |
audio_path: str,
|
17 |
nome_trilha: str,
|
18 |
nivel: str = "intermediário",
|
|
|
|
|
19 |
incluir_recursos: bool = True) -> tuple:
|
20 |
try:
|
21 |
transcricao = self.transcriber(audio_path)["text"]
|
22 |
|
23 |
prompt = f"""
|
24 |
-
Crie uma trilha de aprendizado estruturada para nível {nivel}
|
|
|
25 |
{transcricao}
|
26 |
|
27 |
Inclua:
|
@@ -30,25 +35,56 @@ class GeradorTrilhaAprendizado:
|
|
30 |
3. Módulos de estudo sequenciais
|
31 |
4. Projetos práticos
|
32 |
5. Marcos de avaliação
|
|
|
33 |
|
34 |
Trilha de aprendizado para {nome_trilha}:
|
35 |
"""
|
36 |
|
37 |
analise = self.generator(prompt,
|
38 |
-
max_length=500,
|
39 |
num_return_sequences=1,
|
40 |
-
temperature=0.7,
|
41 |
-
top_p=0.95)[0]["generated_text"]
|
42 |
|
43 |
if incluir_recursos:
|
44 |
-
recursos = self._gerar_recursos(nivel, transcricao)
|
45 |
analise += "\n\n" + recursos
|
46 |
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
except Exception as e:
|
49 |
-
return (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
-
def _gerar_recursos(self, nivel: str, objetivo: str) -> str:
|
52 |
recursos_por_nivel = {
|
53 |
"iniciante": {
|
54 |
"cursos": ["Fundamentos Básicos", "Introdução Prática"],
|
@@ -69,7 +105,7 @@ class GeradorTrilhaAprendizado:
|
|
69 |
|
70 |
recursos = recursos_por_nivel[nivel]
|
71 |
return f"""
|
72 |
-
📚 Recursos Recomendados para Nível {nivel}:
|
73 |
|
74 |
1. Cursos Recomendados:
|
75 |
- {recursos['cursos'][0]}
|
@@ -117,6 +153,18 @@ def criar_interface():
|
|
117 |
label="Nível de Dificuldade"
|
118 |
)
|
119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
incluir_recursos = gr.Checkbox(
|
121 |
label="Incluir Recursos Recomendados",
|
122 |
value=True
|
@@ -129,11 +177,22 @@ def criar_interface():
|
|
129 |
status = gr.Markdown()
|
130 |
transcricao = gr.Textbox(label="Transcrição do Áudio", lines=4)
|
131 |
analise = gr.Textbox(label="Sua Trilha de Aprendizado", lines=10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
|
133 |
processar_btn.click(
|
134 |
fn=GeradorTrilhaAprendizado().processar_audio,
|
135 |
-
inputs=[audio_input, nome_trilha, nivel, incluir_recursos],
|
136 |
-
outputs=[transcricao, analise, status]
|
137 |
)
|
138 |
|
139 |
return app
|
|
|
1 |
import gradio as gr
|
2 |
import torch
|
3 |
from transformers import pipeline
|
4 |
+
from datetime import datetime
|
5 |
|
6 |
class GeradorTrilhaAprendizado:
|
7 |
def __init__(self):
|
|
|
10 |
model="openai/whisper-base",
|
11 |
device=self.device)
|
12 |
self.generator = pipeline("text-generation",
|
13 |
+
model="gpt2-large",
|
14 |
device=self.device)
|
15 |
+
self.historico = []
|
16 |
|
17 |
def processar_audio(self,
|
18 |
audio_path: str,
|
19 |
nome_trilha: str,
|
20 |
nivel: str = "intermediário",
|
21 |
+
area: str = "geral",
|
22 |
+
duracao: str = "3 meses",
|
23 |
incluir_recursos: bool = True) -> tuple:
|
24 |
try:
|
25 |
transcricao = self.transcriber(audio_path)["text"]
|
26 |
|
27 |
prompt = f"""
|
28 |
+
Crie uma trilha de aprendizado estruturada para nível {nivel} na área de {area}
|
29 |
+
com duração de {duracao} com base no seguinte objetivo:
|
30 |
{transcricao}
|
31 |
|
32 |
Inclua:
|
|
|
35 |
3. Módulos de estudo sequenciais
|
36 |
4. Projetos práticos
|
37 |
5. Marcos de avaliação
|
38 |
+
6. Cronograma sugerido
|
39 |
|
40 |
Trilha de aprendizado para {nome_trilha}:
|
41 |
"""
|
42 |
|
43 |
analise = self.generator(prompt,
|
44 |
+
max_length=500,
|
45 |
num_return_sequences=1,
|
46 |
+
temperature=0.7,
|
47 |
+
top_p=0.95)[0]["generated_text"]
|
48 |
|
49 |
if incluir_recursos:
|
50 |
+
recursos = self._gerar_recursos(nivel, area, transcricao)
|
51 |
analise += "\n\n" + recursos
|
52 |
|
53 |
+
# Salvar no histórico
|
54 |
+
self.historico.append({
|
55 |
+
"data": datetime.now().strftime("%d/%m/%Y %H:%M"),
|
56 |
+
"nome": nome_trilha,
|
57 |
+
"nivel": nivel,
|
58 |
+
"area": area,
|
59 |
+
"duracao": duracao,
|
60 |
+
"transcricao": transcricao,
|
61 |
+
"analise": analise
|
62 |
+
})
|
63 |
+
|
64 |
+
return (
|
65 |
+
transcricao,
|
66 |
+
analise,
|
67 |
+
self._formatar_historico(),
|
68 |
+
"✅ Trilha gerada com sucesso!"
|
69 |
+
)
|
70 |
except Exception as e:
|
71 |
+
return (
|
72 |
+
f"Erro: {str(e)}",
|
73 |
+
"Não foi possível gerar a análise.",
|
74 |
+
self._formatar_historico(),
|
75 |
+
"❌ Ocorreu um erro"
|
76 |
+
)
|
77 |
+
|
78 |
+
def _formatar_historico(self) -> str:
|
79 |
+
if not self.historico:
|
80 |
+
return "Nenhuma trilha gerada ainda"
|
81 |
+
|
82 |
+
historico_fmt = "📋 Histórico de Trilhas:\n\n"
|
83 |
+
for h in self.historico[-5:]: # Últimas 5 trilhas
|
84 |
+
historico_fmt += f"• {h['data']} - {h['nome']} ({h['nivel']}, {h['area']})\n"
|
85 |
+
return historico_fmt
|
86 |
|
87 |
+
def _gerar_recursos(self, nivel: str, area: str, objetivo: str) -> str:
|
88 |
recursos_por_nivel = {
|
89 |
"iniciante": {
|
90 |
"cursos": ["Fundamentos Básicos", "Introdução Prática"],
|
|
|
105 |
|
106 |
recursos = recursos_por_nivel[nivel]
|
107 |
return f"""
|
108 |
+
📚 Recursos Recomendados para {area} - Nível {nivel}:
|
109 |
|
110 |
1. Cursos Recomendados:
|
111 |
- {recursos['cursos'][0]}
|
|
|
153 |
label="Nível de Dificuldade"
|
154 |
)
|
155 |
|
156 |
+
area = gr.Dropdown(
|
157 |
+
choices=["programação", "data science", "design", "marketing", "negócios", "geral"],
|
158 |
+
value="geral",
|
159 |
+
label="Área de Conhecimento"
|
160 |
+
)
|
161 |
+
|
162 |
+
duracao = gr.Dropdown(
|
163 |
+
choices=["1 mês", "3 meses", "6 meses", "1 ano"],
|
164 |
+
value="3 meses",
|
165 |
+
label="Duração Estimada"
|
166 |
+
)
|
167 |
+
|
168 |
incluir_recursos = gr.Checkbox(
|
169 |
label="Incluir Recursos Recomendados",
|
170 |
value=True
|
|
|
177 |
status = gr.Markdown()
|
178 |
transcricao = gr.Textbox(label="Transcrição do Áudio", lines=4)
|
179 |
analise = gr.Textbox(label="Sua Trilha de Aprendizado", lines=10)
|
180 |
+
historico = gr.Markdown(label="Histórico")
|
181 |
+
|
182 |
+
# Botão de ajuda
|
183 |
+
with gr.Accordion("ℹ️ Como usar"):
|
184 |
+
gr.Markdown("""
|
185 |
+
1. Grave um áudio descrevendo seus objetivos de aprendizado
|
186 |
+
2. Escolha o nome da trilha, nível, área e duração
|
187 |
+
3. Clique em 'Gerar Trilha de Aprendizado'
|
188 |
+
4. Revise a transcrição e a trilha gerada
|
189 |
+
5. O histórico mostra suas últimas 5 trilhas geradas
|
190 |
+
""")
|
191 |
|
192 |
processar_btn.click(
|
193 |
fn=GeradorTrilhaAprendizado().processar_audio,
|
194 |
+
inputs=[audio_input, nome_trilha, nivel, area, duracao, incluir_recursos],
|
195 |
+
outputs=[transcricao, analise, historico, status]
|
196 |
)
|
197 |
|
198 |
return app
|