Spaces:
Runtime error
Runtime error
| # import gradio as gr | |
| # from transformers import AutoTokenizer, AutoModelForCausalLM | |
| # from peft import PeftModel, PeftConfig | |
| # import torch | |
| # # Model paths | |
| # ADAPTER_MODEL = "Ephraimmm/pdgn_llama_model" | |
| # print("Loading LoRA adapter configuration...") | |
| # peft_config = PeftConfig.from_pretrained(ADAPTER_MODEL) | |
| # BASE_MODEL = peft_config.base_model_name_or_path | |
| # print(f"Base model: {BASE_MODEL}") | |
| # print(f"Adapter model: {ADAPTER_MODEL}") | |
| # print("\nLoading tokenizer...") | |
| # tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True) | |
| # if tokenizer.pad_token is None: | |
| # tokenizer.pad_token = tokenizer.eos_token | |
| # print("Loading base model...") | |
| # base_model = AutoModelForCausalLM.from_pretrained( | |
| # BASE_MODEL, | |
| # dtype=torch.float16 if torch.cuda.is_available() else torch.float32, | |
| # device_map="auto" if torch.cuda.is_available() else None, | |
| # low_cpu_mem_usage=True, | |
| # trust_remote_code=True | |
| # ) | |
| # print("Loading LoRA adapter...") | |
| # model = PeftModel.from_pretrained(base_model, ADAPTER_MODEL) | |
| # model.eval() | |
| # print("Model loaded successfully!") | |
| # def chat_with_pidgin_bot(message, history, system_prompt, max_length=512, temperature=0.7, top_p=0.9): | |
| # conversation = f"System: {system_prompt}\n\n" if system_prompt else "" | |
| # for user_msg, bot_msg in history: | |
| # conversation += f"User: {user_msg}\nAssistant: {bot_msg}\n" | |
| # conversation += f"User: {message}\nAssistant:" | |
| # inputs = tokenizer(conversation, return_tensors="pt", truncation=True, max_length=2048) | |
| # if torch.cuda.is_available(): | |
| # inputs = inputs.to("cuda") | |
| # with torch.no_grad(): | |
| # outputs = model.generate( | |
| # **inputs, | |
| # max_new_tokens=max_length, | |
| # temperature=temperature, | |
| # top_p=top_p, | |
| # do_sample=True, | |
| # pad_token_id=tokenizer.eos_token_id, | |
| # eos_token_id=tokenizer.eos_token_id, | |
| # ) | |
| # response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| # response = response.split("Assistant:")[-1].strip() | |
| # if "User:" in response: | |
| # response = response.split("User:")[0].strip() | |
| # return response | |
| # custom_css = """ | |
| # #chatbot { | |
| # height: 500px; | |
| # } | |
| # """ | |
| # with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo: | |
| # gr.Markdown( | |
| # """ | |
| # # Pidgin LLaMA Chatbot | |
| # ### Chat with an AI trained on Nigerian Pidgin English | |
| # This chatbot uses a LoRA fine-tuned model for Nigerian Pidgin. | |
| # """ | |
| # ) | |
| # chatbot = gr.Chatbot(label="Pidgin Chat", elem_id="chatbot") | |
| # with gr.Row(): | |
| # msg = gr.Textbox(label="Your Message", placeholder="Type your message here...", scale=4) | |
| # send_btn = gr.Button("Send", scale=1, variant="primary") | |
| # with gr.Accordion("System Prompt", open=True): | |
| # system_prompt = gr.Textbox( | |
| # label="System Instructions", | |
| # value="You are a helpful AI assistant that speaks Nigerian Pidgin English. You are friendly, respectful, and knowledgeable about Nigerian culture.", | |
| # lines=4 | |
| # ) | |
| # with gr.Row(): | |
| # preset1 = gr.Button("Comedian") | |
| # preset2 = gr.Button("Teacher") | |
| # preset3 = gr.Button("Friend") | |
| # preset4 = gr.Button("Professional") | |
| # with gr.Accordion("Advanced Settings", open=False): | |
| # max_length = gr.Slider(50, 1024, 512, step=50, label="Max Response Length") | |
| # temperature = gr.Slider(0.1, 2.0, 0.7, step=0.1, label="Temperature") | |
| # top_p = gr.Slider(0.1, 1.0, 0.9, step=0.05, label="Top P") | |
| # clear = gr.Button("Clear Chat") | |
| # def respond(message, chat_history, sys_prompt, max_len, temp, top_p_val): | |
| # bot_message = chat_with_pidgin_bot(message, chat_history, sys_prompt, max_len, temp, top_p_val) | |
| # chat_history.append((message, bot_message)) | |
| # return "", chat_history | |
| # def set_preset(preset_type): | |
| # presets = { | |
| # "comedian": "You are a Nigerian comedian who speaks Pidgin. Make people laugh with witty responses.", | |
| # "teacher": "You are a patient teacher who speaks Nigerian Pidgin. Explain things clearly.", | |
| # "friend": "You are a caring friend who speaks Nigerian Pidgin. Give good advice.", | |
| # "professional": "You are a professional consultant who speaks Nigerian Pidgin. Provide practical advice." | |
| # } | |
| # return presets.get(preset_type, "") | |
| # msg.submit(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot]) | |
| # send_btn.click(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot]) | |
| # preset1.click(lambda: set_preset("comedian"), None, system_prompt) | |
| # preset2.click(lambda: set_preset("teacher"), None, system_prompt) | |
| # preset3.click(lambda: set_preset("friend"), None, system_prompt) | |
| # preset4.click(lambda: set_preset("professional"), None, system_prompt) | |
| # clear.click(lambda: None, None, chatbot, queue=False) | |
| # if __name__ == "__main__": | |
| # demo.launch(share=True) | |
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| from peft import PeftModel, PeftConfig | |
| import torch | |
| # Model paths | |
| ADAPTER_MODEL = "Ephraimmm/pdgn_llama_model" | |
| # Load LoRA adapter and base model | |
| peft_config = PeftConfig.from_pretrained(ADAPTER_MODEL) | |
| BASE_MODEL = peft_config.base_model_name_or_path | |
| tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True) | |
| if tokenizer.pad_token is None: | |
| tokenizer.pad_token = tokenizer.eos_token | |
| base_model = AutoModelForCausalLM.from_pretrained( | |
| BASE_MODEL, | |
| dtype=torch.float16 if torch.cuda.is_available() else torch.float32, | |
| device_map="auto" if torch.cuda.is_available() else None, | |
| low_cpu_mem_usage=True, | |
| trust_remote_code=True | |
| ) | |
| model = PeftModel.from_pretrained(base_model, ADAPTER_MODEL) | |
| model.eval() | |
| # Chat generation | |
| def chat_with_pidgin_bot(message, history, system_prompt, max_length=512, temperature=0.7, top_p=0.9): | |
| conversation = f"System: {system_prompt}\n\n" if system_prompt else "" | |
| for user_msg, bot_msg in history: | |
| conversation += f"User: {user_msg}\nAssistant: {bot_msg}\n" | |
| conversation += f"User: {message}\nAssistant:" | |
| inputs = tokenizer(conversation, return_tensors="pt", truncation=True, max_length=2048) | |
| if torch.cuda.is_available(): | |
| inputs = inputs.to("cuda") | |
| with torch.no_grad(): | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=max_length, | |
| temperature=temperature, | |
| top_p=top_p, | |
| do_sample=True, | |
| pad_token_id=tokenizer.eos_token_id, | |
| eos_token_id=tokenizer.eos_token_id, | |
| ) | |
| response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| response = response.split("Assistant:")[-1].split("User:")[0].strip() | |
| return response | |
| # Gradio UI (without css argument) | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown( | |
| """ | |
| # Pidgin LLaMA Chatbot | |
| Chat with an AI trained on Nigerian Pidgin English. | |
| """ | |
| ) | |
| chatbot = gr.Chatbot(label="Pidgin Chat", elem_id="chatbot") | |
| msg = gr.Textbox(label="Your Message", placeholder="Type your message here...", scale=4) | |
| send_btn = gr.Button("Send", scale=1, variant="primary") | |
| with gr.Accordion("System Prompt", open=True): | |
| system_prompt = gr.Textbox( | |
| label="System Instructions", | |
| value="You are a helpful AI assistant that speaks Nigerian Pidgin English. Be friendly and respectful.", | |
| lines=4 | |
| ) | |
| preset1 = gr.Button("Comedian") | |
| preset2 = gr.Button("Teacher") | |
| preset3 = gr.Button("Friend") | |
| preset4 = gr.Button("Professional") | |
| with gr.Accordion("Advanced Settings", open=False): | |
| max_length = gr.Slider(50, 1024, 512, step=50, label="Max Response Length") | |
| temperature = gr.Slider(0.1, 2.0, 0.7, step=0.1, label="Temperature") | |
| top_p = gr.Slider(0.1, 1.0, 0.9, step=0.05, label="Top P") | |
| clear = gr.Button("Clear Chat") | |
| # Respond function | |
| def respond(message, chat_history, sys_prompt, max_len, temp, top_p_val): | |
| bot_message = chat_with_pidgin_bot(message, chat_history, sys_prompt, max_len, temp, top_p_val) | |
| chat_history.append((message, bot_message)) | |
| return "", chat_history | |
| # Presets function | |
| def set_preset(preset_type): | |
| presets = { | |
| "comedian": "You are a Nigerian comedian who speaks Pidgin. Make people laugh with witty responses.", | |
| "teacher": "You are a patient teacher who speaks Pidgin. Explain things clearly.", | |
| "friend": "You are a caring friend who speaks Pidgin. Give good advice.", | |
| "professional": "You are a professional consultant who speaks Pidgin. Provide practical advice." | |
| } | |
| return presets.get(preset_type, "") | |
| # Events | |
| msg.submit(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot]) | |
| send_btn.click(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot]) | |
| preset1.click(lambda: set_preset("comedian"), None, system_prompt) | |
| preset2.click(lambda: set_preset("teacher"), None, system_prompt) | |
| preset3.click(lambda: set_preset("friend"), None, system_prompt) | |
| preset4.click(lambda: set_preset("professional"), None, system_prompt) | |
| clear.click(lambda: None, None, chatbot, queue=False) | |
| if __name__ == "__main__": | |
| demo.launch(share=True) | |