# Catalogue de modèles

> Comment un service LMSP liste ses modèles locaux, l’objet modèle et ses indicateurs de capacité, les états du cycle de vie d’un modèle, les identifiants de modèle stables et les révisions du catalogue.

Source: https://madeforagent.com/fr/lmsp/1.0/models/
Language: fr
Specification: LMSP 1.0 (draft)
Updated: 2026-11-08

## 5.1 Lister les modèles {#list}

```http
GET /lmsp/v1/models?capability=chat&ready_only=false
Authorization: Bearer <token>
```

| Paramètre de requête | Signification |
| --- | --- |
| `capability` | Ne renvoie que les modèles qui possèdent la capacité nommée, par exemple `chat`, `embeddings` ou `tools`. |
| `ready_only` | Si la valeur est `true`, ne renvoie que les modèles dont le `status` est `ready`. Vaut `false` par défaut. |

```json
{
  "object": "list",
  "catalog_revision": "42",
  "data": [
    {
      "id": "qwen3:14b-q4_k_m",
      "object": "model",
      "display_name": "Qwen3 14B Q4_K_M",
      "owned_by": "local",
      "family": "qwen3",
      "revision": "sha256:8f27c1a4e9b05d36f2a7c8e1b4d90a63c5e2f7b8a1d4c9e60b3f5a7d2c8e1b04",
      "status": "ready",
      "capabilities": {
        "chat": true,
        "completion": true,
        "embeddings": false,
        "tools": true,
        "vision": false,
        "structured_output": true,
        "streaming": true
      },
      "input_modalities": ["text"],
      "output_modalities": ["text"],
      "context_window": 32768,
      "max_output_tokens": 8192,
      "runtime": {
        "backend": "llama.cpp",
        "device": "metal",
        "load_on_demand": true
      }
    }
  ]
}
```

Pour éviter aux clients de récupérer sans cesse le catalogue complet, un service **DEVRAIT** renvoyer un en-tête `ETag`, un champ `catalog_revision`, ou les deux :

- `catalog_revision` est une chaîne opaque qui change chaque fois que le catalogue change.
- Un service qui envoie `ETag` **DEVRAIT** répondre `304 Not Modified` à un `If-None-Match` correspondant.

## 5.2 Objet modèle {#object}

| Champ | Signification |
| --- | --- |
| `id` | Identifiant stable du modèle, utilisé dans chaque requête qui nomme un modèle. |
| `object` | Toujours `"model"`. |
| `display_name` | Nom lisible. L’utilisateur peut le modifier. |
| `aliases` | Liste facultative de noms alternatifs. Ils sont purement informatifs. |
| `owned_by` | Provenance du modèle. `local` pour les modèles installés sur cet appareil. |
| `family` | Famille du modèle, comme `qwen3`. |
| `revision` | Empreinte du contenu du modèle, comme `sha256:8f27...`. |
| `status` | État du cycle de vie ([section 5.3](https://madeforagent.com/fr/lmsp/1.0/models.md#lifecycle)). |
| `capabilities` | Indicateurs booléens : `chat`, `completion`, `embeddings`, `tools`, `vision`, `structured_output` et `streaming`. |
| `input_modalities`, `output_modalities` | Les types de contenu que le modèle lit et écrit. `text` est la seule modalité définie dans la version 1.0. |
| `context_window` | Nombre maximal de tokens de contexte. |
| `max_output_tokens` | Nombre maximal de tokens dans une réponse. |
| `runtime` | `backend` (par exemple `llama.cpp`), `device` (par exemple `metal`) et `load_on_demand`. |
| `error` | Présent lorsque `status` vaut `error`. Un objet problème ([section 9.3](https://madeforagent.com/fr/lmsp/1.0/common-rules.md#errors)). |

L’`id` d’un modèle **DOIT** être stable. L’utilisateur peut modifier le nom d’affichage et les alias ; ils **NE DOIVENT PAS** servir de clé primaire.

## 5.3 Cycle de vie du modèle {#lifecycle}

```text
installed --> loading --> ready --> unloading --> installed
                 |
                 +-----> error
```

| État | Signification |
| --- | --- |
| `installed` | Le modèle existe mais n’est pas chargé. |
| `loading` | De la mémoire est en cours d’allocation ou l’environnement d’exécution s’initialise. |
| `ready` | Le modèle peut traiter immédiatement des requêtes. |
| `unloading` | Les ressources sont en cours de libération. |
| `error` | Le chargement a échoué. L’objet modèle **DEVRAIT** porter une erreur structurée. |

Une nouvelle demande de chargement fait repasser à `loading` un modèle à l’état `error`.

Lorsqu’une requête nomme un modèle à l’état `installed` dont le `runtime.load_on_demand` vaut `true`, le service le charge dans le cadre de la requête. Si le modèle ne peut pas être utilisé immédiatement et n’est pas chargé à la demande, le service répond `409` avec `model_not_ready`. Si le chargement échoue, l’erreur est `model_load_failed`.

## 5.4 Opérations sur les modèles {#operations}

`GET /lmsp/v1/models/{model_id}` renvoie un objet modèle. Un identifiant inconnu donne `404` avec `model_not_found`.

Deux points de terminaison facultatifs contrôlent explicitement le chargement. Ils sont disponibles lorsque la capacité `model_management` vaut `true`, et exigent la portée `models:manage` ([section 10.3](https://madeforagent.com/fr/lmsp/1.0/security.md#scopes)) :

| Point de terminaison | Comportement |
| --- | --- |
| `POST /lmsp/v1/models/{model_id}/load` | Précharge le modèle. Renvoie l’objet modèle avec `202 Accepted` lorsque le chargement a commencé, ou `200` lorsqu’il est déjà `ready`. |
| `POST /lmsp/v1/models/{model_id}/unload` | Décharge le modèle. Renvoie l’objet modèle. Répéter la requête est sans conséquence. |

Les deux acceptent un `Idempotency-Key` ([section 9.2](https://madeforagent.com/fr/lmsp/1.0/common-rules.md#idempotency)).
