File size: 3,221 Bytes
024fe98
 
baecb1b
 
024fe98
baecb1b
 
 
 
024fe98
baecb1b
 
 
 
024fe98
baecb1b
 
 
 
 
 
 
 
 
 
 
 
 
024fe98
5213619
baecb1b
024fe98
baecb1b
 
 
024fe98
baecb1b
024fe98
baecb1b
 
a1689f4
baecb1b
 
a1689f4
baecb1b
 
 
 
 
 
 
 
 
5213619
 
baecb1b
 
 
5213619
 
baecb1b
 
 
 
 
 
 
 
4655661
024fe98
baecb1b
 
024fe98
 
baecb1b
024fe98
baecb1b
4655661
baecb1b
 
 
 
 
55a3261
 
 
 
baecb1b
024fe98
4655661
 
baecb1b
 
 
 
 
024fe98
baecb1b
 
 
 
 
 
 
 
777ccbc
baecb1b
 
777ccbc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# app.py
# =============
# This is a complete app.py file for a text generation app using the Qwen/Qwen2.5-Coder-0.5B-Instruct model.
# The app uses the Gradio library to create a web interface for interacting with the model.

# Imports
# =======
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer

# Constants
# =========
MODEL_NAME = "Qwen/Qwen2.5-Coder-0.5B-Instruct"
SYSTEM_MESSAGE = "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."

# Load Model and Tokenizer
# ========================
def load_model_and_tokenizer():
    """
    Load the model and tokenizer from Hugging Face.
    """
    tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
    model = AutoModelForCausalLM.from_pretrained(
        MODEL_NAME,
        torch_dtype="auto",
        device_map="cpu"  # Ensure the model runs on the CPU
    )
    return model, tokenizer

# Ensure the model and tokenizer are loaded
model, tokenizer = load_model_and_tokenizer()

# Generate Response
# =================
def generate_response(prompt, chat_history):
    """
    Generate a response from the model based on the user prompt and chat history.
    """
    messages = [{"role": "system", "content": SYSTEM_MESSAGE}] + chat_history + [{"role": "user", "content": prompt}]
    text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )
    model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

    generated_ids = model.generate(
        **model_inputs,
        max_new_tokens=512,
        do_sample=True,
        top_k=50,
        top_p=0.95,
        temperature=0.7,
        output_scores=True,
        return_dict_in_generate=True
    )

    response = ""
    for token_id in generated_ids.sequences[0][len(model_inputs.input_ids[0]):]:
        response += tokenizer.decode([token_id], skip_special_tokens=True)
        yield response

# Clear Chat History
# ==================
def clear_chat():
    """
    Clear the chat history.
    """
    return []

# Gradio Interface
# =================
def gradio_interface():
    """
    Create and launch the Gradio interface.
    """
    with gr.Blocks() as demo:
        chatbot = gr.Chatbot(label="Chat with Qwen/Qwen2.5-Coder-0.5B-Instruct", type="messages")
        msg = gr.Textbox(label="User Input")
        clear = gr.Button("Clear Chat")

        def respond(message, chat_history):
            chat_history.append({"role": "user", "content": message})
            response = ""
            for chunk in generate_response(message, chat_history):
                response = chunk
                yield chat_history + [{"role": "assistant", "content": response}]
            chat_history.append({"role": "assistant", "content": response})

        msg.submit(respond, [msg, chatbot], [chatbot])
        clear.click(clear_chat, None, [chatbot])

    demo.launch()

# Main
# ====
if __name__ == "__main__":
    gradio_interface()

# Dependencies
# =============
# The following dependencies are required to run this app:
# - transformers
# - gradio
# - torch
# - accelerate
#
# You can install these dependencies using pip:
# pip install transformers gradio torch accelerate