@danhachuel/pandanews 0.4.5 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/backend/app/main.py +1 -1
- package/backend/core/llm_router.py +8 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,11 @@ Todas as versões publicadas são registradas aqui antes do publish (regra em AG
|
|
|
14
14
|
- **Guard verificado por mutação**: com a flag removida do `pip`, com um `subprocess.run` direto no backend e com `--reload` no uvicorn, o teste falha em todos os casos (exit 1) — não é carimbo de borracha
|
|
15
15
|
- Nota de transparência: a colisão de versão com o 0.4.03 já publicado no registry foi resolvida por renumeração, conforme a regra de sessões simultâneas do AGENTS.md
|
|
16
16
|
|
|
17
|
+
## 0.4.06 (2026-11-08)
|
|
18
|
+
|
|
19
|
+
- Rótulos de exibição do LLM alinhados ao critério de aceitação: o provedor do Google passa a ser gravado/exposto como **`gemini`** em `noticias.llm_provider` (antes o id interno `google`), e os warning de fallback usam os nomines "NVIDIA NIM" e "Gemini" — `Modelo NVIDIA NIM indisponível (Status 404). Acionando fallback para Gemini.`
|
|
20
|
+
- Nenhuma mudança funcional de roteamento — apenas nomenclatura consistente entre banco, log e UI
|
|
21
|
+
|
|
17
22
|
## 0.4.05 (2026-11-08)
|
|
18
23
|
|
|
19
24
|
- **HOTFIX — fallback à prova de falhas no LLM Router** (crítico): roteamento reescrito em `backend/core/llm_router.py`, agora explícito provedor por provedor na ordem configurada. Qualquer erro HTTP (4xx/5xx, incluindo **404/410** da NVIDIA) é interceptado, registrado (`Modelo nvidia indisponível (Status {status}). Acionando fallback para {próximo}.`) e o próximo provedor é acionado imediatamente — a geração não trava mais. A função devolve qual provedor respondeu (`noticias.llm_provider`) e o incidente fica em `backend.log`
|
package/backend/app/main.py
CHANGED
|
@@ -18,6 +18,9 @@ from backend.core.config import DEFAULT_LLM_BASE_URLS, DEFAULT_LLM_MODELS
|
|
|
18
18
|
|
|
19
19
|
PROVEDORES = ("nvidia", "google")
|
|
20
20
|
|
|
21
|
+
# Rótulos de exibição (banco, logs e UI usam "Gemini", não o id interno "google").
|
|
22
|
+
NOME_EXIBICAO = {"nvidia": "NVIDIA NIM", "google": "Gemini"}
|
|
23
|
+
|
|
21
24
|
# Logger filho do uvicorn.error: mensagens vão para o backend.log (e stderr),
|
|
22
25
|
# com a disciplina de logs do servidor.
|
|
23
26
|
logger = logging.getLogger("uvicorn.error.pandanews")
|
|
@@ -68,8 +71,9 @@ def gerar_texto(db, prompt: str, max_tokens: int = 1024) -> tuple[str, str]:
|
|
|
68
71
|
proximo = disponiveis[indice + 1] if indice + 1 < len(disponiveis) else None
|
|
69
72
|
try:
|
|
70
73
|
texto, modelo = _chamar_provedor(db, provider, prompt, max_tokens)
|
|
71
|
-
logger.info("LLM: %s respondeu (modelo %s)", provider, modelo)
|
|
72
|
-
|
|
74
|
+
logger.info("LLM: %s respondeu (modelo %s)", NOME_EXIBICAO.get(provider, provider), modelo)
|
|
75
|
+
# Banco/UI rotulam o provedor do Gemini como "gemini" (não o id interno "google")
|
|
76
|
+
return texto, "gemini" if provider == "google" else provider
|
|
73
77
|
except APIStatusError as exc:
|
|
74
78
|
status = exc.status_code
|
|
75
79
|
ultimo_erro = exc
|
|
@@ -78,9 +82,9 @@ def gerar_texto(db, prompt: str, max_tokens: int = 1024) -> tuple[str, str]:
|
|
|
78
82
|
destino = proximo or "nenhum"
|
|
79
83
|
logger.warning(
|
|
80
84
|
"Modelo %s indisponível (Status %s). Acionando fallback para %s.",
|
|
81
|
-
provider,
|
|
85
|
+
NOME_EXIBICAO.get(provider, provider),
|
|
82
86
|
status,
|
|
83
|
-
destino,
|
|
87
|
+
NOME_EXIBICAO.get(destino, destino),
|
|
84
88
|
)
|
|
85
89
|
except Exception as exc: # noqa: BLE001 — timeouts, rede, auth: tenta o próximo
|
|
86
90
|
ultimo_erro = exc
|
package/package.json
CHANGED