{ "classes": { "clsMistral": { "heritage": "clsLLM", "attributs": { "maxToken": "entier", "seed": "entier", "presence_penalty": "réel", "frequency_penalty": "réel", "n": "entier", "prediction": "JSON", "safe_prompt": "booléen", "o_stop": "chaîne", "m_tabModels": "tableau de chaînes (PRIVÉ)" }, "methodes": { "Constructeur": { "code": "PROCÉDURE Constructeur()\n\n//:Modele = \"open-mixtral-8x22b-2404\"\n:Modele = \"mistral-large-latest\"\n:o_temperature = 0.2\n:o_top_p = 1\n:maxToken = 1000\n:presence_penalty =\t0\n:frequency_penalty = 0\n:n=1\nprediction.type = \"content\"\nprediction.content = \"\"\nsafe_prompt = Faux\no_stop = \"string\"" }, "model_list": { "code": "PROCÉDURE PUBLIQUE model_list()\nhReponse\test une httpRéponse\nreqLLM\t\test une restRequête\nvReponse est un Variant\n\nSI TableauOccurrence(m_tabModels) > 1 ALORS\n\tRENVOYER (m_tabModels)\nFIN\n\nreqLLM.URL\t\t\t\t= :urlBase+\"models\"\nreqLLM.Méthode\t\t\t= httpGet\nSI :cleAPI <> \"\" ALORS\n\treqLLM.Entête[\"Authorization\"]\t= \"Bearer \" + cleAPI\nFIN\nreqLLM.Entête[\"Content-Type\"]\t= \"application/json\"\t\nhReponse\t\t\t\t= RESTEnvoie(reqLLM)\nSI hReponse.CodeEtat = 200 ALORS\n\tvReponse = JSONVersVariant(hReponse.Contenu)\n\tPOUR i = 1 _À_ TableauOccurrence(vReponse.data)\n\t\tTableauAjoute(m_tabModels,vReponse.data[i].id)\n\tFIN\nSINON\n\tTableauAjoute(m_tabModels,hReponse.Contenu)\nFIN\nRENVOYER(m_tabModels)" }, "urlBase": { "code": "PROCÉDURE PUBLIQUE urlBase()\nRENVOYER(\"https://api.mistral.ai/v1/\")" }, "cleAPI": { "code": "PROCÉDURE PUBLIQUE cleAPI()\n\nRENVOYER(\"2iGzTzE9csRQ9IoASoUjplHwEjA200Vh\")" }, "urlFonction": { "code": "PROCÉDURE PUBLIQUE urlFonction()\n\nRENVOYER(\"chat/completions\")" }, "Destructeur": { "code": "PROCÉDURE Destructeur()" }, "interrogerRetourneReponse": { "code": "PROCÉDURE PROTÉGÉE interrogerRetourneReponse(LOCAL sReponse est une chaîne)\nsRetour est une chaîne\nvReponse est un Variant\nvReponse = JSONVersVariant(sReponse)\nsRetour = vReponse.choices[1].message.content\nRENVOYER(sRetour)" }, "even_LLM_POST": { "code": "PROCÉDURE PROTÉGÉE even_LLM_POST(LOCAL sQuestion est une chaîne )\n\nContenu.messages[1].role\t= \"system\"\nContenu.messages[1].content\t= :prompt_system\nContenu.messages[2].role\t= \"user\"\nContenu.messages[2].content\t= sQuestion\nContenu.temperature = o_temperature\nContenu.top_p\t\t= o_top_p\nSI :maxToken <> 0 ALORS\n\tContenu.max_tokens = maxToken\nFIN\nSI :seed <> 0 ALORS\n\tContenu.random_seed = :seed\nFIN\nSI :format <> \"\" ALORS\n\tContenu.response_format = :format\nFIN\n// Contenu.tools A déterminer\n// Contenu.tool_choice A déterminer\nContenu.presence_penalty\t= presence_penalty\nContenu.frequency_penalty\t= frequency_penalty\nContenu.n = 1\nContenu.prediction = :prediction\nContenu.stop = o_stop" } } }, "clsOllama": { "heritage": "clsLLM", "attributs": { "suffix": "chaîne", "images": "Buffer", "template": "chaîne", "raw": "booléen", "keep_alive": "Durée", "o_mirostat": "entier", "o_mirostat_eta": "réel", "o_mirostat_tau": "réel", "o_num_ctx": "entier", "o_repeat_last_n": "entier", "o_repeat_penalty": "réel", "o_seed": "entier", "o_stop": "JSON", "o_num_predict": "entier", "o_min_p": "réel" }, "methodes": { "Constructeur": { "code": "PROCÉDURE Constructeur()\no_mirostat\t\t\t= 0\no_mirostat_eta\t\t= 0.1\no_mirostat_tau\t\t= 5\no_num_ctx\t\t\t= 2048\no_repeat_last_n\t\t= 64\no_repeat_penalty\t= 1.1\no_temperature\t\t= 0.8\no_seed\t\t\t\t= 0\no_stop\t\t\t\t= []\no_num_predict\t\t= -1\no_top_k\t\t\t\t= 40\no_top_p\t\t\t\t= 0.9\no_min_p\t\t\t\t= 0\n\n\nraw\t\t\t\t\t= False\nkeep_alive\t\t\t= 5min" }, "urlBase": { "code": "PROCÉDURE PROTÉGÉE urlBase() : chaîne\nRENVOYER(\"http://217.182.105.173:11434/\")" }, "cleAPI": { "code": "PROCÉDURE PROTÉGÉE cleAPI() : chaîne\nRENVOYER(\"\")" }, "Destructeur": { "code": "PROCÉDURE Destructeur()" }, "Interroger": { "code": "PROCÉDURE Interroger(LOCAL sQuestion est une chaîne )\nm_sUrlFonction = \"api/generate\"\nRENVOYER(LLM_POST(sQuestion))" }, "even_LLM_POST": { "code": "PROCÉDURE PROTÉGÉ VIRTUELLE even_LLM_POST(LOCAL sQuestion est une chaîne)\nContenu.system\t\t= :prompt_system\nContenu.prompt\t\t= sQuestion\nContenu.stream\t\t= :stream\nContenu.suffix\t\t= :suffix\nContenu.format\t\t= :format\nContenu.raw\t\t\t= :raw\nContenu.keep_alive\t= :keep_alive\nSI :images <> \"\" ALORS\n\t// A traiter\nFIN\n\nContenu.options.mirostat\t\t\t= o_mirostat\nContenu.options.mirostat_eta\t\t= o_mirostat_eta\nContenu.options.mirostat_tau\t\t= o_mirostat_tau\nContenu.options.num_ctx\t\t\t\t= o_num_ctx\nContenu.options.repeat_last_n\t\t= o_repeat_last_n\nContenu.options.repeat_penalty\t\t= o_repeat_penalty\nContenu.options.temperature\t\t\t= o_temperature\nContenu.options.seed\t\t\t\t= o_seed\nContenu.options.stop\t\t\t\t= o_stop\nContenu.options.num_predict\t\t\t= o_num_predict\nContenu.options.top_k\t\t\t\t= o_top_k\nContenu.options.top_p\t\t\t\t= o_top_p\nContenu.options.min_p\t\t\t\t= o_min_p" }, "interrogerRetourneReponse": { "code": "PROCÉDURE PROTÉGÉ VIRTUELLE interrogerRetourneReponse(LOCAL sReponse est une chaîne )\nvMaReponse\test un Variant\nvMaReponse\t\t\t\t= JSONVersVariant(sReponse)\nRENVOYER(vMaReponse.response)" } } }, "clsDeepSeek": { "heritage": "clsLLM", "attributs": { "frequency_penalty": "entier", "max_tokens": "entier", "presence_penalty": "entier", "logprobs": "booléen", "top_logprobs": "entier", "tool_choice": "chaîne" }, "methodes": { "Constructeur": { "code": "PROCÉDURE Constructeur()\n\n:Modele = \"deepseek-chat\"\nfrequency_penalty = 0\nmax_tokens = 4096\npresence_penalty = 0\no_top_p\t= 1\nlogprobs = Faux\ntop_logprobs = 0\ntool_choice = \"\"" }, "cleAPI": { "code": "PROCÉDURE PROTÉGÉE cleAPI() : chaîne\n\nRENVOYER(\"sk-d359d9236ca84a5986f889631832d1e6\")" }, "urlBase": { "code": "PROCÉDURE PROTÉGÉE urlBase() : chaîne\n\nRENVOYER(\"https://api.deepseek.com/\")" }, "urlFonction": { "code": "PROCÉDURE urlFonction() : chaîne\n\nRENVOYER(\"chat/completions\")" }, "model_list": { "code": "PROCÉDURE model_list() : tableau de chaînes\n\ntabRetour est un tableau de chaînes = [\"deepseek-chat\",\"deepseek-reasoner\"]\nRENVOYER(tabRetour)" }, "Destructeur": { "code": "PROCÉDURE Destructeur()" }, "even_LLM_POST": { "code": "PROCÉDURE PROTÉGÉ VIRTUELLE even_LLM_POST(LOCAL sQuestion est une chaîne )\n\nContenu.messages[1].role\t= \"system\"\nContenu.messages[1].content\t= :prompt_system\nContenu.messages[2].role\t= \"user\"\nContenu.messages[2].content\t= sQuestion\nContenu.stream\t\t= :stream\nContenu.frequency_penalty\t= :frequency_penalty\nContenu.max_tokens\t\t\t= :max_tokens\nContenu.presence_penalty\t= :presence_penalty\nSI :logprobs = Vrai ALORS\n\tContenu.logprobs\t\t\t= :logprobs\n\tContenu.top_logprobs\t\t= :top_logprobs\nFIN\nSI :tool_choice <> \"\" ALORS\n\tContenu.tool_choice\t\t\t= :tool_choice\nFIN" }, "interrogerRetourneReponse": { "code": "PROCÉDURE PROTÉGÉ VIRTUELLE interrogerRetourneReponse(LOCAL sReponse est une chaîne)\nsRetour\t\test une chaîne\nvReponse\test un Variant\nvReponse\t= JSONVersVariant(sReponse)\nsRetour\t\t= vReponse.choices[1].message.content\nRENVOYER(sRetour)" } } }, "clsPerplexity": { "heritage": "clsLLM", "attributs": { "maxToken": "entier", "presence_penalty": "entier", "frequency_penaly": "entier", "search_recency_filter": "chaîne", "search_domain_filter": "tableau de chaîne" }, "methodes": { "Constructeur": { "code": "PROCÉDURE Constructeur()\nmaxToken = 1000\no_temperature = 0.5\no_top_p = 0.8\no_top_k = 0\npresence_penalty = 0\nfrequency_penaly = 1\nsearch_recency_filter = \"all\" // year\nprompt_system = \"Soyez précis et concis. Répondez uniquement en français. Effectuez une recherche approfondie et fournissez des informations détaillées et à jour.\"" }, "cleAPI": { "code": "PROCÉDURE PROTÉGÉE cleAPI() : chaîne\nRENVOYER(\"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\")" }, "urlBase": { "code": "PROCÉDURE PROTÉGÉE urlBase() : chaîne\nRENVOYER(\"https://api.perplexity.ai/chat/completions\")" }, "Destructeur": { "code": "PROCÉDURE Destructeur()" }, "Interroger": { "code": "PROCÉDURE Interroger(LOCAL sQuestion est une chaîne)\n:Modele = \"sonar\"\nRENVOYER(LLM_POST(sQuestion))" }, "even_LLM_POST": { "code": "PROCÉDURE PROTÉGÉE even_LLM_POST(LOCAL sQuestion est une chaîne)\n\nContenu.messages[1].role = \"system\"\nContenu.messages[1].content = :prompt_system\nContenu.messages[2].role = \"user\"\nContenu.messages[2].content = sQuestion\nSI :maxToken <> 0 ALORS\n\tContenu.max_tokens = maxToken\nFIN\nContenu.temperature = o_temperature\nSI :format <> \"\" ALORS\n\tContenu.response_format = :format\nFIN\nContenu.top_p =o_top_p\nSI TableauOccurrence(search_domain_filter) <> 0 ALORS\n\t// [\"perplexity.ai\"]\n\tContenu.search_domain_filter = search_domain_filter\nFIN\nContenu.return_images = Faux\nContenu.return_related_questions = Faux\nSI search_recency_filter <> \"all\" ALORS\n\tContenu.search_recency_filter = search_recency_filter\nFIN\nContenu.top_k = o_top_k\nContenu.presence_penalty = presence_penalty\nContenu.frequency_penalty = frequency_penaly\nContenu.response_format = Null" }, "interrogerRetourneReponse": { "code": "PROCÉDURE PROTÉGÉ VIRTUELLE interrogerRetourneReponse(LOCAL sReponse est une chaîne )\nvRepoonse est un Variant = JSONVersVariant(sReponse)\nsRetour est une chaîne\nsRetour = vRepoonse.choices[1].message.content\n\nRENVOYER(sRetour)" } } }, "clsRAG": { "heritage": "", "attributs": { "sessionID": "chaîne (PUBLIQUE CONSTANT)", "reqRAG": "restRequête (PRIVÉ)", "taContenu": "tableau associatif de Variant (PRIVÉ)", "m_sChatID": "chaîne (PRIVÉ)", "mn_Question": "entier (PRIVÉ)" }, "methodes": { "Constructeur": { "code": "PROCÉDURE Constructeur()\nreqRAG.Entête[\"Authorization\"]\t= \"Bearer \" + \"ragflow-c4YTNkMzcwZDM1ODExZWZiODA2MDI0Mm\"\nreqRAG.Entête[\"Content-Type\"]\t= \"application/json\"\t" }, "urlBase": { "code": "PROCÉDURE PRIVÉE urlBase()\n\nRENVOYER(\"http://10.103.0.100/api/v1/chats/\")" }, "chatID": { "code": "PROCÉDURE PRIVÉE chatID()\nSI m_sChatID <> \"\" ALORS \n\tRENVOYER(m_sChatID)\nSINON\n\tRENVOYER(\"ffb1058ed4b811ef8a900242ac120003\")\nFIN" }, "setChatID": { "code": "PROCÉDURE PRIVÉ chatID(Valeur)\n\nm_sChatID = Valeur" }, "Contenu": { "code": "PROCÉDURE PRIVÉE Contenu()\nbufContenu est un Buffer\nSérialise(taContenu,bufContenu,psdJSON)\nRENVOYER(bufContenu)" }, "urlChat": { "code": "PROCÉDURE PRIVÉE urlChat()\n\nRENVOYER(:urlBase+chatID+\"/\")" }, "Destructeur": { "code": "PROCÉDURE Destructeur()\n\nSI mn_Question = 0 OU EnModeTest() ALORS\n\tsupprimeSessionChat()\t\nFIN" }, "creeSessionChat": { "code": "PROCÉDURE PRIVÉ creeSessionChat()\nvMaReponse est un Variant\nhReponse est une httpRéponse\nTableauSupprimeTout(taContenu)\nreqRAG.URL = :urlChat+\"sessions\"\nreqRAG.Méthode = httpPost\ntaContenu[\"name\"] = DateHeureVersChaîne(DateHeureSys,\"AAAAMMJJ_HHmmSS\")\nreqRAG.Contenu = :Contenu\n\nhReponse = RESTEnvoie(reqRAG)\nSI ErreurDétectée ALORS\n\tRENVOYER(Faux,TexteVersHTML(ErreurInfo()))\nSINON\n\tvMaReponse = JSONVersVariant(hReponse.Contenu)\n\tSI vMaReponse.code = 0\n\t\t:sessionID = vMaReponse.data.id\n\t\tRENVOYER(Vrai,:formateReponse(vMaReponse.data.messages[1].content))\n\tSINON\n\t\tRENVOYER(Faux,:formateReponse(vMaReponse.message))\n\tFIN\nFIN" }, "Chat": { "code": "PROCÉDURE Chat(LOCAL sQuestion est une chaîne)\nbSessionCree est un booléen\nsReponse est une chaîne\nvMaReponse\test un Variant\nSI :sessionID = \"\" ALORS\n\t(bSessionCree,sReponse) = creeSessionChat()\n\tSI PAS bSessionCree ALORS\n\t\tRENVOYER(:formateReponse(sReponse))\n\tFIN\t\nFIN\n\nmn_Question++\nhReponse\test une httpRéponse\nTableauSupprimeTout(taContenu)\nreqRAG.URL\t\t\t= :urlChat+\"completions\"\nreqRAG.Méthode\t\t= httpPost\ntaContenu[\"question\"]\t\t= sQuestion\ntaContenu[\"stream\"]\t\t\t= False\ntaContenu[\"session_id\"]\t\t= :sessionID\nreqRAG.Contenu\t\t= :Contenu\n\nhReponse\t\t\t= RESTEnvoie(reqRAG)\nSI ErreurDétectée ALORS\n\tRENVOYER(TexteVersHTML(ErreurInfo()))\nSINON\n\tvMaReponse = JSONVersVariant(hReponse.Contenu)\n\tSI vMaReponse.code = 0 ALORS\n\t\tsReponse = vMaReponse.data.answer\n\t\tRENVOYER(:formateReponse(sReponse))\n\tSINON\n\t\tsReponse = vMaReponse.message\n\t\tRENVOYER(:formateReponse(sReponse))\n\tFIN\nFIN" }, "formateReponse": { "code": "PROCÉDURE PUBLIQUE formateReponse(LOCAL sReponse est une chaîne)\nsRetour est une chaîne ANSI\nsRetour+=\"
\"\nsRetour+=UnicodeVersAnsi(UTF8VersUnicode(MarkdownVersHTML(sReponse)))\nsRetour+=\"
\"\n//sRetourANSI = UnicodeVersAnsi(sRetourUnicode)\nRENVOYER(sRetour)" }, "formateQuestion": { "code": "PROCÉDURE GLOBALE formateQuestion(LOCAL sQuestion est une chaîne)\nsRetour est une chaîne\nsRetour = \"
\"\nsRetour+= sQuestion\nsRetour+= \"
\"\nRENVOYER(sRetour)" }, "supprimeSessionChat": { "code": "PROCÉDURE PRIVÉ supprimeSessionChat()\nvMaReponse\test un Variant\nsReponse\test une chaîne\nhReponse\test une httpRéponse\nTableauSupprimeTout(taContenu)\nreqRAG.URL\t\t\t\t\t= :urlChat+\"/sessions\"\nreqRAG.Méthode\t\t\t\t= httpDelete\ntaContenu[\"ids\"]\t\t\t= [sessionID]\nreqRAG.Contenu\t\t\t\t= :Contenu\n\nhReponse\t\t\t\t\t= RESTEnvoie(reqRAG)\nSI ErreurDétectée ALORS\n\tRENVOYER(TexteVersHTML(ErreurInfo()))\nSINON\n\tvMaReponse = JSONVersVariant(hReponse.Contenu)\n\tSI vMaReponse.code = 0 ALORS\n\t\tRENVOYER(\"OK\")\n\tSINON\n\t\tsReponse = vMaReponse.message\n\t\tRENVOYER(sReponse)\n\tFIN\nFIN" } } }, "clsLLM": { "type": "abstraite", "attributs_publics": { "Modele": "chaîne", "prompt_system": "chaîne", "o_temperature": "réel", "o_top_k": "entier", "o_top_p": "réel" }, "constantes_publiques": { "dureeTraitement": "Durée", "reponseErreur": "booléen" }, "attributs_proteges": { "Contenu": "JSON", "m_sUrlFonction": "chaîne", "stream": "booléen", "m_sFormat": "chaîne", "heureDepart": "Heure", "heureFin": "Heure" }, "methodes": { "Constructeur": { "type": "procédure", "code": "stream = Faux" }, "urlBase": { "type": "procédure protégée abstraite", "retour": "chaîne" }, "cleAPI": { "type": "procédure protégée abstraite", "retour": "chaîne" }, "urlFonction": { "type": "procédure publique", "code": "RENVOYER(m_sUrlFonction)" }, "format": { "type": "procédure publique", "code": "RENVOYER(m_sFormat)" }, "model_list": { "type": "procédure publique", "retour": "tableau de chaînes", "code": "tabModels est un tableau de chaînes\nRENVOYER(tabModels)" }, "commandeAutorisation": { "type": "procédure publique", "code": "RENVOYER(\"Bearer\")" }, "Interroger": { "type": "procédure", "parametres": ["sQuestion est une chaîne"], "retour": "chaîne", "code": "sReponse est une chaîne\nsReponse = LLM_POST(sQuestion)\nRENVOYER(sReponse)" }, "LLM_POST": { "type": "procédure protégée", "code": "// Code complet de la méthode LLM_POST" }, "even_LLM_POST": { "type": "procédure protégée abstraite virtuelle", "parametres": ["sQuestion est une chaîne "] }, "interrogerRetourneReponse": { "type": "procédure protégé abstraite virtuelle", "parametres": ["sReponse est une chaîne "], "retour": "chaîne" } } }, "clsDeepl": { "herite_de": "clsLLM", "attributs": { "langueSource": "chaîne", "langueDesti": "chaîne", "context": "chaîne", "split_sentences": "chaîne", "preserve_formatting": "booléen", "formality": "chaîne", "show_billed_characters": "booléen", "tag_handling": "chaîne", "outline_detection": "booléen", "non_splitting_tags": "tableau de chaînes", "splitting_tags": "tableau de chaînes", "ignore_tags": "tableau de chaînes" }, "constantes_publiques": { "glossaire_id": "tableau associatif (ccSansCasse) de chaînes", "m_tabGlossaireListePaire": "tableau de 0 par 2 chaînes" }, "methodes": { "Constructeur": { "type": "procédure", "code": "// Initialisation des attributs par défaut" }, "commandeAutorisation": { "type": "procédure publique", "code": "RENVOYER(\"DeepL-Auth-Key\")" }, "cleAPI": { "type": "procédure protégée", "code": "RENVOYER(\"d42ee2f7-f4e6-d437-3237-fa40b4f45e65\")" }, "urlBase": { "type": "procédure protégée", "code": "RENVOYER(\"https://api.deepl.com/v2/\")" }, "model_list": { "type": "procédure", "code": "// Code qui retourne la liste des modèles disponibles" }, "even_LLM_POST": { "type": "procédure protégée", "code": "// Code complet de gestion des paramètres DeepL" }, "interrogerRetourneReponse": { "type": "procédure protégée", "code": "// Code de traitement de la réponse DeepL" }, "glossaire_cree": { "type": "procédure", "code": "// Code de création d'un glossaire" }, "glossaireRetrouveID": { "type": "procédure privée", "code": "// Code de récupération d'ID de glossaire" }, "glossaireSupprime": { "type": "procédure privée", "code": "// Code de suppression d'un glossaire" } } } } }