Add application file
Browse files
app.py
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import openai
|
2 |
+
import gradio as gr
|
3 |
+
from datetime import datetime
|
4 |
+
import json
|
5 |
+
import chromadb
|
6 |
+
import pandas as pd
|
7 |
+
from sentence_transformers import SentenceTransformer
|
8 |
+
from tqdm import tqdm
|
9 |
+
from FlagEmbedding import BGEM3FlagModel
|
10 |
+
import re
|
11 |
+
|
12 |
+
# Đặt API key của bạn ở đây
|
13 |
+
api_key = "sk-optimi-ai-zR7o9I8TWt6vOwOHJFEpT3BlbkFJlGLNXidFLiV3E10jQv1p"
|
14 |
+
openai.api_key = api_key
|
15 |
+
|
16 |
+
# Khởi tạo mô hình embedding
|
17 |
+
|
18 |
+
|
19 |
+
# Đọc dữ liệu từ JSONL
|
20 |
+
data_path = "/home/acer/Documents/ABI/Lich_optimi/nhansu_optimi.xlsx"
|
21 |
+
data = pd.read_excel(data_path)
|
22 |
+
data['index'] = range(len(data))
|
23 |
+
|
24 |
+
# Hàm truy vấn cơ sở dữ liệu để tìm tên đầy đủ của người tham gia
|
25 |
+
def get_full_name(participant):
|
26 |
+
list_name = []
|
27 |
+
for i in range(len(data)):
|
28 |
+
if participant in data['Họ và tên'][i]:
|
29 |
+
#print(data['Họ và tên'][i])
|
30 |
+
list_name.append(data['Họ và tên'][i])
|
31 |
+
return list_name
|
32 |
+
def replace_participants(reply, dict_replace):
|
33 |
+
for key, names in dict_replace.items():
|
34 |
+
if names:
|
35 |
+
# Join names with comma for display
|
36 |
+
names_str = ','.join(names)
|
37 |
+
# Replace the key with the list of names
|
38 |
+
reply = reply.replace(key, names_str)
|
39 |
+
else:
|
40 |
+
reply = reply.replace(key,'')
|
41 |
+
parts = reply.split('Người tham gia:')
|
42 |
+
if len(parts) > 1:
|
43 |
+
participants = parts[1].strip().split(',')
|
44 |
+
cleaned_participants = [p.strip() for p in participants if p.strip()]
|
45 |
+
reply = parts[0] + 'Người tham gia: ' + ', '.join(cleaned_participants)
|
46 |
+
return reply
|
47 |
+
# Định nghĩa hệ thống prompt
|
48 |
+
def create_system_prompt():
|
49 |
+
localtime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
50 |
+
system_prompt = f"Tách yêu cầu sau thành 5 trường thông tin gồm: Tên cuộc họp (Ngắn gọn dưới 10 từ bao quát về mục đích cuộc họp), Ngày họp (DD/MM/YYYY), Giờ học bắt đầu (HH/MM), Giờ học kết thúc (HH/MM) và Người tham gia (Chỉ trích dẫn tên).\
|
51 |
+
Chú ý xác định thời điểm hiện tại là: {localtime} từ đó xác định ngày họp cụ thể bao gồm ngày, tháng, năm.\
|
52 |
+
Ví dụ: Tách yêu cầu 'họp với team AI, anh Hoa và giám đốc Dương design search ngày mai 10h sáng đến 3 giờ chiều.' thành:\
|
53 |
+
Tên cuộc họp: Design search.\
|
54 |
+
Ngày họp: 15/06/2024.\
|
55 |
+
Giờ bắt đầu: 10:00.\
|
56 |
+
Giờ kết thúc: 15:00.\
|
57 |
+
Người tham gia: Hoa,Dương.\
|
58 |
+
Bắt đầu tách yêu cầu sau: "
|
59 |
+
return system_prompt
|
60 |
+
|
61 |
+
# Hàm dự đoán cho Gradio
|
62 |
+
def predict(message, history):
|
63 |
+
# Tạo prompt hệ thống
|
64 |
+
system_prompt = create_system_prompt()
|
65 |
+
|
66 |
+
# Chuẩn bị lịch sử hội thoại
|
67 |
+
history_openai_format = [{"role": "system", "content": system_prompt}]
|
68 |
+
for human, assistant in history:
|
69 |
+
history_openai_format.append({"role": "user", "content": human})
|
70 |
+
history_openai_format.append({"role": "assistant", "content": assistant})
|
71 |
+
history_openai_format.append({"role": "user", "content": message})
|
72 |
+
|
73 |
+
# Gọi API của OpenAI
|
74 |
+
response = openai.ChatCompletion.create(
|
75 |
+
model='gpt-3.5-turbo',
|
76 |
+
messages=history_openai_format,
|
77 |
+
temperature=1.0
|
78 |
+
)
|
79 |
+
|
80 |
+
# Trích xuất phản hồi từ mô hình
|
81 |
+
reply = response.choices[0].message['content']
|
82 |
+
#print(reply)
|
83 |
+
#print(type(reply))
|
84 |
+
# Tách các tên người tham gia từ phản hồi
|
85 |
+
# Tách các tên người tham gia từ phản hồi
|
86 |
+
start_index = reply.find("Người tham gia:") + len("Người tham gia:")
|
87 |
+
end_index = reply.find("\n", start_index)
|
88 |
+
|
89 |
+
# Trích xuất danh sách người tham gia
|
90 |
+
participants_str = reply[start_index:end_index].strip()
|
91 |
+
|
92 |
+
# Tách danh sách thành từng phần tử
|
93 |
+
participants = [participant.strip() for participant in participants_str.split(",")]
|
94 |
+
participants = [participant.rstrip('.') for participant in participants_str.split(",")]
|
95 |
+
print(participants)
|
96 |
+
# Thay thế các tên người tham gia bằng tên đầy đủ
|
97 |
+
replace_dict = {participant: get_full_name(participant) for participant in participants}
|
98 |
+
print(replace_dict)
|
99 |
+
# replace_dict = {key: value for key, value in replace_dict.items() if value != []}
|
100 |
+
# print(replace_dict)
|
101 |
+
reply = replace_participants(reply,replace_dict)
|
102 |
+
print(reply)
|
103 |
+
# Cập nhật lịch sử hội thoại
|
104 |
+
history.append((message, reply))
|
105 |
+
|
106 |
+
return reply
|
107 |
+
|
108 |
+
# Khởi tạo giao diện Gradio
|
109 |
+
iface = gr.ChatInterface(fn=predict, title="Tách Thông Tin Cuộc Họp")
|
110 |
+
|
111 |
+
# Chạy Gradio
|
112 |
+
iface.launch(share=True)
|
113 |
+
|