|
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 |
|
|
|
|
|
api_key = "sk-optimi-ai-zR7o9I8TWt6vOwOHJFEpT3BlbkFJlGLNXidFLiV3E10jQv1p" |
|
openai.api_key = api_key |
|
|
|
|
|
|
|
|
|
|
|
data_path = "/home/acer/Documents/ABI/Lich_optimi/nhansu_optimi.xlsx" |
|
data = pd.read_excel(data_path) |
|
data['index'] = range(len(data)) |
|
|
|
|
|
def get_full_name(participant): |
|
list_name = [] |
|
for i in range(len(data)): |
|
if participant in 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: |
|
|
|
names_str = ','.join(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 |
|
|
|
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 |
|
|
|
|
|
def predict(message, history): |
|
|
|
system_prompt = create_system_prompt() |
|
|
|
|
|
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}) |
|
|
|
|
|
response = openai.ChatCompletion.create( |
|
model='gpt-3.5-turbo', |
|
messages=history_openai_format, |
|
temperature=1.0 |
|
) |
|
|
|
|
|
reply = response.choices[0].message['content'] |
|
|
|
|
|
|
|
|
|
start_index = reply.find("Người tham gia:") + len("Người tham gia:") |
|
end_index = reply.find("\n", start_index) |
|
|
|
|
|
participants_str = reply[start_index:end_index].strip() |
|
|
|
|
|
participants = [participant.strip() for participant in participants_str.split(",")] |
|
participants = [participant.rstrip('.') for participant in participants_str.split(",")] |
|
print(participants) |
|
|
|
replace_dict = {participant: get_full_name(participant) for participant in participants} |
|
print(replace_dict) |
|
|
|
|
|
reply = replace_participants(reply,replace_dict) |
|
print(reply) |
|
|
|
history.append((message, reply)) |
|
|
|
return reply |
|
|
|
|
|
iface = gr.ChatInterface(fn=predict, title="Tách Thông Tin Cuộc Họp") |
|
|
|
|
|
iface.launch(share=True) |
|
|
|
|