File size: 5,045 Bytes
11a26b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c51362a
 
11a26b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# -*- coding: utf-8 -*-
import gradio as gr
import os
from langchain.retrievers import EnsembleRetriever
from utils import *
import requests
from pyvi import ViTokenizer, ViPosTagger
import time
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.chains import create_history_aware_retriever, create_retrieval_chain
from langchain_community.chat_message_histories import ChatMessageHistory

retriever = load_the_embedding_retrieve(is_ready=False, k=10)
bm25_retriever = load_the_bm25_retrieve(k=1)

ensemble_retriever = EnsembleRetriever(
    retrievers=[bm25_retriever, retriever], weights=[0.1, 0.9]
)

parent_document_retrieve = load_the_parent_document_retrieve()

# tokenizer = AutoTokenizer.from_pretrained("ShynBui/vie_qa", token=os.environ.get("HF_TOKEN"))
# model = AutoModelForQuestionAnswering.from_pretrained("ShynBui/vie_qa", token=os.environ.get("HF_TOKEN"))

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=1,openai_api_key=os.environ["OPENAI_API_KEY"])
llm_long = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=1,max_tokens=1024, openai_api_key=os.environ["OPENAI_API_KEY"])


def greet3(quote, history):
    # print(history)
    #check quote
    if quote[-1] != '?':
        quote += '?'
    demo_ephemeral_chat_history = ChatMessageHistory()
    if history == '':
        history = [("Bạn có thể giải thích về quy chế và quyền của sinh viên tại trường này không?",
                '''Quy chế và quyền của sinh viên tại trường Đại học Mở TP.HCM được quy định rõ trong các điều khoản sau:
                1. Hiệu trưởng Trường có quyền ra quyết định thành lập và quy định cụ thể về chức năng, nhiệm vụ, tổ chức và hoạt động của Hội đồng khen thưởng và kỷ luật sinh viên.
                2. Sinh viên có quyền khiếu nại về khen thưởng, kỷ luật. Khi có vi phạm kỷ luật, sinh viên có quyền được phân tích và đề nghị hình thức kỷ luật thông qua việc họp với các tổ chức sinh viên và gửi biên bản họp đến phòng Công tác sinh viên để trình Hội đồng.
                3. Sinh viên có quyền đề đạt nguyện vọng và khiếu nại lên Hiệu trưởng Trường để giải quyết các vấn đề có liên quan đến quyền, lợi ích chính đáng của sinh viên.
                4. Sinh viên được hỗ trợ giới thiệu nhà trọ theo quy định của trường.
                
                Các chủ đề liên quan mà bạn có thể muốn tìm hiểu thêm:
                - Quy chế và quyền của sinh viên tại các trường đại học khác.
                - Hệ thống hỗ trợ sinh viên tại trường Đại học Mở TP.HCM.
                - Quy trình khiếu nại và giải quyết tranh chấp sinh viên tại trường Đại học Mở TP.HCM.
                '''),
                ("Chào.",
                "Chào. Chúng ta vừa bắt đầu câu chuyện thôi.")]
        for user, assistant in history[-1:]:
            demo_ephemeral_chat_history.add_user_message(user)
            demo_ephemeral_chat_history.add_ai_message(assistant)
    else:
        for user, assistant in eval(history)[-1:]:
            demo_ephemeral_chat_history.add_user_message(user)
            demo_ephemeral_chat_history.add_ai_message(assistant)

    # Summary the message

    chat_history = summarize_messages(demo_ephemeral_chat_history=demo_ephemeral_chat_history, llm=llm).messages
    print("Chat history:", chat_history)

    # Get the new question
    new_question = get_question_from_summarize(chat_history[0].content, quote, llm)

    # Retrieve
    documents_query = ensemble_retriever.invoke(new_question)
    documents_query2 = ensemble_retriever.invoke(quote)

    parent_documents_query = parent_document_retrieve.invoke(new_question)
    parent_documents_query2 = parent_document_retrieve.invoke(quote)
    # print(documents_query)
    list_of_query = [documents_query, documents_query2, parent_documents_query, parent_documents_query2]

    list_context = []
    for i in list_of_query:
        for j in i:
            list_context.append(j.page_content)

    list_context = set(list_context)

    context = '\n'.join(list_context)
    print(context)
    # Get answer

    answer = get_final_answer(question=new_question + ' ' + quote, context=context,
                              prompt=os.environ['PROMPT'], llm=llm_long)

    return new_question + ' ' + quote, answer


if __name__ == "__main__":
    quote = "Địa chỉ nhà trường?"

    iface = gr.Interface(fn=greet3, inputs=["text", "text"], outputs=["text", "text"])
    iface.launch(share=True)


#Những cái đã làm tốt hơn những gì - Đóng góp gì
# 1. Dataset - Xu lý
# 2. Tăng ngữ cảnh
# 3. Tăng khả năng truy vết
# 4.