Compare commits

...

4 Commits

Author SHA1 Message Date
Alex
c28bbc6be7 génération d'un fichier texte 2026-01-05 00:51:50 +01:00
Alex
3a40d79f31 supression de traces de debug 2026-01-05 00:17:03 +01:00
Alex
1e27f98e7d traduction de tout les paragraphes 2026-01-05 00:15:52 +01:00
Alex
b2b688fc6d extraction du nom du modèle utilisé 2026-01-05 00:15:25 +01:00
2 changed files with 57 additions and 15 deletions

View File

@ -1,10 +1,10 @@
FROM zongwei/gemma3-translator:4b
PARAMETER temperature 0.1
PARAMETER temperature 0.3
PARAMETER num_ctx 131072
SYSTEM """
You are a professional translator specialising in translating Ukrainian text into English.
Translate accurately and naturally, respecting the original intonation used by the author of the text.
You must always answer in french.
You must not interpret the author's thoughts or reflections.
Do not add any text before or after the text provided.
Tu es un traducteur professionnel spécialisé dans la traduction de textes historiques ukrainiens.
Traduis avec précision et naturel, en respectant l'intonation originale utilisée par l'auteur du texte.
Tu dois toujours répondre en français.
Tu ne dois pas interpréter les pensées ou les réflexions de l'auteur.
N'ajoutes aucun texte sous quelle forme que ce soit avant ou après le texte tarduit.
"""

60
main.py
View File

@ -54,35 +54,59 @@ def extract_parameters_from_template(template_str):
return parameters
def get_llm_model_info(model=OLLAMA_MODEL):
"""Extrait les informations du modèle LLM depuis Ollama."""
"""
Extrait les informations du modèle LLM depuis Ollama, y compris le nom depuis la ligne FROM du Modelfile.
@param model: Nom du modèle à interroger.
@type model: str
@return: Dictionnaire contenant les informations du modèle, ou None en cas d'erreur.
@rtype: dict | None
"""
try:
# Chemin vers le fichier Modelfile (supposé être dans le même répertoire que le script)
modelfile_path = os.path.join(os.path.dirname(__file__), "Modelfile")
# Initialisation de model_name
model_name = "none"
# Lecture du fichier Modelfile pour extraire le nom du modèle
if os.path.exists(modelfile_path):
with open(modelfile_path, 'r', encoding='utf-8') as file:
for line in file:
if line.strip().startswith('FROM '):
model_name = line.strip().split('FROM ')[1].strip()
break
# URL pour obtenir les informations du modèle
info_url = OLLAMA_URL.replace("/api/generate", "/api/show")
payload = {"name": model}
response = requests.post(info_url, json=payload)
if response.status_code == 200:
model_data = response.json()
# Gère le cas où model_data est une chaîne
if isinstance(model_data, str):
model_data = json.loads(model_data)
# Extrait les paramètres du template
parameters = model_data.get('parameters', '')
parsed_params = extract_parameters_from_template(parameters)
# Extraction du nom depuis la ligne FROM
modelfile_content = model_data.get('Modelfile', '')
# Extraction des informations principales
info = {
"temperature": parsed_params.get('temperature', model_data.get("temperature", "Not available")),
"name": model_name,
"num_ctx": parsed_params.get('num_ctx', "Not available"),
"top_k": parsed_params.get('top_k', "Not available"),
"top_p": parsed_params.get('top_p', "Not available"),
"system": model_data.get("system", "Not available"),
"modified_at": model_data.get("modified_at", "Not available"),
}
return info
else:
print(f"Erreur lors de la récupération du modèle : {response.text}")
@ -111,7 +135,7 @@ def display_llm_info():
else:
formatted_date = 'Not available'
return f"LLM Modèle: {OLLAMA_MODEL}<br//>\nSystem: {info['system']}<br//>\nTemperature: {info['temperature']}<br//>\nDate de modification: {formatted_date}"
return f"LLM Modèle: {info['name']}<br//>\nDate de modification: {formatted_date}<br//>\nSystem: {info['system']}<br//>\nTemperature: {info['temperature']}"
else:
return "Informations du modèle non disponibles"
@ -151,7 +175,6 @@ def split_pages_in_paragraphs(pages_text):
return paragraphs
def send_to_ollama(text, target_lang=TARGET_LANGUAGE, model=OLLAMA_MODEL, context_size=128000):
"""Envoie une requête à Ollama et retourne la réponse traduite."""
# Construit le prompt avec les instructions système et la demande de traduction
@ -248,6 +271,24 @@ def create_pdf_from_results(results, output_path):
doc.build(story)
print(f"PDF généré avec succès : {output_path}")
def create_txt_from_results(results, output_path):
"""Crée un fichier TXT à partir des résultats de traduction."""
OUTPUT_TXT_PATH = output_path.replace(".pdf", f".txt") # Chemin du fichier TXT de sortie
# Titre avec la langue cible
title_text = f"Traduction - Ukrainien vers {TARGET_LANGUAGE.capitalize()}"
with open(OUTPUT_TXT_PATH, 'w', encoding='utf-8') as txt_file:
txt_file.write(title_text + "\n\n")
# Contenu
for page_num, translation in results.items():
# Préserver la mise en page en convertissant les sauts de ligne
txt_file.write(translation + "\n\n")
# Infos sur le LLM
txt_file.write("\n")
txt_file.write(display_llm_info() + "\n")
def main():
# Affiche les informations du modèle LLM
display_llm_info()
@ -276,6 +317,7 @@ def main():
# Création du PDF avec tous les résultats
create_pdf_from_results(results, OUTPUT_PDF_PATH)
create_txt_from_results(results, OUTPUT_PDF_PATH)
if __name__ == "__main__":
main()