torxyton commited on
Commit
0a38476
·
1 Parent(s): 349675c

feat: Adiciona compatibilidade completa com Hugging Face Spaces

Browse files

- Corrige erro 500 através de ssr_mode=False no Gradio 5.x
- Adiciona módulo hf_spaces_config.py com configurações otimizadas
- Implementa detecção automática do ambiente HF Spaces
- Remove parâmetros incompatíveis (enable_queue, show_tips)
- Atualiza documentação com guia de troubleshooting HF Spaces
- Adiciona seção HF Spaces no README.md
- Atualiza CHANGELOG.md com versão 2.3.0
- Atualiza API reference com novos parâmetros

CHANGELOG.md CHANGED
@@ -5,6 +5,33 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
5
  O formato é baseado em [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
  e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  ## [2.2.2] - 2024-01-29
9
 
10
  ### 🎉 Adicionado
 
5
  O formato é baseado em [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
  e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
 
8
+ ## [2.3.0] - 2024-01-30
9
+
10
+ ### 🎉 Adicionado
11
+ - **Compatibilidade Total com Hugging Face Spaces**: Sistema 100% compatível com HF Spaces
12
+ - **Configuração HF Spaces**: Novo módulo `hf_spaces_config.py` com configurações otimizadas
13
+ - **Detecção Automática de Ambiente**: Sistema detecta automaticamente se está rodando no HF Spaces
14
+ - **Documentação HF Spaces**: Guia completo de troubleshooting para HF Spaces
15
+ - **Fallback Inteligente**: Configurações locais como backup para desenvolvimento
16
+
17
+ ### 🐛 Corrigido
18
+ - **Erro 500 no HF Spaces**: Resolvido através de `ssr_mode=False` no Gradio 5.x
19
+ - **Server-Side Rendering**: SSR desabilitado para evitar conflitos no HF Spaces
20
+ - **Parâmetros Incompatíveis**: Removidos `enable_queue` e `show_tips` (não suportados no Gradio 5.x)
21
+ - **Configurações de Servidor**: Ajustadas para `server_name="0.0.0.0"` e `server_port=7860`
22
+
23
+ ### 🔄 Alterado
24
+ - **Método launch()**: Atualizado em `app.py` e `gradio_interface.py` com configurações HF Spaces
25
+ - **Parâmetros Gradio**: Substituído `show_tips` por `show_api` para compatibilidade
26
+ - **README.md**: Adicionada seção completa sobre compatibilidade com HF Spaces
27
+ - **Documentação**: Incluído link para guia de troubleshooting HF Spaces
28
+
29
+ ### 📚 Documentação
30
+ - **Guia HF Spaces**: Novo arquivo `docs/huggingface_spaces_troubleshooting.md`
31
+ - **Configurações Recomendadas**: Documentadas todas as configurações para HF Spaces
32
+ - **Checklist de Compatibilidade**: Lista completa de verificações para deploy
33
+ - **Métodos de Diagnóstico**: Ferramentas para identificar problemas no HF Spaces
34
+
35
  ## [2.2.2] - 2024-01-29
36
 
37
  ### 🎉 Adicionado
README.md CHANGED
@@ -72,7 +72,7 @@ Um sistema completo de análise financeira que combina múltiplos modelos de IA
72
  ## 🛠️ Tecnologias Utilizadas
73
 
74
  - **Python 3.8+**: Linguagem principal
75
- - **Gradio**: Interface web interativa
76
  - **Transformers**: Modelos de linguagem (FinBERT, RoBERTa)
77
  - **NumPy/Pandas**: Processamento de dados
78
  - **Scikit-learn**: Machine learning
@@ -107,6 +107,33 @@ python app.py
107
  ### 4. Acesse a interface
108
  Abra seu navegador em `http://localhost:7860`
109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  ## 📖 Documentação
111
 
112
  Documentação completa disponível em:
@@ -116,6 +143,7 @@ Documentação completa disponível em:
116
  - [Arquitetura do Sistema](docs/architecture.md)
117
  - [Sistema de Logging](docs/logging_system.md)
118
  - [Solução de Problemas](docs/troubleshooting.md)
 
119
 
120
  ## 🔧 Configuração
121
 
 
72
  ## 🛠️ Tecnologias Utilizadas
73
 
74
  - **Python 3.8+**: Linguagem principal
75
+ - **Gradio 5.44.0**: Interface web interativa (compatível com HF Spaces)
76
  - **Transformers**: Modelos de linguagem (FinBERT, RoBERTa)
77
  - **NumPy/Pandas**: Processamento de dados
78
  - **Scikit-learn**: Machine learning
 
107
  ### 4. Acesse a interface
108
  Abra seu navegador em `http://localhost:7860`
109
 
110
+ ## 🌐 Hugging Face Spaces
111
+
112
+ Este projeto está **100% compatível** com Hugging Face Spaces:
113
+
114
+ ### ✅ Correções Implementadas
115
+ - **SSR Desabilitado**: `ssr_mode=False` para evitar erro 500
116
+ - **Configurações Otimizadas**: Parâmetros específicos para HF Spaces
117
+ - **Detecção Automática**: Sistema detecta ambiente HF Spaces automaticamente
118
+ - **Fallback Inteligente**: Configurações locais como backup
119
+
120
+ ### 🚀 Deploy no HF Spaces
121
+ 1. Faça fork/clone do repositório
122
+ 2. Crie um novo Space no Hugging Face
123
+ 3. Configure como Gradio App
124
+ 4. O sistema aplicará automaticamente as configurações corretas
125
+
126
+ ### 🔧 Configurações HF Spaces
127
+ - **SDK**: Gradio 5.44.0
128
+ - **Python**: 3.8+
129
+ - **Arquivo Principal**: `app.py`
130
+ - **SSR**: Desabilitado automaticamente
131
+
132
+ ### 📋 Troubleshooting
133
+ Para problemas específicos do HF Spaces, consulte:
134
+ - [Guia de Troubleshooting HF Spaces](docs/huggingface_spaces_troubleshooting.md)
135
+ - Configurações em `hf_spaces_config.py`
136
+
137
  ## 📖 Documentação
138
 
139
  Documentação completa disponível em:
 
143
  - [Arquitetura do Sistema](docs/architecture.md)
144
  - [Sistema de Logging](docs/logging_system.md)
145
  - [Solução de Problemas](docs/troubleshooting.md)
146
+ - [Troubleshooting HF Spaces](docs/huggingface_spaces_troubleshooting.md)
147
 
148
  ## 🔧 Configuração
149
 
app.py CHANGED
@@ -1215,4 +1215,18 @@ initialize_engines()
1215
  demo = create_interface()
1216
 
1217
  if __name__ == "__main__":
1218
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1215
  demo = create_interface()
1216
 
1217
  if __name__ == "__main__":
1218
+ # Importar configurações específicas para HF Spaces
1219
+ try:
1220
+ from hf_spaces_config import HuggingFaceSpacesConfig
1221
+
1222
+ # Aplicar correções para HF Spaces
1223
+ HuggingFaceSpacesConfig.apply_hf_spaces_fixes()
1224
+
1225
+ # Usar configurações otimizadas para HF Spaces
1226
+ launch_config = HuggingFaceSpacesConfig.get_launch_config()
1227
+ demo.launch(**launch_config)
1228
+
1229
+ except ImportError:
1230
+ # Fallback para configuração básica
1231
+ print("⚠️ Configurações HF Spaces não encontradas, usando configuração básica")
1232
+ demo.launch(ssr_mode=False)
docs/api-reference.md CHANGED
@@ -458,13 +458,44 @@ class GradioInterface:
458
  """
459
 
460
  def launch(self, **kwargs):
461
- """Lança a interface.
462
 
463
  Args:
464
  **kwargs: Argumentos para gr.launch()
 
 
 
 
 
 
 
 
 
465
  """
466
  ```
467
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
  #### Componentes da Interface
469
 
470
  ```python
 
458
  """
459
 
460
  def launch(self, **kwargs):
461
+ """Lança a interface com configurações otimizadas.
462
 
463
  Args:
464
  **kwargs: Argumentos para gr.launch()
465
+
466
+ Configurações padrão para HF Spaces:
467
+ - server_name: "0.0.0.0"
468
+ - server_port: 7860
469
+ - share: False
470
+ - show_error: True
471
+ - max_threads: 10
472
+ - ssr_mode: False (para compatibilidade HF Spaces)
473
+ - show_api: False
474
  """
475
  ```
476
 
477
+ #### Configurações HF Spaces
478
+
479
+ ```python
480
+ from hf_spaces_config import HuggingFaceSpacesConfig
481
+
482
+ # Uso automático das configurações HF Spaces
483
+ config = HuggingFaceSpacesConfig()
484
+ launch_config = config.get_launch_config()
485
+ demo.launch(**launch_config)
486
+
487
+ # Configuração manual para HF Spaces
488
+ demo.launch(
489
+ server_name="0.0.0.0",
490
+ server_port=7860,
491
+ share=False,
492
+ show_error=True,
493
+ max_threads=10,
494
+ ssr_mode=False, # CRÍTICO: Evita erro 500 no HF Spaces
495
+ show_api=False
496
+ )
497
+ ```
498
+
499
  #### Componentes da Interface
500
 
501
  ```python
docs/huggingface_spaces_troubleshooting.md ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🚀 Guia de Troubleshooting - Hugging Face Spaces
2
+
3
+ Este guia aborda problemas comuns ao executar aplicações Gradio no Hugging Face Spaces e suas soluções.
4
+
5
+ ## 🔥 Problemas Mais Comuns
6
+
7
+ ### 1. Erro 500 - Internal Server Error
8
+
9
+ **Sintomas:**
10
+ - Aplicação retorna erro 500 ao carregar
11
+ - Interface não carrega completamente
12
+ - Erro "Application startup failed"
13
+
14
+ **Causa Principal:**
15
+ O Gradio 5.x usa Server-Side Rendering (SSR) por padrão no Hugging Face Spaces, o que pode causar conflitos e erros 500.
16
+
17
+ **Solução:**
18
+ ```python
19
+ # No seu app.py, adicione ssr_mode=False
20
+ demo.launch(ssr_mode=False)
21
+
22
+ # Ou configure via variável de ambiente
23
+ import os
24
+ os.environ['GRADIO_SSR_MODE'] = 'false'
25
+ ```
26
+
27
+ **Implementação no Projeto:**
28
+ O projeto já inclui configurações automáticas em `hf_spaces_config.py` que resolvem este problema.
29
+
30
+ ### 2. Problemas de Autenticação
31
+
32
+ **Sintomas:**
33
+ - Erro ao usar `auth` parameter
34
+ - Login não funciona no HF Spaces
35
+
36
+ **Causa:**
37
+ Problemas de compatibilidade entre Gradio 5.x e sistema de autenticação do HF Spaces.
38
+
39
+ **Solução:**
40
+ ```python
41
+ # Evite usar auth no HF Spaces
42
+ demo.launch(auth=None) # Remover autenticação customizada
43
+ ```
44
+
45
+ ### 3. Problemas de Performance
46
+
47
+ **Sintomas:**
48
+ - Aplicação lenta para carregar
49
+ - Timeouts frequentes
50
+ - Interface não responsiva
51
+
52
+ **Soluções:**
53
+ ```python
54
+ # Configurações otimizadas
55
+ demo.launch(
56
+ max_threads=10,
57
+ enable_queue=True,
58
+ show_error=True
59
+ )
60
+ ```
61
+
62
+ ### 4. Problemas de Tema/CSS
63
+
64
+ **Sintomas:**
65
+ - CSS customizado não carrega
66
+ - Temas não aplicam corretamente
67
+
68
+ **Solução:**
69
+ ```python
70
+ # Use temas padrão para melhor compatibilidade
71
+ with gr.Blocks(theme='default') as demo:
72
+ # Seu código aqui
73
+ pass
74
+ ```
75
+
76
+ ## 🛠️ Configurações Recomendadas
77
+
78
+ ### README.md do HF Space
79
+ ```yaml
80
+ ---
81
+ title: Seu App
82
+ emoji: 📈
83
+ colorFrom: blue
84
+ colorTo: green
85
+ sdk: gradio
86
+ sdk_version: 5.44.0
87
+ app_file: app.py
88
+ pinned: false
89
+ license: mit
90
+ ---
91
+ ```
92
+
93
+ ### requirements.txt
94
+ ```txt
95
+ gradio==5.44.0
96
+ # Suas outras dependências...
97
+ ```
98
+
99
+ ### Configuração de Launch Otimizada
100
+ ```python
101
+ from hf_spaces_config import HuggingFaceSpacesConfig
102
+
103
+ # Aplicar configurações automáticas
104
+ HuggingFaceSpacesConfig.apply_hf_spaces_fixes()
105
+
106
+ # Usar configurações otimizadas
107
+ launch_config = HuggingFaceSpacesConfig.get_launch_config()
108
+ demo.launch(**launch_config)
109
+ ```
110
+
111
+ ## 🔍 Diagnóstico de Problemas
112
+
113
+ ### Verificar Logs do HF Spaces
114
+ 1. Acesse seu Space no HF
115
+ 2. Clique em "Logs" no canto superior direito
116
+ 3. Procure por mensagens de erro específicas
117
+
118
+ ### Testar Localmente
119
+ ```bash
120
+ # Simular ambiente HF Spaces
121
+ export GRADIO_SSR_MODE=false
122
+ export GRADIO_ANALYTICS_ENABLED=false
123
+ python app.py
124
+ ```
125
+
126
+ ### Verificar Compatibilidade
127
+ ```python
128
+ # Adicione no início do seu app.py
129
+ import gradio as gr
130
+ print(f"Gradio version: {gr.__version__}")
131
+
132
+ # Verificar se está no HF Spaces
133
+ import os
134
+ if os.getenv('SPACE_ID'):
135
+ print(f"Running on HF Space: {os.getenv('SPACE_ID')}")
136
+ else:
137
+ print("Running locally")
138
+ ```
139
+
140
+ ## 📋 Checklist de Compatibilidade
141
+
142
+ - [ ] ✅ `ssr_mode=False` configurado
143
+ - [ ] ✅ Gradio versão 5.44.0 ou superior
144
+ - [ ] ✅ `auth=None` (sem autenticação customizada)
145
+ - [ ] ✅ `server_name='0.0.0.0'` para acesso externo
146
+ - [ ] ✅ `enable_queue=True` para melhor performance
147
+ - [ ] ✅ Tema padrão ou compatível
148
+ - [ ] ✅ CSS customizado testado
149
+ - [ ] ✅ Dependências no requirements.txt
150
+ - [ ] ✅ README.md com sdk_version correto
151
+
152
+ ## 🚨 Problemas Conhecidos
153
+
154
+ ### Gradio 5.x + HF Spaces
155
+ - **SSR Mode**: Causa erro 500 → Solução: `ssr_mode=False`
156
+ - **Node.js**: SSR requer Node.js → Solução: Desabilitar SSR
157
+ - **Auth**: Conflitos com auth customizada → Solução: Usar auth do HF
158
+
159
+ ### Workarounds Temporários
160
+ ```python
161
+ # Se ainda tiver problemas, tente downgrade
162
+ # requirements.txt:
163
+ # gradio==4.44.1 # Versão estável anterior
164
+ ```
165
+
166
+ ## 📞 Suporte Adicional
167
+
168
+ ### Recursos Úteis
169
+ - [Gradio Documentation](https://gradio.app/docs/)
170
+ - [HF Spaces Documentation](https://huggingface.co/docs/hub/spaces)
171
+ - [Gradio GitHub Issues](https://github.com/gradio-app/gradio/issues)
172
+
173
+ ### Reportar Problemas
174
+ 1. Verifique logs do HF Spaces
175
+ 2. Teste localmente com configurações similares
176
+ 3. Documente passos para reproduzir
177
+ 4. Inclua versões de dependências
178
+
179
+ ---
180
+
181
+ **💡 Dica:** Este projeto já inclui todas as configurações necessárias em `hf_spaces_config.py`. Basta importar e usar!
hf_spaces_config.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Configurações específicas para Hugging Face Spaces.
2
+
3
+ Este arquivo contém configurações otimizadas para execução no Hugging Face Spaces,
4
+ resolvendo problemas comuns de compatibilidade com Gradio 5.x.
5
+ """
6
+
7
+ import os
8
+ from typing import Dict, Any
9
+
10
+ class HuggingFaceSpacesConfig:
11
+ """Configurações específicas para Hugging Face Spaces."""
12
+
13
+ @staticmethod
14
+ def get_launch_config() -> Dict[str, Any]:
15
+ """Retorna configurações otimizadas para launch() no HF Spaces.
16
+
17
+ Returns:
18
+ Dict com configurações para o método launch() do Gradio.
19
+ """
20
+ config = {
21
+ # Resolver erro 500 causado pelo SSR no Gradio 5.x
22
+ 'ssr_mode': False,
23
+
24
+ # Configurações de servidor otimizadas para HF Spaces
25
+ 'server_name': '0.0.0.0', # Permitir acesso externo
26
+ 'server_port': int(os.getenv('PORT', 7860)), # Usar porta do ambiente
27
+
28
+ # Configurações de performance
29
+ 'max_threads': 10,
30
+ 'show_error': True,
31
+ 'show_api': False,
32
+
33
+ # Configurações de segurança
34
+ 'auth': None, # Evitar problemas de autenticação no HF Spaces
35
+ 'share': False, # Não necessário no HF Spaces
36
+
37
+ # Configurações de interface
38
+ 'favicon_path': None,
39
+ 'app_kwargs': {
40
+ 'docs_url': None, # Desabilitar docs automáticos
41
+ 'redoc_url': None # Desabilitar redoc
42
+ }
43
+ }
44
+
45
+ return config
46
+
47
+ @staticmethod
48
+ def get_blocks_config() -> Dict[str, Any]:
49
+ """Retorna configurações otimizadas para gr.Blocks no HF Spaces.
50
+
51
+ Returns:
52
+ Dict com configurações para gr.Blocks.
53
+ """
54
+ return {
55
+ 'title': 'Sistema de Análise Financeira com IA',
56
+ 'theme': 'default', # Usar tema padrão para melhor compatibilidade
57
+ 'analytics_enabled': False, # Desabilitar analytics no HF Spaces
58
+ 'css': None # CSS customizado pode ser adicionado aqui se necessário
59
+ }
60
+
61
+ @staticmethod
62
+ def is_huggingface_space() -> bool:
63
+ """Detecta se está executando no Hugging Face Spaces.
64
+
65
+ Returns:
66
+ True se estiver executando no HF Spaces.
67
+ """
68
+ return os.getenv('SPACE_ID') is not None
69
+
70
+ @staticmethod
71
+ def get_environment_info() -> Dict[str, str]:
72
+ """Retorna informações do ambiente HF Spaces.
73
+
74
+ Returns:
75
+ Dict com informações do ambiente.
76
+ """
77
+ return {
78
+ 'space_id': os.getenv('SPACE_ID', 'local'),
79
+ 'space_author': os.getenv('SPACE_AUTHOR_NAME', 'unknown'),
80
+ 'space_repo': os.getenv('SPACE_REPO_NAME', 'unknown'),
81
+ 'gradio_version': '5.44.0',
82
+ 'python_version': os.getenv('PYTHON_VERSION', 'unknown')
83
+ }
84
+
85
+ @staticmethod
86
+ def apply_hf_spaces_fixes():
87
+ """Aplica correções específicas para HF Spaces."""
88
+ # Configurar variáveis de ambiente para melhor compatibilidade
89
+ os.environ.setdefault('GRADIO_SSR_MODE', 'false')
90
+ os.environ.setdefault('GRADIO_ANALYTICS_ENABLED', 'false')
91
+ os.environ.setdefault('GRADIO_SHARE', 'false')
92
+
93
+ # Configurações de logging para HF Spaces
94
+ os.environ.setdefault('GRADIO_DEBUG', '0')
95
+
96
+ print("✅ Configurações do HF Spaces aplicadas com sucesso")
97
+
98
+ if HuggingFaceSpacesConfig.is_huggingface_space():
99
+ env_info = HuggingFaceSpacesConfig.get_environment_info()
100
+ print(f"🚀 Executando no HF Space: {env_info['space_author']}/{env_info['space_repo']}")
101
+ else:
102
+ print("🏠 Executando localmente com configurações compatíveis com HF Spaces")
103
+
104
+ # Aplicar configurações automaticamente quando o módulo for importado
105
+ if __name__ != '__main__':
106
+ HuggingFaceSpacesConfig.apply_hf_spaces_fixes()
src/ui/gradio_interface.py CHANGED
@@ -590,8 +590,8 @@ class GradioInterface:
590
  'share': False,
591
  'show_error': True,
592
  'max_threads': 10,
593
- 'enable_queue': True,
594
- 'show_tips': False
595
  }
596
 
597
  # Mesclar argumentos padrão com os fornecidos
 
590
  'share': False,
591
  'show_error': True,
592
  'max_threads': 10,
593
+ 'show_api': False,
594
+ 'ssr_mode': False # Compatibilidade com Hugging Face Spaces
595
  }
596
 
597
  # Mesclar argumentos padrão com os fornecidos