Spaces:
Build error
Build error
File size: 3,952 Bytes
b605eca ace9aa6 b605eca ace9aa6 b605eca ace9aa6 5e78dce ace9aa6 b605eca ace9aa6 b605eca ace9aa6 b605eca ace9aa6 b605eca 8804405 2f54e99 8804405 ace9aa6 b605eca ace9aa6 8804405 ace9aa6 b605eca ace9aa6 b605eca ace9aa6 4e441f5 7da89d6 b605eca ace9aa6 d76e7c4 2153e72 b605eca 2153e72 8804405 |
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 |
import gradio as gr
import yaml
from joeynmt.prediction import load_params_for_prediction,translate
from huggingface_hub import hf_hub_download
language_map = {'English':'en','Swahili':'sw','Fon':'fon','Igbo':'ig',
'Arabic':'ar','Shona':'sn','Ẹ̀dó':'bin','Hausa':'ha',
'Efik':'efi','Twi':'twi','Afrikaans':'af','Yoruba':'yo'}
available_languages =list(language_map.keys())
def load_config(path="configs/default.yaml") -> dict:
"""
CODE ADAPTED FROM: https://github.com/joeynmt/joeynmt
Loads and parses a YAML configuration file.
:param path: path to YAML configuration file
:return: configuration dictionary
"""
with open(path, 'r', encoding="utf-8") as ymlfile:
cfg = yaml.safe_load(ymlfile)
return cfg
def load_model(source_language_,target_language_):
source_language = language_map[source_language_]
target_language = language_map[target_language_]
#source_language = 'en'
#target_language = 'sw'
translation_dir = 'main'
try:
file_yaml = hf_hub_download("chrisjay/masakhane_benchmarks", filename=f"{source_language}-{target_language}/{translation_dir}/config.yaml",force_filename='config.yaml')
src_vocab = hf_hub_download("chrisjay/masakhane_benchmarks", filename=f"{source_language}-{target_language}/{translation_dir}/src_vocab.txt")
trg_vocab = hf_hub_download("chrisjay/masakhane_benchmarks", filename=f"{source_language}-{target_language}/{translation_dir}/trg_vocab.txt")
best_ckpt = hf_hub_download("chrisjay/masakhane_benchmarks", filename=f"{source_language}-{target_language}/{translation_dir}/best.ckpt")
except Exception:
raise Exception(f'It seems we do not have a working configuration yet repo for {source_language} -> {target_language}. \n You could help us by creating it here: https://huggingface.co/chrisjay/masakhane_benchmarks/tree/main')
parsed_yaml_file = load_config(file_yaml)
parsed_yaml_file['data']['src_vocab']=src_vocab
parsed_yaml_file['data']['trg_vocab']=trg_vocab
params = load_params_for_prediction(parsed_yaml_file,best_ckpt)
return params
#Using global params for English and Swahili to save time taken to load them
params = load_model('English','Swahili')
def get_translation(source_language,target_language,source_sentence=None,source_file=None):
'''
This takes a sentence and gets the translation.
type_=2 tells joeynmt translate that it should expect a sentence.
'''
source = source_sentence
type_=2
if source_file!=None:
type_=1
source = source_file.name
try:
#params = load_model(source_language,target_language) #Using global params for English and Swahili to save time taken to load them
pred = translate(params,source,type_)
except Exception:
return 'There was an issue loading the translation model for this language pair.'
return pred[0] if source_file==None else pred
title = "Interact with Masakhane Benchmark Models"
description = "This is a demo to enable you interact with some of the Masakhane Benchmark Models"
iface = gr.Interface(fn=get_translation,
inputs=[gr.inputs.Dropdown(choices = available_languages,default='English'),
gr.inputs.Dropdown(choices = available_languages,default='Swahili'),
gr.inputs.Textbox(label="Input"),
gr.inputs.File(file_count="single", type="file", label='File with sentences', optional=True)],
outputs=gr.outputs.Textbox(type="auto", label='Translation'),
title=title,
description=description,
examples=[
['English','Swahili'],
['English','Afrikaans'],['English','Arabic'],['Efik','English'],['English','Hausa'],
['English','Igbo'],['English','Fon'],['English','Twi'],['Shona','English'],['Swahili','English'],
['Yoruba','English']],
enable_queue=True,
theme='huggingface')
iface.launch()
|