Skip to content

Claude/quirky meitner 5dacbb - #2

Open
GSimas wants to merge 2 commits into
mainfrom
claude/quirky-meitner-5dacbb
Open

Claude/quirky meitner 5dacbb#2
GSimas wants to merge 2 commits into
mainfrom
claude/quirky-meitner-5dacbb

Conversation

@GSimas

@GSimas GSimas commented Apr 23, 2026

Copy link
Copy Markdown
Owner

O que mudou e por quê

Bug 1 — Síntese da IA mostrava erro 503 permanentemente (backend.py)

gerar_descritivo_sessao capturava a exceção do Gemini e retornava uma
string de erro. O @st.cache_data armazenava essa string como resultado
válido e a servia em todas as requisições seguintes, mesmo depois de a API
se recuperar.

Correção: a função agora usa _chamar_gemini_com_retry (backoff exponencial
2 s → 4 s → 8 s) e propaga a exceção — o cache só armazena respostas bem-
sucedidas. Em Principal.py um try/except exibe st.warning transiente.

Bug 2 — Scores Betweenness/Closeness = 0.0000 na versão online (backend.py)

calcular_sna_global retornava (resultado, G, list(dados_lista)) com G
sendo um grafo NetworkX. O @st.cache_data serializa via pickle; grafos
NetworkX com atributos complexos falham silenciosamente nesse processo,
corrompendo o resultado em cache e zerando todas as métricas SNA.

Correção: G removido do retorno (return resultado, list(dados_lista)).
Principal.py ajustado para desempacotar 2 valores — G_global nunca foi
lido de volta em nenhum lugar do código.

Bug 3 — Botões Teses/Dissertações ausentes no Destaques do Ecossistema (Principal.py)

Linhas 505-506 usavam 'Tese' in d.get('nivel_academico', '') — matching
case-sensitive que falha para variações como 'tese', 'Doutorado',
'Thesis'. Resultado: listas vazias → get_top_sna retornava "Nenhum"
botões não eram renderizados.

Correção: substituído por _normalizar_nivel(...) == 'Teses' / 'Dissertações'
(função canônica já usada no resto do código). Listas convertidas para set
para busca O(1) em get_top_sna.

Commits incluídos

  • 7e11a30 — otimizações backend e principal (issues 4–18)
  • 7040244 — fix: corrige três bugs críticos da versão online

Como testar

  1. Deploy na versão online (Streamlit Cloud).
  2. Verificar que a seção Síntese de Pesquisa do PPG exibe texto gerado pela IA (não mensagem de erro).
  3. Verificar que Destaques do Ecossistema exibe scores SNA > 0 para Orientador/Coorientador.
  4. Verificar que os botões Tese e Dissertação aparecem na seção de destaques.

GSimas and others added 2 commits April 19, 2026 12:51
- Issue 4: extrai construir_perfis_similaridade() cacheada de calcular_similares_rede() — perfis reutilizados entre buscas (O(1) em chamadas subsequentes)
- Issue 5: _normalizar_documentos() garante tipos consistentes; loaders com ttl=3600 e tratamento de JSON corrompido
- Issue 6: _chamar_gemini_com_retry() com backoff exponencial (2s, 4s) para chamadas à API do Gemini
- Issue 7: todos os except: bare substituídos por except Exception: (8 ocorrências em backend.py)
- Issue 8: _chave_widget() MD5-determinístico substitui hash() em chaves de widgets Streamlit
- Issue 9: STOPWORDS_ACADEMICAS frozenset centralizado em backend.py, removendo 3 definições duplicadas
- Issue 10: _estimar_gamma_lei_potencia() MLE robusto substitui fórmula inline insegura
- Issue 11: cálculo duplicado de amostra_docs removido; nomes_ppgs computado uma única vez
- Issue 12: import difflib movido para o topo de Principal.py
- Issue 13: template="plotly_dark" substituído por template="streamlit" em 6 gráficos
- Issue 14: from collections import defaultdict duplicado removido de Principal.py
- Issue 15: _normalizar_nivel() expandido para 4 valores canônicos com matching case-insensitive
- Issue 18: _construir_grafo_historico() cacheado com @st.cache_resource evita reconstrução por frame na animação de órbita

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1. gerar_descritivo_sessao: troca retorno de string de erro por exception,
   prevenindo que @st.cache_data persista falhas 503 do Gemini como resultado
   válido até o TTL expirar. Usa _chamar_gemini_com_retry para tolerância a
   picos de demanda. Principal.py exibe st.warning sem reeentrância no cache.

2. calcular_sna_global: remove G (NetworkX graph) do retorno, que causava
   erro silencioso de serialização no @st.cache_data (pickle), resultando em
   scores Betweenness/Closeness zerados na versão online. Principal.py ajustado
   para desempacotar 2 valores (df_metricas, dados) e não guardar G_global.

3. teses_titulos / dissertacoes_titulos: substitui matching case-sensitive
   ('Tese' in ...) por _normalizar_nivel() + comparação canônica, corrigindo
   ausência dos botões Teses/Dissertações no Destaques do Ecossistema.
   Convertidos para set para O(1) em get_top_sna.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant