Spaces:
Sleeping
Sleeping
| import spaces | |
| import gradio as gr | |
| from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig | |
| import torch | |
| MODEL_ID = "IQuestLab/IQuest-Coder-V1-40B-Loop-Instruct" | |
| print("Loading tokenizer...") | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True) | |
| print("Loading model with 4-bit quantization...") | |
| bnb_config = BitsAndBytesConfig( | |
| load_in_4bit=True, | |
| bnb_4bit_quant_type="nf4", | |
| bnb_4bit_compute_dtype=torch.bfloat16, | |
| bnb_4bit_use_double_quant=True, | |
| ) | |
| model = AutoModelForCausalLM.from_pretrained( | |
| MODEL_ID, | |
| trust_remote_code=True, | |
| quantization_config=bnb_config, | |
| device_map="cuda", | |
| ) | |
| model.eval() | |
| print("Model loaded.") | |
| def generate(message, history, system_prompt, max_tokens, temperature, top_p): | |
| messages = [{"role": "system", "content": system_prompt}] | |
| for user_msg, assistant_msg in history: | |
| messages.append({"role": "user", "content": user_msg}) | |
| if assistant_msg: | |
| messages.append({"role": "assistant", "content": assistant_msg}) | |
| messages.append({"role": "user", "content": message}) | |
| text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) | |
| inputs = tokenizer(text, return_tensors="pt").to(model.device) | |
| with torch.no_grad(): | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=max_tokens, | |
| temperature=temperature, | |
| top_p=top_p, | |
| do_sample=True, | |
| ) | |
| response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True) | |
| return response | |
| with gr.Blocks(title="IQuest LoopCoder 40B", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown("# IQuest LoopCoder V1 40B\n40B params, loop architecture, 4-bit quantized for GPU inference.") | |
| with gr.Row(): | |
| with gr.Column(scale=3): | |
| chatbot = gr.Chatbot(height=500, label="Chat") | |
| msg = gr.Textbox(placeholder="Ask something...", label="Message", lines=2) | |
| with gr.Row(): | |
| submit = gr.Button("Send", variant="primary") | |
| clear = gr.Button("Clear") | |
| with gr.Column(scale=1): | |
| system_prompt = gr.Textbox( | |
| value="You are LoopCoder, a helpful assistant developed by IQuest.", | |
| label="System prompt", | |
| lines=3, | |
| ) | |
| max_tokens = gr.Slider(64, 8192, value=2048, step=64, label="Max tokens") | |
| temperature = gr.Slider(0.0, 2.0, value=0.3, step=0.05, label="Temperature") | |
| top_p = gr.Slider(0.1, 1.0, value=0.9, step=0.05, label="Top P") | |
| def respond(message, chat_history, sys_prompt, max_tok, temp, top): | |
| response = generate(message, chat_history, sys_prompt, max_tok, temp, top) | |
| chat_history.append((message, response)) | |
| return "", chat_history | |
| msg.submit(respond, [msg, chatbot, system_prompt, max_tokens, temperature, top_p], [msg, chatbot]) | |
| submit.click(respond, [msg, chatbot, system_prompt, max_tokens, temperature, top_p], [msg, chatbot]) | |
| clear.click(lambda: ([], ""), outputs=[chatbot, msg]) | |
| demo.launch() | |