Tutoriel

Statut éditorial : En attente de relecture

Appeler Ollama depuis Python

Interroger l’API locale d’Ollama depuis Python, gérer le streaming, les délais et les erreurs sans exposer le service.

Classification du contenu

Types

  • Modèles et API
  • API

Technologies

Niveau
Débutant
Publié le
10 août 2026
Dernière relecture
Relecture en attente
Prochaine vérification
10 novembre 2026

Ollama expose une API HTTP locale sur le port 11434. Nous allons envoyer une conversation, lire la réponse et ajouter les contrôles nécessaires à une application.

Préparer

~~~bash ollama pull nom-du-modele ollama list python -m venv .venv source .venv/bin/activate pip install -U ollama ~~~

Choisissez un identifiant présent dans le catalogue Ollama actif et compatible avec votre mémoire.

Premier appel

~~~python from ollama import Client

client = Client(host='http://127.0.0.1:11434') response = client.chat( model='nom-du-modele', messages=[ {'role': 'system', 'content': 'Réponds clairement en français.'}, {'role': 'user', 'content': 'Explique une API REST en trois phrases.'}, ], options={'temperature': 0.2}, ) print(response['message']['content']) ~~~

Streamer

~~~python stream = client.chat( model='nom-du-modele', messages=[{'role': 'user', 'content': 'Donne trois usages de PostgreSQL.'}], stream=True, ) for chunk in stream: print(chunk['message']['content'], end='', flush=True) ~~~

Annulez la génération si le client en aval se déconnecte. Le streaming améliore le temps perçu, pas le temps total.

Gérer les erreurs

Vérifiez avant l’appel que le modèle est disponible. Traitez séparément service arrêté, modèle absent, délai dépassé et mémoire insuffisante. Ne relancez pas en boucle une erreur de capacité.

Production

N’exposez pas directement le port Ollama. Placez une API authentifiée devant lui, autorisez une liste de modèles et limitez contexte, sortie et concurrence. Journalisez latence, tokens et modèle sans conserver les prompts sensibles par défaut.

FAQ

Peut-on changer de modèle avec le même code ?

Oui, mais revalidez template de chat, outils, contexte, vitesse et qualité.

Pourquoi la première réponse est-elle lente ?

Le modèle doit être chargé en mémoire. Utilisez ollama ps et une requête de chauffe.

Client Python avec contrôle des erreurs

~~~python import requests

response = requests.post( "http://localhost:11434/api/generate", json={ "model": "gemma3", "prompt": "Explique le RAG en une phrase.", "stream": False, "options": {"temperature": 0}, }, timeout=120, ) response.raise_for_status() data = response.json()

print(data["response"]) print({ "input_tokens": data["prompt_eval_count"], "output_tokens": data["eval_count"], "generation_seconds": data["eval_duration"] / 1_000_000_000, }) ~~~

Pour le streaming, l’API renvoie du JSON ligne par ligne : traitez chaque objet et détectez done=true. Ajoutez un timeout, gérez connexion refusée et modèle absent, puis journalisez durées et comptes de tokens sans stocker le prompt s’il contient des données sensibles.

Sources utilisées