arubaDev commited on
Commit
fb9cbfc
·
verified ·
1 Parent(s): 90302f8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -36
app.py CHANGED
@@ -12,8 +12,10 @@ MODELS = {
12
  "Meta LLaMA 3.1 (8B Instruct)": "meta-llama/Llama-3.1-8B-Instruct",
13
  "Mistral 7B Instruct": "mistralai/Mistral-7B-Instruct-v0.3",
14
  }
15
- DATASETS = ["The Stack", "CodeXGLUE"]
16
- HF_TOKEN = os.getenv("HF_TOKEN")
 
 
17
  DB_PATH = "history.db"
18
 
19
  SYSTEM_DEFAULT = (
@@ -90,7 +92,8 @@ def get_messages(session_id: int):
90
  cur = conn.cursor()
91
  cur.execute("""
92
  SELECT role, content FROM messages
93
- WHERE session_id = ? ORDER BY id ASC
 
94
  """, (session_id,))
95
  rows = cur.fetchall()
96
  conn.close()
@@ -116,7 +119,7 @@ def update_session_title_if_needed(session_id: int, first_user_text: str):
116
  title = first_user_text.strip().split("\n")[0]
117
  title = (title[:50] + "…") if len(title) > 50 else title
118
  cur.execute("UPDATE sessions SET title=? WHERE id=?", (title or "New chat", session_id))
119
- conn.commit()
120
  conn.close()
121
 
122
  # ---------------------------
@@ -175,13 +178,13 @@ def delete_chat_cb(selected_label):
175
  return gr.update(choices=labels, value=selected), []
176
 
177
  FRONTEND_KEYWORDS = [
178
- "react","vue","angular","html","css","javascript","tailwind","recharts","typescript"
179
  ]
180
 
181
  def is_frontend_request(user_text: str) -> bool:
182
  text_lower = user_text.lower()
183
  return any(kw in text_lower for kw in FRONTEND_KEYWORDS)
184
-
185
  def send_cb(user_text, selected_label, chatbot_msgs, system_message, max_tokens, temperature, top_p, model_choice, dataset_choice, *args):
186
  sid = label_to_id(selected_label)
187
  if sid is None:
@@ -189,12 +192,14 @@ def send_cb(user_text, selected_label, chatbot_msgs, system_message, max_tokens,
189
  labels, _ = list_sessions()
190
  selected_label = next((lbl for lbl in labels if lbl.startswith(f"{sid} ")), None)
191
 
 
192
  add_message(sid, "user", user_text)
193
  update_session_title_if_needed(sid, user_text)
194
 
195
  display_msgs = chatbot_msgs[:]
196
  display_msgs.append({"role": "user", "content": user_text})
197
 
 
198
  if is_frontend_request(user_text):
199
  apology = "⚠️ I'm a backend-focused assistant and cannot provide frontend code."
200
  display_msgs.append({"role": "assistant", "content": apology})
@@ -202,6 +207,7 @@ def send_cb(user_text, selected_label, chatbot_msgs, system_message, max_tokens,
202
  yield (display_msgs, "", selected_label)
203
  return
204
 
 
205
  display_msgs.append({"role": "assistant", "content": "…"})
206
  yield (display_msgs, "", selected_label)
207
 
@@ -216,20 +222,11 @@ def send_cb(user_text, selected_label, chatbot_msgs, system_message, max_tokens,
216
  top_p=float(top_p),
217
  stream=True,
218
  ):
219
- if not hasattr(chunk, "choices") or not chunk.choices:
220
- continue
221
- choice = chunk.choices[0]
222
- delta = ""
223
- if hasattr(choice, "delta") and choice.delta and getattr(choice.delta, "content", None) is not None:
224
- delta = choice.delta.content
225
- elif hasattr(choice, "message") and getattr(choice.message, "content", None) is not None:
226
- delta = choice.message.content
227
-
228
  if delta:
229
  partial += delta
230
  display_msgs[-1]["content"] = partial
231
  yield (display_msgs, "", selected_label)
232
-
233
  add_message(sid, "assistant", partial)
234
  except Exception as e:
235
  display_msgs[-1]["content"] = f"⚠️ Error: {str(e)}"
@@ -248,7 +245,8 @@ def regenerate_cb(selected_label, system_message, max_tokens, temperature, top_p
248
  conn = db()
249
  cur = conn.cursor()
250
  cur.execute("""
251
- DELETE FROM messages WHERE id = (
 
252
  SELECT id FROM messages WHERE session_id=? ORDER BY id DESC LIMIT 1
253
  )
254
  """, (sid,))
@@ -270,20 +268,11 @@ def regenerate_cb(selected_label, system_message, max_tokens, temperature, top_p
270
  top_p=float(top_p),
271
  stream=True,
272
  ):
273
- if not hasattr(chunk, "choices") or not chunk.choices:
274
- continue
275
- choice = chunk.choices[0]
276
- delta = ""
277
- if hasattr(choice, "delta") and choice.delta and getattr(choice.delta, "content", None) is not None:
278
- delta = choice.delta.content
279
- elif hasattr(choice, "message") and getattr(choice.message, "content", None) is not None:
280
- delta = choice.message.content
281
-
282
  if delta:
283
  partial += delta
284
  display_msgs[-1]["content"] = partial
285
  yield display_msgs
286
-
287
  add_message(sid, "assistant", partial)
288
  except Exception as e:
289
  display_msgs[-1]["content"] = f"⚠️ Error: {str(e)}"
@@ -297,29 +286,61 @@ labels, _ = list_sessions()
297
  if not labels:
298
  first_sid = create_session("New chat")
299
  labels, _ = list_sessions()
300
-
301
  default_selected = labels[0] if labels else None
302
 
303
  with gr.Blocks(title="Backend-Focused LLaMA/Mistral CRUD Assistant", theme=gr.themes.Soft()) as demo:
 
 
 
 
 
 
 
 
304
  gr.Markdown("## 🗄️ LLaMA & Mistral Backend-Focused CRUD Automation — with Persistent History")
305
 
306
  with gr.Row():
307
  with gr.Column(scale=1, min_width=260):
308
- session_list = gr.Radio(choices=labels, value=default_selected, label="Your chats", interactive=True)
309
- new_btn = gr.Button("➕ New Chat", variant="primary")
310
- del_btn = gr.Button("🗑️ Delete", variant="stop")
 
 
 
 
 
 
 
311
  refresh_btn = gr.Button("🔄 Refresh", variant="secondary")
312
 
313
- model_choice = gr.Dropdown(choices=list(MODELS.keys()), value=list(MODELS.keys())[0], label="Choose a model", interactive=True)
314
- dataset_choice = gr.Dropdown(choices=DATASETS, value=DATASETS[0], label="Select a dataset", interactive=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
315
 
316
- system_box = gr.Textbox(value=SYSTEM_DEFAULT, label="System message", lines=5)
 
 
 
 
 
317
  max_tokens = gr.Slider(256, 4096, value=1200, step=16, label="Max tokens")
318
  temperature = gr.Slider(0.0, 2.0, value=0.25, step=0.05, label="Temperature")
319
  top_p = gr.Slider(0.1, 1.0, value=0.9, step=0.05, label="Top-p")
320
 
321
  with gr.Column(scale=3):
322
- chatbot = gr.Chatbot(label="Assistant", height=720, type="messages")
323
  with gr.Row():
324
  user_box = gr.Textbox(placeholder="Describe your CRUD/backend task…", lines=3, scale=5)
325
  with gr.Row():
@@ -350,4 +371,4 @@ with gr.Blocks(title="Backend-Focused LLaMA/Mistral CRUD Assistant", theme=gr.th
350
  )
351
 
352
  if __name__ == "__main__":
353
- demo.launch()
 
12
  "Meta LLaMA 3.1 (8B Instruct)": "meta-llama/Llama-3.1-8B-Instruct",
13
  "Mistral 7B Instruct": "mistralai/Mistral-7B-Instruct-v0.3",
14
  }
15
+
16
+ DATASETS = ["The Stack", "CodeXGLUE"] # Dropdown for dataset selection
17
+
18
+ HF_TOKEN = os.getenv("HF_TOKEN") # Set in your Space's Secrets
19
  DB_PATH = "history.db"
20
 
21
  SYSTEM_DEFAULT = (
 
92
  cur = conn.cursor()
93
  cur.execute("""
94
  SELECT role, content FROM messages
95
+ WHERE session_id = ?
96
+ ORDER BY id ASC
97
  """, (session_id,))
98
  rows = cur.fetchall()
99
  conn.close()
 
119
  title = first_user_text.strip().split("\n")[0]
120
  title = (title[:50] + "…") if len(title) > 50 else title
121
  cur.execute("UPDATE sessions SET title=? WHERE id=?", (title or "New chat", session_id))
122
+ conn.commit()
123
  conn.close()
124
 
125
  # ---------------------------
 
178
  return gr.update(choices=labels, value=selected), []
179
 
180
  FRONTEND_KEYWORDS = [
181
+ "react", "vue", "angular", "html", "css", "javascript", "tailwind", "recharts", "typescript"
182
  ]
183
 
184
  def is_frontend_request(user_text: str) -> bool:
185
  text_lower = user_text.lower()
186
  return any(kw in text_lower for kw in FRONTEND_KEYWORDS)
187
+ # --- Fixed send_cb to show user message ---
188
  def send_cb(user_text, selected_label, chatbot_msgs, system_message, max_tokens, temperature, top_p, model_choice, dataset_choice, *args):
189
  sid = label_to_id(selected_label)
190
  if sid is None:
 
192
  labels, _ = list_sessions()
193
  selected_label = next((lbl for lbl in labels if lbl.startswith(f"{sid} ")), None)
194
 
195
+ # Save user message
196
  add_message(sid, "user", user_text)
197
  update_session_title_if_needed(sid, user_text)
198
 
199
  display_msgs = chatbot_msgs[:]
200
  display_msgs.append({"role": "user", "content": user_text})
201
 
202
+ # Check for frontend-heavy request
203
  if is_frontend_request(user_text):
204
  apology = "⚠️ I'm a backend-focused assistant and cannot provide frontend code."
205
  display_msgs.append({"role": "assistant", "content": apology})
 
207
  yield (display_msgs, "", selected_label)
208
  return
209
 
210
+ # Normal backend response
211
  display_msgs.append({"role": "assistant", "content": "…"})
212
  yield (display_msgs, "", selected_label)
213
 
 
222
  top_p=float(top_p),
223
  stream=True,
224
  ):
225
+ delta = chunk.choices[0].delta.content or ""
 
 
 
 
 
 
 
 
226
  if delta:
227
  partial += delta
228
  display_msgs[-1]["content"] = partial
229
  yield (display_msgs, "", selected_label)
 
230
  add_message(sid, "assistant", partial)
231
  except Exception as e:
232
  display_msgs[-1]["content"] = f"⚠️ Error: {str(e)}"
 
245
  conn = db()
246
  cur = conn.cursor()
247
  cur.execute("""
248
+ DELETE FROM messages
249
+ WHERE id = (
250
  SELECT id FROM messages WHERE session_id=? ORDER BY id DESC LIMIT 1
251
  )
252
  """, (sid,))
 
268
  top_p=float(top_p),
269
  stream=True,
270
  ):
271
+ delta = chunk.choices[0].delta.content or ""
 
 
 
 
 
 
 
 
272
  if delta:
273
  partial += delta
274
  display_msgs[-1]["content"] = partial
275
  yield display_msgs
 
276
  add_message(sid, "assistant", partial)
277
  except Exception as e:
278
  display_msgs[-1]["content"] = f"⚠️ Error: {str(e)}"
 
286
  if not labels:
287
  first_sid = create_session("New chat")
288
  labels, _ = list_sessions()
 
289
  default_selected = labels[0] if labels else None
290
 
291
  with gr.Blocks(title="Backend-Focused LLaMA/Mistral CRUD Assistant", theme=gr.themes.Soft()) as demo:
292
+ gr.HTML("""
293
+ <style>
294
+ button { background-color: #22c55e !important; color: #ffffff !important; border: none !important; }
295
+ button:hover { background-color: #16a34a !important; }
296
+ button:focus { outline: 2px solid #166534 !important; outline-offset: 2px; }
297
+ </style>
298
+ """)
299
+
300
  gr.Markdown("## 🗄️ LLaMA & Mistral Backend-Focused CRUD Automation — with Persistent History")
301
 
302
  with gr.Row():
303
  with gr.Column(scale=1, min_width=260):
304
+ gr.Markdown("### 📁 Sessions")
305
+ session_list = gr.Radio(
306
+ choices=labels,
307
+ value=default_selected,
308
+ label="Your chats",
309
+ interactive=True
310
+ )
311
+ with gr.Row():
312
+ new_btn = gr.Button("➕ New Chat", variant="primary")
313
+ del_btn = gr.Button("🗑️ Delete", variant="stop")
314
  refresh_btn = gr.Button("🔄 Refresh", variant="secondary")
315
 
316
+ gr.Markdown("### 🤖 Model Selection")
317
+ model_choice = gr.Dropdown(
318
+ choices=list(MODELS.keys()),
319
+ value=list(MODELS.keys())[0],
320
+ label="Choose a model",
321
+ interactive=True
322
+ )
323
+
324
+ gr.Markdown("### 📚 Dataset Selection")
325
+ dataset_choice = gr.Dropdown(
326
+ choices=DATASETS,
327
+ value=DATASETS[0],
328
+ label="Select a dataset",
329
+ interactive=True
330
+ )
331
 
332
+ gr.Markdown("### ⚙️ Generation Settings")
333
+ system_box = gr.Textbox(
334
+ value=SYSTEM_DEFAULT,
335
+ label="System message",
336
+ lines=5
337
+ )
338
  max_tokens = gr.Slider(256, 4096, value=1200, step=16, label="Max tokens")
339
  temperature = gr.Slider(0.0, 2.0, value=0.25, step=0.05, label="Temperature")
340
  top_p = gr.Slider(0.1, 1.0, value=0.9, step=0.05, label="Top-p")
341
 
342
  with gr.Column(scale=3):
343
+ chatbot = gr.Chatbot(label="Assistant", height=520, type="messages")
344
  with gr.Row():
345
  user_box = gr.Textbox(placeholder="Describe your CRUD/backend task…", lines=3, scale=5)
346
  with gr.Row():
 
371
  )
372
 
373
  if __name__ == "__main__":
374
+ demo.launch()