Spaces:
Sleeping
Sleeping
File size: 7,526 Bytes
4a2c956 5833996 7c790c0 61b9ff7 59618c7 4643bb5 99d45f7 59618c7 7c790c0 3cb35fd 42e5f71 3cb35fd f787cc5 59618c7 3cb35fd 7c790c0 59618c7 3cb35fd a00d592 7c790c0 5833996 607417a 6373129 5833996 3cb35fd 5833996 040cd58 3cb35fd 7c790c0 5833996 7c790c0 5833996 6373129 5833996 3cb35fd ea2eccb 3cb35fd 7c790c0 e63ee0a ead50fe 5833996 29c4970 0b1be7c 5833996 0b1be7c 7c790c0 040cd58 5833996 040cd58 3cb35fd 5833996 3cb35fd 7c790c0 3cb35fd e63ee0a 3cb35fd 5833996 3cb35fd 5833996 3cb35fd 7c790c0 59618c7 e63ee0a 3cb35fd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 |
import gradio as gr
import os, gc, copy
from huggingface_hub import hf_hub_download
from pynvml import *
# Flag to check if GPU is present
HAS_GPU = False
# Model title and context size limit
ctx_limit = 2000
title = "RWKV-5-World-1B5-v2-Translator"
model_file = "RWKV-5-World-1B5-v2-20231025-ctx4096"
# Get the GPU count
try:
nvmlInit()
GPU_COUNT = nvmlDeviceGetCount()
if GPU_COUNT > 0:
HAS_GPU = True
gpu_h = nvmlDeviceGetHandleByIndex(0)
except NVMLError as error:
print(error)
os.environ["RWKV_JIT_ON"] = '1'
# Model strategy to use
MODEL_STRAT = "cpu bf16"
os.environ["RWKV_CUDA_ON"] = '0' # if '1' then use CUDA kernel for seq mode (much faster)
# Switch to GPU mode
if HAS_GPU:
os.environ["RWKV_CUDA_ON"] = '1'
MODEL_STRAT = "cuda bf16"
# Load the model
from rwkv.model import RWKV
model_path = hf_hub_download(repo_id="BlinkDL/rwkv-5-world", filename=f"{model_file}.pth")
model = RWKV(model=model_path, strategy=MODEL_STRAT)
from rwkv.utils import PIPELINE
pipeline = PIPELINE(model, "rwkv_vocab_v20230424")
# Precomputation of the state
def precompute_state(text):
state = None
text_encoded = pipeline.encode(text)
_, state = model.forward(text_encoded, state)
yield dict(state)
# Precomputing the base instruction set
INSTRUCT_PREFIX = f'''
The following is a set of instruction rules, that can translate spoken text to zombie speak. And vice visa.
# Zombie Speak Rules:
- Replace syllables with "uh" or "argh"
- Add "uh" and "argh" sounds between words
- Repeat words and letters, especially vowels
- Use broken grammar and omit small words like "the", "a", "is"
# To go from zombie speak back to English:
- Remove extra "uh" and "argh" sounds
- Replace repeated letters with one instance
- Add omitted small words like "the", "a", "is" back in
- Fix grammar and sentence structure
# Here are several examples:
## English:
"Hello my friend, how are you today?"
## Zombie:
"Hell-uh-argh myuh fruh-end, hargh-owuh argh yuh-uh toduh-ay?"
## Zombie:
"Brargh-ains argh-uh foo-duh"
## English:
"Brains are food"
## English:
"Good morning! How are you today? I hope you are having a nice day. The weather is supposed to be sunny and warm this afternoon. Maybe we could go for a nice walk together and stop to get ice cream. That would be very enjoyable. Well, I will talk to you soon!"
## Zombie:
"Guh-ood morngh-ing! Hargh-owuh argh yuh-uh toduh-ay? Iuh hargh-ope yuh-uh argh havi-uh-nguh nuh-ice duh-ay. Thuh-uh weath-uh-eruh izzuh suh-pose-duh tuh-uh beh sunn-eh an-duh war-muh thizuh aft-erng-oon. May-buh-uh weh coulduh gargh-oh fargh-oruh nuh-ice wal-guh-kuh toge-the-ruh an-duh stargh-op tuh-uh geh-etuh izz-creem. Tha-at wou-duh beh ve-reh uhn-joy-ab-buhl. Well, I wih-ll targh-alk tuh-uh yuh-oo soo-oon!"
'''
# Get the prefix state
PREFIX_STATE = precompute_state(INSTRUCT_PREFIX)
# Translation logic
def translate(text, target_language, inState=PREFIX_STATE):
prompt = f"Translate the following text to {target_language}\n # Input Text:\n{text}\n\n# Output Text:\n"
ctx = prompt.strip()
all_tokens = []
out_last = 0
out_str = ''
occurrence = {}
state = None
if inState != None:
state = dict(inState)
# Clear GC
gc.collect()
if HAS_GPU == True :
torch.cuda.empty_cache()
# Generate things token by token
for i in range(ctx_limit):
out, state = model.forward(pipeline.encode(ctx)[-ctx_limit:] if i == 0 else [token], state)
token = pipeline.sample_logits(out)
if token in [0]: # EOS token
break
all_tokens += [token]
tmp = pipeline.decode(all_tokens[out_last:])
if '\ufffd' not in tmp:
out_str += tmp
yield out_str.strip()
out_last = i + 1
if "# " in out_str and "\n#" in out_str :
out_str = out_str.split("\n## ")[0].split("\n# ")[0]
yield out_str.strip()
del out
del state
# # Clear GC
# gc.collect()
# if HAS_GPU == True :
# torch.cuda.empty_cache()
yield out_str.strip()
# Languages
LANGUAGES = [
"English",
"Zombie Speak",
"Chinese",
"Spanish",
"Bengali",
"Hindi",
"Portuguese",
"Russian",
"Japanese",
"German",
"Chinese (Wu)",
"Javanese",
"Korean",
"French",
"Vietnamese",
"Telugu",
"Chinese (Yue)",
"Marathi",
"Tamil",
"Turkish",
"Urdu",
"Chinese (Min Nan)",
"Chinese (Jin Yu)",
"Gujarati",
"Polish",
"Arabic (Egyptian Spoken)",
"Ukrainian",
"Italian",
"Chinese (Xiang)",
"Malayalam",
"Chinese (Hakka)",
"Kannada",
"Oriya",
"Panjabi (Western)",
"Panjabi (Eastern)",
"Sunda",
"Romanian",
"Bhojpuri",
"Azerbaijani (South)",
"Farsi (Western)",
"Maithili",
"Hausa",
"Arabic (Algerian Spoken)",
"Burmese",
"Serbo-Croatian",
"Chinese (Gan)",
"Awadhi",
"Thai",
"Dutch",
"Yoruba",
"Sindhi",
"Arabic (Moroccan Spoken)",
"Arabic (Saidi Spoken)",
"Uzbek, Northern",
"Malay",
"Amharic",
"Indonesian",
"Igbo",
"Tagalog",
"Nepali",
"Arabic (Sudanese Spoken)",
"Saraiki",
"Cebuano",
"Arabic (North Levantine Spoken)",
"Thai (Northeastern)",
"Assamese",
"Hungarian",
"Chittagonian",
"Arabic (Mesopotamian Spoken)",
"Madura",
"Sinhala",
"Haryanvi",
"Marwari",
"Czech",
"Greek",
"Magahi",
"Chhattisgarhi",
"Deccan",
"Chinese (Min Bei)",
"Belarusan",
"Zhuang (Northern)",
"Arabic (Najdi Spoken)",
"Pashto (Northern)",
"Somali",
"Malagasy",
"Arabic (Tunisian Spoken)",
"Rwanda",
"Zulu",
"Bulgarian",
"Swedish",
"Lombard",
"Oromo (West-central)",
"Pashto (Southern)",
"Kazakh",
"Ilocano",
"Tatar",
"Fulfulde (Nigerian)",
"Arabic (Sanaani Spoken)",
"Uyghur",
"Haitian Creole French",
"Azerbaijani, North",
"Napoletano-calabrese",
"Khmer (Central)",
"Farsi (Eastern)",
"Akan",
"Hiligaynon",
"Kurmanji",
"Shona"
]
# Example data
EXAMPLES = [
["Brargh-ains argh-uh foo-duh", "English"],
["I Want to eat your brains", "Zombie Speak"],
["Hello, how are you?", "French"],
["Hello, how are you?", "Spanish"],
["Hello, how are you?", "Chinese"],
["Bonjour, comment ça va?", "English"],
["Hola, ¿cómo estás?", "English"],
["你好吗?", "English"],
["Guten Tag, wie geht es Ihnen?", "English"],
["Привет, как ты?", "English"],
["مرحبًا ، كيف حالك؟", "English"],
]
# Gradio interface
with gr.Blocks(title=title) as demo:
gr.HTML(f"<div style=\"text-align: center;\"><h1>RWKV-5 World v2 - {title}</h1></div>")
gr.Markdown("This is the RWKV-5 World v2 1B5 model tailored for translation. With a halloween zombie speak twist")
# Input and output components
text = gr.Textbox(lines=5, label="Source Text", placeholder="Enter the text you want to translate...", default=EXAMPLES[0][0])
target_language = gr.Dropdown(choices=LANGUAGES, label="Target Language", default=EXAMPLES[0][1])
output = gr.Textbox(lines=5, label="Translated Text")
submit = gr.Button("Translate", variant="primary")
# Example data
data = gr.Dataset(components=[text, target_language], samples=EXAMPLES, label="Example Translations", headers=["Text", "Target Language"])
# Button action
submit.click(translate, [text, target_language], [output])
data.click(lambda x: x, [data], [text, target_language])
# Gradio launch
demo.queue(concurrency_count=1, max_size=10)
demo.launch(share=False) |