Somalitts commited on
Commit
8a9cb69
·
verified ·
1 Parent(s): 146837b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +86 -11
app.py CHANGED
@@ -1,16 +1,91 @@
1
- import gradio as gr
2
- from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
 
3
 
4
- model_id = "Somalitts/XUSEEN" # ama magaca saxda ah ee modelkaaga
 
 
5
 
6
- tokenizer = AutoTokenizer.from_pretrained(model_id)
7
- model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
8
- pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
 
9
 
10
- def generate(prompt):
11
- output = pipe(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)
12
- return output[0]["generated_text"]
 
 
 
 
 
 
13
 
14
- demo = gr.Interface(fn=generate, inputs="text", outputs="text", title="Somali LLM")
 
 
15
 
16
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Somali TTS • Hugging Face Space
2
+ # Author: <Your‑Name>
3
+ # Model : Somalitts/xuseen (Orpheus‑style SNAC)
4
 
5
+ import os, torch, gradio as gr, torchaudio.transforms as T
6
+ from unsloth import FastLanguageModel
7
+ from snac import SNAC
8
 
9
+ # ------------------------------------------------------------------
10
+ # 0. Environment ‑ for HF Spaces (better memory use)
11
+ os.environ["BITSANDBYTES_NOWELCOME"] = "1"
12
+ device = "cuda" if torch.cuda.is_available() else "cpu"
13
 
14
+ # ------------------------------------------------------------------
15
+ # 1. Load LLM (4‑bit) + Tokenizer
16
+ MODEL_ID = "Somalitts/XUSEEN" # <- beddel haddii loo baahdo
17
+ model, tokenizer = FastLanguageModel.from_pretrained(
18
+ model_name = MODEL_ID,
19
+ load_in_4bit = True,
20
+ max_seq_length = 4096,
21
+ )
22
+ FastLanguageModel.for_inference(model) # 2× speed
23
 
24
+ # ------------------------------------------------------------------
25
+ # 2. Load SNAC decoder (24 kHz)
26
+ snac = SNAC.from_pretrained("hubertsiuzdak/snac_24khz").to(device)
27
 
28
+ # Special‑tokens (waa ku dhex jira Somalitts models)
29
+ AUDIO_START = 128266
30
+ END_TEXT = 128009
31
+ SOH, EOH = 128259, 128260
32
+ SOS, EOS = 128257, 128258 # AUDIO_START‑128256+{1,2}
33
+
34
+ @torch.inference_mode()
35
+ def tts_somali(text: str):
36
+ """Generate speech waveform (24 kHz, numpy) from Somali text."""
37
+ if not text.strip():
38
+ return 24_000, None
39
+
40
+ # ───── Build prompt ─────
41
+ prompt_ids = tokenizer.encode(text, add_special_tokens=True) + [END_TEXT]
42
+ input_ids = torch.tensor([[SOH] + prompt_ids + [EOH]], dtype=torch.int64).to(device)
43
+
44
+ # ───── Generate audio codes ─────
45
+ gen = model.generate(
46
+ input_ids = input_ids,
47
+ max_new_tokens = 1200,
48
+ do_sample = True,
49
+ temperature = 0.7,
50
+ top_p = 0.95,
51
+ eos_token_id = EOS,
52
+ )[0]
53
+
54
+ # ───── Extract 7‑code tuples & distribute to 3 layers ─────
55
+ s_idx = (gen == SOS).nonzero(as_tuple=True)[0] + 1
56
+ e_idx = (gen == EOS).nonzero(as_tuple=True)[0]
57
+ codes = (gen[s_idx:e_idx] - AUDIO_START).tolist()
58
+ codes = codes[: (len(codes) // 7) * 7] # multiple‑of‑7
59
+
60
+ l1, l2, l3 = [], [], []
61
+ for i in range(len(codes) // 7):
62
+ c = codes[7 * i : 7 * i + 7]
63
+ l1.append(c[0])
64
+ l2.append(c[1] - 4096)
65
+ l2.append(c[4] - 16384)
66
+ l3.extend([c[2] - 8192, c[3] - 12288, c[5] - 20480, c[6] - 24576])
67
+
68
+ codes_torch = [torch.tensor(l).unsqueeze(0).to(device) for l in (l1, l2, l3)]
69
+ audio = snac.decode(codes_torch)
70
+ return 24_000, audio.squeeze().cpu().numpy()
71
+
72
+ # ------------------------------------------------------------------
73
+ # 3. Gradio UI
74
+ DESCRIPTION = """
75
+ <b>Somali Text‑to‑Speech</b><br>
76
+ Ku qor qoraal Af‑Soomaali ah oo gaaban (<i>≤ 200 eray</i>) si aad u maqasho cod nadiif ah 24 kHz.
77
+ """
78
+
79
+ demo = gr.Interface(
80
+ fn = tts_somali,
81
+ inputs = gr.Textbox(lines=4, label="Qoraalkaaga halkan geli"),
82
+ outputs = gr.Audio(type="numpy", label="Codka la soo saar(24 kHz)"),
83
+ title = "Somali TTS – Xuseen",
84
+ description = DESCRIPTION,
85
+ theme = "default",
86
+ examples = ["Soomaaliya waxa ay leedahay xeebta ugu dheer Afrika.",
87
+ "Magaca caasimadda Soomaaliya waa Muqdisho."],
88
+ )
89
+
90
+ if __name__ == "__main__":
91
+ demo.launch()