hoduyquocbao commited on
Commit
b09c08f
1 Parent(s): e7bbd13

Update new features

Browse files
Files changed (1) hide show
  1. app.py +40 -11
app.py CHANGED
@@ -5,7 +5,7 @@ from typing import Iterator, List, Tuple, Dict, Any
5
  import gradio as gr
6
  import spaces
7
  import torch
8
- from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
9
  from bs4 import BeautifulSoup
10
  import requests
11
  import json
@@ -38,6 +38,9 @@ model = AutoModelForCausalLM.from_pretrained(
38
  model.to(device) # Di chuyển mô hình tới thiết bị đã chọn
39
  model.eval() # Đặt mô hình ở chế độ đánh giá
40
 
 
 
 
41
  # ---------------------------- Định Nghĩa Hàm ---------------------------- #
42
 
43
  @lru_cache(maxsize=128)
@@ -118,6 +121,13 @@ def summarize_text(text: str, max_length: int = 150) -> str:
118
  summary += new_text
119
  return summary
120
 
 
 
 
 
 
 
 
121
  def generate_response(prompt: str, chat_history: List[Tuple[str, str]], max_new_tokens: int, temperature: float, top_p: float, top_k: int, repetition_penalty: float) -> Iterator[str]:
122
  """
123
  Tạo phản hồi sử dụng mô hình Llama cục bộ theo chế độ streaming.
@@ -160,7 +170,7 @@ def generate_response(prompt: str, chat_history: List[Tuple[str, str]], max_new_
160
  outputs.append(text)
161
  yield "".join(outputs)
162
 
163
- @spaces.GPU(duration=15, queue=False)
164
  def process_query(query: str) -> Dict[str, Any]:
165
  """
166
  Xác định hàm nào sẽ được gọi dựa trên truy vấn của người dùng.
@@ -169,18 +179,22 @@ def process_query(query: str) -> Dict[str, Any]:
169
  web_search_keywords = ["tìm kiếm", "tìm", "tra cứu", "google", "lookup"]
170
  general_query_keywords = ["giải thích", "mô tả", "nói cho tôi biết về", "cái gì là", "cách nào"]
171
  summarize_keywords = ["tóm tắt", "tóm lại", "khái quát", "ngắn gọn"]
 
172
 
173
  query_lower = query.lower() # Chuyển truy vấn thành chữ thường để so sánh
174
 
175
  if any(keyword in query_lower for keyword in web_search_keywords):
176
  function_name = "web_search"
177
  arguments = {"query": query}
178
- elif any(keyword in query_lower for keyword in general_query_keywords):
179
- function_name = "general_query"
180
- arguments = {"prompt": query}
181
  elif any(keyword in query_lower for keyword in summarize_keywords):
182
  function_name = "summarize_query"
183
  arguments = {"prompt": query}
 
 
 
 
 
 
184
  else:
185
  function_name = "hard_query"
186
  arguments = {"prompt": query}
@@ -221,6 +235,12 @@ def handle_functions(function_call: Dict[str, Any], prompt: str, chat_history: L
221
  summary = summarize_text(prompt_text)
222
  yield "📄 **Tóm tắt:**\n" + summary
223
 
 
 
 
 
 
 
224
  elif function_name in ["general_query", "hard_query"]:
225
  prompt_text = arguments["prompt"]
226
  yield "🤖 Đang tạo phản hồi..."
@@ -266,6 +286,8 @@ def generate(
266
  yield "🛠️ Đã chọn chức năng: Tìm kiếm trên web."
267
  elif function_call["name"] == "summarize_query":
268
  yield "🛠️ Đã chọn chức năng: Tóm tắt văn bản."
 
 
269
  elif function_call["name"] in ["general_query", "hard_query"]:
270
  yield "🛠️ Đã chọn chức năng: Trả lời câu hỏi."
271
  else:
@@ -296,6 +318,7 @@ EXAMPLES = [
296
  ["Tìm và cung cấp cho tôi tin tức mới nhất về năng lượng tái tạo."],
297
  ["Tìm thông tin về Rạn san hô Great Barrier Reef."],
298
  ["Tóm tắt nội dung về trí tuệ nhân tạo."],
 
299
  ]
300
 
301
  # Cấu hình giao diện trò chuyện của Gradio với giao diện đẹp mắt
@@ -342,24 +365,30 @@ chat_interface = gr.ChatInterface(
342
  examples=EXAMPLES, # Các ví dụ được hiển thị cho người dùng
343
  cache_examples=False, # Không lưu bộ nhớ cache cho các ví dụ
344
  title="🤖 OpenGPT-4o Chatbot",
345
- description="Một trợ lý AI mạnh mẽ sử dụng mô hình Llama-3.2 cục bộ với các chức năng tìm kiếm web tóm tắt văn bản.",
346
  theme="default", # Có thể thay đổi theme để giao diện đẹp hơn
347
  )
348
 
349
  # Tạo giao diện chính của Gradio với CSS tùy chỉnh
350
  with gr.Blocks(css="""
351
  .gradio-container {
352
- background-color: #f0f2f5;
353
  }
354
  .gradio-container h1 {
355
- color: #4a90e2;
356
  }
357
  .gradio-container .gr-button {
358
- background-color: #4a90e2;
359
- color: white;
360
  }
361
  .gradio-container .gr-slider__label {
362
- color: #333333;
 
 
 
 
 
 
363
  }
364
  """, fill_height=True) as demo:
365
  gr.Markdown(DESCRIPTION) # Hiển thị mô tả
 
5
  import gradio as gr
6
  import spaces
7
  import torch
8
+ from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer, pipeline
9
  from bs4 import BeautifulSoup
10
  import requests
11
  import json
 
38
  model.to(device) # Di chuyển mô hình tới thiết bị đã chọn
39
  model.eval() # Đặt mô hình ở chế độ đánh giá
40
 
41
+ # Khởi tạo pipeline phân tích tâm lý
42
+ sentiment_pipeline = pipeline("sentiment-analysis", model="nlptown/bert-base-multilingual-uncased-sentiment")
43
+
44
  # ---------------------------- Định Nghĩa Hàm ---------------------------- #
45
 
46
  @lru_cache(maxsize=128)
 
121
  summary += new_text
122
  return summary
123
 
124
+ def analyze_sentiment(text: str) -> str:
125
+ """Phân tích tâm lý của văn bản sử dụng mô hình."""
126
+ result = sentiment_pipeline(text)
127
+ sentiment = result[0]['label']
128
+ score = result[0]['score']
129
+ return f"🟢 **Tâm lý**: {sentiment} (Điểm: {score:.2f})"
130
+
131
  def generate_response(prompt: str, chat_history: List[Tuple[str, str]], max_new_tokens: int, temperature: float, top_p: float, top_k: int, repetition_penalty: float) -> Iterator[str]:
132
  """
133
  Tạo phản hồi sử dụng mô hình Llama cục bộ theo chế độ streaming.
 
170
  outputs.append(text)
171
  yield "".join(outputs)
172
 
173
+ @lru_cache(maxsize=128)
174
  def process_query(query: str) -> Dict[str, Any]:
175
  """
176
  Xác định hàm nào sẽ được gọi dựa trên truy vấn của người dùng.
 
179
  web_search_keywords = ["tìm kiếm", "tìm", "tra cứu", "google", "lookup"]
180
  general_query_keywords = ["giải thích", "mô tả", "nói cho tôi biết về", "cái gì là", "cách nào"]
181
  summarize_keywords = ["tóm tắt", "tóm lại", "khái quát", "ngắn gọn"]
182
+ sentiment_keywords = ["cảm xúc", "tâm trạng", "tâm lý", "phân tích cảm xúc"]
183
 
184
  query_lower = query.lower() # Chuyển truy vấn thành chữ thường để so sánh
185
 
186
  if any(keyword in query_lower for keyword in web_search_keywords):
187
  function_name = "web_search"
188
  arguments = {"query": query}
 
 
 
189
  elif any(keyword in query_lower for keyword in summarize_keywords):
190
  function_name = "summarize_query"
191
  arguments = {"prompt": query}
192
+ elif any(keyword in query_lower for keyword in sentiment_keywords):
193
+ function_name = "sentiment_analysis"
194
+ arguments = {"prompt": query}
195
+ elif any(keyword in query_lower for keyword in general_query_keywords):
196
+ function_name = "general_query"
197
+ arguments = {"prompt": query}
198
  else:
199
  function_name = "hard_query"
200
  arguments = {"prompt": query}
 
235
  summary = summarize_text(prompt_text)
236
  yield "📄 **Tóm tắt:**\n" + summary
237
 
238
+ elif function_name == "sentiment_analysis":
239
+ prompt_text = arguments["prompt"]
240
+ yield "📊 Đang phân tích tâm lý..."
241
+ sentiment = analyze_sentiment(prompt_text)
242
+ yield sentiment
243
+
244
  elif function_name in ["general_query", "hard_query"]:
245
  prompt_text = arguments["prompt"]
246
  yield "🤖 Đang tạo phản hồi..."
 
286
  yield "🛠️ Đã chọn chức năng: Tìm kiếm trên web."
287
  elif function_call["name"] == "summarize_query":
288
  yield "🛠️ Đã chọn chức năng: Tóm tắt văn bản."
289
+ elif function_call["name"] == "sentiment_analysis":
290
+ yield "🛠️ Đã chọn chức năng: Phân tích tâm lý."
291
  elif function_call["name"] in ["general_query", "hard_query"]:
292
  yield "🛠️ Đã chọn chức năng: Trả lời câu hỏi."
293
  else:
 
318
  ["Tìm và cung cấp cho tôi tin tức mới nhất về năng lượng tái tạo."],
319
  ["Tìm thông tin về Rạn san hô Great Barrier Reef."],
320
  ["Tóm tắt nội dung về trí tuệ nhân tạo."],
321
+ ["Phân tích tâm lý của đoạn văn sau: Tôi rất vui khi được gặp bạn hôm nay!"],
322
  ]
323
 
324
  # Cấu hình giao diện trò chuyện của Gradio với giao diện đẹp mắt
 
365
  examples=EXAMPLES, # Các ví dụ được hiển thị cho người dùng
366
  cache_examples=False, # Không lưu bộ nhớ cache cho các ví dụ
367
  title="🤖 OpenGPT-4o Chatbot",
368
+ description="Một trợ lý AI mạnh mẽ sử dụng mô hình Llama-3.2 cục bộ với các chức năng tìm kiếm web, tóm tắt văn bản và phân tích tâm lý.",
369
  theme="default", # Có thể thay đổi theme để giao diện đẹp hơn
370
  )
371
 
372
  # Tạo giao diện chính của Gradio với CSS tùy chỉnh
373
  with gr.Blocks(css="""
374
  .gradio-container {
375
+ background-color: #f0f2f5; /* Màu nền nhẹ nhàng */
376
  }
377
  .gradio-container h1 {
378
+ color: #4a90e2; /* Màu xanh dương cho tiêu đề */
379
  }
380
  .gradio-container .gr-button {
381
+ background-color: #4a90e2; /* Màu xanh dương cho nút */
382
+ color: white; /* Màu chữ trắng trên nút */
383
  }
384
  .gradio-container .gr-slider__label {
385
+ color: #333333; /* Màu chữ đen cho nhãn slider */
386
+ }
387
+ .gradio-container .gr-chatbot {
388
+ border: 2px solid #4a90e2; /* Viền xanh dương cho chatbot */
389
+ border-radius: 10px; /* Bo góc viền chatbot */
390
+ padding: 10px; /* Khoảng cách bên trong chatbot */
391
+ background-color: #ffffff; /* Màu nền trắng cho chatbot */
392
  }
393
  """, fill_height=True) as demo:
394
  gr.Markdown(DESCRIPTION) # Hiển thị mô tả