Projet PAINS :Le projet IA | partie 20

Projet PAINS :Le projet IA | partie 20

Bonjour à tous, aujourd'hui, en ce 9 juin, objectif serveur IA. 

Mais l'objectif n'est pas juste d'installer un truc IA clé en main pour un usage personnel... Non, l'objectif est le suivant : 

  • un service d'agent conversationnel comme ChatGPT avec la possibilité d'avoir plusieurs conversations.
    - L'importation de fichiers pour que le modèle d'ia puisse les lire, le partage de discussions, et autres options sont un plus mais optionnelles.
  • Un service de génération d'image. Mettre plein de LoRA, c'est rigolo.
    - Ma connaissance se limite à Automatic1111, donc ma vision de la génération d'image est peut-être dépassé.
  • Une API, pour les logiciels qui demandent des IA, ou des mods minecraft. 
    - Sur ce point, je n'ai aucune idée.

Et le tout public ! 

Avec un système de compte pour que plusieurs personnes puissent utiliser ce système en même temps. Oui la RTX 2060 et mes 16go de ram vont en baver mais vous verrez, par la suite...

 

Donc avant d'être mis sur le serveur en production, on test tout sur une VM.

Et donc voici ce que je prévois actuellement : ( sujet à modification pendant l'article )

  • Un site web custom ( fait par moi ou en utilisant un CMS si ça répond à mes besoins ), pour présenter les services, et un accès aux comptes.
  • llama.cpp pour faire tourner les modèles IA ( ou un autre logiciel )
  • Docker pour faire des GUI par utilisateur qui vont piocher dans le logiciel qui fera tourner les modèles IA. 
  • et bien sûr une DB

Donc, par où commencer ?

Je pense que le mieux est une image visuelle qui montre où va l'utilisateur, ce qu'il se passe si il appuie sur tel bouton, et savoir ce qu'il faut développer par la suite.

Voici donc l'image :

Oui, je prévois un système de paiement pour les comptes. Si c'est public, ma carte graphique ne va pas apprécier plein de monde dessus, et donc cela va permettre de pouvoir acheter du meilleur équipement ( donc une meilleure carte graphique et plus de ram ). 

Donc maintenant qu'on voit le côté client. Nous avons plusieurs choses à mettre en place : 

  • Le site web 
  • Quels modèles IA et dépendances sont necessaires pour remplir les objectifs
  • Le système Docker (ou équivalent ) pour que chaque compte est son "coin" IA quand il en appel un.
  • Qui docker va appeler comme logiciel pour de l'API, de la génération d'image ou de GUI d'agent conversationnel
  • le système de paiement

 

Le système de paiement sera fait à la fin, car c'est le moins "important" du projet. Le site WEB sera là pour compléter les morceaux manquants, et sera donc fait en avant dernier. 

Maintenant, on fait des tests sur les VM. 

Pour faciliter les installations je prévois d'utiliser Librechat. Il est choisi car je peux économiser de la ressource. La raison ? 
Le service utilise aussi un "gestionnaire de compte". On pourrait donc utiliser Keycloak pour que l'utilisateur en ce connectant au site, soit connecté sur tout les services en amont ( ou un autre service d'authentification ). 
Mais il faut voir comment ça s'installe, les configurations, et autres détails.

Donc nous sortons une VM pour installer Librechat. 

Librechat

Il s'installe soit par Docker, soit par NPM. NPM étant une galère à mettre en place, et cherchant l'économie de ressource, en ayant le moins de dépendances possible, nous ferons l'installation sur... Docker !

Oui, enfin, Docker est utilisé sur mon serveur. Je n'ai jamais dit que je ne l'utiliserais pas, mais c'est vrai que je l'esquivais à chaque fois. Mais pour ce projet, je ne vois que lui de viable, donc autant le rentabiliser un maximum...

Mais pour installer Librechat, nous allons d'abord installer Docker.

Docker s'installe de la manière suivante : 

On installe les dépendances pour docker : 

apt install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/dockerarchive-keyring.gpg

Et ensuite on ajoute le repot docker :

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/dockerarchive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

Et nous pouvons ensuite installer Docker :

apt update
apt install docker-ce
systemctl enable docker

Pour vérifier l'installation, nous lançons une commande qui va lancer un conteneur de test :

docker run hello-world

Ensuite, nous installons librechat. Pour cela, il faut rentrer les commandes suivantes :

git clone https://github.com/danny-avila/LibreChat.git
cd LibreChat
cp .env.example .env
docker compose up -d

C'est l'installation de base, mais au moins, nous aurons une base.

L'installation est faite, elle nous indique les ports utilisés et aussi ce qu'a besoin Librechat pour fonctionner.

Mais ça ne marche pas. ça vient que ma VM n'avait pas le VT-x/ AMD-V imbriqué. il faut juste le cocher.

Et j'ai eu le souci de pas pouvoir l'activer sur mon pc. 
Donc j'ai créer une VM de test, pour continuer mes experiences.

Cette fois-ci, je n'ai pas de conteneurs qui redémarrent car il manque le VT-x, donc nous pouvons continuer : 

Nous créons un compte. Comme ça, nous aurons toute les informations nécessaires, sur : quels ports utilisés, quelles données utilisées, et comment ça marche.
C'est vrai que la documentation est un bonne indicateur, mais l'utiliser soit même montre vraiment ce qui peut nous être utile, mais la documentation reste complémentaire pour avoir toute les informations.

Nous avons plusieurs ports : 

Le port 3080 est très important, puisque c'est notre IHM, qui permet d'accéder à la page web. 
Le port 5432, 27017 et 7700 n'ont pas besoin d'être accessible sur internet. 
5432 c'est pgvector
27017 c'est mongo
7700 c'est Meilisearch.

Donc il va falloir voir deux choses : 

  • La connexion : l'utilisateur se connecte depuis le site "racine", et le site précisera quel compte veut se connecter aux services.
  • L'IA : Voir comment la relier à Librechat. Et voir pour retirer la possibilité d'utiliser les autres IA, même si c'est optionnel.

 

Donc en vert, c'est ce qu'on a fait, soit 70%, soit le plus gros, mais qui manque les détails.
Et donc en orange c'est ce qu'on va faire : le lien. Donc il nous faut, le site WEB de base, et un système de connexion. 
Ce système de connexion devra bien sur être le plus compatible possible avec les services autour, pour que j'ai le moins de bidouilles à faire. 

 

Le site racine

Alors j'ai réfléchi, et ça me fait penser qu'il faudrait que je fasse un serveur messagerie. Peut-etre que j'aurais fait un serveur messagerie entre temps, on verra, et que donc cette question ne se poserais plus, on verra.

Donc le site : 

Après quelques reflexion, j'ai pas la connaissance de devellopper un site WEB. Donc un CMS sera parfait. 
j'ai quelques CMS en tête. Azuriom, le CMS de ce site WEB, est chouette, mais ne sera pas adapté.
WordPress... bon, c'est sympa, mais j'aime pas.
Donc je me tourne vers Joomla! .
Pourquoi lui ? C'est un équivalent de WordPress, mais avec plus de liberté. 

Donc nouvelle VM pour test, voir si tout ce que je veux est possible. Il faut bien sur que l'authentification puisse soit être externalisé par un autre service, soit que celui qui est avec, soit assez "ouvert" pour permettre de partager l'utilisateur connecté entre les autres services.

Donc nous démarrons une autre VM pour savoir si ce CMS est parfaitement adapté.

Ensuite nous devons installer : PHP , PostgreSQL et Apache. On peut installer des équivalents à PostgreSQL et Apache2, mais c'est ceux que je maitrise le mieux. ( désolé, je n'aime pas Nginx, trop de configuration à faire alors que Apache, c'est déjà configuré ).

Nous rentrons la commande :

apt install php apache2 postegreSQL

Pour PHP, il faudra modifier dans /etc/php/8.4/apache2/php.ini pour modifier ces lignes : 

  • memory_limit: 256M
  • upload_max_filesize: 64M
  • post_max_size: 64M
  • max_execution_time: 30

Ensuite on télécharge les fichiers de  Joomla! avec les commandes suivantes : 

cd /var/www/ia
wget https://www.joomla.fr/joomla/telechargements/157-joomla-6/164-6-1/167-6-1-2.html?download=703:fichier-complet-dinstallation-de-joomla-6-1-2-fr
unzip '167-6-1-2.html?download=703:fichier-complet-dinstallation-de-joomla-6-1-2-fr'
chown -R www-data:www-data /var/www/ia
chmod +x /var/www/ia
rm '167-6-1-2.html?download=703:fichier-complet-dinstallation-de-joomla-6-1-2-fr'
 
 

le dossier ia étant créer pour contenir le site.

Nous créons le fichier du site pour Apache : 

Pour la VM je vais me contenter de modifier le 000-default.conf par facilité, mais en production, un nouveau fichier sera créer et puis activé avec :

a2ensite [nom du fichier]

Les modifications se limite à modifier le documentRoot par le bon chemin.
En pratique c'est notre Caddy qui fera le SSL et la redirection des informations necessaires.

Et ça ne marche pas.

J'ai donc installé les dépendances les plus "dépendantes" possibles dans PHP. 

apt install php8.4-pgsql php8.4-mbstring php8.4-xml php8.4-curl php8.4-zip php8.4-gd php8.4-intl

Et cette fois ci, ça marche !

Donc en nom de site, je met TEST, vu que c'est... pour test.

En utilisateur, nous en créons un en respectant ce qui est demandé.

Vu que j'utilise PostegreSQL, nous selectionnons "posgre SQL PDO"
Ensuite, on retourne sur la VM pour créer une DB et un utilisateur pour Joomla!.

su - postgres
psql
CREATE USER juser WITH PASSWORD 'motDEpasse' ; #le nom d'utilisateur vous le nommez comme vous voulez. par contre les apostrophe sont obligatoire.
CREATE DATABASE joomla OWNER juser; #vous pouvez l'appeler comme vous voulez
GRANT ALL PRIVILEGES ON DATABASE joomla TO juser;
 

Et on peut quitter la DB avec \q .

Et ensuite, nous pouvons retransmettre les informations sur le site.

Il télécharge et nous arrivons ici : 

En desandant la page, j'arrive sur "acceder à mon site web", ce que je clique.

Nous voilà sur notre site, pret à etre utilisé. Mais maintenant, faut voir si on peut faire ce que l'on veut...

Les identifiants de connexion sont ceux écrit précédement.

Maintenant coté Administrateur.
Nous y allons en rajoutant à l'url /administrator

Nous arrivons sur la page de connexion où nous rentrons les mêmes identifiants qu'au-dessus, puis nous arrivons dans le panel admin 

Merci pour le tutoriel de bienvenue.
Maintenant, il faut vérifier si on peut faire plusieurs choses necessaire au projet : 

  • des utilisateurs avec des crédits, et possibilité d'avoir plusieurs types de crédits différents
  • la possibilité d'avoir du SSO ( oui j'ai enfin dit ce terme ) 
  • un système de paiement ?

Et donc j'ai commencé à dev une sorte de backend, avec un peu d'aide de Chat GPT, pour avoir un semi prototype du projet. 
Son but est de gérer les comptes, leur crédits, leur type de crédits, et d'ouvrir des conteneurs au fil des besoins des utilisateurs.

Et puis tout ça est développé en parallèle de ma recherche d'alternance, pendant 1 mois.
Puis deux mois
Puis trois mois.

Et puis aujourd'hui, en ce mercredi 7 octobre, je me rend à l'évidence : je n'ai plus le temps d'avancer sur un si gros projet avec cette recherche d'alternance qui ne donne rien.

Et le projet lui même a des ressources limitées : je me doute que je vais pas avoir une grosse fréquentation, mais une fréquentation de 4 ou 5 personnes va mettre à terre la RTX 2060 super, et faire de l'attente. Alors pour un service qui a prévu d'être payant, c'est pas fou. 

Petite capture d'écran du github, quand même, pour montrer au moins une fois ce backend, qui restera dans l'ombre pour toujours...


Mais alors, la partie 20 de ce projet PAIN, un chiffre rond pour un truc grandiose,  va finir de cette manière, en étant non fini ?

Oui... Mais non.

Oui, ça va finir de manière sans projet final ou utilisable. Oui, il n'y aura rien eu de grandiose pour cette partie 20... Qui aurait dû être la partie 18 à l'origine, mais prenant un temps monstre, il a juste été retardé.

Mais un autre projet avec de l'IA, avec une utilisation moins "grand public" ( juste personnel ) est prévu, vous verrez ça avec le prochain article. 
Indice : on va tenter de faire ce que Razer a fait... 

Bonne journée !

 


Posté le 7 octobre 2026 par _Antonin_