tsuching commited on
Commit
642df0a
·
verified ·
1 Parent(s): eea55f1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -9
app.py CHANGED
@@ -4,6 +4,45 @@ import numpy as np
4
  from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
5
  from transformers import MBart50TokenizerFast, MBartForConditionalGeneration
6
  #from transformers import AutoTokenizer, AutoModel
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
 
9
  # --- Load TTS pipelines ---
@@ -26,6 +65,7 @@ translation_model = MBartForConditionalGeneration.from_pretrained("facebook/mbar
26
  #translation_tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indictrans2-en-indic-1B")
27
  #AutoModelForSeq2SeqLM.from_pretrained("ai4bharat/indictrans2-en-indic-1B", use_auth_token=os.environ["HF_TOKEN"])
28
 
 
29
  def run_task(text, language, task):
30
  if task == "TTS" and language == "Tibetan":
31
  speech = tts_tibetan(text) # pipeline output
@@ -35,18 +75,41 @@ def run_task(text, language, task):
35
  sr = speech["sampling_rate"]
36
 
37
  # Convert float32 [-1,1] → int16 PCM
38
- audio_int16 = np.clip(audio * 32767, -32768, 32767).astype(np.int16)
39
-
40
- return (sr, audio_int16), "" # <-- tuple (sampling_rate, numpy array)
 
 
 
 
 
 
 
41
  elif task == "Translate":
 
 
 
 
 
 
 
 
 
 
42
  # MBART requires a language code token, e.g. "en_XX" for English
43
- inputs = translation_tokenizer(text, return_tensors="pt")
44
- outputs = translation_model.generate(**inputs)
45
- return None, translation_tokenizer.decode(outputs[0], skip_special_tokens=True)
46
  elif task == "Tokenize":
47
- return None, translation_tokenizer.tokenize(text)
 
 
 
 
 
48
  else:
49
- return None, "Unsupported task or language"
 
50
 
51
  #def run_task(text, language, task):
52
  # if task == "TTS":
@@ -95,7 +158,8 @@ iface = gr.Interface(
95
  gr.Radio(choices=["TTS", "Translate", "Tokenize"], label="Task")
96
  ],
97
  outputs=[
98
- gr.Audio(label="Audio Output", type="numpy"), # for TTS
 
99
  #gr.File(label="Generated Speech"),
100
  gr.Textbox(label="Text Output") # for text tasks
101
  ],
@@ -103,6 +167,7 @@ iface = gr.Interface(
103
  description="Tibetan TTS available. Sanskrit supported for text processing only."
104
  )
105
 
 
106
  # Use gr.File for output
107
  #iface = gr.Interface(
108
  # fn=tts_tibetan,
 
4
  from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
5
  from transformers import MBart50TokenizerFast, MBartForConditionalGeneration
6
  #from transformers import AutoTokenizer, AutoModel
7
+ import datetime
8
+ import tempfile
9
+ import soundfile as sf
10
+
11
+
12
+
13
+ # --- Translation Quotas ---
14
+ GOOGLE_QUOTA = 500_000 # free tier characters/month
15
+ MS_QUOTA = 2_000_000 # free tier characters/month
16
+
17
+ usage = {"google": 0, "microsoft": 0}
18
+ last_reset = datetime.date.today().replace(day=1)
19
+
20
+ def translate_with_quota(text, src_lang="bo", tgt_lang="en"):
21
+ global usage, last_reset
22
+
23
+ # Reset counters on the 1st of each month
24
+ today = datetime.date.today()
25
+ if today.month != last_reset.month or today.year != last_reset.year:
26
+ usage = {"google": 0, "microsoft": 0}
27
+ last_reset = today.replace(day=1)
28
+
29
+ char_count = len(text)
30
+
31
+ # Try Google first
32
+ if usage["google"] + char_count <= GOOGLE_QUOTA:
33
+ usage["google"] += char_count
34
+ return call_google_translate(text, src_lang, tgt_lang)
35
+
36
+ # Fallback to Microsoft
37
+ elif usage["microsoft"] + char_count <= MS_QUOTA:
38
+ usage["microsoft"] += char_count
39
+ return call_microsoft_translate(text, src_lang, tgt_lang)
40
+
41
+ # If both exceeded
42
+ else:
43
+ return "Translation quota exceeded for this month. Please try again next month."
44
+
45
+
46
 
47
 
48
  # --- Load TTS pipelines ---
 
65
  #translation_tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indictrans2-en-indic-1B")
66
  #AutoModelForSeq2SeqLM.from_pretrained("ai4bharat/indictrans2-en-indic-1B", use_auth_token=os.environ["HF_TOKEN"])
67
 
68
+
69
  def run_task(text, language, task):
70
  if task == "TTS" and language == "Tibetan":
71
  speech = tts_tibetan(text) # pipeline output
 
75
  sr = speech["sampling_rate"]
76
 
77
  # Convert float32 [-1,1] → int16 PCM
78
+ #audio_int16 = np.clip(audio * 32767, -32768, 32767).astype(np.int16)
79
+ #return (sr, audio_int16), "" # <-- tuple (sampling_rate, numpy array)
80
+
81
+ # Save to temp WAV file
82
+ tmpfile = tempfile.NamedTemporaryFile(delete=False, suffix=".wav")
83
+ sf.write(tmpfile.name, audio, sr)
84
+
85
+ # Return both: numpy waveform + file path
86
+ return (sr, audio.astype(np.float32)), tmpfile.name
87
+
88
  elif task == "Translate":
89
+ if language == "Sanskrit":
90
+ inputs = indictrans_tokenizer(text, return_tensors="pt")
91
+ outputs = indictrans_model.generate(**inputs)
92
+ return None, indictrans_tokenizer.decode(outputs[0], skip_special_tokens=True)
93
+ elif language == "Tibetan":
94
+ translated_text = translate_with_quota(text, src_lang="bo", tgt_lang="en")
95
+ return None, translated_text
96
+ else:
97
+ return None, "Unsupported language"
98
+
99
  # MBART requires a language code token, e.g. "en_XX" for English
100
+ #inputs = translation_tokenizer(text, return_tensors="pt")
101
+ #outputs = translation_model.generate(**inputs)
102
+ #return None, translation_tokenizer.decode(outputs[0], skip_special_tokens=True)
103
  elif task == "Tokenize":
104
+ if language == "Tibetan":
105
+ return None, xlm_tokenizer.tokenize(text)
106
+ elif language == "Sanskrit":
107
+ return None, indictrans_tokenizer.tokenize(text)
108
+ else:
109
+ return None, "Unsupported language"
110
  else:
111
+ return None, "Unsupported task"
112
+
113
 
114
  #def run_task(text, language, task):
115
  # if task == "TTS":
 
158
  gr.Radio(choices=["TTS", "Translate", "Tokenize"], label="Task")
159
  ],
160
  outputs=[
161
+ gr.Audio(label="Play in Browser", type="numpy"), # for Hugging Face demo
162
+ gr.Audio(label="Download/URL for Flutter", type="file") # for Flutter app
163
  #gr.File(label="Generated Speech"),
164
  gr.Textbox(label="Text Output") # for text tasks
165
  ],
 
167
  description="Tibetan TTS available. Sanskrit supported for text processing only."
168
  )
169
 
170
+
171
  # Use gr.File for output
172
  #iface = gr.Interface(
173
  # fn=tts_tibetan,