cstr commited on
Commit
103c5f2
·
verified ·
1 Parent(s): 55c8cdf

Update translator.py

Browse files
Files changed (1) hide show
  1. translator.py +54 -2
translator.py CHANGED
@@ -13,7 +13,13 @@ from typing import Dict, List, Optional, Set, Tuple, Any
13
  from enum import Enum
14
  import requests
15
  from tqdm import tqdm
16
-
 
 
 
 
 
 
17
  # --- Core Library Diagnostics ---
18
  print("🔍 System Check...")
19
 
@@ -81,6 +87,7 @@ class TranslationBackend(Enum):
81
  OPENAI = "openai"
82
  ANTHROPIC = "anthropic"
83
  OLLAMA = "ollama"
 
84
  AUTO = "auto"
85
 
86
 
@@ -517,6 +524,11 @@ class LLMTranslator:
517
  f"Provide a natural, fluent translation. "
518
  f"Return ONLY the translation:\n\n{text}"
519
  )
 
 
 
 
 
520
 
521
  for provider_name, provider in self.providers.items():
522
  try:
@@ -1000,6 +1012,41 @@ class SlideMetadata:
1000
  # DOCUMENT TRANSLATOR
1001
  # ============================================================================
1002
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1003
  class UltimateDocumentTranslator:
1004
  """Document translator with configurable backends and M1 optimization."""
1005
 
@@ -1039,7 +1086,12 @@ class UltimateDocumentTranslator:
1039
 
1040
  elif nmt_backend == "opus":
1041
  self.opus = OpusMTTranslator(src_lang, tgt_lang)
1042
-
 
 
 
 
 
1043
  elif nmt_backend == "madlad":
1044
  self.madlad = Madlad400Translator(src_lang, tgt_lang, "3b")
1045
 
 
13
  from enum import Enum
14
  import requests
15
  from tqdm import tqdm
16
+ # Add to existing imports
17
+ try:
18
+ from gradio_client import Client
19
+ HAS_GRADIO_CLIENT = True
20
+ except ImportError:
21
+ HAS_GRADIO_CLIENT = False
22
+
23
  # --- Core Library Diagnostics ---
24
  print("🔍 System Check...")
25
 
 
87
  OPENAI = "openai"
88
  ANTHROPIC = "anthropic"
89
  OLLAMA = "ollama"
90
+ SAUERKRAUT = "sauerkraut"
91
  AUTO = "auto"
92
 
93
 
 
524
  f"Provide a natural, fluent translation. "
525
  f"Return ONLY the translation:\n\n{text}"
526
  )
527
+
528
+ # Sauerkraut API
529
+ if hasattr(self, 'sauerkraut') and self.sauerkraut and self.sauerkraut.available:
530
+ result = self.sauerkraut.translate_batch([text])[0]
531
+ if result and result.strip() != text.strip(): return result
532
 
533
  for provider_name, provider in self.providers.items():
534
  try:
 
1012
  # DOCUMENT TRANSLATOR
1013
  # ============================================================================
1014
 
1015
+ class SauerkrautTranslator:
1016
+ """External API Backend: SauerkrautLM-Translator via Gradio Client."""
1017
+ def __init__(self, target_lang: str):
1018
+ self.target_lang = target_lang
1019
+ self.available = False
1020
+ if not HAS_GRADIO_CLIENT:
1021
+ return
1022
+
1023
+ try:
1024
+ logger.info("NMT | Connecting to SauerkrautLM API...")
1025
+ self.client = Client("VAGOsolutions/SauerkrautLM-Translator-LFM2.5-1.2b-Demo")
1026
+ self.available = True
1027
+ logger.info("✓ NMT | SauerkrautLM API Ready")
1028
+ except Exception as e:
1029
+ logger.error(f"NMT | SauerkrautLM connection failed: {e}")
1030
+
1031
+ def translate_batch(self, texts: List[str]) -> List[str]:
1032
+ if not self.available or not texts:
1033
+ return texts
1034
+
1035
+ results = []
1036
+ for text in texts:
1037
+ try:
1038
+ # The API returns (Prompt, Raw Response, Translation)
1039
+ res = self.client.predict(
1040
+ text=text,
1041
+ target_lang=self.target_lang,
1042
+ api_name="/translate"
1043
+ )
1044
+ results.append(res[2])
1045
+ except Exception as e:
1046
+ logger.error(f"Sauerkraut API Error: {e}")
1047
+ results.append(text) # Fallback to original
1048
+ return results
1049
+
1050
  class UltimateDocumentTranslator:
1051
  """Document translator with configurable backends and M1 optimization."""
1052
 
 
1086
 
1087
  elif nmt_backend == "opus":
1088
  self.opus = OpusMTTranslator(src_lang, tgt_lang)
1089
+
1090
+ elif nmt_backend == "sauerkraut":
1091
+ self.sauerkraut = SauerkrautTranslator(tgt_lang)
1092
+ if not self.sauerkraut.available:
1093
+ logger.error("INIT | Sauerkraut API requested but client not available.")
1094
+
1095
  elif nmt_backend == "madlad":
1096
  self.madlad = Madlad400Translator(src_lang, tgt_lang, "3b")
1097