DHEIVER commited on
Commit
62ce78a
·
verified ·
1 Parent(s): 934e488

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +217 -25
app.py CHANGED
@@ -2,6 +2,10 @@ 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):
@@ -13,6 +17,10 @@ class GeradorTrilhaAprendizado:
13
  model="gpt2-large",
14
  device=self.device)
15
  self.historico = []
 
 
 
 
16
 
17
  def processar_audio(self,
18
  audio_path: str,
@@ -23,34 +31,12 @@ class GeradorTrilhaAprendizado:
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:
33
- 1. Objetivos de aprendizagem específicos
34
- 2. Pré-requisitos necessários
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,
@@ -75,12 +61,219 @@ class GeradorTrilhaAprendizado:
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
 
@@ -179,7 +372,6 @@ def criar_interface():
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
 
2
  import torch
3
  from transformers import pipeline
4
  from datetime import datetime
5
+ import nltk
6
+ from nltk.tokenize import word_tokenize
7
+ from nltk.corpus import stopwords
8
+ from collections import Counter
9
 
10
  class GeradorTrilhaAprendizado:
11
  def __init__(self):
 
17
  model="gpt2-large",
18
  device=self.device)
19
  self.historico = []
20
+ # Inicializa NLTK
21
+ nltk.download('punkt')
22
+ nltk.download('stopwords')
23
+ self.stop_words = set(stopwords.words('portuguese'))
24
 
25
  def processar_audio(self,
26
  audio_path: str,
 
31
  incluir_recursos: bool = True) -> tuple:
32
  try:
33
  transcricao = self.transcriber(audio_path)["text"]
34
+ analise = self._gerar_trilha_personalizada(transcricao, nivel, area, duracao)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  if incluir_recursos:
37
  recursos = self._gerar_recursos(nivel, area, transcricao)
38
  analise += "\n\n" + recursos
39
 
 
40
  self.historico.append({
41
  "data": datetime.now().strftime("%d/%m/%Y %H:%M"),
42
  "nome": nome_trilha,
 
61
  "❌ Ocorreu um erro"
62
  )
63
 
64
+ def _gerar_trilha_personalizada(self, transcricao: str, nivel: str, area: str, duracao: str) -> str:
65
+ palavras_chave = self._extrair_palavras_chave(transcricao)
66
+
67
+ modulos_por_area = {
68
+ "programação": {
69
+ "iniciante": [
70
+ "Lógica de Programação Básica",
71
+ "Introdução a Algoritmos",
72
+ "Fundamentos de HTML/CSS",
73
+ "JavaScript Básico"
74
+ ],
75
+ "intermediário": [
76
+ "Estruturas de Dados",
77
+ "Programação Orientada a Objetos",
78
+ "Frameworks Front-end",
79
+ "Banco de Dados"
80
+ ],
81
+ "avançado": [
82
+ "Arquitetura de Software",
83
+ "DevOps e CI/CD",
84
+ "Microsserviços",
85
+ "Segurança e Performance"
86
+ ]
87
+ },
88
+ "data science": {
89
+ "iniciante": [
90
+ "Estatística Básica",
91
+ "Python para Análise de Dados",
92
+ "SQL Fundamental",
93
+ "Visualização de Dados"
94
+ ],
95
+ "intermediário": [
96
+ "Machine Learning Básico",
97
+ "Deep Learning Fundamentos",
98
+ "Big Data Analytics",
99
+ "Feature Engineering"
100
+ ],
101
+ "avançado": [
102
+ "MLOps",
103
+ "Análise Avançada",
104
+ "IA Generativa",
105
+ "Pesquisa Aplicada"
106
+ ]
107
+ },
108
+ "design": {
109
+ "iniciante": [
110
+ "Teoria das Cores",
111
+ "Tipografia",
112
+ "UI Básica",
113
+ "Ferramentas de Design"
114
+ ],
115
+ "intermediário": [
116
+ "Design Systems",
117
+ "UX Research",
118
+ "Prototipagem",
119
+ "Design Visual"
120
+ ],
121
+ "avançado": [
122
+ "Design Leadership",
123
+ "Design Estratégico",
124
+ "Design para Produto",
125
+ "Design Thinking Avançado"
126
+ ]
127
+ }
128
+ }
129
+
130
+ # Usa módulos padrão se a área não estiver mapeada
131
+ if area not in modulos_por_area:
132
+ modulos_por_area[area] = {
133
+ "iniciante": [
134
+ "Fundamentos Básicos",
135
+ "Introdução à Área",
136
+ "Ferramentas Essenciais",
137
+ "Práticas Iniciais"
138
+ ],
139
+ "intermediário": [
140
+ "Conceitos Avançados",
141
+ "Técnicas Especializadas",
142
+ "Projetos Práticos",
143
+ "Metodologias"
144
+ ],
145
+ "avançado": [
146
+ "Especialização Profissional",
147
+ "Gestão de Projetos",
148
+ "Inovação na Área",
149
+ "Liderança Técnica"
150
+ ]
151
+ }
152
+
153
+ duracao_meses = int(duracao.split()[0])
154
+ tempo_por_modulo = duracao_meses / 4
155
+
156
+ template = f"""
157
+ 🎯 Objetivos Identificados:
158
+ {self._formatar_objetivos(palavras_chave)}
159
+
160
+ 📚 Trilha Personalizada para {area.title()} - Nível {nivel}:
161
+ {self._formatar_modulos(modulos_por_area[area][nivel], tempo_por_modulo)}
162
+
163
+ 🚀 Projetos Práticos Sugeridos:
164
+ {self._gerar_projetos(area, nivel, palavras_chave)}
165
+
166
+ 📅 Cronograma ({duracao}):
167
+ {self._gerar_cronograma(duracao_meses, modulos_por_area[area][nivel])}
168
+
169
+ 🎖️ Marcos de Avaliação:
170
+ {self._gerar_marcos_avaliacao(nivel)}
171
+ """
172
+
173
+ return template
174
+
175
+ def _extrair_palavras_chave(self, texto: str) -> list:
176
+ tokens = word_tokenize(texto.lower())
177
+ palavras = [palavra for palavra in tokens
178
+ if palavra.isalnum() and
179
+ palavra not in self.stop_words]
180
+ return [palavra[0] for palavra in Counter(palavras).most_common(5)]
181
+
182
+ def _formatar_objetivos(self, palavras_chave: list) -> str:
183
+ objetivos = {
184
+ "programação": [
185
+ "Desenvolver habilidades técnicas em {}",
186
+ "Criar projetos práticos usando {}",
187
+ "Dominar conceitos de {}"
188
+ ],
189
+ "data science": [
190
+ "Analisar dados usando {}",
191
+ "Construir modelos de {}",
192
+ "Implementar soluções com {}"
193
+ ],
194
+ "design": [
195
+ "Criar interfaces usando {}",
196
+ "Desenvolver projetos de {}",
197
+ "Aplicar princípios de {}"
198
+ ]
199
+ }
200
+
201
+ return "\n".join([
202
+ f"• {objetivo.format(palavra)}"
203
+ for palavra, objetivo in zip(palavras_chave, objetivos.get("geral", objetivos["programação"]))
204
+ ])
205
+
206
+ def _formatar_modulos(self, modulos: list, tempo: float) -> str:
207
+ return "\n".join([
208
+ f"Módulo {i+1}: {modulo} ({tempo:.1f} meses)"
209
+ for i, modulo in enumerate(modulos)
210
+ ])
211
+
212
+ def _gerar_projetos(self, area: str, nivel: str, palavras_chave: list) -> str:
213
+ projetos = {
214
+ "iniciante": [
215
+ "Projeto Tutorial Guiado",
216
+ "Mini-Projeto Prático",
217
+ "Exercícios Fundamentais"
218
+ ],
219
+ "intermediário": [
220
+ "Projeto Individual",
221
+ "Projeto em Equipe",
222
+ "Case Study Prático"
223
+ ],
224
+ "avançado": [
225
+ "Projeto Complexo",
226
+ "Contribuição Open Source",
227
+ "Projeto de Pesquisa"
228
+ ]
229
+ }
230
+
231
+ return "\n".join([
232
+ f"• {projeto}" for projeto in projetos[nivel]
233
+ ])
234
+
235
+ def _gerar_cronograma(self, duracao: int, modulos: list) -> str:
236
+ meses_por_modulo = duracao / len(modulos)
237
+ cronograma = []
238
+
239
+ for i, modulo in enumerate(modulos):
240
+ inicio = i * meses_por_modulo + 1
241
+ fim = (i + 1) * meses_por_modulo
242
+ cronograma.append(
243
+ f"Mês {inicio:.1f}-{fim:.1f}: {modulo}"
244
+ )
245
+
246
+ return "\n".join(cronograma)
247
+
248
+ def _gerar_marcos_avaliacao(self, nivel: str) -> str:
249
+ marcos = {
250
+ "iniciante": [
251
+ "Quiz de Conceitos Básicos",
252
+ "Exercícios Práticos",
253
+ "Projeto Final Básico"
254
+ ],
255
+ "intermediário": [
256
+ "Avaliação Técnica",
257
+ "Projeto Individual",
258
+ "Apresentação de Resultados"
259
+ ],
260
+ "avançado": [
261
+ "Defesa de Projeto",
262
+ "Contribuição Técnica",
263
+ "Artigo/Publicação"
264
+ ]
265
+ }
266
+
267
+ return "\n".join([
268
+ f"• {marco}" for marco in marcos[nivel]
269
+ ])
270
+
271
  def _formatar_historico(self) -> str:
272
  if not self.historico:
273
  return "Nenhuma trilha gerada ainda"
274
 
275
  historico_fmt = "📋 Histórico de Trilhas:\n\n"
276
+ for h in self.historico[-5:]:
277
  historico_fmt += f"• {h['data']} - {h['nome']} ({h['nivel']}, {h['area']})\n"
278
  return historico_fmt
279
 
 
372
  analise = gr.Textbox(label="Sua Trilha de Aprendizado", lines=10)
373
  historico = gr.Markdown(label="Histórico")
374
 
 
375
  with gr.Accordion("ℹ️ Como usar"):
376
  gr.Markdown("""
377
  1. Grave um áudio descrevendo seus objetivos de aprendizado