Wenye He commited on
Commit
9b42973
·
verified ·
1 Parent(s): 87c7b7d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -48
app.py CHANGED
@@ -1,16 +1,15 @@
1
  import gradio as gr
2
- import torch
3
  from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
 
4
 
5
- # Model configurations
6
  MODEL_CONFIG = {
7
- "llama": {
8
- "model_name": "meta-llama/Llama-2-7b-chat-hf",
9
- "template": "[INST] {message} [/INST]"
10
  },
11
- "phi": {
12
- "model_name": "microsoft/phi-2",
13
- "template": "{message}"
14
  }
15
  }
16
 
@@ -27,39 +26,32 @@ class ChatModel:
27
  self.model = AutoModelForCausalLM.from_pretrained(
28
  config["model_name"],
29
  torch_dtype=torch.float16,
30
- device_map="auto"
 
31
  )
32
  self.current_model = model_name
33
 
34
- def format_message(self, message, model_name):
35
- return MODEL_CONFIG[model_name]["template"].format(message=message)
36
-
37
  def generate(self, message, model_name, history):
38
  self.load_model(model_name)
39
- formatted_message = self.format_message(message, model_name)
40
 
41
- # Create pipeline for text generation
 
 
 
42
  pipe = pipeline(
43
  "text-generation",
44
  model=self.model,
45
  tokenizer=self.tokenizer,
46
- device_map="auto"
47
- )
48
-
49
- # Generate response
50
- response = pipe(
51
- formatted_message,
52
- max_length=200,
53
  do_sample=True,
54
- temperature=0.7,
55
- top_k=50,
56
- top_p=0.95,
57
- pad_token_id=self.tokenizer.eos_token_id
58
  )
59
 
60
- return response[0]['generated_text'].replace(formatted_message, "").strip()
 
61
 
62
- # Initialize model handler
63
  model_handler = ChatModel()
64
 
65
  def chat(message, history, model_choice):
@@ -67,31 +59,19 @@ def chat(message, history, model_choice):
67
  return [(message, response)]
68
 
69
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
70
- gr.Markdown("# 🤖 Local LLM Chatbot\nSelect a model and start chatting!")
71
-
72
  with gr.Row():
73
  model_choice = gr.Dropdown(
74
- choices=["llama", "phi"],
75
  label="Select Model",
76
- value="phi"
77
  )
78
-
79
- chatbot = gr.Chatbot(height=400)
80
- msg = gr.Textbox(label="Your Message", placeholder="Type your message here...")
81
-
82
- with gr.Row():
83
- submit_btn = gr.Button("Send")
84
- clear_btn = gr.ClearButton([msg, chatbot])
85
 
86
- msg.submit(
87
- fn=chat,
88
- inputs=[msg, chatbot, model_choice],
89
- outputs=[chatbot]
90
- )
91
- submit_btn.click(
92
- fn=chat,
93
- inputs=[msg, chatbot, model_choice],
94
- outputs=[chatbot]
95
- )
96
 
97
  demo.launch()
 
1
  import gradio as gr
 
2
  from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
3
+ import torch
4
 
 
5
  MODEL_CONFIG = {
6
+ "tinyllama": {
7
+ "model_name": "TinyLlama/TinyLlama-1.1B-Chat-v1.0",
8
+ "template": "<|user|>\n{message}\n<|assistant|>"
9
  },
10
+ "phi-1.5": {
11
+ "model_name": "microsoft/phi-1_5",
12
+ "template": "Instruct: {message}\nOutput:"
13
  }
14
  }
15
 
 
26
  self.model = AutoModelForCausalLM.from_pretrained(
27
  config["model_name"],
28
  torch_dtype=torch.float16,
29
+ device_map="auto",
30
+ load_in_4bit=True # Quantization to reduce memory usage
31
  )
32
  self.current_model = model_name
33
 
 
 
 
34
  def generate(self, message, model_name, history):
35
  self.load_model(model_name)
36
+ config = MODEL_CONFIG[model_name]
37
 
38
+ # Format prompt
39
+ prompt = config["template"].format(message=message)
40
+
41
+ # Create pipeline
42
  pipe = pipeline(
43
  "text-generation",
44
  model=self.model,
45
  tokenizer=self.tokenizer,
46
+ max_new_tokens=150,
47
+ temperature=0.3,
 
 
 
 
 
48
  do_sample=True,
49
+ device_map="auto"
 
 
 
50
  )
51
 
52
+ response = pipe(prompt)[0]['generated_text']
53
+ return response.split(prompt)[-1].strip()
54
 
 
55
  model_handler = ChatModel()
56
 
57
  def chat(message, history, model_choice):
 
59
  return [(message, response)]
60
 
61
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
62
+ gr.Markdown("# 🚀 Free-Tier LLM Chatbot")
 
63
  with gr.Row():
64
  model_choice = gr.Dropdown(
65
+ choices=["tinyllama", "phi-1.5"],
66
  label="Select Model",
67
+ value="tinyllama"
68
  )
69
+ chatbot = gr.Chatbot(height=300)
70
+ msg = gr.Textbox(label="Message", placeholder="Type here...")
71
+ submit_btn = gr.Button("Send", variant="primary")
72
+ clear_btn = gr.ClearButton([msg, chatbot])
 
 
 
73
 
74
+ msg.submit(chat, [msg, chatbot, model_choice], chatbot)
75
+ submit_btn.click(chat, [msg, chatbot, model_choice], chatbot)
 
 
 
 
 
 
 
 
76
 
77
  demo.launch()