Files
ForgeLM/docs/plans/fix-model-swap.md
T
Evandro Fonseca Junior 77c57c3d45 Add runtime state validation before ForgeAgent HTTP call
- Check process_running and ready state before making inference request
- Emit descriptive error messages for each failure scenario
- Handle local vs remote connection modes appropriately
- Validation score: 100 (was 0)

Result: {"status":"keep","validation_score":100,"response_time_ms":500}
2026-04-02 14:37:01 -03:00

1.5 KiB

plan name, plan description, plan status
plan name plan description plan status
fix-model-swap Fix model swap race condition active

Idea

Corrigir a race condition onde o modelo selecionado é sobrescrito pelo refresh automático durante uma troca de modelo.

Problema identificado:

  1. Usuário seleciona modelo B no frontend
  2. swapModel() é chamado para trocar no backend
  3. O backend leva tempo para trocar (para API, reinicia com novo modelo)
  4. Enquanto isso, o useModels.refresh() pode executar e buscar lista de modelos do servidor
  5. O servidor ainda retorna modelo A (antigo) pois a troca não completou
  6. getNextSelectedModel() vê que modelo A existe na lista e mantém/retorna ele
  7. Resultado: o usuário vê modelo A selecionado em vez de B

Solução: Implementar um mecanismo de "lock" temporário no useModels que previne que o refresh automático sobrescreva o selectedModel por alguns segundos após uma seleção manual do usuário.

Implementation

  • Adicionar estado lastManualSelectionTime em useModels para rastrear quando o usuário selecionou manualmente um modelo
  • Modificar a função setSelectedModel para também atualizar o timestamp de seleção manual
  • Atualizar a lógica de refresh em useModels para respeitar o lock e não sobrescrever o selectedModel recente
  • Verificar se há necessidade de ajustes no App.tsx ou Sidebar.tsx para integrar com a nova API
  • Testar a correção simulando a troca de modelo e verificando que o modelo correto permanece selecionado

Required Specs