Skip to content

Detección automática de modelos para VS Code (INVESTIGANDO...) #11

Open

Description

@svg153

Como se ve aquí, hay una clase abstracta que tiene getAllModels

https://github.com/microsoft/vscode/blob/main/extensions/copilot/src/extension/byok/vscode-node/abstractLanguageModelChatProvider.ts#L189

Para nan se usa el customEndpointProvider
https://github.com/microsoft/vscode/blob/main/extensions/copilot/src/extension/byok/vscode-node/customEndpointProvider.ts#L131

de ahi... acba llegadno al dsicovery
https://github.com/microsoft/vscode/blob/main/extensions/copilot/src/extension/byok/vscode-node/abstractLanguageModelChatProvider.ts#L189

Por tanto, ...

flowchart TD
    subgraph A["User config: chatLanguageModels.json"]
        A1["{ 'id': 'gemma4', 'url': 'https://api.nan.builders/v1', ... }"]
    end

    A2["{ 'id': 'llama3', 'url': 'https://api.nan.builders/v1', ... }"]

    subgraph B["Provider: CustomEndpointBYOKModelProvider\n(providerId = 'customEndpoint')"]
        B1["getAllModels(silent, apiKey, config)"]
        B1a{"config.url exists?"}
        B1a -- yes --> B2["Call super.getAllModels()"]
        B1a -- no --> B3["Iterate config.models[] manually"]

        B2["Fetch GET {url}/models"]
        B2a["Parse data.data or data.models"]
        B2b["Auto-discover model capabilities"]

        B3["Return static models from JSON config"]
    end

    subgraph C["Discovery endpoint: /models"]
        C1["GET https://api.nan.builders/v1/models"]
        C2["Response: { data: [{ id, name, ... }] }"]
    end

    subgraph D["AbstractOpenAICompatibleLMProvider"]
        D1["getModelsDiscoveryUrl() → {baseUrl}/models"]
        D2["resolveModelCapabilities()"]
        D3["byokKnownModelsToAPIInfoWithEffort()"]
    end

    subgraph E["Chat request"]
        E1["User sends message"]
        E2["resolveCustomEndpointUrl()"]
        E3["POST {url}/v1/chat/completions"]
    end

    A1 --> B
    A2 --> B
    B --> B1
    B1 --> B1a
    B1a -->|yes| B2
    B2 --> C1
    C1 --> C2
    C2 --> D1
    D1 --> D2
    D2 --> D3
    B1 -->|no| B3

    B --> E1
    E1 --> E2
    E2 --> E3
Loading

Activity

  1. svg153 commented on Sep 26, 2026

    @svg153
    Author

    Actualización tras revisar el estado del catálogo y las APIs (26-09-2026):

    • El endpoint OpenAI-compatible GET https://api.nan.builders/v1/models sirve para descubrir los IDs autorizados por la API key, pero el OpenAPI actual solo documenta id, object, created y owned_by. No devuelve nombre, tipo chat/no-chat, ventana, salida máxima, modalidades, tool formats ni reasoning. Por tanto, la flecha “/models → autodetecta capabilities” de este issue necesita un contrato adicional: con el objeto actual solo se descubren IDs.
    • Las clases CustomEndpointBYOKModelProvider / AbstractLanguageModelChatProvider enlazadas arriba son detalles internos del código de Copilot/VS Code para su propia configuración BYOK; no son la API pública con la que una extensión externa registra un provider. Para extensiones, la interfaz soportada es Language Model Chat Provider, que recibe provideLanguageModelChatInformation. Una extensión puede llamar a /v1/models y registrar esos modelos, pero solo puede declarar capacidades que obtenga de una fuente fiable.
    • Ese es el camino que implementa la extensión comunitaria NaN Builders para VS Code: consulta /v1/models con la key y registra un Language Model Chat Provider nativo para Chat/Agent. Actualmente enriquece los IDs con un catálogo local; con el comportamiento predeterminado, un ID desconocido no se enseña como chat para evitar tratar embeddings/audio/imágenes como modelos conversacionales.
    • Esto ya tiene un caso concreto de deriva: NaN publicó mimo-v2.6-flash en su catálogo en #101, pero aún no forma parte del catálogo local de la extensión, así que no se puede afirmar que cualquier modelo nuevo vaya a aparecer automáticamente.
    • He abierto helmcode/nan#105 para pedir metadatos de capacidades de modelo en el contrato público, y svg153/nan-vscode#36 para consumirlos cuando exista ese contrato. El reasoning picker se sigue aparte en #35, condicionado a una API estable de VS Code y a que se reenvíen los valores (microsoft/vscode#319794). Inline completions/ghost text es distinto; está en svg153/nan-vscode#8.

    Mi conclusión: esta investigación de #11 no es inútil, pero mezcla dos problemas: descubrimiento de IDs por el BYOK interno de Copilot y descubrimiento de capacidades. La primera ruta puede ser útil a quien configura Copilot BYOK manualmente; no sirve como contrato para extensiones externas ni resuelve la segunda. Propongo mantener esta investigación y decidir si se quiere documentar la ruta BYOK además de enlazar/recomendar el provider de extensión; no asumir que el endpoint actual autodetecta capacidades.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions