Skip to content

Ajustes opcionais dos modelos virtuais (nits de revisão do #187 e #188) #189

Closed

Description

@patrickbrandao

Nits opcionais apontados pelo reviewer nos PRs de modelos virtuais (ADR 0004, #176). Nenhum bloqueou merge.

Do #187 (/v1/models):

  • snapshotRouteState filtra o catálogo inteiro por rota; indexar o snapshot uma vez por requisição (Map por provider/authType).
  • ProxyController recebe ModelListRoutingService como @Optional(); se um refactor tirar o import, os virtuais somem em silêncio. Tornar obrigatório (ajustando specs) ou logar warn quando ausente.
  • Uma exceção em ModelListRoutingService.forAgent derruba todo o /v1/models; avaliar degradar para auto + reais.

Do #188 (proxy):

  • resolveVirtualModel: normalize e as checagens de disponibilidade rodam em série; com descoberta fria, até 12 consultas por pedido. Promise.all ou memoização por pedido.
  • paramsScopeLookup: rota fora da cadeia cai em scopes[0]; logger.debug nesse ramo.
  • scopedFailures: hop sem authType grava requestParams: null em vez do snapshot só do corpo, diferente do principal.

Activity

  1. patrickbrandao commented on Oct 26, 2026

    @patrickbrandao
    OwnerAuthor

    Do #190 (MCP/CLI):

    • A API administrativa aceita criar um virtual só com fallbacks, mas MCP e CLI recusam. Se a regra é "fallback exige principal", aplicá-la também no VirtualModelService.
  2. patrickbrandao commented on Oct 26, 2026

    @patrickbrandao
    OwnerAuthor

    Do #191 (dashboard):

    • Reordenação por teclado perde o foco da alça a cada seta (mutate recria os objetos e o <For> remonta o item); devolver o foco e anunciar a posição com aria-live.
    • Edição parcial no modal: se o PUT passa e o PATCH de response-mode falha, o erro aparece em toast e inline e o cartão fica com o nome antigo até recarregar.
    • context_length e shadows do cartão ficam desatualizados depois de mudar fallbacks pelo cartão (recarregar a view após a escrita).
    • previewShadows não cobre provider/modelo-subscription.
    • MessageDetails: "Routing" e "Virtual model" mostram o mesmo nome.
    • O confirm() de delete poderia avisar que os parâmetros por modelo do virtual também são apagados.
  3. patrickbrandao commented on Oct 26, 2026

    @patrickbrandao
    OwnerAuthor

    Do qa-docker do #191:

    • O link do M301 aponta para /agents/<agente>/routing, que hoje só redireciona para /harnesses/<agente>/routing; usar o caminho atual.
    • O texto de "Send this header" mostra o ID cru custom:<uuid>/<modelo>; usar o ID público.
  4. patrickbrandao commented on Oct 26, 2026

    @patrickbrandao
    OwnerAuthor

    Da validação final (qa-docker em main 3ebc3a7):

    • docs/usuario/provedores-e-roteamento.md: o corpo da cadeia esgotada traz error.primary_model, error.primary_provider e error.attempted_fallbacks (aninhados em error), não no topo.
  5. patrickbrandao commented on Oct 26, 2026

    @patrickbrandao
    OwnerAuthor

    Tratado na v0.1.5 (#206, #207, #208):

    • Desempenho: índice do snapshot por requisição, normalização e disponibilidade em paralelo em resolveVirtualModel, /v1/models com a lista de provedores em cache.
    • UX do dashboard: foco e aria-live na reordenação, edição parcial no modal, cartão recarregado após escritas, previewShadows com -subscription, MessageDetails sem duplicação, aviso de parâmetros no delete, ID público no "Send this header".
    • Links: M301 e e-mails de limite apontam para /harnesses/<agente>/….
    • Docs: error.* aninhado na cadeia esgotada.

    Fechados como não planejados, por decisão do mantenedor: @Optional() do ModelListRoutingService sem aviso, degradação de /v1/models em falha de forAgent, logger.debug em paramsScopeLookup, requestParams: null em hop sem authType, e "fallback exige principal" no VirtualModelService.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:backendBackend: NestJS, TypeORM, proxy, CLI, MCP

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions