web-interface / app.py
zhaoyi3264
Add multilingual support
6235bf0
import os
import gradio as gr
import requests
API_TOKEN = os.environ['API_TOKEN']
G_TRANS_API_TOKEN = os.environ['G_TRANS_API_TOKEN']
API_URL = 'https://api-inference.huggingface.co/models/{}'
G_TRANS_API = 'https://translation.googleapis.com/language/translate/v2'
headers = {'Authorization': f'Bearer {API_TOKEN}'}
def detect_lang(message):
response = requests.get(G_TRANS_API+'/detect', params={'key': G_TRANS_API_TOKEN, 'q': message})
return response.json()
def translate_src_to_en(message, src_lang):
response = requests.get(G_TRANS_API, params={'key': G_TRANS_API_TOKEN, 'source': src_lang, 'target': 'en', 'q': message})
return response.json()
def translate_en_to_src(message, src_lang):
response = requests.get(G_TRANS_API, params={'key': G_TRANS_API_TOKEN, 'source': 'en', 'target': src_lang, 'q': message})
return response.json()
def query_model(model_id, payload):
response = requests.post(API_URL.format(model_id), headers=headers, json=payload)
return response.json()
def parse_model_response(response):
return response[0]['generated_text']
def parse_model_error(response):
return f'{response["error"]}. Please wait about {int(response["estimated_time"])} seconds.'
def parse_translation_response(response):
return response['data']['translations'][0]['translatedText']
def query_model(model_id, payload):
response = requests.post(API_URL.format(model_id), headers=headers, json=payload)
return response.json()
state = []
def chat(message, multi):
message_en = message
if multi:
response = detect_lang(message)
lang = response['data']['detections'][0][0]['language'][:2]
if lang != 'en':
response = translate_src_to_en(message, lang)
message_en = parse_translation_response(response)
response = query_model('IssakaAI/health-chatbot', {
'inputs': message_en,
'parameters': {
'max_length': 500,
}
})
reply = ''
if isinstance(response, list):
reply = parse_model_response(response)[len(message_en) + 1:]
if multi and lang != 'en':
response = translate_en_to_src(reply, lang)
reply = parse_translation_response(response)
elif isinstance(response, dict):
reply = parse_model_error(response)
state.append((message, reply))
return gr.Textbox.update(value=''), state
def clear_message():
state.clear()
return gr.Chatbot.update(value=[])
with gr.Blocks() as blk:
gr.Markdown('# Interact with IssakaAI NLP models')
with gr.Row():
chatbot = gr.Chatbot()
with gr.Box():
message = gr.Textbox(value='What is the menstrual cycle?', lines=10)
multi = gr.Checkbox(False, label='Multilingual chatbot')
send = gr.Button('Send', variant='primary')
clear = gr.Button('Clear history', variant='secondary')
send.click(fn=chat, inputs=[message, multi], outputs=[message, chatbot])
clear.click(fn=clear_message, inputs=[], outputs=chatbot)
blk.launch(debug=True)