dd253B commited on
Commit
0388fb6
·
verified ·
1 Parent(s): d491783

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -7
app.py CHANGED
@@ -11,7 +11,7 @@ from peft import PeftModel
11
 
12
 
13
  # ============================================================
14
- # MODEL
15
  # ============================================================
16
 
17
  BASE_MODEL = "Qwen/Qwen2.5-0.5B-Instruct"
@@ -20,7 +20,7 @@ ADAPTER_MODEL = "dd253B/DhanushAI-0.5B"
20
 
21
 
22
  # ============================================================
23
- # GLOBAL VARIABLES
24
  # ============================================================
25
 
26
  tokenizer = None
@@ -39,6 +39,14 @@ def load_model():
39
  if model is not None:
40
  return
41
 
 
 
 
 
 
 
 
 
42
  print("Loading tokenizer...")
43
 
44
  tokenizer = AutoTokenizer.from_pretrained(
@@ -48,6 +56,11 @@ def load_model():
48
  if tokenizer.pad_token is None:
49
  tokenizer.pad_token = tokenizer.eos_token
50
 
 
 
 
 
 
51
  print("Loading base model...")
52
 
53
  base_model = AutoModelForCausalLM.from_pretrained(
@@ -55,6 +68,11 @@ def load_model():
55
  torch_dtype=torch.float16
56
  )
57
 
 
 
 
 
 
58
  print("Loading DhanushAI adapter...")
59
 
60
  model = PeftModel.from_pretrained(
@@ -62,44 +80,74 @@ def load_model():
62
  ADAPTER_MODEL
63
  )
64
 
 
 
 
 
 
65
  model = model.to("cuda")
66
 
67
  model.eval()
68
 
 
69
  print("DhanushAI loaded successfully!")
 
70
 
71
 
72
  # ============================================================
73
- # CHAT
74
  # ============================================================
75
 
76
  @spaces.GPU
77
  def chat(message):
78
 
 
79
  load_model()
80
 
81
- if not message or not message.strip():
 
 
 
 
 
82
  return "Please enter a message."
83
 
 
 
 
 
 
84
  prompt = f"""You are DhanushAI, a helpful AI assistant.
85
 
86
  User: {message}
87
 
88
  Assistant:"""
89
 
 
 
 
 
 
90
  inputs = tokenizer(
91
  prompt,
92
  return_tensors="pt"
93
  )
94
 
 
95
  inputs = {
96
  key: value.to("cuda")
97
  for key, value in inputs.items()
98
  }
99
 
 
 
 
 
 
100
  with torch.no_grad():
101
 
102
  outputs = model.generate(
 
103
  **inputs,
104
 
105
  max_new_tokens=200,
@@ -113,11 +161,21 @@ Assistant:"""
113
  repetition_penalty=1.1
114
  )
115
 
 
 
 
 
 
116
  generated = tokenizer.decode(
117
  outputs[0],
118
  skip_special_tokens=True
119
  )
120
 
 
 
 
 
 
121
  if "Assistant:" in generated:
122
 
123
  answer = generated.split(
@@ -129,11 +187,12 @@ Assistant:"""
129
 
130
  answer = generated.strip()
131
 
 
132
  return answer
133
 
134
 
135
  # ============================================================
136
- # GRADIO
137
  # ============================================================
138
 
139
  demo = gr.Interface(
@@ -142,7 +201,7 @@ demo = gr.Interface(
142
 
143
  inputs=gr.Textbox(
144
  label="Message",
145
- placeholder="Ask DhanushAI..."
146
  ),
147
 
148
  outputs=gr.Textbox(
@@ -151,8 +210,14 @@ demo = gr.Interface(
151
 
152
  title="DhanushAI",
153
 
154
- description="My custom AI model"
 
 
155
  )
156
 
157
 
 
 
 
 
158
  demo.launch()
 
11
 
12
 
13
  # ============================================================
14
+ # CONFIGURATION
15
  # ============================================================
16
 
17
  BASE_MODEL = "Qwen/Qwen2.5-0.5B-Instruct"
 
20
 
21
 
22
  # ============================================================
23
+ # GLOBAL MODEL
24
  # ============================================================
25
 
26
  tokenizer = None
 
39
  if model is not None:
40
  return
41
 
42
+ print("====================================")
43
+ print("Loading DhanushAI...")
44
+ print("====================================")
45
+
46
+ # -----------------------------
47
+ # Tokenizer
48
+ # -----------------------------
49
+
50
  print("Loading tokenizer...")
51
 
52
  tokenizer = AutoTokenizer.from_pretrained(
 
56
  if tokenizer.pad_token is None:
57
  tokenizer.pad_token = tokenizer.eos_token
58
 
59
+
60
+ # -----------------------------
61
+ # Base model
62
+ # -----------------------------
63
+
64
  print("Loading base model...")
65
 
66
  base_model = AutoModelForCausalLM.from_pretrained(
 
68
  torch_dtype=torch.float16
69
  )
70
 
71
+
72
+ # -----------------------------
73
+ # LoRA adapter
74
+ # -----------------------------
75
+
76
  print("Loading DhanushAI adapter...")
77
 
78
  model = PeftModel.from_pretrained(
 
80
  ADAPTER_MODEL
81
  )
82
 
83
+
84
+ # -----------------------------
85
+ # Move to GPU
86
+ # -----------------------------
87
+
88
  model = model.to("cuda")
89
 
90
  model.eval()
91
 
92
+ print("====================================")
93
  print("DhanushAI loaded successfully!")
94
+ print("====================================")
95
 
96
 
97
  # ============================================================
98
+ # CHAT FUNCTION
99
  # ============================================================
100
 
101
  @spaces.GPU
102
  def chat(message):
103
 
104
+ # Load model after ZeroGPU allocation
105
  load_model()
106
 
107
+ if message is None:
108
+ return "Please enter a message."
109
+
110
+ message = message.strip()
111
+
112
+ if not message:
113
  return "Please enter a message."
114
 
115
+
116
+ # -----------------------------
117
+ # Prompt
118
+ # -----------------------------
119
+
120
  prompt = f"""You are DhanushAI, a helpful AI assistant.
121
 
122
  User: {message}
123
 
124
  Assistant:"""
125
 
126
+
127
+ # -----------------------------
128
+ # Tokenize
129
+ # -----------------------------
130
+
131
  inputs = tokenizer(
132
  prompt,
133
  return_tensors="pt"
134
  )
135
 
136
+
137
  inputs = {
138
  key: value.to("cuda")
139
  for key, value in inputs.items()
140
  }
141
 
142
+
143
+ # -----------------------------
144
+ # Generate
145
+ # -----------------------------
146
+
147
  with torch.no_grad():
148
 
149
  outputs = model.generate(
150
+
151
  **inputs,
152
 
153
  max_new_tokens=200,
 
161
  repetition_penalty=1.1
162
  )
163
 
164
+
165
+ # -----------------------------
166
+ # Decode
167
+ # -----------------------------
168
+
169
  generated = tokenizer.decode(
170
  outputs[0],
171
  skip_special_tokens=True
172
  )
173
 
174
+
175
+ # -----------------------------
176
+ # Remove prompt
177
+ # -----------------------------
178
+
179
  if "Assistant:" in generated:
180
 
181
  answer = generated.split(
 
187
 
188
  answer = generated.strip()
189
 
190
+
191
  return answer
192
 
193
 
194
  # ============================================================
195
+ # GRADIO UI + API
196
  # ============================================================
197
 
198
  demo = gr.Interface(
 
201
 
202
  inputs=gr.Textbox(
203
  label="Message",
204
+ placeholder="Ask DhanushAI something..."
205
  ),
206
 
207
  outputs=gr.Textbox(
 
210
 
211
  title="DhanushAI",
212
 
213
+ description="My custom AI model",
214
+
215
+ api_name="chat"
216
  )
217
 
218
 
219
+ # ============================================================
220
+ # START
221
+ # ============================================================
222
+
223
  demo.launch()