File size: 2,788 Bytes
b6f892b
273f5f9
 
b6f892b
273f5f9
edf6f83
 
b6f892b
 
 
273f5f9
 
 
 
 
 
b6f892b
273f5f9
 
 
 
 
 
 
 
ea5f1c5
b6f892b
 
 
 
273f5f9
b6f892b
ea5f1c5
b6f892b
273f5f9
 
edf6f83
 
b6f892b
 
 
 
 
 
c259d19
b6f892b
273f5f9
 
c259d19
273f5f9
 
b6f892b
 
 
 
 
 
 
 
 
 
84f5caf
 
c259d19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273f5f9
b6f892b
c259d19
b6f892b
 
 
 
 
 
 
c259d19
 
 
 
b6f892b
84f5caf
273f5f9
 
 
 
 
edf6f83
c259d19
 
273f5f9
b6f892b
 
b0438f6
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
107
108
109
import urllib.request
import gradio as gr
from huggingface_hub import get_token

from chatbot import get_retrieval_qa
from flagging import myHuggingFaceDatasetSaver as HuggingFaceDatasetSaver
#from gradio.flagging import HuggingFaceDatasetSaver


# get the html data and save it to a file
def download_html(_url: str, _filename: str):
    html = urllib.request.urlopen(_url).read()
    with open(_filename, "wb") as f:
        f.write(html)


url = "https://sea.ai/faq"
filename = "FAQ_SEA.AI.html"
download_html(url, filename)

# load the retrieval QA model
qa = get_retrieval_qa(filename)

# dataset callback
dataset_name = "SEA-AI/seadog-chat-history"
hf_writer = HuggingFaceDatasetSaver(get_token(), dataset_name)


def answer_question(message, history, system):
    # concatenate the history, message and system
    query = " ".join([message, system])
    retrieval_qa = qa.invoke(query)
    result = retrieval_qa["result"]  # "query" and "source_documents" are also available
    result = result.replace('"', "").strip()  # clean up the result

    # save the query and result to the dataset
    print("flagging...")
    hf_writer.flag(flag_data=[query, result])
    return result


title = "✨ SEA Dog"
description = """
<p align="center">
DISCLAIMERS
<br>
I can't remember conversations yet, be patient with me.
<br>
Your queries will be saved to
<a href='https://huggingface.co/datasets/SEA-AI/seadog-chat-history'>this dataset</a>
for analytics purposes.
</p>
"""

css = """
h1 {
    text-align: center;
    display: block;
}
"""

theme = gr.themes.Default(primary_hue=gr.themes.colors.indigo)

chatbot = gr.Chatbot(
    value=[
        [
            None,
            "I have memorized the entire SEA.AI FAQ page. Ask me anything about it! 🧠",
        ],
    ],
    show_label=False,
    show_copy_button=True,
    likeable=True,
)


def on_like(evt: gr.LikeData):
    print(f"{evt.index=}, {evt.value=}, {evt.liked=}")


with gr.ChatInterface(
    answer_question,
    chatbot=chatbot,
    title=title,
    description=description,
    additional_inputs=[gr.Textbox("", label="SYSTEM")],
    examples=[
        ["Can SEA.AI see at night?", "You are a helpful assistant."],
        ["Can SEA.AI see at night?", "Reply with sailor slang."],
    ],
    submit_btn=None,
    retry_btn=None,
    undo_btn=None,
    clear_btn=None,
    css=css,
    theme=theme,
) as demo:
    # on page load, download the html and save it to a file
    demo.load(lambda: download_html(url, filename))
    # This needs to be called prior to the first call to callback.flag()
    hf_writer.setup([demo.textbox, demo.chatbot], "flagged")
    print("flagging setup done!")
    # like callback
    chatbot.like(on_like, None, None)


if __name__ == "__main__":
    demo.launch(cache_examples=False)