# Somali Chatbot with Translation + English Chatbot using Gradio import gradio as gr from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline, AutoModelForCausalLM import torch # Load Translation Model: facebook/nllb-200-3.3B trans_model = "facebook/nllb-200-3.3B" trans_tokenizer = AutoTokenizer.from_pretrained(trans_model) trans_model_loaded = AutoModelForSeq2SeqLM.from_pretrained(trans_model) def translate(text, src_lang, tgt_lang): translator = pipeline("translation", model=trans_model_loaded, tokenizer=trans_tokenizer, src_lang=src_lang, tgt_lang=tgt_lang, max_length=512) return translator(text)[0]['translation_text'] # Load Chatbot Model: meta-llama/Meta-Llama-3-8B-Instruct chatbot_model_name = "meta-llama/Meta-Llama-3-8B-Instruct" chatbot_tokenizer = AutoTokenizer.from_pretrained(chatbot_model_name) chatbot_model = AutoModelForCausalLM.from_pretrained( chatbot_model_name, torch_dtype=torch.float16, device_map="auto") def ask_chatbot(prompt): input_ids = chatbot_tokenizer.encode(prompt, return_tensors="pt").to(chatbot_model.device) with torch.no_grad(): output = chatbot_model.generate(input_ids, max_new_tokens=256, do_sample=True, temperature=0.7) return chatbot_tokenizer.decode(output[0], skip_special_tokens=True) # Full pipeline function def somali_chatbot_pipeline(somali_input): # Step 1: Somali -> English english_input = translate(somali_input, src_lang="som_Latn", tgt_lang="eng_Latn") # Step 2: Ask English chatbot chatbot_response = ask_chatbot(english_input) # Step 3: English -> Somali somali_output = translate(chatbot_response, src_lang="eng_Latn", tgt_lang="som_Latn") return somali_output # Gradio Interface (with submit button) def build_interface(): with gr.Blocks() as demo: gr.Markdown(""" # 🤖 Chatbot Soomaaliyeed Qor su'aal Af Soomaali ah. Nidaamku wuxuu si qarsoodi ah ugu rogaa luqadda Ingiriisiga, ka dib wuxuu weydiiyaa chatbot English ah, kadibna jawaabta wuxuu kuu soo celinayaa Af Soomaali. """) with gr.Row(): somali_input = gr.Textbox(label="Su’aashaada Af Soomaali", placeholder="Maxaa keena macaanka?", lines=3) with gr.Row(): submit_btn = gr.Button("Dir Su’aasha") with gr.Row(): somali_output = gr.Textbox(label="Jawaabta Chatbot-ka (Af Soomaali)", lines=5) submit_btn.click(fn=somali_chatbot_pipeline, inputs=somali_input, outputs=somali_output) return demo if __name__ == "__main__": iface = build_interface() iface.launch()