> ## Documentation Index
> Fetch the complete documentation index at: https://docsmlx.otterly.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# mlx-lm : générer du texte

> Utiliser mlx-lm en ligne de commande, en Python et comme serveur local

`mlx-lm` est le package le plus pratique pour travailler avec des LLMs dans l'écosystème MLX. Si vous débutez avec MLX, c'est souvent par là qu'il faut commencer.

Il couvre trois usages principaux :

* tester un modèle en CLI
* intégrer un modèle dans un script Python
* exposer un serveur local compatible API

***

## Installer `mlx-lm`

```bash theme={null}
pip install -U mlx-lm
```

Si vous ne l'avez pas encore fait, lisez d'abord [Installation & Setup](/mlx/installation).

***

## Mode 1 : ligne de commande

### Génération simple

```bash theme={null}
mlx_lm.generate \
  --model mlx-community/Mistral-7B-Instruct-v0.3-4bit \
  --prompt "Explique le machine learning en trois phrases."
```

### Paramètres à connaître

| Paramètre        | Rôle                                   |
| ---------------- | -------------------------------------- |
| `--model`        | Nom du modèle ou chemin local          |
| `--prompt`       | Texte envoyé au modèle                 |
| `--max-tokens`   | Longueur maximale de la réponse        |
| `--temp`         | Niveau de variation dans la génération |
| `--adapter-path` | Adaptateur LoRA à appliquer au modèle  |

### Quand la CLI suffit

La CLI est idéale pour :

* vérifier qu'un modèle charge bien
* comparer plusieurs prompts
* tester un adaptateur LoRA
* valider rapidement un dataset ou un modèle converti

***

## Mode 2 : API Python

Quand vous voulez intégrer le modèle dans votre propre logique, passez à Python :

```python theme={null}
from mlx_lm import load, generate

model, tokenizer = load("mlx-community/Mistral-7B-Instruct-v0.3-4bit")

response = generate(
    model,
    tokenizer,
    prompt="Explique l'attention dans un Transformer.",
    max_tokens=300,
)

print(response)
```

### Utiliser un template de chat

Les modèles instruction et chat attendent souvent une mise en forme précise. Le tokenizer la connaît déjà :

```python theme={null}
from mlx_lm import load, generate

model, tokenizer = load("mlx-community/Llama-3.2-3B-Instruct-4bit")

messages = [
    {"role": "system", "content": "Tu réponds de manière claire et concise."},
    {"role": "user", "content": "Quand utiliser la quantification 4-bit ?"},
]

prompt = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
)

response = generate(model, tokenizer, prompt=prompt, max_tokens=250)
print(response)
```

### Streaming en Python

Si vous voulez afficher la réponse au fil de l'eau :

```python theme={null}
from mlx_lm import load, stream_generate

model, tokenizer = load("mlx-community/Mistral-7B-Instruct-v0.3-4bit")

for token in stream_generate(
    model,
    tokenizer,
    prompt="Raconte une courte histoire de science-fiction.",
    max_tokens=200,
):
    print(token, end="", flush=True)
```

***

## Mode 3 : serveur local

`mlx-lm` peut aussi servir un modèle en HTTP. C'est utile si votre app Swift, votre frontend ou un autre outil doit consommer le modèle sans embarquer directement Python.

### Lancer le serveur

```bash theme={null}
mlx_lm.server \
  --model mlx-community/Mistral-7B-Instruct-v0.3-4bit \
  --port 8080
```

### Exemple avec le SDK OpenAI

```python theme={null}
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="not-used",
)

response = client.chat.completions.create(
    model="mlx-community/Mistral-7B-Instruct-v0.3-4bit",
    messages=[
        {"role": "user", "content": "Résume MLX en deux points."}
    ],
)

print(response.choices[0].message.content)
```

### Quand choisir ce mode

Choisissez le serveur si :

* plusieurs clients doivent partager le même modèle
* votre frontend ne doit pas connaître Python
* vous voulez brancher rapidement une app existante sur un modèle local

***

## Comparer les trois modes

| Mode         | Bon choix si...                                    |
| ------------ | -------------------------------------------------- |
| CLI          | Vous testez vite depuis le terminal                |
| Python       | Vous écrivez un script ou un pipeline              |
| Serveur HTTP | Vous intégrez le modèle dans une autre application |

***

## Problèmes fréquents

<AccordionGroup>
  <Accordion title="Le modèle suit mal les instructions" icon="circle-question">
    Vérifiez d'abord que vous utilisez un modèle `Instruct` ou `Chat`, puis appliquez le template de chat du tokenizer quand le modèle en a besoin.
  </Accordion>

  <Accordion title="Le chargement est très lent la première fois" icon="clock">
    C'est normal. Le premier appel télécharge le modèle puis le met en cache localement.
  </Accordion>

  <Accordion title="Le modèle ne rentre pas en mémoire" icon="triangle-exclamation">
    Essayez une version plus petite ou quantifiée en `4bit`. C'est souvent le moyen le plus simple de débloquer la situation.
  </Accordion>
</AccordionGroup>

***

<CardGroup cols={2}>
  <Card title="Modèles MLX Community" icon="database" href="/mlx/models/mlx-community">
    Choisir un modèle adapté à votre machine.
  </Card>

  <Card title="Fine-tuning LoRA" icon="sliders" href="/mlx/fine-tuning/lora-guide">
    Adapter un modèle à votre domaine.
  </Card>
</CardGroup>
