IA

L’IA est arrivé dans le décor il y a quelques années et Betula a offert, dans la foulée, 2 classes pour accéder au générateur de texte (LLM) d’OpenAI. Les outils et modèles sont multipliés, Betula avait besoin de se mettre à jour. Les classes sont à présent plus nombreuses et structurées. Elles donne toujours accès à OpenAI mais aussi aux LLM locaux de plus en plus populaires (notamment pour des questions de confidentialité).

Pour OpenAI, un compte pour accéder à leur API est nécessaire. Pour les modèles locaux comme LMStudio et Ollama, l’installation de ces applications doit être fait en local (sur votre ordinateur ou votre réseau) et certains paramétrages sont nécessaires. Nous prenons comme hypothèse, ici, que le provider est opérationnel/accessible.

La structure des classes est la suivante. L’ensemble est basé sur les classes existantes cHTTP et cHTTPAPI qui gère notamment l’authentification et le formatage des réponses. Les classes « cAIProvider_xxx » servent à initialiser la connexion au service choisi, notamment en passant l’URL et la clé API (pour OpenAI). Ces classes permettent aussi de lister les modèles qui sont disponibles.

L’instance de classe « provider » créé, elle doit ensuite être passée en paramètre dans les classes héritant de cAIModalityBase qui proposent les services accessibles. Il s’agie ici du « textChat » (conversation au format textuel), la génération d’image, la génération de vidéo, la synthèse et la reconnaissance vocale. Ces 4 derniers sont proposés par OpenAI, les modèles locaux étant souvent limités à la partie conversation. LMStudio étant « compatible » avec le fonctionnement d’OpenAI, certaines classes sont communes à ces deux services.

Attention, pour LMStudio, le modèle n’est pas passé en paramètre, comme Ollama, mais doit être chargé au préalable dans l’interface utilisateur de LMStudio.

cHTTP
└── cHTTPAPI
└── cAIProviderBase
├── cAIProvider_OpenAI
├── cAIProvider_Ollama
└── cAIProvider_LMStudio

cAIModalityBase
├── cAITextBase
│  └── cAITextChat
│     ├── cAITextChat_OpenAI_LM
│     └── cAITextChat_Ollama
├── cAIImageBase
│  └── cAIImage_OpenAI
├── cAIAudioSTT_OpenAI
├── cAIAudioTTS_OpenAI
├── cAIVideoBase
│  └── cAIVideo_OpenAI
└── cAIEmbeddingsBase
├── cAIEmbeddings_OpenAI
└── cAIEmbeddings_Ollama

Les classe Embeddings sont également proposées. Elles permettent de récupérer, sous forme de tableau de réels, une représentation vectorielle d’une entrée donnée, facilement exploitable par les modèles et algorithmes d’apprentissage automatique.

Exemples d’utilisation

Récupérer les modèles disponibles de OpenAI

clAPI est un cAIProvider_OpenAI(gsOpenAIKey)
sRésultat est une chaîne = clAPI.ListeModèles()

Poser une question à Ollama

clProvider est un cAIProvider_Ollama()
 
sModele est une chaîne = "llama3.1:8b"	//le modèle doit avoir été téléchargé auparavant dans Ollama, il peut être vérifié dans la liste des modèles (voir ci-dessus)
 
// ------------------------------------------------------------
// Créer l'instance de chat
// ------------------------------------------------------------
clChat est un cAITextChat_Ollama(clProvider, sModele)
 
// ------------------------------------------------------------
// Envoyer un prompt
// ------------------------------------------------------------
sPrompt est une chaîne = "Explique-moi en une phrase ce qu'est le Framework Betula."
sRéponse est une chaîne = clChat.MessageEnvoi(sPrompt)
 
// ------------------------------------------------------------
// Vérification des erreurs Betula
// ------------------------------------------------------------
SI clProvider.m_pclErreur.p_sErreur <> "" ALORS
	Erreur("Erreur lors de l'appel Ollama : " + clProvider.m_pclErreur.p_sErreur)
	RETOUR
FIN
 
// ------------------------------------------------------------
// Afficher la réponse utilisateur
// ------------------------------------------------------------
Info("Réponse Ollama :", sRéponse)

Générer une image
Attention, cette fonctionnalité nécessite que OpenAI vérifie votre entreprise (voir votre compte OpenAI)

clProvider est un cAIProvider_OpenAI(gsOpenAIKey)
clImage    est un cAIImage_OpenAI(clProvider, "gpt-image-1")
 
bufImage est un Buffer = clImage.GénèreImage("Un renard en armure médiévale, style aquarelle", 1024, 1024)
 
SI Taille(bufImage) > 0 ALORS
	IMG_SansNom1 = bufImage
SINON
	Erreur("Aucune image générée. Erreur : " + clProvider.m_pclErreur.p_sErreur)
FIN