# 📄 Analyse de la page PAGE_TEST & hypothèses d’appel LLM

---

## 🧩 PAGE_TEST — Interface de test

La page `PAGE_TEST` contient uniquement des éléments visuels (probablement des **boutons**), chacun **lié à une méthode spécifique** d’une des classes du composant interne `LLM`.

### 🔍 Objectif :
Elle sert de **panneau de commande utilisateur** pour tester différents moteurs d’IA ou services via les classes :

- `clsMistral`
- `clsOllama`
- `clsDeepSeek`
- `clsPerplexity`
- `clsRAG`
- `clsLLM`
- `clsDeepl`

---

## 🔗 Hypothèses sur les appels aux modèles LLM

Voici les lignes de code extraites contenant des éléments pouvant être des **URLs ou endpoints d’API** :

```wlanguage
- - [clsOllama](#clsOllama)
- hReponse	est une httpRéponse
- reqLLM		est une restRequête
- reqLLM.URL				= :urlBase+"models"
- reqLLM.Méthode			= httpGet
- SI :cleAPI <> "" ALORS
- reqLLM.Entête["Authorization"]	= "Bearer " + cleAPI
- #### Récupération de la propriété urlBase
- PROCÉDURE PUBLIQUE urlBase()
- RENVOYER("https://api.mistral.ai/v1/")
- #### Affectation de la propriété urlBase
- #### Récupération de la propriété cleAPI
- PROCÉDURE PUBLIQUE cleAPI()
- #### Affectation de la propriété cleAPI
- #### Récupération de la propriété urlFonction
- PROCÉDURE PUBLIQUE urlFonction()
- #### Affectation de la propriété urlFonction
- ID of the model to use. You can use the List Available Models API to see all of your available models, or see our Model overview for model descriptions.
- ### 🧠 clsOllama
- clsOllama est une Classe
- raw					est un booléen			// si true, aucun formatage ne sera appliqué à l'invite. Vous pouvez choisir d'utiliser le paramètre raw si vous spécifiez une invite entièrement formatée dans votre demande à l'API.
- o_min_p				est un réel					// Alternative au top_p, elle vise à assurer un équilibre entre la qualité et la variété. Le paramètre p représente la probabilité minimale pour qu'un jeton soit pris en considération, par rapport à la probabilité du jeton le plus probable. Par exemple, avec p=0,05 et le jeton le plus probable ayant une probabilité de 0,9, les logits ayant une valeur inférieure à 0,045 sont filtrés. (Valeur par défaut : 0,0)
- Dans l'API d'Ollama, le paramètre template dans la fonction POST /api/generate permet de spécifier un modèle de prompt personnalisé qui remplace celui défini dans le fichier de modèle (Modelfile). Le modèle de prompt est utilisé pour structurer la manière dont le modèle générera sa réponse en fonction du prompt fourni.
- Par défaut, chaque modèle Ollama est associé à un modèle de prompt prédéfini, tel que :
- En utilisant le paramètre template, vous pouvez fournir un modèle de prompt spécifique pour une requête donnée, ce qui permet de personnaliser la structure de la réponse du modèle pour cette interaction particulière.
- Par exemple, si vous souhaitez que le modèle réponde sous forme de liste numérotée, vous pouvez inclure le paramètre template dans votre requête comme suit
- #### Terminaison de clsOllama
- #### Récupération de la propriété urlBase
- PROCÉDURE PROTÉGÉE urlBase() : chaîne
- RENVOYER("http://217.182.105.173:11434/")
- #### Affectation de la propriété urlBase
- #### Récupération de la propriété cleAPI
- PROCÉDURE PROTÉGÉE cleAPI() : chaîne
- #### Affectation de la propriété cleAPI
- m_sUrlFonction = "api/generate"
- Récupération de la propriété cleAPI
- PROCÉDURE PROTÉGÉE cleAPI() : chaîne
- #### Affectation de la propriété cleAPI
- #### Récupération de la propriété urlBase
- PROCÉDURE PROTÉGÉE urlBase() : chaîne
- RENVOYER("https://api.deepseek.com/")
- #### Affectation de la propriété urlBase
- #### Récupération de la propriété urlFonction
- PROCÉDURE urlFonction() : chaîne
- #### Affectation de la propiété urlFonction
- PROCÉDURE urlFonction(Valeur est une chaîne)
- #### Récupération de la propriété cleAPI
- PROCÉDURE PROTÉGÉE cleAPI() : chaîne
- #### Affectation de la propriété cleAPI
- #### Récupération de la propriété urlBase
- PROCÉDURE PROTÉGÉE urlBase() : chaîne
- RENVOYER("https://api.perplexity.ai/chat/completions")
- #### Affectation de la propriété urlBase
- "https://www.youtube.com/watch?v=TOrph-vS_a8",
- "https://www.teidebynight.com/how-many-stars-are-in-the-milky-way/"
- reqRAG est une restRequête
- #### Récupération de la propriété urlBase
- PROCÉDURE PRIVÉE  urlBase()
- RENVOYER("http://10.103.0.100/api/v1/chats/")
- #### Affectation de la propriété urlBase
- #### Récupération de la propriété urlChat
- PROCÉDURE PRIVÉE  urlChat()
- RENVOYER(:urlBase+chatID+"/")
- #### Affectation de la propriété urlChat
- hReponse est une httpRéponse
- reqRAG.URL = :urlChat+"sessions"
- reqRAG.Méthode = httpPost
- hReponse	est une httpRéponse
- reqRAG.URL			= :urlChat+"completions"
- reqRAG.Méthode		= httpPost
- hReponse	est une httpRéponse
- reqRAG.URL					= :urlChat+"/sessions"
- reqRAG.Méthode				= httpDelete
- // https://github.com/ollama/ollama/blob/main/docs/modelfile.md#format
- m_sUrlFonction est une chaîne
- #### Récupération de la propriété urlBase
- PROCÉDURE PROTÉGÉ ABSTRAITE urlBase() : chaîne
- #### Affectation de la propriété urlBase
- #### Récupération de la propriété cleAPI
- PROCÉDURE PROTÉGÉ ABSTRAITE cleAPI() :chaîne
- #### Affectation de la propriété cleAPI
- #### Récupération de la propriété urlFonction
- PROCÉDURE PUBLIQUE urlFonction()
- RENVOYER(m_sUrlFonction)
- #### Affectation de la propriété urlFonction
- PROCÉDURE PUBLIQUE urlFonction(Valeur)
- m_sUrlFonction = Valeur
- hReponse	est une httpRéponse
- reqLLM		est une restRequête
- reqLLM.URL				= :urlBase+urlFonction
- reqLLM.Méthode			= httpPost
- SI :cleAPI <> "" ALORS
- reqLLM.Entête["Authorization"]	= :commandeAutorisation+ " " + :cleAPI
- #### Récupération de la propriété cleAPI
- PROCÉDURE PROTÉGÉE cleAPI() : chaîne
- #### Affectation de la propriété cleAPI
- #### Récupération de la propriété urlBase
- PROCÉDURE PROTÉGÉE urlBase() : chaîne
- RENVOYER("https://api.deepl.com/v2/")
- #### Affectation de la propriété urlBase
- #### Récupération de la propriété urlFonction
- PROCÉDURE urlFonction() : chaîne
- #### Affectation de la propriété urlFonction
- PROCÉDURE urlFonction(Valeur est une chaîne)
- hReponse	est une httpRéponse
- reqLLM		est une restRequête
- reqLLM.URL				= :urlBase+"glossary-language-pairs"
- reqLLM.Méthode			= httpGet
- SI :cleAPI <> "" ALORS
- reqLLM.Entête["Authorization"]	= :commandeAutorisation + " " + cleAPI
- POUR i = 1 _À_ TableauOccurrence(vReponse.supported_languages)
- TableauAjouteLigne(m_tabGlossaireListePaire,vReponse.supported_languages[i].source_lang,vReponse.supported_languages[i].target_lang)
- Voir https://developers.deepl.com/docs/api-reference/translate
- Text to be translated. Only UTF-8-encoded plain text is supported. The parameter may be specified multiple times and translations are returned in the same order as they are requested. Each of the parameter values may contain multiple sentences. Up to 50 texts can be sent for translation in one request.
- Language of the text to be translated. If omitted, the API will attempt to detect the language of the text and translate it. You can find supported source languages here.
- The language into which the text should be translated. You can find supported target languages here.
- Specifies which DeepL model should be used for translation. The quality_optimized value is supported only in the Pro v2 API at this time (https://api.deepl.com/v2/translate).
- latency_optimized (uses lower latency “classic” translation models, which support all language pairs; default value)
- quality_optimized (uses higher latency, improved quality “next-gen” translation models, which support only a subset of language pairs; if a language pair that is not supported by next-gen models is included in the request, it will fail. Consider using prefer_quality_optimized instead.)
- prefer_quality_optimized (prioritizes use of higher latency, improved quality “next-gen” translation models, which support only a subset of DeepL languages; if a request includes a language pair not supported by next-gen models, the request will fall back to latency_optimized classic models)
- Language pairs supported by DeepL’s next-gen models are documented below.
- Sets whether the translated text should lean towards formal or informal language. This feature currently only works for target languages DE (German), FR (French), IT (Italian), ES (Spanish), NL (Dutch), PL (Polish), PT-BR and PT-PT (Portuguese), JA (Japanese), and RU (Russian). Learn more about the plain/polite feature for Japanese here.
- Setting this parameter with a target language that does not support formality will fail, unless one of the prefer_... options are used. Possible options are:
- Important: This requires the source_lang parameter to be set and the language pair of the glossary has to match the language pair of the request.
- Note: At some point in the future, we intend to include billed_characters in the API response by default, at which point it will be necessary to set show_billed_characters to false in order to for an API response not to include billed_characters. We will notify users in advance of making this change.
- hReponse	est une httpRéponse
- reqLLM		est une restRequête
- reqLLM.URL				= :urlBase+"glossaries"
- reqLLM.Méthode			= httpPost
- SI :cleAPI <> "" ALORS
- reqLLM.Entête["Authorization"]	= :commandeAutorisation + " " + cleAPI
- hReponse	est une httpRéponse
- reqLLM		est une restRequête
- reqLLM.URL				= :urlBase+"glossaries"
- reqLLM.Méthode			= httpGet
- SI :cleAPI <> "" ALORS
- reqLLM.Entête["Authorization"]	= :commandeAutorisation + " " + cleAPI
- hReponse		est une httpRéponse
- reqLLM			est une restRequête
- reqLLM.URL				= :urlBase+"glossaries/"+sID
- reqLLM.Méthode			= httpDelete
- SI :cleAPI <> "" ALORS
- reqLLM.Entête["Authorization"]	= :commandeAutorisation + " " + cleAPI
- - Les dépendances vers des APIs
```

### 🔧 Interprétation & Hypothèses :

| Élément détecté                        | Hypothèse                                                                 |
|----------------------------------------|---------------------------------------------------------------------------|
| `localhost:11434`                      | Serveur Ollama local en écoute sur le port par défaut (`11434`)          |
| `http://` ou `https://` avec `/api/`   | Appel à une API REST distante (ex: DeepL, Perplexity)                    |
| `127.0.0.1`                            | Appels test en local, donc modèles exécutés sur la machine de dev        |
| `clsRAG`, `clsLLM`, `clsDeepl`         | Probables wrappers d’appel à des APIs locales ou distantes               |

### 📎 Probabilité d’implémentation actuelle :
✔️ **Modèles locaux** (Ollama, Mistral) → via `localhost`, probablement exécutés via Ollama CLI/API.  
✔️ **Modèles distants** (DeepL, Perplexity) → via API REST, avec ou sans clé API (non visible ici).

---

## 📌 Conclusion intermédiaire

> La page `PAGE_TEST` joue le rôle d’un **tableau de bord de test multi-LLM**, avec des **appels dirigés vers des APIs locales ou distantes** selon les classes.  
Elle est **simple**, mais très utile pour tester rapidement les réponses des différents moteurs IA via un clic utilisateur.

---

👉 Je suis prêt à continuer avec l’analyse **classe par classe**, en commençant par `clsMistral` si cela te convient.
