Fernandosr85 commited on
Commit
4c8bafa
·
verified ·
1 Parent(s): 68d6e02

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +322 -40
app.py CHANGED
@@ -2,6 +2,7 @@
2
  # AdaptLearn Enhanced - Hugging Face Spaces Deployment
3
  # Next-Generation Adaptive Education System
4
  # Gemma 3 Hackathon Submission - GEMMA 3 COMO MODELO PRINCIPAL
 
5
  # ==============================================================================
6
 
7
  import os
@@ -62,39 +63,108 @@ class Gemma3AIManager:
62
  "gpt2", # Fallback final
63
  ]
64
 
65
- # Configurar token HF
66
  self._setup_hf_token()
67
 
68
  def _setup_hf_token(self):
69
- """Configurar token do Hugging Face para Gemma 3"""
70
 
71
- # Tentar obter token de diferentes fontes
 
 
72
  token_sources = [
73
- os.getenv("HUGGINGFACE_HUB_TOKEN"), # Variável de ambiente
74
- os.getenv("HF_TOKEN"), # Alternativa comum
75
- os.getenv("HUGGING_FACE_TOKEN"), # Outra alternativa
 
76
  ]
77
 
78
- for token in token_sources:
79
- if token and token.strip():
80
- self.hf_token = token.strip()
81
- print(f"✅ Token HF encontrado: {token[:10]}...")
82
- break
 
 
 
 
 
 
 
83
 
84
  if not self.hf_token:
85
- print("⚠️ Token HF não encontrado - Gemma 3 não será acessível")
86
- print("💡 Configure HUGGINGFACE_HUB_TOKEN nas secrets do Space")
 
 
 
 
 
 
 
87
 
88
  # Fazer login automático se token disponível
89
  if self.hf_token:
90
  try:
91
  from huggingface_hub import login
92
- login(token=self.hf_token)
93
  print("🎉 Login HF realizado com sucesso!")
 
 
94
  except Exception as e:
95
  print(f"⚠️ Erro no login HF: {e}")
 
96
  self.hf_token = None
 
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  def load_model(self):
99
  """Carregar Gemma 3 como prioridade principal"""
100
 
@@ -114,6 +184,7 @@ class Gemma3AIManager:
114
 
115
  if not self.hf_token:
116
  print(f"⚠️ Token HF necessário para {model_name} - pulando")
 
117
  continue
118
 
119
  try:
@@ -298,7 +369,10 @@ class Gemma3AIManager:
298
  continue
299
 
300
  print("❌ Nenhum modelo pôde ser carregado - usando modo template")
301
- print("💡 Para usar Gemma 3: adicione HUGGINGFACE_HUB_TOKEN nas secrets")
 
 
 
302
  return False
303
 
304
  def generate_text(self, prompt, max_new_tokens=80, task_complexity="medium", image=None):
@@ -1276,6 +1350,8 @@ def create_gradio_interface():
1276
 
1277
  # Status do sistema com foco no Gemma 3
1278
  ai_status = system.ai_manager.get_status()
 
 
1279
  tech_status = f"""
1280
  ### 🔧 **STATUS DO SISTEMA**
1281
 
@@ -1288,6 +1364,10 @@ def create_gradio_interface():
1288
  **Multimodal:** {'✅ ATIVO' if ai_status.get('multimodal', False) else '🔄 Apenas Texto'}
1289
  **Token HF Configurado:** {'✅ SIM' if ai_status.get('hf_token_configured', False) else '❌ NÃO'}
1290
 
 
 
 
 
1291
  **📊 Performance:**
1292
  **Taxa de Sucesso:** {ai_status['success_rate']:.1%}
1293
  **Total de Gerações:** {ai_status['total_generations']}
@@ -1300,6 +1380,21 @@ def create_gradio_interface():
1300
  {'✅ Templates de Chat Avançados' if ai_status.get('features', {}).get('chat_template', False) else '❌ Templates Básicos'}
1301
 
1302
  **🚀 {'GEMMA 3 ONLINE - MÁXIMO PODER AI!' if ai_status.get('gemma3_active', False) else 'MODO FALLBACK - AINDA TOTALMENTE FUNCIONAL!'}**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1303
  """
1304
 
1305
  return adapted_content, analysis, tech_status
@@ -1329,6 +1424,7 @@ Este conteúdo foi adaptado para seu estilo de aprendizagem.
1329
  """Testar funcionalidade do sistema com prioridade Gemma 3"""
1330
  try:
1331
  ai_status = system.ai_manager.get_status()
 
1332
 
1333
  # Teste de análise
1334
  test_state = system.analyze_learning_state("Tenho TDAH e preciso de ajuda para focar", None, None)
@@ -1351,7 +1447,7 @@ Este conteúdo foi adaptado para seu estilo de aprendizagem.
1351
 
1352
  ai_type = "Gemma 3 Aprimorado" if ai_status.get('gemma3_active', False) else "AI Padrão/Fallback"
1353
 
1354
- return f"""
1355
  ### 🧪 **TESTE ABRANGENTE DO SISTEMA**
1356
 
1357
  **🧠 Status AI:** {gemma_status}
@@ -1359,11 +1455,24 @@ Este conteúdo foi adaptado para seu estilo de aprendizagem.
1359
  **📡 Modelo:** {ai_status['model']}
1360
  **⚡ Capacidades:** {ai_capabilities}
1361
 
 
 
 
 
 
1362
  **🔍 Teste de Recursos Gemma 3:**
1363
  **Multimodal:** {'✅ FUNCIONANDO' if ai_status.get('multimodal', False) else '❌ Não Disponível'}
1364
  **Contexto 128K:** {'✅ ATIVO' if ai_status.get('features', {}).get('long_context', False) else '❌ Contexto Padrão'}
1365
- **Atenção Deslizante:** {'✅ HABILITADO' if ai_status.get('features', {}).get('sliding_window', False) else '❌ Atenção Padrão'}
1366
- **Token HF:** {'✅ CONFIGURADO' if ai_status.get('hf_token_configured', False) else '❌ NÃO CONFIGURADO'}
 
 
 
 
 
 
 
 
1367
 
1368
  **🔍 Testes de Componentes:**
1369
  **Detecção de Perfil:** ✅ Funcionando - Detectado: {test_state['profile']}
@@ -1384,13 +1493,34 @@ Este conteúdo foi adaptado para seu estilo de aprendizagem.
1384
  • Taxa de Sucesso: {ai_status['success_rate']:.1%}
1385
 
1386
  **🚀 {'GEMMA 3 - O FUTURO DA EDUCAÇÃO AI!' if ai_status.get('gemma3_active', False) else 'FALLBACKS INTELIGENTES GARANTEM FUNCIONALIDADE COMPLETA!'}**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1387
 
1388
- **💡 Instruções de Configuração:**
1389
- Para ativar o Gemma 3:
1390
- 1. Obtenha um token do Hugging Face em: https://huggingface.co/settings/tokens
1391
- 2. Adicione o token nas secrets do Space como HUGGINGFACE_HUB_TOKEN
1392
- 3. Reinicie o Space para carregar o Gemma 3
1393
  """
 
 
 
1394
  except Exception as e:
1395
  return f"❌ Teste falhou: {e}"
1396
 
@@ -1426,6 +1556,7 @@ Para ativar o Gemma 3:
1426
  gr.Markdown("""
1427
  # 🎓 AdaptLearn Enhanced - Gemma 3 Edition
1428
  ### Sistema de Educação Adaptativa de Nova Geração - Powered by Gemma 3
 
1429
 
1430
  **🚀 RECURSOS GEMMA 3 PRINCIPAIS:**
1431
  • 🧠 **Motor Gemma 3 Autêntico** - Modelo multimodal de última geração do Google
@@ -1437,7 +1568,7 @@ Para ativar o Gemma 3:
1437
  • 🌐 **Acesso Cloud 24/7** - Poder AI confiável disponível em qualquer lugar
1438
  • 📱 **Compatibilidade Universal** - Experiência completa em todos os dispositivos
1439
 
1440
- **💡 Configuração Gemma 3:** Para desbloquear as capacidades completas do Gemma 3, adicione seu token Hugging Face nas secrets do Space
1441
  """, elem_classes=["gemma3-box"])
1442
 
1443
  with gr.Row():
@@ -1448,7 +1579,7 @@ Para ativar o Gemma 3:
1448
  label="👤 Descreva Seu Perfil de Aprendizagem",
1449
  placeholder="ex: Tenho dislexia e preciso de explicações simples, ou Tenho TDAH e me distraio facilmente...",
1450
  value="Tenho TDAH e preciso de conteúdo interativo e envolvente com pausas frequentes",
1451
- info="🧠 O Gemma 3 analisará e se adaptará às suas necessidades específicas com inteligência multimodal"
1452
  )
1453
 
1454
  gr.Markdown("---")
@@ -1459,7 +1590,7 @@ Para ativar o Gemma 3:
1459
  lines=4,
1460
  placeholder="Digite qualquer conteúdo educacional que deseja adaptar...",
1461
  value="A fotossíntese é o processo pelo qual as plantas convertem luz solar, água e dióxido de carbono em glicose e oxigênio usando clorofila.",
1462
- info="🎯 O Gemma 3 adaptará inteligentemente este conteúdo com compreensão multimodal"
1463
  )
1464
 
1465
  profile_input = gr.Textbox(
@@ -1676,16 +1807,30 @@ Para ativar o Gemma 3:
1676
 
1677
  ---
1678
 
1679
- ### 🔧 **Configuração do Token Gemma 3**
 
 
1680
 
1681
- Para ativar as capacidades completas do Gemma 3:
 
 
 
 
 
 
 
 
1682
 
1683
- 1. **Obtenha um Token HF**: Vá para https://huggingface.co/settings/tokens
1684
- 2. **Crie um Token**: Clique em "New token" e selecione permissões "Read"
1685
- 3. **Configure no Space**: Adicione o token como `HUGGINGFACE_HUB_TOKEN` nas secrets do Space
1686
- 4. **Reinicie**: Restart o Space para carregar o Gemma 3
 
 
1687
 
1688
- **💡 Sem token**: O sistema funcionará com fallbacks inteligentes, mas sem capacidades Gemma 3
 
 
1689
  """)
1690
 
1691
  return demo
@@ -1702,10 +1847,12 @@ def main():
1702
  ║ ADAPTLEARN ENHANCED ║
1703
  ║ Powered by Gemma 3 Multimodal AI ║
1704
  ║ Hugging Face Spaces Edition ║
 
1705
  ╚══════════════════════════════════════════════════════════════╝
1706
  """)
1707
 
1708
- print("🚀 AdaptLearn Enhanced - Deployment Gemma 3:")
 
1709
  print(" 🧠 Primário: Gemma 3 Multimodal para compreensão visão + linguagem")
1710
  print(" 🎯 Secundário: Gemma 3 Text-only para processamento avançado de linguagem")
1711
  print(" 🔄 Fallbacks: Gemma 2 e outros modelos para confiabilidade")
@@ -1713,6 +1860,7 @@ def main():
1713
  print(" 🎯 Geração de conteúdo adaptativo multimodal em tempo real")
1714
  print(" 🌐 Disponibilidade cloud 24/7 no Hugging Face Spaces")
1715
  print(" 📱 Interface otimizada para mobile e desktop")
 
1716
  print("")
1717
 
1718
  try:
@@ -1754,8 +1902,9 @@ def get_system_capabilities():
1754
  """Obter capacidades do sistema para documentação"""
1755
  return {
1756
  'name': 'AdaptLearn Enhanced',
1757
- 'version': '3.0 - Gemma 3 Edition',
1758
- 'deployment': 'Cloud-otimizado para Hugging Face Spaces',
 
1759
  'primary_ai_models': ['google/gemma-3-4b-it', 'google/gemma-3-2b-it', 'google/gemma-3-1b-pt'],
1760
  'fallback_models': ['google/gemma-2-2b-it', 'microsoft/DialoGPT-medium', 'distilgpt2', 'gpt2'],
1761
  'learning_profiles': ['Neurotípico', 'Dislexia', 'TDAH', 'Autismo', 'Deficiência Auditiva'],
@@ -1769,6 +1918,13 @@ def get_system_capabilities():
1769
  'Templates de chat avançados',
1770
  'Adaptação educacional AI'
1771
  ],
 
 
 
 
 
 
 
1772
  'features': [
1773
  'Análise multimodal em tempo real',
1774
  'Adaptação de conteúdo powered by AI',
@@ -1776,9 +1932,10 @@ def get_system_capabilities():
1776
  'Gamificação adaptativa',
1777
  'Deploy cloud pronto',
1778
  'Otimizado para mobile',
1779
- 'Sistemas de fallback',
1780
  'Disponibilidade 24/7',
1781
- 'Suporte Gemma 3 autêntico'
 
1782
  ],
1783
  'accessibility': {
1784
  'dyslexia_support': True,
@@ -1794,18 +1951,143 @@ def get_system_capabilities():
1794
  'audio_analysis': 'Algoritmos customizados',
1795
  'visual_analysis': 'OpenCV + custom',
1796
  'deployment': 'Hugging Face Spaces',
 
1797
  'fallback_systems': 'Adaptação baseada em template + Gemma 2'
1798
  }
1799
  }
1800
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1801
  # Exportar componentes principais
1802
  __all__ = [
1803
  'AdaptiveEducationSystem',
1804
  'Gemma3AIManager',
1805
  'create_gradio_interface',
1806
- 'get_system_capabilities'
 
 
 
1807
  ]
1808
 
1809
- print("🎓 AdaptLearn Enhanced - Gemma 3 Multimodal Edition Pronto!")
 
1810
  print("🧠 Prioriza Gemma 3 multimodal AI com sistemas de fallback inteligentes")
1811
  print("🚀 Execute main() para lançar a aplicação aprimorada com Gemma 3")
 
 
2
  # AdaptLearn Enhanced - Hugging Face Spaces Deployment
3
  # Next-Generation Adaptive Education System
4
  # Gemma 3 Hackathon Submission - GEMMA 3 COMO MODELO PRINCIPAL
5
+ # CONFIGURAÇÃO SEGURA COM SECRETS
6
  # ==============================================================================
7
 
8
  import os
 
63
  "gpt2", # Fallback final
64
  ]
65
 
66
+ # Configurar token HF de forma segura
67
  self._setup_hf_token()
68
 
69
  def _setup_hf_token(self):
70
+ """Configurar token do Hugging Face para Gemma 3 usando SECRETS SEGUROS"""
71
 
72
+ print("🔐 Configurando autenticação Hugging Face...")
73
+
74
+ # Tentar obter token APENAS de secrets seguros do Hugging Face Spaces
75
  token_sources = [
76
+ os.getenv("HF_TOKEN"), # SECRET PRINCIPAL do Space
77
+ os.getenv("HUGGINGFACE_HUB_TOKEN"), # SECRET alternativo
78
+ os.getenv("HUGGING_FACE_TOKEN"), # SECRET alternativo
79
+ os.getenv("HF_AUTH_TOKEN"), # SECRET alternativo
80
  ]
81
 
82
+ for i, token in enumerate(token_sources):
83
+ if token and token.strip() and len(token.strip()) > 10:
84
+ # Validar formato básico do token HF
85
+ token_clean = token.strip()
86
+ if token_clean.startswith('hf_') and len(token_clean) > 30:
87
+ self.hf_token = token_clean
88
+ print(f"✅ Token HF válido encontrado via SECRET #{i+1}")
89
+ print(f"🔐 Token formato: {token_clean[:8]}...{token_clean[-4:]}")
90
+ print("🎉 GEMMA 3 SERÁ DESBLOQUEADO!")
91
+ break
92
+ else:
93
+ print(f"⚠️ Token encontrado mas formato inválido na fonte #{i+1}")
94
 
95
  if not self.hf_token:
96
+ print(" NENHUM TOKEN HF VÁLIDO ENCONTRADO")
97
+ print("🔐 Para ativar Gemma 3, configure um secret no Space:")
98
+ print(" 1. Vá em Settings → Variables and secrets")
99
+ print(" 2. Adicione um novo secret:")
100
+ print(" Name: HF_TOKEN")
101
+ print(" Value: seu_token_do_hugging_face")
102
+ print(" 3. Reinicie o Space")
103
+ print("📖 Obtenha seu token em: https://huggingface.co/settings/tokens")
104
+ print("🔄 Usando modo fallback até token ser configurado")
105
 
106
  # Fazer login automático se token disponível
107
  if self.hf_token:
108
  try:
109
  from huggingface_hub import login
110
+ login(token=self.hf_token, add_to_git_credential=False)
111
  print("🎉 Login HF realizado com sucesso!")
112
+ print("🧠 Gemma 3 agora está disponível!")
113
+ return True
114
  except Exception as e:
115
  print(f"⚠️ Erro no login HF: {e}")
116
+ print("🔄 Token pode estar inválido - usando fallbacks")
117
  self.hf_token = None
118
+ return False
119
 
120
+ return False
121
+
122
+ def get_token_status(self):
123
+ """Obter status detalhado do token para debugging"""
124
+ status = {
125
+ 'token_configured': self.hf_token is not None,
126
+ 'token_format_valid': False,
127
+ 'login_successful': False,
128
+ 'sources_checked': []
129
+ }
130
+
131
+ # Verificar todas as fontes de token
132
+ token_sources = {
133
+ 'HF_TOKEN': os.getenv("HF_TOKEN"),
134
+ 'HUGGINGFACE_HUB_TOKEN': os.getenv("HUGGINGFACE_HUB_TOKEN"),
135
+ 'HUGGING_FACE_TOKEN': os.getenv("HUGGING_FACE_TOKEN"),
136
+ 'HF_AUTH_TOKEN': os.getenv("HF_AUTH_TOKEN")
137
+ }
138
+
139
+ for name, value in token_sources.items():
140
+ source_status = {
141
+ 'name': name,
142
+ 'found': value is not None,
143
+ 'length': len(value) if value else 0,
144
+ 'valid_format': False
145
+ }
146
+
147
+ if value and value.strip():
148
+ clean_token = value.strip()
149
+ source_status['valid_format'] = (
150
+ clean_token.startswith('hf_') and
151
+ len(clean_token) > 30
152
+ )
153
+
154
+ status['sources_checked'].append(source_status)
155
+
156
+ if self.hf_token:
157
+ status['token_format_valid'] = True
158
+ # Testar se login funcionou
159
+ try:
160
+ from huggingface_hub import whoami
161
+ whoami(token=self.hf_token)
162
+ status['login_successful'] = True
163
+ except:
164
+ status['login_successful'] = False
165
+
166
+ return status
167
+
168
  def load_model(self):
169
  """Carregar Gemma 3 como prioridade principal"""
170
 
 
184
 
185
  if not self.hf_token:
186
  print(f"⚠️ Token HF necessário para {model_name} - pulando")
187
+ print("💡 Configure HF_TOKEN nas secrets do Space para usar Gemma 3")
188
  continue
189
 
190
  try:
 
369
  continue
370
 
371
  print("❌ Nenhum modelo pôde ser carregado - usando modo template")
372
+ print("💡 Para usar Gemma 3:")
373
+ print(" 1. Obtenha token em: https://huggingface.co/settings/tokens")
374
+ print(" 2. Adicione como secret HF_TOKEN no Space")
375
+ print(" 3. Reinicie o Space")
376
  return False
377
 
378
  def generate_text(self, prompt, max_new_tokens=80, task_complexity="medium", image=None):
 
1350
 
1351
  # Status do sistema com foco no Gemma 3
1352
  ai_status = system.ai_manager.get_status()
1353
+ token_status = system.ai_manager.get_token_status()
1354
+
1355
  tech_status = f"""
1356
  ### 🔧 **STATUS DO SISTEMA**
1357
 
 
1364
  **Multimodal:** {'✅ ATIVO' if ai_status.get('multimodal', False) else '🔄 Apenas Texto'}
1365
  **Token HF Configurado:** {'✅ SIM' if ai_status.get('hf_token_configured', False) else '❌ NÃO'}
1366
 
1367
+ **🔐 Detalhes do Token:**
1368
+ **Login Bem-sucedido:** {'✅ SIM' if token_status['login_successful'] else '❌ NÃO'}
1369
+ **Formato Válido:** {'✅ SIM' if token_status['token_format_valid'] else '❌ NÃO'}
1370
+
1371
  **📊 Performance:**
1372
  **Taxa de Sucesso:** {ai_status['success_rate']:.1%}
1373
  **Total de Gerações:** {ai_status['total_generations']}
 
1380
  {'✅ Templates de Chat Avançados' if ai_status.get('features', {}).get('chat_template', False) else '❌ Templates Básicos'}
1381
 
1382
  **🚀 {'GEMMA 3 ONLINE - MÁXIMO PODER AI!' if ai_status.get('gemma3_active', False) else 'MODO FALLBACK - AINDA TOTALMENTE FUNCIONAL!'}**
1383
+
1384
+ **🔐 Status dos Secrets Verificados:**
1385
+ """
1386
+
1387
+ for source in token_status['sources_checked']:
1388
+ status_icon = "✅" if source['valid_format'] else "❌" if source['found'] else "⚪"
1389
+ tech_status += f"**{source['name']}:** {status_icon} {'Válido' if source['valid_format'] else 'Encontrado mas inválido' if source['found'] else 'Não encontrado'}\n"
1390
+
1391
+ if not ai_status.get('hf_token_configured', False):
1392
+ tech_status += """
1393
+ **💡 Para Ativar Gemma 3:**
1394
+ 1. Vá em Settings → Variables and secrets
1395
+ 2. Adicione secret: Name=`HF_TOKEN`, Value=`seu_token_hf`
1396
+ 3. Reinicie o Space
1397
+ 4. Obtenha token em: https://huggingface.co/settings/tokens
1398
  """
1399
 
1400
  return adapted_content, analysis, tech_status
 
1424
  """Testar funcionalidade do sistema com prioridade Gemma 3"""
1425
  try:
1426
  ai_status = system.ai_manager.get_status()
1427
+ token_status = system.ai_manager.get_token_status()
1428
 
1429
  # Teste de análise
1430
  test_state = system.analyze_learning_state("Tenho TDAH e preciso de ajuda para focar", None, None)
 
1447
 
1448
  ai_type = "Gemma 3 Aprimorado" if ai_status.get('gemma3_active', False) else "AI Padrão/Fallback"
1449
 
1450
+ test_result = f"""
1451
  ### 🧪 **TESTE ABRANGENTE DO SISTEMA**
1452
 
1453
  **🧠 Status AI:** {gemma_status}
 
1455
  **📡 Modelo:** {ai_status['model']}
1456
  **⚡ Capacidades:** {ai_capabilities}
1457
 
1458
+ **🔐 Verificação de Autenticação:**
1459
+ **Login HF Realizado:** {'✅ SIM' if token_status['login_successful'] else '❌ NÃO'}
1460
+ **Token Configurado:** {'✅ SIM' if token_status['token_configured'] else '❌ NÃO'}
1461
+ **Formato Válido:** {'✅ SIM' if token_status['token_format_valid'] else '❌ NÃO'}
1462
+
1463
  **🔍 Teste de Recursos Gemma 3:**
1464
  **Multimodal:** {'✅ FUNCIONANDO' if ai_status.get('multimodal', False) else '❌ Não Disponível'}
1465
  **Contexto 128K:** {'✅ ATIVO' if ai_status.get('features', {}).get('long_context', False) else '❌ Contexto Padrão'}
1466
+ **Atenção Deslizante:** {'✅ HABILITADO' if ai_status.get('features', {}).get('sliding_window', False) else '❌ Atenção Padrão'}
1467
+
1468
+ **🔍 Status dos Secrets:**
1469
+ """
1470
+
1471
+ for source in token_status['sources_checked']:
1472
+ status = "✅ Válido" if source['valid_format'] else "⚠️ Inválido" if source['found'] else "❌ Ausente"
1473
+ test_result += f"**{source['name']}:** {status} ({source['length']} chars)\n"
1474
+
1475
+ test_result += f"""
1476
 
1477
  **🔍 Testes de Componentes:**
1478
  **Detecção de Perfil:** ✅ Funcionando - Detectado: {test_state['profile']}
 
1493
  • Taxa de Sucesso: {ai_status['success_rate']:.1%}
1494
 
1495
  **🚀 {'GEMMA 3 - O FUTURO DA EDUCAÇÃO AI!' if ai_status.get('gemma3_active', False) else 'FALLBACKS INTELIGENTES GARANTEM FUNCIONALIDADE COMPLETA!'}**
1496
+ """
1497
+
1498
+ if not token_status['token_configured']:
1499
+ test_result += """
1500
+
1501
+ **💡 INSTRUÇÕES PARA ATIVAR GEMMA 3:**
1502
+
1503
+ **🔐 Configuração Segura dos Secrets:**
1504
+ 1. **Obtenha seu token:** https://huggingface.co/settings/tokens
1505
+ 2. **Vá nas configurações do Space:** Settings → Variables and secrets
1506
+ 3. **Adicione um novo secret:**
1507
+ - **Name:** `HF_TOKEN`
1508
+ - **Value:** `hf_xxxxxxxxxxxxx` (seu token)
1509
+ 4. **Clique "Add secret"**
1510
+ 5. **Reinicie o Space:** Factory reboot
1511
+ 6. **Aguarde o carregamento** e teste novamente
1512
+
1513
+ **✅ Vantagens dos Secrets:**
1514
+ • Token permanece privado e seguro
1515
+ • Não exposto no código público
1516
+ • Acesso automático ao Gemma 3
1517
+ • Conformidade com políticas do HF
1518
 
1519
+ **🎯 Após configuração:** Sistema automaticamente detectará e usará Gemma 3!
 
 
 
 
1520
  """
1521
+
1522
+ return test_result
1523
+
1524
  except Exception as e:
1525
  return f"❌ Teste falhou: {e}"
1526
 
 
1556
  gr.Markdown("""
1557
  # 🎓 AdaptLearn Enhanced - Gemma 3 Edition
1558
  ### Sistema de Educação Adaptativa de Nova Geração - Powered by Gemma 3
1559
+ ### 🔐 **SISTEMA SEGURO COM SECRETS** 🔐
1560
 
1561
  **🚀 RECURSOS GEMMA 3 PRINCIPAIS:**
1562
  • 🧠 **Motor Gemma 3 Autêntico** - Modelo multimodal de última geração do Google
 
1568
  • 🌐 **Acesso Cloud 24/7** - Poder AI confiável disponível em qualquer lugar
1569
  • 📱 **Compatibilidade Universal** - Experiência completa em todos os dispositivos
1570
 
1571
+ **🔐 Segurança:** Tokens são gerenciados via secrets seguros do Hugging Face Spaces
1572
  """, elem_classes=["gemma3-box"])
1573
 
1574
  with gr.Row():
 
1579
  label="👤 Descreva Seu Perfil de Aprendizagem",
1580
  placeholder="ex: Tenho dislexia e preciso de explicações simples, ou Tenho TDAH e me distraio facilmente...",
1581
  value="Tenho TDAH e preciso de conteúdo interativo e envolvente com pausas frequentes",
1582
+ info="🧠 O Gemma 3 analisará suas necessidades específicas com inteligência multimodal (requer token nas secrets)"
1583
  )
1584
 
1585
  gr.Markdown("---")
 
1590
  lines=4,
1591
  placeholder="Digite qualquer conteúdo educacional que deseja adaptar...",
1592
  value="A fotossíntese é o processo pelo qual as plantas convertem luz solar, água e dióxido de carbono em glicose e oxigênio usando clorofila.",
1593
+ info="🎯 O Gemma 3 adaptará inteligentemente este conteúdo com compreensão multimodal (requer token nas secrets)"
1594
  )
1595
 
1596
  profile_input = gr.Textbox(
 
1807
 
1808
  ---
1809
 
1810
+ ### 🔐 **Configuração Segura do Token Gemma 3**
1811
+
1812
+ **Para ativar o Gemma 3 com segurança:**
1813
 
1814
+ 1. **🎫 Obtenha seu token:** em https://huggingface.co/settings/tokens
1815
+ 2. **⚙️ Abra Settings do Space:** Clique em "Settings" no topo da página
1816
+ 3. **🔒 Vá para Secrets:** Clique em "Variables and secrets"
1817
+ 4. **➕ Adicione novo secret:**
1818
+ - **Name**: `HF_TOKEN`
1819
+ - **Value**: `hf_xxxxxxxxxx` (seu token HF)
1820
+ 5. **💾 Salve o secret:** Clique em "Add secret"
1821
+ 6. **🔄 Reinicie o Space:** Clique em "Factory reboot"
1822
+ 7. **⏱️ Aguarde o carregamento** e teste o sistema
1823
 
1824
+ **🔐 Vantagens dos Secrets:**
1825
+ - Token permanece privado e seguro
1826
+ - Não exposto no código público
1827
+ - Acesso automático ao Gemma 3
1828
+ - ✅ Conformidade com políticas do HF
1829
+ - ✅ Carregamento automático na inicialização
1830
 
1831
+ **💡 Status atual**: Sistema funcionará com fallbacks inteligentes até token ser configurado nas secrets
1832
+
1833
+ **🎯 Após configuração**: Reinicie o Space e o Gemma 3 será carregado automaticamente!
1834
  """)
1835
 
1836
  return demo
 
1847
  ║ ADAPTLEARN ENHANCED ║
1848
  ║ Powered by Gemma 3 Multimodal AI ║
1849
  ║ Hugging Face Spaces Edition ║
1850
+ ║ CONFIGURAÇÃO SEGURA ║
1851
  ╚══════════════════════════════════════════════════════════════╝
1852
  """)
1853
 
1854
+ print("🚀 AdaptLearn Enhanced - Deployment Seguro Gemma 3:")
1855
+ print(" 🔐 Autenticação: Somente via secrets seguros do HF Spaces")
1856
  print(" 🧠 Primário: Gemma 3 Multimodal para compreensão visão + linguagem")
1857
  print(" 🎯 Secundário: Gemma 3 Text-only para processamento avançado de linguagem")
1858
  print(" 🔄 Fallbacks: Gemma 2 e outros modelos para confiabilidade")
 
1860
  print(" 🎯 Geração de conteúdo adaptativo multimodal em tempo real")
1861
  print(" 🌐 Disponibilidade cloud 24/7 no Hugging Face Spaces")
1862
  print(" 📱 Interface otimizada para mobile e desktop")
1863
+ print(" 🔐 Zero hardcoded tokens - máxima segurança")
1864
  print("")
1865
 
1866
  try:
 
1902
  """Obter capacidades do sistema para documentação"""
1903
  return {
1904
  'name': 'AdaptLearn Enhanced',
1905
+ 'version': '3.0 - Gemma 3 Edition (Secure)',
1906
+ 'deployment': 'Cloud-otimizado para Hugging Face Spaces com configuração segura',
1907
+ 'security': 'Autenticação via secrets seguros - zero hardcoded tokens',
1908
  'primary_ai_models': ['google/gemma-3-4b-it', 'google/gemma-3-2b-it', 'google/gemma-3-1b-pt'],
1909
  'fallback_models': ['google/gemma-2-2b-it', 'microsoft/DialoGPT-medium', 'distilgpt2', 'gpt2'],
1910
  'learning_profiles': ['Neurotípico', 'Dislexia', 'TDAH', 'Autismo', 'Deficiência Auditiva'],
 
1918
  'Templates de chat avançados',
1919
  'Adaptação educacional AI'
1920
  ],
1921
+ 'security_features': [
1922
+ 'Gestão segura de tokens via HF Secrets',
1923
+ 'Zero exposição de credenciais no código',
1924
+ 'Validação automática de formato de token',
1925
+ 'Login seguro com fallback inteligente',
1926
+ 'Monitoramento de status de autenticação'
1927
+ ],
1928
  'features': [
1929
  'Análise multimodal em tempo real',
1930
  'Adaptação de conteúdo powered by AI',
 
1932
  'Gamificação adaptativa',
1933
  'Deploy cloud pronto',
1934
  'Otimizado para mobile',
1935
+ 'Sistemas de fallback robustos',
1936
  'Disponibilidade 24/7',
1937
+ 'Suporte Gemma 3 autêntico',
1938
+ 'Configuração segura via secrets'
1939
  ],
1940
  'accessibility': {
1941
  'dyslexia_support': True,
 
1951
  'audio_analysis': 'Algoritmos customizados',
1952
  'visual_analysis': 'OpenCV + custom',
1953
  'deployment': 'Hugging Face Spaces',
1954
+ 'security': 'HF Secrets Management',
1955
  'fallback_systems': 'Adaptação baseada em template + Gemma 2'
1956
  }
1957
  }
1958
 
1959
+ def validate_hf_token_format(token):
1960
+ """Validar formato do token Hugging Face"""
1961
+ if not token or not isinstance(token, str):
1962
+ return False, "Token deve ser uma string"
1963
+
1964
+ token = token.strip()
1965
+
1966
+ if not token.startswith('hf_'):
1967
+ return False, "Token deve começar com 'hf_'"
1968
+
1969
+ if len(token) < 35:
1970
+ return False, "Token muito curto (mínimo 35 caracteres)"
1971
+
1972
+ if len(token) > 50:
1973
+ return False, "Token muito longo (máximo 50 caracteres)"
1974
+
1975
+ # Verificar caracteres válidos (alphanumeric + underscore)
1976
+ valid_chars = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
1977
+ if not all(c in valid_chars for c in token):
1978
+ return False, "Token contém caracteres inválidos"
1979
+
1980
+ return True, "Token com formato válido"
1981
+
1982
+ def get_token_setup_instructions():
1983
+ """Obter instruções detalhadas para configuração do token"""
1984
+ return {
1985
+ 'steps': [
1986
+ {
1987
+ 'step': 1,
1988
+ 'title': 'Obter Token HF',
1989
+ 'description': 'Vá para https://huggingface.co/settings/tokens',
1990
+ 'details': 'Crie um token com permissões de leitura de repositórios'
1991
+ },
1992
+ {
1993
+ 'step': 2,
1994
+ 'title': 'Acessar Settings do Space',
1995
+ 'description': 'Clique em "Settings" no topo da página do Space',
1996
+ 'details': 'Procure pelo ícone de engrenagem ao lado do nome do Space'
1997
+ },
1998
+ {
1999
+ 'step': 3,
2000
+ 'title': 'Ir para Secrets',
2001
+ 'description': 'Clique em "Variables and secrets"',
2002
+ 'details': 'Esta seção permite configurar variáveis privadas'
2003
+ },
2004
+ {
2005
+ 'step': 4,
2006
+ 'title': 'Adicionar Secret',
2007
+ 'description': 'Clique em "New secret"',
2008
+ 'details': 'Configure: Name = HF_TOKEN, Value = seu_token_hf'
2009
+ },
2010
+ {
2011
+ 'step': 5,
2012
+ 'title': 'Salvar e Reiniciar',
2013
+ 'description': 'Salve o secret e reinicie o Space',
2014
+ 'details': 'Use "Factory reboot" para garantir carregamento completo'
2015
+ }
2016
+ ],
2017
+ 'tips': [
2018
+ 'O token deve começar com "hf_"',
2019
+ 'Mantenha o token privado e seguro',
2020
+ 'Não compartilhe o token em código público',
2021
+ 'O sistema detectará automaticamente o token configurado',
2022
+ 'Após configuração, o Gemma 3 será carregado automaticamente'
2023
+ ],
2024
+ 'troubleshooting': {
2025
+ 'token_not_detected': 'Verifique se o nome do secret é exatamente "HF_TOKEN"',
2026
+ 'invalid_format': 'Token deve começar com "hf_" e ter 35-50 caracteres',
2027
+ 'login_failed': 'Verifique se o token tem permissões adequadas',
2028
+ 'model_not_loading': 'Tente fazer "Factory reboot" do Space'
2029
+ }
2030
+ }
2031
+
2032
+ def generate_status_report():
2033
+ """Gerar relatório de status do sistema"""
2034
+ try:
2035
+ # Verificar disponibilidade de bibliotecas
2036
+ libs_status = {
2037
+ 'transformers': TRANSFORMERS_AVAILABLE,
2038
+ 'opencv': OPENCV_AVAILABLE,
2039
+ 'torch': True, # Assumindo que está disponível se transformers funciona
2040
+ 'gradio': True, # Necessário para interface
2041
+ 'numpy': True # Dependência básica
2042
+ }
2043
+
2044
+ # Verificar tokens disponíveis
2045
+ token_sources = {
2046
+ 'HF_TOKEN': os.getenv("HF_TOKEN") is not None,
2047
+ 'HUGGINGFACE_HUB_TOKEN': os.getenv("HUGGINGFACE_HUB_TOKEN") is not None,
2048
+ 'HUGGING_FACE_TOKEN': os.getenv("HUGGING_FACE_TOKEN") is not None,
2049
+ 'HF_AUTH_TOKEN': os.getenv("HF_AUTH_TOKEN") is not None
2050
+ }
2051
+
2052
+ # Verificar se algum token válido está disponível
2053
+ valid_token_found = False
2054
+ for token_name, token_value in token_sources.items():
2055
+ if token_value:
2056
+ token = os.getenv(token_name)
2057
+ if token and validate_hf_token_format(token)[0]:
2058
+ valid_token_found = True
2059
+ break
2060
+
2061
+ return {
2062
+ 'timestamp': datetime.now().isoformat(),
2063
+ 'libraries': libs_status,
2064
+ 'tokens': token_sources,
2065
+ 'valid_token_available': valid_token_found,
2066
+ 'gemma3_ready': TRANSFORMERS_AVAILABLE and valid_token_found,
2067
+ 'fallback_available': TRANSFORMERS_AVAILABLE,
2068
+ 'system_ready': True # Sistema sempre funciona com fallbacks
2069
+ }
2070
+
2071
+ except Exception as e:
2072
+ return {
2073
+ 'timestamp': datetime.now().isoformat(),
2074
+ 'error': str(e),
2075
+ 'system_ready': True # Sistema sempre funciona com templates
2076
+ }
2077
+
2078
  # Exportar componentes principais
2079
  __all__ = [
2080
  'AdaptiveEducationSystem',
2081
  'Gemma3AIManager',
2082
  'create_gradio_interface',
2083
+ 'get_system_capabilities',
2084
+ 'validate_hf_token_format',
2085
+ 'get_token_setup_instructions',
2086
+ 'generate_status_report'
2087
  ]
2088
 
2089
+ print("🎓 AdaptLearn Enhanced - Gemma 3 Multimodal Edition Seguro!")
2090
+ print("🔐 Configuração segura com secrets - zero tokens hardcoded")
2091
  print("🧠 Prioriza Gemma 3 multimodal AI com sistemas de fallback inteligentes")
2092
  print("🚀 Execute main() para lançar a aplicação aprimorada com Gemma 3")
2093
+ print("💡 Configure HF_TOKEN nas secrets do Space para ativar Gemma 3!")