Pular para conteúdo

v1.9.4 - AI Providers, Model Catalog, Extension Bridge & QA

A v1.9.4 é uma release de confiabilidade e integração. Ela não cria um produto novo grande; fecha lacunas de configuração de IA, catálogo de modelos, OpenAI, uso real da IA em Editais/Concursos e ponte da extensão com o site.

Entregas

  • Configurações de IA com presets Local seguro, IA básica, IA completa e Personalizado.
  • Catálogo de modelos Gemini/OpenAI com builtin, cache local e refresh opcional.
  • OpenAI como provider real no backend local.
  • Gemini/OpenAI usando o modelo selecionado nos runtimes estruturados.
  • Editais/Concursos usando Prompt Registry quando use_ai=true e fallback local quando provider falha.
  • Extensão com ação Capturar edital / concurso e payload kind=public_exam.
  • Local Companion com /capture/public-exam e /capture/context-summary.
  • Site importando captura como edital via /public-exams?capture_id=....
  • Contexto seguro do Perfil Universal para extensão, sem perfil completo, memória completa ou API key.
  • Testes unitários/mockados e testes externos opt-in por variável de ambiente.

Arquivos centrais

modules/ai/model_catalog.py
modules/ai/providers/openai_provider.py
apps/api/services/ai_settings.py
apps/api/routes/settings.py
apps/api/services/extension.py
modules/local_api/app.py
browser-extension/popup.js
apps/web/src/routes/settings.tsx
apps/web/src/routes/sources.tsx
apps/web/src/routes/public-exams.tsx

Regras de segurança preservadas

  • API key fica no backend local/env local.
  • A extensão não lê chave do app.
  • A extensão não captura cookies, tokens, sessão, headers ou storage de terceiros.
  • Captura de edital vira rascunho revisável.
  • Perfil Universal só recebe evidência confirmada manualmente.
  • Editais não viram candidatura privada.
  • Nenhum fluxo faz inscrição automática, pagamento ou envio de documento.
  • O fluxo /api/v1/sources/authenticated-browser/collect não foi alterado.

Testes de provider real

Use apenas ambiente local:

$env:SOTUHIRE_TEST_GEMINI_API_KEY="..."
pytest -m external_ai

$env:SOTUHIRE_TEST_OPENAI_API_KEY="..."
pytest -m external_ai

No Linux/macOS:

SOTUHIRE_TEST_GEMINI_API_KEY=... pytest -m external_ai
SOTUHIRE_TEST_OPENAI_API_KEY=... pytest -m external_ai

Sem essas variáveis, os testes são pulados.