Claude/quirky meitner 5dacbb - #2
Open
GSimas wants to merge 2 commits into
Open
Conversation
- 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que mudou e por quê
Bug 1 — Síntese da IA mostrava erro 503 permanentemente (
backend.py)gerar_descritivo_sessaocapturava a exceção do Gemini e retornava umastring de erro. O
@st.cache_dataarmazenava essa string como resultadová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 exponencial2 s → 4 s → 8 s) e propaga a exceção — o cache só armazena respostas bem-
sucedidas. Em
Principal.pyumtry/exceptexibest.warningtransiente.Bug 2 — Scores Betweenness/Closeness = 0.0000 na versão online (
backend.py)calcular_sna_globalretornava(resultado, G, list(dados_lista))comGsendo um grafo NetworkX. O
@st.cache_dataserializa via pickle; grafosNetworkX com atributos complexos falham silenciosamente nesse processo,
corrompendo o resultado em cache e zerando todas as métricas SNA.
Correção:
Gremovido do retorno (return resultado, list(dados_lista)).Principal.pyajustado para desempacotar 2 valores —G_globalnunca foilido 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', '')— matchingcase-sensitive que falha para variações como
'tese','Doutorado','Thesis'. Resultado: listas vazias →get_top_snaretornava"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
setpara 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 onlineComo testar