From f03a11ec24824d90f94c7b757b23ccd41eaf7881 Mon Sep 17 00:00:00 2001
From: Ivan Pavlovich <ivan.pavlovic@hes-so.ch>
Date: Sun, 30 Mar 2025 12:02:11 +0200
Subject: [PATCH] =?UTF-8?q?Ajout=20des=20entaite=20aux=20fichier=20utilis?=
 =?UTF-8?q?=C3=A9s?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dataSources/PubMed/pubmedApi.py               |   2 +-
 models/LLM/LLMPrices/calc_llm_prices.py       |  24 ++++++++++++++----
 models/LLM/LLMPrices/data/llm_prices.json     |  24 +++++++++---------
 models/Tokenizer/data/token_count.json        |  15 ++++++++---
 models/Tokenizer/token_count.py               |  21 ++++++++++++---
 scripts/copy_files_hpc.py                     |   9 +++++++
 scripts/get_results_hpc.py                    |   9 +++++++
 testModel/__pycache__/metrics.cpython-313.pyc | Bin 3122 -> 3122 bytes
 testModel/__pycache__/utils.cpython-313.pyc   | Bin 5414 -> 5416 bytes
 testModel/dataset/create_test_data.py         |   9 +++++++
 ...t_articles_len.py => get_dataset_stats.py} |   8 ++++++
 testModel/launch_tests.py                     |   9 +++++++
 testModel/metrics.py                          |   8 ++++++
 testModel/show_graph.py                       |   8 ++++++
 testModel/show_results.py                     |   8 ++++++
 testModel/test.py                             |  10 ++++++++
 testModel/utils.py                            |   8 ++++++
 17 files changed, 147 insertions(+), 25 deletions(-)
 rename testModel/{test_articles_len.py => get_dataset_stats.py} (85%)

diff --git a/dataSources/PubMed/pubmedApi.py b/dataSources/PubMed/pubmedApi.py
index 793ba5724..bcd9c161a 100644
--- a/dataSources/PubMed/pubmedApi.py
+++ b/dataSources/PubMed/pubmedApi.py
@@ -11,7 +11,7 @@ import sys
 import os
 
 # Ajouter le répertoire parent au chemin de recherche
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
 
 from requests import get
 from parsers.xmlParser import parseXmlFile
diff --git a/models/LLM/LLMPrices/calc_llm_prices.py b/models/LLM/LLMPrices/calc_llm_prices.py
index 4fd46e549..e211bef12 100644
--- a/models/LLM/LLMPrices/calc_llm_prices.py
+++ b/models/LLM/LLMPrices/calc_llm_prices.py
@@ -1,3 +1,12 @@
+# -----------------------------
+# Le script calcule le prix moyen pour classifier les articles par jour, semaine, mois en utilisant le fichier des nombres de tokens (../../Tokenizer/data/token_count.json).
+# Les prix des LLM sont récupérer d'internet et sont en $ par million de token. Les résultats sont stoquer dans ./data/llm_prices.json
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 from transformers import AutoTokenizer
 import json
 import sys
@@ -10,7 +19,7 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../.
 from testModel.utils import get_article_data
 from variables.pubmed import NCDS_MESH_TERM, KEYWORDS_MESH_TERM, KEYWORDS_MESH_SUBHEADING, KEYWORDS_MESH_SITE_PROPOSITION, KEYWORDS_MESH_PROPOSITION
 
-DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../Tokenizer/data"))
+DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../Tokenizer/data"))
 RESULT_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "./data"))
 
 # Prices for 1M tokens
@@ -56,7 +65,10 @@ with open(file_path, "r", encoding="utf-8") as file:
     data = json.load(file)
 
 mean_data = {
-    "ALL": 0
+    "ALL": {
+        "input":0,
+        "output":0
+    }
 }
 
 for category in CATEGORIES:
@@ -69,13 +81,15 @@ for category in CATEGORIES:
 
 
 for tokenizer_name in TOKENIZERS:
-    mean_data["ALL"] += data[tokenizer_name]["ALL"]
+    mean_data["ALL"]["input"] += data[tokenizer_name]["ALL"]["input"]
+    mean_data["ALL"]["output"] += data[tokenizer_name]["ALL"]["output"]
     for category in CATEGORIES:
         for interval in INTERVALS:
             for i in ["input", "output"]:
                 mean_data[category][interval][i] += data[tokenizer_name][category][interval][i]["mean"]
 
-mean_data["ALL"] /= len(TOKENIZERS)
+mean_data["ALL"]["input"] /= len(TOKENIZERS)
+mean_data["ALL"]["output"] /= len(TOKENIZERS)
 for category in CATEGORIES:
     for interval in INTERVALS:
         for i in ["input", "output"]:
@@ -96,7 +110,7 @@ for llm in PRICES.keys():
             res[llm][category][interval] = 0
 
 for llm, prices in PRICES.items():
-    res[llm]["ALL"] = prices["input"] / 1000000 * mean_data["ALL"] + prices["output"] / 1000000 * mean_data["ALL"]
+    res[llm]["ALL"] = prices["input"] / 1000000 * mean_data["ALL"]["input"] + prices["output"] / 1000000 * mean_data["ALL"]["output"]
     for category in CATEGORIES:
         for interval in INTERVALS:
             res[llm][category][interval] = prices["input"] / 1000000 * mean_data[category][interval]["input"] + prices["output"] / 1000000 * mean_data[category][interval]["output"]
diff --git a/models/LLM/LLMPrices/data/llm_prices.json b/models/LLM/LLMPrices/data/llm_prices.json
index 09118ec84..2b3669137 100644
--- a/models/LLM/LLMPrices/data/llm_prices.json
+++ b/models/LLM/LLMPrices/data/llm_prices.json
@@ -1,6 +1,6 @@
 {
     "Mistral Large": {
-        "ALL": 610.8317493333334,
+        "ALL": 195.39295733333336,
         "NO KEYWORDS": {
             "day": 0.02742357295906432,
             "week": 0.1916243452108532,
@@ -28,7 +28,7 @@
         }
     },
     "Mistral Small": {
-        "ALL": 30.54158746666667,
+        "ALL": 9.769647866666666,
         "NO KEYWORDS": {
             "day": 0.001371178647953216,
             "week": 0.009581217260542662,
@@ -56,7 +56,7 @@
         }
     },
     "GPT-4o": {
-        "ALL": 954.4246083333335,
+        "ALL": 262.0266216666667,
         "NO KEYWORDS": {
             "day": 0.03677566619883041,
             "week": 0.25697282281791434,
@@ -84,7 +84,7 @@
         }
     },
     "GPT-4o mini": {
-        "ALL": 57.265476500000005,
+        "ALL": 15.7215973,
         "NO KEYWORDS": {
             "day": 0.0022065399719298244,
             "week": 0.015418369369074859,
@@ -112,7 +112,7 @@
         }
     },
     "DeepSeek-V3": {
-        "ALL": 104.60493707333335,
+        "ALL": 28.441158540000004,
         "NO KEYWORDS": {
             "day": 0.003991741549473684,
             "week": 0.027892603994769533,
@@ -140,7 +140,7 @@
         }
     },
     "Gemini 2.0 Flash": {
-        "ALL": 38.17698433333334,
+        "ALL": 10.481064866666667,
         "NO KEYWORDS": {
             "day": 0.0014710266479532163,
             "week": 0.010278912912716575,
@@ -168,7 +168,7 @@
         }
     },
     "Gemini 2.0 Flash-Lite": {
-        "ALL": 28.632738250000003,
+        "ALL": 7.86079865,
         "NO KEYWORDS": {
             "day": 0.0011032699859649122,
             "week": 0.007709184684537429,
@@ -196,7 +196,7 @@
         }
     },
     "Claude 3.7 Sonnet": {
-        "ALL": 1374.371436,
+        "ALL": 335.77445600000004,
         "NO KEYWORDS": {
             "day": 0.047126239438596486,
             "week": 0.3292982569467146,
@@ -224,7 +224,7 @@
         }
     },
     "Claude 3.5 Haiku": {
-        "ALL": 366.49904960000003,
+        "ALL": 89.53985493333334,
         "NO KEYWORDS": {
             "day": 0.012566997183625729,
             "week": 0.0878128685191239,
@@ -252,7 +252,7 @@
         }
     },
     "Claude 3 Opus": {
-        "ALL": 6871.857179999999,
+        "ALL": 1678.87228,
         "NO KEYWORDS": {
             "day": 0.23563119719298242,
             "week": 1.6464912847335729,
@@ -280,7 +280,7 @@
         }
     },
     "Command A": {
-        "ALL": 954.4246083333335,
+        "ALL": 262.0266216666667,
         "NO KEYWORDS": {
             "day": 0.03677566619883041,
             "week": 0.25697282281791434,
@@ -308,7 +308,7 @@
         }
     },
     "Command R+": {
-        "ALL": 954.4246083333335,
+        "ALL": 262.0266216666667,
         "NO KEYWORDS": {
             "day": 0.03677566619883041,
             "week": 0.25697282281791434,
diff --git a/models/Tokenizer/data/token_count.json b/models/Tokenizer/data/token_count.json
index a4c59fb66..b225156bd 100644
--- a/models/Tokenizer/data/token_count.json
+++ b/models/Tokenizer/data/token_count.json
@@ -1,6 +1,9 @@
 {
     "bert-base-uncased": {
-        "ALL": 77536060,
+        "ALL": {
+            "input": 77536060,
+            "output": 7542090
+        },
         "NO KEYWORDS": {
             "day": {
                 "input": {
@@ -193,7 +196,10 @@
         }
     },
     "roberta-base": {
-        "ALL": 75762923,
+        "ALL": {
+            "input": 75762923,
+            "output": 6900210
+        },
         "NO KEYWORDS": {
             "day": {
                 "input": {
@@ -386,7 +392,10 @@
         }
     },
     "facebook/bart-large": {
-        "ALL": 75762923,
+        "ALL": {
+            "input": 75762923,
+            "output": 6900210
+        },
         "NO KEYWORDS": {
             "day": {
                 "input": {
diff --git a/models/Tokenizer/token_count.py b/models/Tokenizer/token_count.py
index ed90fd6c7..175458034 100644
--- a/models/Tokenizer/token_count.py
+++ b/models/Tokenizer/token_count.py
@@ -1,3 +1,12 @@
+# -----------------------------
+# Le script calcule le nombre moyen de token en input et output grace a différent tokenizers qu'une LLM
+# aura besoin pour classifier les articles par jour, semaine, mois. Il stoque le résultat dans un fichier json (./data/token_count.json)
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 from transformers import AutoTokenizer
 import json
 import sys
@@ -5,7 +14,7 @@ import os
 import statistics
 from datetime import datetime, timedelta
 
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../")))
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
 
 from testModel.utils import get_article_data
 from variables.pubmed import NCDS, NCDS_MESH_TERM, KEYWORDS_MESH_TERM, KEYWORDS_MESH_SUBHEADING, KEYWORDS_MESH_SITE_PROPOSITION, KEYWORDS_MESH_PROPOSITION
@@ -75,7 +84,7 @@ TOKENIZERS = [
     "facebook/bart-large"
 ]
 
-TMP_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../dataSources/PubMed/tmp"))
+TMP_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../dataSources/PubMed/save"))
 RESULT_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "./data"))
 
 ncds_mesh_terms = [mesh_term.lower() for ncd, mesh_term in NCDS_MESH_TERM.items()]
@@ -95,7 +104,10 @@ counts = {}
 
 for tokenizer_name in TOKENIZERS:
     counts[tokenizer_name] = {}
-    counts[tokenizer_name]["ALL"] = 0
+    counts[tokenizer_name]["ALL"] = {
+        "input" : 0,
+        "output" : 0
+    }
     for category in CATEGORIES:
         counts[tokenizer_name][category] = {
             "day": {
@@ -163,7 +175,8 @@ for tokenizer_name in TOKENIZERS:
         num_tokens = len(tokens["input_ids"][0])
 
         add_token_number(article_date, start_date, num_tokens, output_token_num, counts, tokenizer_name, "NO KEYWORDS")
-        counts[tokenizer_name]["ALL"] += num_tokens
+        counts[tokenizer_name]["ALL"]["input"] += num_tokens
+        counts[tokenizer_name]["ALL"]["output"] += output_token_num
 
         added = False
 
diff --git a/scripts/copy_files_hpc.py b/scripts/copy_files_hpc.py
index e5f494f67..dbad7fb44 100644
--- a/scripts/copy_files_hpc.py
+++ b/scripts/copy_files_hpc.py
@@ -1,3 +1,12 @@
+# -----------------------------
+# Le script transfer les fichier de testModel, models, parsers, variables et dateSources à un remote grâce à rclone copy
+#
+# Arguments:
+# --remote : nom du remote où transferer les fichier (default: bamboo)
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import argparse
 import os
 import sys
diff --git a/scripts/get_results_hpc.py b/scripts/get_results_hpc.py
index 6cae4884a..1c42ac7ed 100644
--- a/scripts/get_results_hpc.py
+++ b/scripts/get_results_hpc.py
@@ -1,3 +1,12 @@
+# -----------------------------
+# Le script transfer les fichier de testModel/results depuis un remote à la machine grâce à rclone copy
+#
+# Arguments:
+# --remote : nom du remote où transferer les fichier (default: bamboo)
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import argparse
 import os
 import sys
diff --git a/testModel/__pycache__/metrics.cpython-313.pyc b/testModel/__pycache__/metrics.cpython-313.pyc
index 592a42936e81fc6665018f4da52330723e48fa77..2b7fabb35a91ff2a66003dc10bbe2eb26c6b8a8d 100644
GIT binary patch
delta 84
zcmdlau}OmOGcPX}0|Ns?3jfRWdt4j&n3x$kHw!XrF)?avwqc#d$Y?(KGTTc=yUBam
qA2Pa3p3gCl(QER24&}*-oSPT}Hj8liGBSouPU2q7C^VUkM+X4npBJD2

delta 84
zcmdlau}OmOGcPX}0|Nttp6T86=bRh)n3x$EHw!XrF)=D^wqc#d$f!U0GTTc=v&nne
qA2QlZp3gCl(P{F04&}*-oSPUuHj8liGBWy2PU2q7$TXRaM+X4Yh8H{l

diff --git a/testModel/__pycache__/utils.cpython-313.pyc b/testModel/__pycache__/utils.cpython-313.pyc
index f00233042224c15b64c14be459a19aed672e0fec..3cd1f083a84b02d5b105e907ae51628e17d23ebf 100644
GIT binary patch
delta 103
zcmZ3cwL**cGcPX}0|Ns?9skSpcN=+4m>GpOJ26``GKx;FWBJ6WxVeyZDifo|W_FH~
zOpNB6FLH@9F?w%)$upIaF>G@^Up6CS%I4Sn*O?g0HXjzc$jH~tz`*c<nURt4vk(I#
J*W?8vZ2$`Z9v1)r

delta 101
zcmZ3XwM>imGcPX}0|NttNX*l8rH#BM%#2){otUi|8F?qyv3z2b++4^ym5EVdGdssg
zCPw|u7rDfl7@ar2<eAFI=(o9^FPo7uX7g+Q>r9M!n-2?JWaQ~&U|{&b%*e=in}Kuk
HB9S%#bVnSt

diff --git a/testModel/dataset/create_test_data.py b/testModel/dataset/create_test_data.py
index 718cd8611..5571083ac 100644
--- a/testModel/dataset/create_test_data.py
+++ b/testModel/dataset/create_test_data.py
@@ -1,3 +1,12 @@
+# -----------------------------
+# Le script récupère les articles pour chaque maladies pour la classification et les stoque dans un fichier du même nom.abs
+# Il récupère 100 articles dont 25 courts, 25 moyens, 25 longs et 25 très long pour chaque maladies.
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import sys
 import os
 import json
diff --git a/testModel/test_articles_len.py b/testModel/get_dataset_stats.py
similarity index 85%
rename from testModel/test_articles_len.py
rename to testModel/get_dataset_stats.py
index c753b3b17..6c91ffe72 100644
--- a/testModel/test_articles_len.py
+++ b/testModel/get_dataset_stats.py
@@ -1,3 +1,11 @@
+# -----------------------------
+# Le script regarde les statistiques du je de données test (nombre d'article par catégorie de longueur, longeur moyenne d'un article en caractères)
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import sys
 import os
 import statistics
diff --git a/testModel/launch_tests.py b/testModel/launch_tests.py
index 45e6b89e6..1f507282c 100644
--- a/testModel/launch_tests.py
+++ b/testModel/launch_tests.py
@@ -1,3 +1,12 @@
+# -----------------------------
+# Le script transfer les fichier de testModel, models, parsers, variables et dateSources à un remote grâce à rclone copy
+#
+# Arguments:
+# --remote : nom du remote où transferer les fichier (default: bamboo)
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import subprocess
 import sys
 import os
diff --git a/testModel/metrics.py b/testModel/metrics.py
index f12da370e..13b045724 100644
--- a/testModel/metrics.py
+++ b/testModel/metrics.py
@@ -1,3 +1,11 @@
+# -----------------------------
+# Le script ne fait rien. Il met a disposition des fonctions qui permettent de calculer les différents scores
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 def get_confusion_matrix(wanted, prediction):
     matrix = [[0, 0], [0, 0]]
     for key in wanted.keys():
diff --git a/testModel/show_graph.py b/testModel/show_graph.py
index 1084113c3..2d3853dc2 100644
--- a/testModel/show_graph.py
+++ b/testModel/show_graph.py
@@ -1,3 +1,11 @@
+# -----------------------------
+# Le script crée les graphes pour chaques catégories de longueur en utilisant les résultats des modèles selectionnés et les stoque dans ./tmp. 
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import sys
 import os
 import matplotlib.pyplot as plt
diff --git a/testModel/show_results.py b/testModel/show_results.py
index 7843986b8..f97bb5954 100644
--- a/testModel/show_results.py
+++ b/testModel/show_results.py
@@ -1,3 +1,11 @@
+# -----------------------------
+# Le script crée des bar chart et spider chart pour toutes les combinaisons de modèles possible et sotque dans ./results/graphs.
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import sys
 import os
 import matplotlib.pyplot as plt
diff --git a/testModel/test.py b/testModel/test.py
index 6ff90fbb1..f2ccc165f 100644
--- a/testModel/test.py
+++ b/testModel/test.py
@@ -1,3 +1,13 @@
+# -----------------------------
+# Le script lance la classification du jeu de données de test avec un modèle selectionné.
+#
+# Arguments:
+# --model : nom du modèle présent dans le fichier variables/models.py
+# --remake : permet de refaire les tests déjà réaliser (supprime les anciens résultats)
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import sys
 import os
 import statistics
diff --git a/testModel/utils.py b/testModel/utils.py
index 4a6581b90..7db67a676 100644
--- a/testModel/utils.py
+++ b/testModel/utils.py
@@ -1,3 +1,11 @@
+# -----------------------------
+# Le script ne fait rien. Il met a disposition des fonctions utiles
+#
+# Ce script ne prend pas de paramètres.
+#
+# Auteur : Pavlovich Ivan
+# -----------------------------
+
 import os
 import sys
 import json
-- 
GitLab