Ce guide s’adresse au propriétaire d’un Mac autorisé à installer des applications et à utiliser un fichier d’essai non sensible lui appartenant. Vous téléchargerez un modèle dans Ollama, connecterez un chat Open WebUI persistant et l’extension Continue de VS Code à ce moteur, puis examinerez une modification réellement proposée avant de décider de la conserver. Les commandes et vérifications suivent la documentation actuelle des responsables des logiciels ; BIG CHANGE n’a pas exécuté cet ensemble ni mesuré sa vitesse, son coût ou son trafic réseau.

Le grand changement

  • Ce qui change : Un modèle Ollama téléchargé peut alimenter un chat dans le navigateur et un assistant de modification dans VS Code via son API locale. Chaque client nécessite sa propre vérification de connexion.
  • Pourquoi cela compte : Une seule installation du modèle peut permettre une conversation et une modification de code examinée sur le même Mac, tout en laissant au propriétaire du fichier la décision finale.
  • À surveiller : Le nom d’un modèle dans un menu ne prouve pas quel serveur a répondu. Vérifiez la connexion au fournisseur et les réponses réelles, surtout si d’autres fournisseurs ou fonctions cloud sont configurés.

1. Vérifier le Mac et choisir un modèle

Il vous faut macOS 14 ou une version ultérieure pour Ollama, Docker Desktop pour Mac, VS Code avec l’ extension Continue, ainsi que Python 3 pour les petites vérifications JSON et de fichiers ci-dessous. Ollama prend en charge l’exécution sur CPU et GPU des puces Apple M ; sur les Mac Intel, sa documentation indique uniquement le CPU. Installez Ollama depuis sa page de téléchargement pour Mac, déplacez l’application dans Applications, lancez-la et autorisez son lien de ligne de commande si cela vous est demandé. Installez et démarrez Docker Desktop, puis installez Continue depuis la vue Extensions de VS Code. Installez Python 3 depuis Python.org si python3 n’est pas disponible. Sur Mac, VS Code n’ajoute pas automatiquement code au chemin de recherche de votre shell. Suivez ses instructions d’installation sur Mac: ouvrez Command Palette avec Cmd+Shift+P, exécutez Shell Command: Install 'code' command in PATH, puis redémarrez Terminal. Vérifiez que les outils nécessaires sont disponibles :

Terminal
sw_vers -productVersion
ollama --version
docker version
code --version
python3 --version

Notez les versions installées. Arrêtez-vous si l’une des applications ne fonctionne pas ou si votre Mac manque d’espace pour le modèle et les données Docker. La fiche du modèle qwen2.5-coder:7b indique actuellement un téléchargement de 4,7 Go et une licence Apache 2.0. Cette taille ne correspond pas à toute la mémoire nécessaire à l’exécution. Il s’agit d’un exemple concret pour ce guide, pas d’une recommandation adaptée à tous les Mac. Choisissez au besoin une étiquette de modèle local plus petit documenté, puis remplacez qwen2.5-coder:7b par cette étiquette exacte dans chaque commande, sélection du navigateur et champ YAML ci-dessous. Vérifiez aussi la licence du modèle de remplacement.

Téléchargez le modèle et vérifiez qu’Ollama affiche son étiquette exacte :

Terminal
ollama pull qwen2.5-coder:7b
ollama list
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/tags | python3 -c 'import json,sys; d=json.load(sys.stdin); print([m["name"] for m in d["models"]])'

La liste doit contenir qwen2.5-coder:7b. Demandez ensuite à l’ API de chat locale une réponse courte. La commande échoue en cas d’erreur HTTP et vérifie le modèle renvoyé ainsi que le contenu non vide de l’assistant ; les mots exacts de la réponse importent peu. L’ option d’exécution d’Ollama num_predict limite cette vérification à 64 tokens générés. Une phrase tronquée peut tout de même montrer qu’un contenu a été renvoyé ; une réponse vide fait échouer la vérification et doit être examinée.

Terminal
set -o pipefail
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/chat \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen2.5-coder:7b","messages":[{"role":"user","content":"Reply with one short sentence about checking a local connection."}],"stream":false,"options":{"num_predict":64}}' \
  | python3 -c 'import json,sys; d=json.load(sys.stdin); assert d.get("model")=="qwen2.5-coder:7b",d.get("model"); assert d.get("message",{}).get("content","").strip(); print("Model:",d["model"],"Reply:",d["message"]["content"])'

Si l’étiquette manque, terminez le téléchargement et réessayez la liste. Si l’API est inaccessible, démarrez Ollama et consultez son journal serveur sur Mac à l’emplacement ~/.ollama/logs/server.log. Une étiquette téléchargée et une réponse locale réussie constituent la première des trois vérifications.

2. Démarrer Open WebUI avec des données locales persistantes

Le guide de démarrage rapide d’Open WebUI stocke les comptes, paramètres et conversations dans /app/backend/data et demande une valeur fixe pour WEBUI_SECRET_KEY. Nous utilisons la version stable v0.12.3 plutôt que l’étiquette évolutive main . Docker sélectionnera l’image adaptée à l’architecture de votre Mac ; notez l’identité de l’image après son téléchargement.

Examinez d’abord les noms utilisés ici. Si l’un existe déjà, inspectez ce conteneur ou volume et déterminez s’il appartient à une configuration antérieure. Ne remplacez pas un conteneur existant et ne supprimez pas son volume simplement pour faire fonctionner cette commande.

Terminal
docker ps -a --filter name=^/bc-open-webui$ 
docker volume inspect bc-open-webui-data

Lors d’une première installation, il est normal que la deuxième commande indique que le volume n’existe pas. La procédure suivante conserve une clé générée dans un fichier privé de votre compte Mac. Gardez ce fichier en lieu sûr pour recréer le conteneur. N’enregistrez pas son contenu dans un dépôt, ne le collez pas et ne le partagez pas. Si vous avez déjà une clé pour cette instance, continuez à l’utiliser.

Terminal
mkdir -p "$HOME/.config/bc-open-webui"
chmod 700 "$HOME/.config/bc-open-webui"
umask 077
if [ ! -s "$HOME/.config/bc-open-webui/webui-secret" ]; then
  openssl rand -hex 32 > "$HOME/.config/bc-open-webui/webui-secret"
fi
chmod 600 "$HOME/.config/bc-open-webui/webui-secret"
export WEBUI_SECRET_KEY="$(cat "$HOME/.config/bc-open-webui/webui-secret")"
docker pull ghcr.io/open-webui/open-webui:v0.12.3
docker image inspect ghcr.io/open-webui/open-webui:v0.12.3 --format '{{json .RepoDigests}}'
docker volume create bc-open-webui-data
docker run -d --name bc-open-webui --restart unless-stopped \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v bc-open-webui-data:/app/backend/data \
  -e WEBUI_SECRET_KEY \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/open-webui/open-webui:v0.12.3
unset WEBUI_SECRET_KEY
docker ps --filter name=^/bc-open-webui$ --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}'

La sortie relative au port doit afficher 127.0.0.1:3000->8080/tcp. Le volume nommé conserve les conversations et paramètres lors de la recréation du conteneur. La clé protège la continuité des sessions et les valeurs chiffrées de l’application ; gardez donc sa copie privée. La configuration du conteneur Docker peut exposer les variables d’environnement aux personnes ayant accès à Docker ; cette configuration locale est destinée à un seul utilisateur et ne constitue pas un coffre de secrets pour un hôte partagé.

Ouvrez http://127.0.0.1:3000 dans votre navigateur. Au premier lancement, créez le compte administrateur. Dans le menu de votre avatar, ouvrez Settings → Admin → Connections. Examinez Manage Ollama API Connections et ne laissez qu’une connexion activée vers http://host.docker.internal:11434; supprimez ou désactivez les connexions à des fournisseurs non prévus pour cette vérification. Open WebUI peut répartir les requêtes entre plusieurs connexions Ollama; un nom identique dans la liste déroulante ne suffit donc pas. Sélectionnez qwen2.5-coder:7b dans une nouvelle conversation et demandez : « Comment vérifier qu’un modèle local a répondu ? » Vérifiez qu’une réponse non vide apparaît, puis rouvrez la conversation enregistrée. Notez le modèle sélectionné et l’URL de connexion. Il s’agit de la vérification dans le navigateur ; aucune réponse précise n’est imposée.

Si la page ne se charge pas, examinez docker logs bc-open-webui et l’association du port. Si la liste de modèles est vide, vérifiez qu’Ollama répond toujours à /api/tags, examinez la connexion Open WebUI enregistrée et vérifiez si cette version de Docker Desktop peut atteindre le service de l’hôte Mac. host.docker.internal est l’adresse de l’hôte dans Docker Desktop, tandis que localhost désigne le conteneur lui-même lorsqu’il est utilisé à l’intérieur de celui-ci. Ollama écoute par défaut sur 127.0.0.1; le transfert entre l’hôte et le conteneur peut varier selon la configuration. Ne considérez pas une connexion en échec comme une installation réussie et n’exposez pas Ollama sur 0.0.0.0 comme solution courante. Résolvez le chemin réseau local conformément à votre politique de sécurité avant de poursuivre. Conservez le volume et les conversations existantes pendant le dépannage.

3. Connecter Continue à la même étiquette Ollama

Continue fonctionne dans VS Code sur le Mac ; l’adresse de son API Ollama est donc http://localhost:11434. Ouvrez Continue, utilisez la liste de configuration en haut à droite de sa zone de saisie et cliquez sur la roue dentée à côté de Local Config. Cela ouvre ~/.continue/config.yaml; la référence actuelle de Continue utilise YAML. Enregistrez une copie de toute configuration existante et conservez les modèles ou règles dont vous avez encore besoin. Pour une nouvelle configuration locale, voici le contenu minimal complet :

YAML
name: Local Ollama check
version: 1.0.0
schema: v1
models:
  - name: Qwen2.5 Coder 7B local
    provider: ollama
    model: qwen2.5-coder:7b
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit

Pour un fichier existant, ajoutez cette entrée de modèle sous sa liste models: et conservez la configuration existante de premier niveau. Enregistrez, sélectionnez Local Config et le modèle local nommé, puis posez une courte question dans Continue Chat. Vérifiez qu’un contenu est renvoyé. Cela teste la connexion de l’extension, mais une réponse de chat n’est pas une modification de fichier. Les rôles chat et edit activent les deux actions utilisées ici ; cette procédure ne promet pas de fonctions Agent ou d’autocomplétion.

Créez un répertoire et un fichier d’essai vous appartenant, avec un comportement simple que vous pouvez vérifier indépendamment. La commande préserve tout fichier ou copie originale existante ; examinez-les ou choisissez un autre répertoire d’essai si l’un de ces noms est déjà utilisé :

Terminal
mkdir -p "$HOME/continue-local-check"
if [ -e "$HOME/continue-local-check/greeting.py" ] || [ -e "$HOME/continue-local-check/greeting.original.py" ]; then
  printf '%s\n' 'Scratch file already exists; inspect it or choose a new directory.'
else
  cat > "$HOME/continue-local-check/greeting.py" <<'PY'
def greeting(name):
    return "Hello, " + name

if __name__ == "__main__":
    assert greeting("Ada") == "Hello, Ada"
    print(greeting("Ada"))
PY
  if python3 "$HOME/continue-local-check/greeting.py"; then
    cp "$HOME/continue-local-check/greeting.py" "$HOME/continue-local-check/greeting.original.py"
  else
    printf '%s\n' 'Original check failed; inspect the file before requesting an edit.'
  fi
fi

La vérification originale doit afficher Hello, Ada après la réussite de l’assertion. Ouvrez greeting.py dans VS Code, sélectionnez uniquement la fonction et appuyez sur Cmd+I pour Continue Edit. Demandez l’ajout d’une courte docstring sans changer le texte renvoyé. Examinez le diff intégré reçu progressivement en le comparant à greeting.original.py; Edit sur du code sélectionné peut inclure tout le fichier dans le contexte : utilisez donc uniquement un fichier non sensible vous appartenant. Le modèle peut modifier davantage que demandé. Examinez chaque ligne modifiée et acceptez une proposition appropriée avec Cmd+Opt+Y, ou rejetez-la avec Cmd+Opt+N. Continue propose aussi des commandes pour tout accepter ou tout rejeter, mais un petit diff est plus facile à examiner modification par modification.

Après une acceptation, enregistrez le fichier et exécutez :

Terminal
diff -u "$HOME/continue-local-check/greeting.original.py" "$HOME/continue-local-check/greeting.py" || true
python3 "$HOME/continue-local-check/greeting.py"

Vérifiez que le diff ne contient que la modification souhaitée et que l’assertion originale réussit toujours. Si vous rejetez la proposition, vérifiez que le fichier correspond à l’original et notez ce rejet ; ne déclarez pas une modification réalisée. Le fichier, le diff et la vérification Python indépendante établissent ce qui s’est passé plus sûrement que la description du modèle.

4. Garder les limites visibles

Ollama, Open WebUI et Continue possèdent chacun leurs propres paramètres. Pour désactiver uniquement le cloud d’Ollama, ajoutez le champ suivant dans le fichier du compte qui exécute le serveur Ollama, ~/.ollama/server.json, en préservant les champs JSON existants. Pour un nouveau fichier, voici son contenu complet :

JSON
{
  "disable_ollama_cloud": true
}

Redémarrez l’application Ollama, puis consultez son journal serveur :

Terminal
grep 'Ollama cloud disabled: true' "$HOME/.ollama/logs/server.log"

La FAQ d’Ollama documente cette ligne du journal. Si elle manque, vérifiez quel compte Mac exécute Ollama, le JSON et le redémarrage avant d’affirmer que les fonctions cloud sont désactivées. Ce paramètre n’examine ni les autres fournisseurs d’Open WebUI, ni ses fonctions en ligne facultatives, ni le trafic de Continue. Le guide hors ligne de Continue indique de désactiver Allow Anonymous Telemetry, d’utiliser des modèles locaux et de redémarrer VS Code. Examinez les connexions de chaque application avant d’utiliser des données sensibles. Une URL de boucle locale ne constitue pas à elle seule un audit réseau.

Vérifiez la licence de Docker Desktop pour votre utilisation réelle. Il est gratuit pour les usages personnels, éducatifs et open source non commerciaux, ainsi que pour les petites entreprises comptant moins de 250 salariés ET moins de 10 millions de dollars de chiffre d’affaires annuel. Les usages professionnels dans les plus grandes organisations et les administrations nécessitent un abonnement payant. La licence Apache 2.0 du modèle est distincte. L’espace disque, la mémoire, la bande passante du téléchargement et l’électricité restent à prendre en compte ; ce guide ne mesure aucun coût ni résultat de performance.

Pour une procédure plus limitée au terminal et à l’API d’Ollama, consultez Exécuter un modèle Ollama local et vérifier son API de chat. Effectuer une modification vérifiée avec Claude Code et un modèle Ollama local présente un autre client de programmation.

Sources et lectures complémentaires