demo_lich / app.py
roolaml's picture
Add application file
2cf1d61
import openai
import gradio as gr
from datetime import datetime
import json
import chromadb
import pandas as pd
from sentence_transformers import SentenceTransformer
from tqdm import tqdm
from FlagEmbedding import BGEM3FlagModel
import re
# Đặt API key của bạn ở đây
api_key = "sk-optimi-ai-zR7o9I8TWt6vOwOHJFEpT3BlbkFJlGLNXidFLiV3E10jQv1p"
openai.api_key = api_key
# Khởi tạo mô hình embedding
# Đọc dữ liệu từ JSONL
data_path = "/home/acer/Documents/ABI/Lich_optimi/nhansu_optimi.xlsx"
data = pd.read_excel(data_path)
data['index'] = range(len(data))
# Hàm truy vấn cơ sở dữ liệu để tìm tên đầy đủ của người tham gia
def get_full_name(participant):
list_name = []
for i in range(len(data)):
if participant in data['Họ và tên'][i]:
#print(data['Họ và tên'][i])
list_name.append(data['Họ và tên'][i])
return list_name
def replace_participants(reply, dict_replace):
for key, names in dict_replace.items():
if names:
# Join names with comma for display
names_str = ','.join(names)
# Replace the key with the list of names
reply = reply.replace(key, names_str)
else:
reply = reply.replace(key,'')
parts = reply.split('Người tham gia:')
if len(parts) > 1:
participants = parts[1].strip().split(',')
cleaned_participants = [p.strip() for p in participants if p.strip()]
reply = parts[0] + 'Người tham gia: ' + ', '.join(cleaned_participants)
return reply
# Định nghĩa hệ thống prompt
def create_system_prompt():
localtime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
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).\
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.\
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:\
Tên cuộc họp: Design search.\
Ngày họp: 15/06/2024.\
Giờ bắt đầu: 10:00.\
Giờ kết thúc: 15:00.\
Người tham gia: Hoa,Dương.\
Bắt đầu tách yêu cầu sau: "
return system_prompt
# Hàm dự đoán cho Gradio
def predict(message, history):
# Tạo prompt hệ thống
system_prompt = create_system_prompt()
# Chuẩn bị lịch sử hội thoại
history_openai_format = [{"role": "system", "content": system_prompt}]
for human, assistant in history:
history_openai_format.append({"role": "user", "content": human})
history_openai_format.append({"role": "assistant", "content": assistant})
history_openai_format.append({"role": "user", "content": message})
# Gọi API của OpenAI
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=history_openai_format,
temperature=1.0
)
# Trích xuất phản hồi từ mô hình
reply = response.choices[0].message['content']
#print(reply)
#print(type(reply))
# Tách các tên người tham gia từ phản hồi
# Tách các tên người tham gia từ phản hồi
start_index = reply.find("Người tham gia:") + len("Người tham gia:")
end_index = reply.find("\n", start_index)
# Trích xuất danh sách người tham gia
participants_str = reply[start_index:end_index].strip()
# Tách danh sách thành từng phần tử
participants = [participant.strip() for participant in participants_str.split(",")]
participants = [participant.rstrip('.') for participant in participants_str.split(",")]
print(participants)
# Thay thế các tên người tham gia bằng tên đầy đủ
replace_dict = {participant: get_full_name(participant) for participant in participants}
print(replace_dict)
# replace_dict = {key: value for key, value in replace_dict.items() if value != []}
# print(replace_dict)
reply = replace_participants(reply,replace_dict)
print(reply)
# Cập nhật lịch sử hội thoại
history.append((message, reply))
return reply
# Khởi tạo giao diện Gradio
iface = gr.ChatInterface(fn=predict, title="Tách Thông Tin Cuộc Họp")
# Chạy Gradio
iface.launch(share=True)