PROJET – Zelen Zajac, Ollama Client IA Partie 2 : Pratique
L’objectif de cette partie est d’expliquer comment déployer l’outil et de mettre en lumière certains choix techniques (ou pas 🙂 je me réserve un article full powershell après réflexion). Celui qui veut faire du reverse engineering avec le code, grand bien lui fasse 🙂
Comme pour les autres gros projets d’envergure, il s’agit là d’un ReadMe dans un format personnel qui jure avec les .txt ou traditionnel wiki.
Prérequis
Avant de rentrer dans le vif du sujet, le déploiement étant multiplateforme, je traiterai les deux sujets de par l’application GUI1 ou CLI2 sur les environnements Windows et GNU/Linux. Il est toutefois primordial d’avoir au minimum la version Powershell.
A ce jour, dans les versions 1.0.1 et 1.0.2, il reste des optimisations de code (refactorisation) à effectuer. Ces versions sont considérées comme stable et non en version Béta :). Néanmoins, je n’ai pas automatisé le déploiement par le biais de package .exe ou .msi.
Pour terminer, il n’y a pas besoin des PRIVILEGES ADMINISTRATEURS pour utiliser l’application.
Configuration
Ayant développé une application client, il n’y a pas de notion FrontEnd ou Backend.
Avant de démarrer le script ou l’application, il est nécessaire de faire un détour par le fichier de configuration présent dans le répertoire config à la racine du projet. Comme pour les autres projets, je vais prendre le temps de décrire chacune des parties de ce fichier.
Le fichier se découpe en 1 partie de 2 sous-parties.
| * Une sous-partie globale qui définit les paramètres du script et de son fonctionnement * Une sous-partie dédiée à l’application Ollama permettant d’établir la connexion à l’API3 * Une sous-partie concernant l’envoie de notification SMTP4 | ![]() |
Le fichier de configuration sera amené à évoluer en fonction des suggestions et améliorations à apporter.
Le choix de segmenter les parties ? Faciliter le maintien et l’évolutivité du fichier foutrebleu !
Allez, disséquons le fichier 🙂
J’ai pris en compte la possibilité d’éditer directement le fichier de configuration que ce soit depuis l’interface graphique ou depuis l’interface console. Par sécurité et comme toujours j’ai repris ma fonction de régénération automatique du fichier de configuration en cas de suppression ou de corruption de ce dernier. Encore une fois, j’en ai eu marre de me repalucher le fichier de conf à la mano… Comme ça nous sommes pénards !

Il n’y a en aucun cas besoin d’installer ou d’ajouter des dépendances. L’application a été pensé pour être native (en dehors de Linux naturellement, mais je reviendrai sur ce point dans la sous partie à venir).
Je pense que nous avons maintenant une pleine compréhension du fichier de configuration, nous pouvons passer à l’installation de l’application.
Installation
L’installation sera dissociée en deux parties. Une partie Windows et une partie Linux.
Dans les deux cas, si le serveur OLLAMA n’est pas joignable ou disponible, l’application sera fermée ou l’utilisateur sera invité à réaliser cette opération. Point important que je me devais de souligner.
Réaliser un copier-coller de l’ensemble de l’architecture dans un répertoire. Au pif, ZelenZajac #mainsurlecoeur

Pour des raisons de contrainte lié à la bibliothèque WindowsForms, l’application GUI ainsi que son installation se fera sous Windows. Et par logique, l’application et son installation CLI se fera sous Linux, même si vous êtes libre d’utiliser et d’installer l’application CLI sous Windows (je ne suis pas psychorigide hein ?).
Simple non ? C’est maintenant l’heure de vous présenter en détail les interfaces 🙂
Présentation
Dans les deux cas, je vais présenter l’ensemble des options.
Il sera plus facile de suivre la description du mode CLI de par son côté procédurale. La présentation du mode GUI lui sera présenté comme suit, d’abord l’interface générale puis les différentes fenêtres et boutons.
GUI sous Windows
Interface Principale
Au lancement de l’application, un test de communication au serveur OLLAMA est réalisé. L’interface graphique va être adapté selon le résultat retourné.
| Server Unreachable | Server Reachable |
![]() ![]() | ![]() |
Dans la colonne de gauche, nous sommes dans le cas où le serveur OLLAMA n’est pas disponible (peu importe la raison. Il n’est pas là, T’es là ou T’es pas là ?). L’application se lancera tout de même mais avec aucune possibilité d’action. Contactez votre administrateur <3
Dans la colonne de droite, l’application se lance sans problème. Ce qui signifie que la connexion au server Ollama a été effectué et que les LLMs11 déployés ont pu être récupérés et ce de manière automatique et dynamique. Ces derniers sont chargés dans la liste déroulante. Il est nécessaire de choisir un modèle pour soumettre un prompt.

Il est important de comprendre et pour rappel de la partie théorique que nous avons 3 types d’appel API selon le prompt que nous allons soumettre à OLLAMA.
- Standard : C’est le mode par défaut. Une fois l’application démarrée et un modèle choisi, vous pouvez soumettre un prompt à OLLAMA.
- Image : Ce mode nécessite de fournir une image. Cette même image va être converti en base64 afin d’être soumis à OLLAMA. Il est recommandé d’utiliser le modèle llava pour traiter les flux numériques. Naturellement, si le chemin d’une image est renseigné, il n’est pas possible de choisir un fichier.

- File : Ce mode nécessite de fournir un fichier. Il est alors nécessaire de lire le contenu de cet élément et d’ajouter ce dernier à la suite du prompt. Le point de difficulté réside dans le traitement des fichiers .pdf qui doivent être converti en amont. Fonctionnalité que je n’ai pas traité pour l’instant. Comme pour le mode image, si le chemin d’un fichier est renseigné, il n’est pas possible de choisir une image.

Dans les deux cas afin de faciliter la saisie des chemins d’accès aux items (image ou document) j’ai mis en place l’ouverture de l’explorateur de fichier.
| Pictures | Files |
![]() | ![]() |
Il suffira alors de saisir notre prompt dans le champ prévu à cet effet.
Pour soumettre la requête à notre serveur OLLAMA nous allons devoir passer par les triggers, autrement dit par des événements sur des boutons 🙂
Interface Debug
Cette interface permet de lister les interfaces et les services de notre serveur OLLAMA. Naturellement, j’ai poussé le vice un peu plus loin. Si je test le port OLLAMA et le port du server SMTP, j’ai ajouté un petit bonus en plus. En lien avec l’article OpenWeBUI, je test les ports 8080 et 443 en dur.
Je verrai plus tard s’il y a un intérêt à ajouter ou non ces paramètres dans le fichier de configuration.
Bref, cela permet de vérifier les communications et les interfaces de nos différents serveurs.
| Unavailable | Available |
![]() | ![]() |
Interface About
Que serait-ce une application sans un petit About ? Histoire de laisser son nom à la postérité ? D’un côté c’est de l’orgueil, de l’autre, il me parait normal comme un artiste de signer son art non ?
D’ailleurs, est ce que développeur n’est-il pas un métier de création et donc d’art ? Voyez-vous, je suis une b*te en dessin, un musicien médiocre. Par contre, j’ai des idées de dev et je trouve que ce que je faisais et fais commence à avoir de la gueule non ? Une question qui selon moi ouvre au débat.
Bref, depuis la barre de menu, Help > About et vous retrouverez les informations de notre application. D’ailleurs cela me fait penser que je n’ai pas mis/caché d’Easter egg…

CLI sous Linux (et Windows)
Après réflexion, je vais afficher les captures sous les deux environnements à des fins de comparaison. Mais je mets l’accent sous l’environnement UNIX.
La présentation se fera menu par sous-menu. Je vous renvoie à la partie théorique quant au cycle de vie, algorithme et pseudo code.
Interface Principale
Hormis la banner gigantesque pour marquer les esprits, nous retrouvons un choix de navigation de 6 parties.
Pourtant moi j’en compte 5. Tu sais compter ?
Oui, je vous remercie de vous inquiéter de mon niveau mathématique. Je sais compter et le 6eme choix n’apparait que sur une condition spécifique. 🙂
| Linux | Windows |
![]() | ![]() |
Regardons ce que nous offres les possibilités de navigation :
- [1] Select LLM : Permet de sélectionner un modèle de moteur IA installé préalablement sur le serveur OLLAMA
- [2] Prompt Type : Permet de choisir le type de requête que nous souhaitons soumettre Image, Fichier ou simple prompt
- [3] Settings : Permet d’éditer le fichier de configuration directement depuis la console CLI
- [4] Tropubleshooting : Permet de lancer un mode debug
- [5] About Zelen Zajac : Permet d’afficher les informations de l’application
- [6] Launch Ollama Request : Permet de soumettre un prompt au serveur OLLAMA si et uniquement si un LLM a été préalablement sélectionné.
- [0] Quit : Pour sortir de l’application proprement et non à la hussard à grand coup de Ctrl+C…
Sélection du LLM
Comme pour l’application GUI, si la connexion au serveur OLLAMA est établi, l’ensemble des modèles présents sur le serveur sont automatiquement listés. Il suffit alors à l’utilisateur de choisir le modèle qui correspond à prompt qu’il souhaite soumettre.
| Linux | Windows |
![]() | ![]() |
Il est important qu’il ne soit pas possible de revenir en arrière. Le dernier choix et le choix qui fait foi. Une fois le moteur sélectionné, cela affichera l’option 6 pour soumettre une requête au serveur OLLAMA.
Sélection du type de prompt
Par défaut et pour éviter toutes erreurs, le type de prompt est défini sur Standard. Toutefois et comme pour l’interface GUI, il sera nécessaire dans la sélection des modes Image ou Document de préciser le chemin des dits éléments à soumettre au serveur.
Si dans le mode GUI j’assiste l’utilisateur avec un explorateur de fichiers pour trouver l’élément, il faudra connaitre ici le chemin de tête. Cela pourra je pense faire office d’une fonctionnalité futur.
En toutes circonstances, il y aura un contrôle des chemins par la suite afin de s’assurer de ne pas charger un élément existant.
Settings
Selon la nature de l’OS, la modification du fichier de configuration ne se fait pas de la même manière.
| Linux | Windows |
![]() | ![]() |
Depuis un terminal (donc pour Linux), il est nécessaire de forcer l’interactivité depuis un client SSH. Sans quoi nous sortons du script, ça plante et nous générons un fichier temporaire. Utilisateur de vim et donc de vi j’ai choisi cet éditeur de texte. Toutefois, je pourrais implémenter la possibilité de choisir entre nano et vi dans le fichier de configuration.
Côté Windows, nous sortons comme pour Linux de ce côté agnostique. Powershell Core, gère dans un processus à part et hors terminal l’application notepad.exe. Nous aurons donc une interface graphique qui s’offre à nous.
Il faudra alors jouer des combinaisons :
- Linux
- vim : esc puis :x!
- vi : esc puis :x!
- nano : Ctrl+x
- Windows
- notepad : Ctrl+s
/!\ Attention : Comme pour le mode GUI je ne modifie pas la configuration dans le code dans le cas de la régénération du fichier de configuration en cas d’altération de ce dernier.
Troubleshooting
Cette sous-interface permet de vérifier si l’interface ou les interfaces de notre serveur OLLAMA et autres serveurs sont bien accessible.
| Linux | Windows |
![]() | ![]() |
Il est important de comprendre qu’il peut y avoir de multiples pour qu’un protocole ou une ressource ne soient pas joignables. Cela peut résulter :
- Firewall interne au serveur
- Firewall externe si segmentation des LANs
- Mauvais paramétrage du SELinux
- Résolution DNS impossible
- etc.
Je vous recommande de contacter votre administrateur. Si l’administrateur c’est vous, je vous recommande de vous retrousser les manches ou de changer de métier. Elever des chèvres en Ardèche c’est pas mal aussi 🙂
Pour le fun, j’ai ajouté en dur dans le code, le contrôle des ports 8080/tcp et 443/tcp qui sont les ports de mon daemon OpenWebUI. A voir si cela doit être amélioré ou non.
About
Ce sous menu n’est présent que pour afficher mon nom et laisser ce dernier à la postérité. Et aussi et surtout pour afficher la date de dernière publication de la version.
| Linux | Windows |
![]() | ![]() |
C’est peut-être un détails pour vous, mais pour moi ça veux dire beaucoup !
Launch Ollama
Nous voilà enfin dans le vif du sujet. Bon, je ne vais pas trop m’étendre sur le sujet car cela sera présenté dans la Partie 3 Démonstration. Je présenterai que de manière succincte les étapes du mode standard comme j’ai pu le faire plus haut pour le mode graphique.
Naturellement il faut au préalable avoir sélectionner un modèle de moteur IA et selon le besoin le type de prompt que nous souhaitons soumettre.
Donc, si je résume sous Linux cela nous donne avec toutes les étapes :

Pour se faire une idée, je vous renvoie à la partie 3 démonstration. Dans une vidéo, je vais traiter des deux modes de mon application.
GitHub
Miaou
(Uniquement sur contact LinkedIn)
Je souhaite vraiment échanger avec vous et vous fournir le lien privé du projet. Ainsi je pense que recueillir vos avis, retours peuvent me permettre de faire évoluer l’application dans le bon sens.
- GUI : Graphical User Interface ↩︎
- CLI : Command Line Interface ↩︎
- API : Application Programming Interface ↩︎
- SMTP : Simple Mail Transfert Protocol ↩︎
- LD : Distribution List ↩︎
- BAL : Boite Aux Lettres ↩︎
- FQDN : Fully Qualified Domain Name ↩︎
- OS : Operating System ↩︎
- RHEL : RedHat Entreprise Linux ↩︎
- SFTP : Secure File Transfert Protocol ↩︎
- LLM : Large Language Models ↩︎














































