fix: timeout do provedor nunca chegava ao httpx; endpoint agora visível

Causa do 'Provedor de LLM indisponível' no ambiente com Ollama local foi
externa: OLLAMA_BASE_URL exportada no shell (http://localhost:11434/v1) vence o
.env na interpolação do docker-compose, e localhost dentro do container é o
próprio container. Nada no app indicava a URL em uso.

Dois defeitos de código que tornavam isso indetectável — e um deles produziria a
mesma mensagem mesmo com a URL correta:

- _BaseProvider criava o httpx.AsyncClient com o atributo de classe (120 s) e as
  subclasses atribuíam self.timeout depois. O httpx congela o timeout na
  construção, então os 300 s pedidos pelo Ollama nunca valeram: um primeiro
  atendimento com modelo frio era cortado em 120 s com exatamente a mensagem
  'provedor indisponível'. O timeout agora é passado ao super().
- LLMProviderError de conexão não citava o endereço tentado; o log dizia só 'All
  connection attempts failed'. Passa a incluir a endpoint, com credenciais
  user:pass@ redigidas. /api/health expõe llm_endpoint para comparação direta
  com o .env.

README e .env.example documentam a precedência shell > .env, o fato de /v1 ser a
superfície OpenAI-compatível (o adaptador usa /api/chat nativo) e a latência
medida do primeiro atendimento.
This commit is contained in:
omp committed 2026-11-02 17:57:42 -03:00
1 parent ebf430c535
commit 68861b502c
7 files changed
+188 -8

No files matched your search

+5
View File
@@ -13,6 +13,11 @@ FRONTEND_PORT=8080
LLM_PROVIDER=ollama
# --- Ollama (local, requer o profile "local": docker compose --profile local up) ---
# ATENÇÃO: se você tiver OLLAMA_BASE_URL exportada no shell, ela VENCE este
# arquivo na interpolação do compose. Confira o valor efetivo com:
# docker compose --profile local config | grep OLLAMA_BASE_URL
# E o que está em uso com: GET /api/health -> llm_endpoint
# O adaptador usa a API nativa do Ollama (/api/chat): NÃO acrescente "/v1".
OLLAMA_BASE_URL=http://ollama:11434
OLLAMA_MODEL=qwen2.5:1.5b