Spaces:
Build error
Build error
| import subprocess | |
| import os | |
| import warnings | |
| warnings.filterwarnings("ignore", message="The installed version of bitsandbytes was compiled without GPU support") | |
| warnings.filterwarnings("ignore", message="Setting share=True is not supported on Hugging Face Spaces") | |
| # Install packages using subprocess | |
| subprocess.run(["pip", "install", "transformers", "torch"], check=True) | |
| import torch | |
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| from typing import List, Optional, Tuple, Dict | |
| # Set up default system prompt and history/message structures | |
| default_system = 'You are Andrej Karpathy, the most helpful coding assistant and solves everything with working code.' | |
| History = List[Tuple[str, str]] | |
| Messages = List[Dict[str, str]] | |
| # Clear the chat session | |
| def clear_session() -> History: | |
| return '', [] | |
| # Modify the chat system's prompt | |
| def modify_system_session(system: str) -> Tuple[str, str, History]: | |
| if not system: | |
| system = default_system | |
| return system, system, [] | |
| # Convert the history of messages into a format suitable for model input | |
| def history_to_messages(history: History, system: str) -> Messages: | |
| messages = [{'role': 'system', 'content': system}] | |
| for user_msg, assistant_msg in history: | |
| messages.append({'role': 'user', 'content': user_msg}) | |
| messages.append({'role': 'assistant', 'content': assistant_msg}) | |
| return messages | |
| # Convert messages back into a history format after model processing | |
| def messages_to_history(messages: Messages) -> Tuple[str, History]: | |
| system = messages[0]['content'] | |
| history = [(msg['content'], messages[i+1]['content']) for i, msg in enumerate(messages[1:-1:2])] | |
| return system, history | |
| # Handle the chat interaction, including processing the input and generating a response | |
| def model_chat(query: str, history: History, system: str) -> Tuple[str, History, str]: | |
| messages = history_to_messages(history, system) | |
| messages.append({'role': 'user', 'content': query}) | |
| device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | |
| model_name = "codeqwen1.5-7b-chat" | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForCausalLM.from_pretrained(model_name).to(device) | |
| inputs = tokenizer(query, return_tensors="pt").to(device) | |
| outputs = model.generate(inputs.input_ids, max_length=100, pad_token_id=tokenizer.eos_token_id) | |
| response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| system, history = messages_to_history(messages + [{'role': 'assistant', 'content': response}]) | |
| return '', history, system | |
| # Setting up the Gradio interface | |
| with gr.Blocks() as demo: | |
| gr.Markdown("""<center><font size=8>CodeQwen1.5-7B-Chat Bot👾</center>""") | |
| with gr.Row(): | |
| with gr.Column(scale=3): | |
| system_input = gr.Textbox(value=default_system, lines=1, label='System') | |
| with gr.Column(scale=1): | |
| modify_system = gr.Button("🛠️ Set system prompt and clear history", scale=2) | |
| system_state = gr.State(value=default_system) | |
| chatbot = gr.Chatbot(label='codeqwen1.5-7b-chat') | |
| textbox = gr.Textbox(lines=2, label='Input') | |
| with gr.Row(): | |
| clear_history = gr.Button("🧹 Clear History") | |
| submit = gr.Button("🚀 Send") | |
| submit.click(model_chat, | |
| inputs=[textbox, chatbot, system_state], | |
| outputs=[textbox, chatbot, system_state]) | |
| clear_history.click(fn=clear_session, | |
| inputs=[], | |
| outputs=[textbox, chatbot]) | |
| modify_system.click(fn=modify_system_session, | |
| inputs=[system_input], | |
| outputs=[system_state, system_input, chatbot]) | |
| demo.queue(api_open=False) | |
| demo.launch(max_threads=30) |