El-Alberto67 commited on
Commit
8ebc12c
·
verified ·
1 Parent(s): e52ed0a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -22
app.py CHANGED
@@ -1,43 +1,66 @@
1
  import gradio as gr
2
  from transformers import MarianMTModel, MarianTokenizer
 
3
 
4
- # Modèle de traduction : anglais français par défaut
5
- model_name = "Helsinki-NLP/opus-mt-en-fr"
6
- tokenizer = MarianTokenizer.from_pretrained(model_name)
7
- model = MarianMTModel.from_pretrained(model_name)
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
- def translate(text, target_lang):
10
- # Choisir le modèle selon la langue cible
11
- if target_lang == "fr":
12
- model_name = "Helsinki-NLP/opus-mt-en-fr"
13
- elif target_lang == "en":
14
- model_name = "Helsinki-NLP/opus-mt-fr-en"
15
- else:
16
- return "Langue non supportée pour l'instant"
17
-
18
- # Recharger modèle si changé
19
- global tokenizer, model
20
- if model_name != model.name_or_path:
21
  tokenizer = MarianTokenizer.from_pretrained(model_name)
22
  model = MarianMTModel.from_pretrained(model_name)
23
- model.name_or_path = model_name
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
- # Traduction
26
  batch = tokenizer([text], return_tensors="pt", padding=True)
27
  gen = model.generate(**batch)
28
  translated = tokenizer.batch_decode(gen, skip_special_tokens=True)[0]
29
  return translated
30
 
31
- # Interface Gradio
32
  iface = gr.Interface(
33
  fn=translate,
34
  inputs=[
35
  gr.Textbox(lines=2, placeholder="Tapez le texte ici..."),
36
- gr.Dropdown(["fr", "en"], label="Langue cible")
37
  ],
38
  outputs="text",
39
  title="MyTranslator",
40
- description="Traduction simple avec détection de langue."
41
  )
42
 
43
- iface.launch()
 
1
  import gradio as gr
2
  from transformers import MarianMTModel, MarianTokenizer
3
+ from langdetect import detect
4
 
5
+ # Liste des modèles MarianMT que l'on veut supporter
6
+ LANG_MODELS = {
7
+ ("en", "fr"): "Helsinki-NLP/opus-mt-en-fr",
8
+ ("fr", "en"): "Helsinki-NLP/opus-mt-fr-en",
9
+ ("en", "es"): "Helsinki-NLP/opus-mt-en-es",
10
+ ("es", "en"): "Helsinki-NLP/opus-mt-es-en",
11
+ ("en", "de"): "Helsinki-NLP/opus-mt-en-de",
12
+ ("de", "en"): "Helsinki-NLP/opus-mt-de-en",
13
+ ("en", "it"): "Helsinki-NLP/opus-mt-en-it",
14
+ ("it", "en"): "Helsinki-NLP/opus-mt-it-en",
15
+ ("fr", "es"): "Helsinki-NLP/opus-mt-fr-es",
16
+ ("es", "fr"): "Helsinki-NLP/opus-mt-es-fr",
17
+ ("fr", "de"): "Helsinki-NLP/opus-mt-fr-de",
18
+ ("de", "fr"): "Helsinki-NLP/opus-mt-de-fr",
19
+ # 💡 tu peux ajouter ici toutes les paires dispo sur Hugging Face
20
+ }
21
 
22
+ # Cache modèle/tokenizer pour éviter de recharger à chaque fois
23
+ model_cache = {}
24
+
25
+ def get_model(src, tgt):
26
+ """Charge le bon modèle selon la paire de langues"""
27
+ if (src, tgt) not in LANG_MODELS:
28
+ return None, None
29
+ model_name = LANG_MODELS[(src, tgt)]
30
+ if model_name not in model_cache:
 
 
 
31
  tokenizer = MarianTokenizer.from_pretrained(model_name)
32
  model = MarianMTModel.from_pretrained(model_name)
33
+ model_cache[model_name] = (tokenizer, model)
34
+ return model_cache[model_name]
35
+
36
+ def translate(text, target_lang):
37
+ # Détection automatique de la langue source
38
+ try:
39
+ source_lang = detect(text)
40
+ except:
41
+ return "Impossible de détecter la langue."
42
+
43
+ if source_lang == target_lang:
44
+ return "La langue source et cible sont identiques."
45
+
46
+ tokenizer, model = get_model(source_lang, target_lang)
47
+ if tokenizer is None:
48
+ return f"Traduction {source_lang} → {target_lang} non supportée."
49
 
 
50
  batch = tokenizer([text], return_tensors="pt", padding=True)
51
  gen = model.generate(**batch)
52
  translated = tokenizer.batch_decode(gen, skip_special_tokens=True)[0]
53
  return translated
54
 
 
55
  iface = gr.Interface(
56
  fn=translate,
57
  inputs=[
58
  gr.Textbox(lines=2, placeholder="Tapez le texte ici..."),
59
+ gr.Dropdown(["fr", "en", "es", "de", "it"], label="Langue cible")
60
  ],
61
  outputs="text",
62
  title="MyTranslator",
63
+ description="Traducteur multi-langues avec détection automatique."
64
  )
65
 
66
+ iface.launch()