# Ollama

Ollama est une plateforme open-source qui permet de créer, exécuter et partager des modèles de langage de grande taille localement sur des systèmes macOS et Linux1. Elle offre une interface en ligne de commande simple pour gérer ces modèles et inclut une bibliothèque de modèles pré-construits

# Installation

**Source :** [GitHub - ollama/ollama: Get up and running with Llama 3.2, Mistral, Gemma 2, and other large language models.](https://github.com/ollama/ollama)

<p class="callout info">**Version :** 0.4.5</p>

**Mise à jour du système :**

```bash
sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean
```

**Installer CURL :**

```bash
sudo apt-get install curl
```

**Récupération de la source :**

```bash
curl -fsSL https://ollama.com/install.sh | sh
```


##### <span style="text-decoration: underline;">**Ajouter Ollama en service de démarrage :**</span>

**Créez un utilisateur pour Ollama :**

```bash
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
```

**Ajoutez votre utilisateur actuel au groupe ollama :**

```bash
sudo usermod -a -G ollama $(whoami)
```

**Créez un fichier de service dans** `/etc/systemd/system/ollama.service` **:**

```bash
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"

[Install]
WantedBy=default.target
```

Autre exemple de fichier :

```bash
[Unit]
Description=Ollama AI Server
After=network.target

[Service]
Environment="HOME=/root"
Environment="OLLAMA_HOST=0.0.0.0:11434"
ExecStart=/usr/local/bin/ollama serve
Restart=always
User=root

[Install]
WantedBy=multi-user.target
```

<p class="callout warning"><span style="color: rgb(224, 62, 45);">**Attention** </span>! Pour la ligne `ExecStart=/usr/bin/ollama serve`, vous devez correctement localiser l'installation de votre ollama, exemple `ExecStart=/usr/local/bin/ollama serve`.</p>

**Ensuite, démarrez le service :**

```bash
sudo systemctl daemon-reload
sudo systemctl enable ollama
```

**Voir les logs :**

```bash
journalctl -e -u ollama
```

# Mise à jour

Pour mettre à jour Ollama, vous pouvez exécuter à nouveau la commande suivante :

```bash
curl -fsSL https://ollama.com/install.sh | sh
```

Cela réinstalle le script d'installation d'Ollama, et peut **écraser des fichiers existants** ou entraîner la perte de configurations personnalisées. Assurez-vous de **sauvegarder vos données et configurations importantes** avant de procéder à une mise à jour pour éviter toute perte de données.

# Modèle personnalisé

##### <span style="text-decoration: underline;">**Importation depuis GGUF**</span>

Ollama prend en charge l'importation de modèles au format **GGUF** via un fichier **Modelfile**.

**Créer un fichier Modelfile :**

Créez un fichier nommé `Modelfile`, qui doit contenir une instruction `FROM` avec le chemin local du modèle que vous souhaitez importer.

```bash
FROM ./vicuna-33b.Q4_0.gguf
```

Cela indique à Ollama de charger le modèle spécifié depuis le fichier local `vicuna-33b.Q4_0.gguf`.

**Créer le modèle dans Ollama :**

Une fois le fichier `Modelfile `créé, utilisez la commande suivante pour que le modèle soit intégré dans Ollama :

```bash
ollama create example -f Modelfile
```

Cette commande utilise le fichier `Modelfile `pour créer un modèle dans Ollama sous le nom "example".

**Exécuter le modèle :**

Enfin, vous pouvez exécuter le modèle avec la commande suivante :

```bash
ollama run example
```

Cela lance le modèle que vous venez de créer, ici appelé "example", pour qu'il commence à traiter des demandes ou des tâches.

# Prompt personnalisé

Les modèles de la bibliothèque Ollama peuvent être personnalisés avec un **prompt**. Par exemple, pour personnaliser le modèle **llama3.2** :

**Télécharger le modèle :**

Tout d'abord, vous devez télécharger le modèle avec la commande suivante :

```bash
ollama pull llama3.2
```

Cela permet de récupérer le modèle **llama3.2** depuis la bibliothèque Ollama.

**Créer un fichier Modelfile :**

Ensuite, créez un fichier `Modelfile` contenant les instructions de personnalisation. Par exemple :

```bash
FROM llama3.2

# définir la température à 1 [plus élevé = plus créatif, plus bas = plus cohérent]
PARAMETER temperature 1

# définir le message système
SYSTEM """
You are Mario from Super Mario Bros. Answer as Mario, the assistant, only.
"""
```

- `FROM llama3.2` indique que vous souhaitez utiliser le modèle **llama3.2** comme base.
- La ligne `PARAMETER temperature 1` permet de régler la "température" du modèle, un paramètre qui influence la créativité du modèle. Une température élevée (comme 1) rend le modèle plus créatif, tandis qu'une température plus basse le rend plus cohérent.
- La section `SYSTEM` permet de personnaliser le message système, dans cet exemple, vous demandez au modèle de répondre en tant que **Mario**. uniquement.

**Créer et exécuter le modèle :**

Après avoir créé le fichier `Modelfile`, vous pouvez créer et exécuter le modèle personnalisé en utilisant ces commandes :

```bash
ollama create mario -f ./Modelfile
ollama run mario
```

La première commande crée un modèle nommé **Mario** à partir du fichier `Modelfile`, et la deuxième commande lance ce modèle.

**Exemple d'interaction avec le modèle personnalisé :**

```
>>> hi
Hello! It's your friend Mario.
```

# Désinstallation

**Supprimez le service Ollama :**

```bash
sudo systemctl stop ollama
sudo systemctl disable ollama
sudo rm /etc/systemd/system/ollama.service
```

Supprimez le binaire `ollama` de votre répertoire `bin` (cela peut être `/usr/local/bin`, `/usr/bin`, ou `/bin`).

```
sudo rm $(which ollama)
```

Supprimez les modèles téléchargés ainsi que l'utilisateur et le groupe ollama créés pour le service :

```bash
sudo rm -r /usr/share/ollama
sudo userdel ollama
sudo groupdel ollama
```

Cela entraînera la **suppression définitive des fichiers d'Ollama**, y compris les modèles téléchargés et l'utilisateur associé. Assurez-vous de **sauvegarder vos données et configurations** avant de procéder à la désinstallation, car cette action est irréversible et pourrait supprimer des informations importantes.

# Créer un modèle

La commande `ollama create` est utilisée pour créer un modèle à partir d'un fichier **Modelfile**.

```bash
ollama create mymodel -f ./Modelfile
```

Cette commande crée un modèle nommé **mymodel** en utilisant les instructions définies dans le fichier `Modelfile`.

**Télécharger un modèle :**

Pour télécharger un modèle, utilisez la commande suivante :

```bash
ollama pull llama3.2
```

Cette commande télécharge le modèle **llama3.2** depuis la bibliothèque Ollama. Elle peut également être utilisée pour **mettre à jour un modèle local**. Seules les différences (diff) entre le modèle local et la version la plus récente seront téléchargées.

**Supprimer un modèle :**

Si vous souhaitez supprimer un modèle, vous pouvez utiliser la commande suivante :

```bash
ollama rm llama3.2
```

Cela supprimera le modèle **llama3.2** de votre machine.

**Copier un modèle :**

Pour copier un modèle, utilisez la commande :

```bash
ollama cp llama3.2 my-model
```

Cela crée une copie du modèle **llama3.2** sous le nom **my-model**.

**Entrée multilignes :**

Pour entrer plusieurs lignes de texte, vous pouvez entourer le texte avec des guillemets triples (`"""`), comme suit :

```
>>> """Hello, ... world! ... """
```

Cela permet de saisir un texte réparti sur plusieurs lignes. Par exemple, cette entrée pourrait produire la sortie suivante :

```
I'm a basic program that prints the famous "Hello, world!" message to the console.
```

**Modèles multimodaux :**

Les modèles multimodaux permettent d'interagir avec des fichiers autres que du texte, comme des images. Par exemple, pour analyser une image avec un modèle multimodal, utilisez la commande :

```bash
ollama run llava "What's in this image? /Users/jmorgan/Desktop/smile.png"
```

Cela pourrait donner la réponse suivante :

```bash
The image features a yellow smiley face, which is likely the central focus of the picture.
```

**Passer le prompt en argument :**

Vous pouvez aussi passer un prompt directement en argument à la commande `ollama run`. Par exemple :

```bash
$ ollama run llama3.2 "Summarize this file: $(cat README.md)"
```

Cela permet de résumer le contenu d'un fichier, comme le fichier `README.md`. Le modèle peut générer un résumé tel que :

```bash
Ollama is a lightweight, extensible framework for building and running language models on the local machine. It provides a simple API for creating, running, and managing models, as well as a library of pre-built models that can be easily used in a variety of applications.
```

**Afficher les informations sur un modèle :**

Pour afficher les informations détaillées d'un modèle, utilisez la commande suivante :

```bash
ollama show llama3.2
```

Cela affiche des informations sur le modèle **llama3.2**, telles que sa version et ses paramètres.

**Lister les modèles sur votre ordinateur :**

Pour voir la liste de tous les modèles installés sur votre machine, utilisez cette commande :

```bash
ollama list
```

**Lister les modèles actuellement chargés :**

Pour voir quels modèles sont actuellement chargés en mémoire, utilisez la commande :

```bash
ollama ps
```

**Arrêter un modèle en cours d'exécution :**

Si vous souhaitez arrêter un modèle qui est en cours d'exécution, utilisez la commande suivante :

```bash
ollama stop llama3.2
```

Cela arrêtera le modèle **llama3.2** en cours d'exécution.

**Démarrer Ollama :**

Si vous voulez démarrer Ollama sans utiliser l'application de bureau, vous pouvez utiliser la commande suivante :

```bash
ollama serve
```

Cela démarre Ollama en mode serveur, permettant ainsi d'interagir avec les modèles via une API sans l'interface graphique.

# Supprimer un modèle

****Supprimer un modèle dans la list :****

```bash
ollama rm llama3.2
```

# Utilisation de l'API

##### 🌐 1. Interroger l’API locale d’Ollama

Par défaut, l’API écoute sur :

```
http://localhost:11434
```

Exemple de requête API :

```bash
curl http://localhost:11434/api/generate \
  -d '{
        "model": "llama3",
        "prompt": "Bonjour, comment vas-tu ?"
      }'
```

---

##### 🐳 2. Utilisation de l’API Ollama depuis Docker

<span style="white-space: pre-wrap;">Si vous exécutez des applications dans un </span>**conteneur Docker**<span style="white-space: pre-wrap;"> qui doivent appeler l’API Ollama située sur l’hôte, utilisez l’adresse suivante :</span>

```
http://host.docker.internal:11434
```

Exemple depuis un conteneur :

```
curl http://host.docker.internal:11434/api/generate \
  -d '{"model": "llama3", "prompt": "Test depuis docker"}'
```

**Remarque importante**

- `<span class="editor-theme-code">host.docker.internal</span>`<span style="white-space: pre-wrap;"> fonctionne </span>**automatiquement sur Docker Desktop (Windows / macOS)**.
- <span style="white-space: pre-wrap;">Sur Linux, Docker ne fournit </span>**pas nativement**<span style="white-space: pre-wrap;"> ce DNS.\\ S'il n'existe pas, vous pouvez forcer la résolution en ajoutant dans votre commande </span>`<span class="editor-theme-code">docker run</span>`<span style="white-space: pre-wrap;"> :</span>

```bash
docker run --add-host=host.docker.internal:host-gateway ...
```

Ainsi, l'accès depuis Docker fonctionnera comme prévu.

---

##### 🧪 3. Exemple simple depuis un script Python

```
import requests

payload = {
    "model": "llama3",
    "prompt": "Bonjour depuis Python !"
}

r = requests.post("http://localhost:11434/api/generate", json=payload)
print(r.text)
```