the / app.py
Austin Stockbridge
Update app.py
122221c verified
from huggingface_hub import hf_hub_list, hf_hub_download
from transformers import AutoModel, AutoTokenizer
import gradio as gr
# Hugging Face repository
model_repo = "mradermacher/Qwen2-2B-RepleteCoder-DHM-GGUF"
# Step 1: List and filter GGUF files with 'Q2_K'
def find_q2_k_files(repo_id):
files = hf_hub_list(repo_id)
q2_k_files = [file for file in files if "Q2_K" in file.filename and file.filename.endswith(".gguf")]
if not q2_k_files:
raise ValueError(f"No files containing 'Q2_K' found in the repository {repo_id}.")
return q2_k_files
# Step 2: Load model and tokenizer
def load_q2_k_model(repo_id, filename):
model_path = hf_hub_download(repo_id, filename)
model = AutoModel.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
return model, tokenizer
# Step 3: Chatbot logic
def chat(messages, model, tokenizer):
# Chat template formatting
input_text = ""
for i, message in enumerate(messages):
if i == 0 and message['role'] != 'system':
input_text += "<|im_start|>system You are a helpful assistant<|im_end|> "
input_text += f"<|im_start|>{message['role']} {message['content']}<|im_end|> "
input_text += "<|im_start|>assistant "
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
# Step 4: Gradio Interface
def chatbot_interface(selected_file, chat_history):
# Load model dynamically
model, tokenizer = load_q2_k_model(model_repo, selected_file)
response = chat(chat_history, model, tokenizer)
chat_history.append({"role": "assistant", "content": response})
return chat_history, chat_history
# Step 5: Build the UI
q2_k_files = find_q2_k_files(model_repo)
file_options = [file.filename for file in q2_k_files]
with gr.Blocks() as demo:
gr.Markdown("# Hugging Face Q2_K Chatbot")
model_selector = gr.Dropdown(choices=file_options, label="Select Model File")
chat_history = gr.State([])
chatbot = gr.Chatbot()
user_input = gr.Textbox(label="Your Message")
send_button = gr.Button("Send")
# Update chat history
def update_chat(history, user_message, selected_file):
history.append({"role": "user", "content": user_message})
return chatbot_interface(selected_file, history)
send_button.click(
update_chat,
inputs=[chat_history, user_input, model_selector],
outputs=[chatbot, chat_history]
)
demo.launch()