File size: 2,765 Bytes
30dc0cd
 
 
 
a26dba8
30dc0cd
0c0b6b9
a26dba8
0c0b6b9
 
30dc0cd
0c0b6b9
30dc0cd
 
 
 
 
 
 
 
 
 
 
 
 
 
0c0b6b9
 
 
30dc0cd
 
 
 
 
 
 
 
 
accadf5
 
 
30dc0cd
 
0c0b6b9
 
 
 
 
a26dba8
0c0b6b9
 
 
30dc0cd
42aa415
039eeef
 
0c0b6b9
039eeef
 
30dc0cd
0c0b6b9
 
30dc0cd
 
 
 
0c0b6b9
30dc0cd
 
0c0b6b9
accadf5
 
30dc0cd
0c0b6b9
039eeef
 
42aa415
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
import gradio as gr
import openai


def get_answer_chatgpt(chat_history, message, system_message=None, model="gpt-4", max_length=1000):
    messages = []
    if model is None:
        model = "gpt-4"

    if system_message or system_message != "":
        TEMPLATE_SYSTEM = {"role": "system", "content": system_message}
        messages.append(TEMPLATE_SYSTEM)

    TEMPLATE_USER = {"role": "user"}
    TEMPLATE_BOT = {"role": "assistant"}

    # add historical conversation
    for pair in chat_history:
        TEMPLATE_USER["content"] = pair[0]
        TEMPLATE_BOT["content"] = pair[1]
        messages.append(TEMPLATE_USER)
        messages.append(TEMPLATE_BOT)
    # add latest input
    TEMPLATE_USER["content"] = message
    messages.append(TEMPLATE_USER)
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        max_tokens=max_length
    )

    return {
        "completion": response["choices"][0]["message"]["content"],
        "usage_prompt_token": response["usage"]["prompt_tokens"],
        "usage_completion_token": response["usage"]["completion_tokens"]
    }


def reset_textbox():
    return gr.update(value='')


with gr.Blocks() as demo:
    with gr.Row():
        with gr.Column(scale=5):
            clear = gr.Button("Clear all converstation")
        with gr.Column(scale=5):
            with gr.Accordion("Parameters", open=False):
                model = gr.Dropdown(["gpt-4", "gpt-3.5-turbo"], label="Model", value="gpt-4")
                max_length = gr.Slider(0, 10000, value=1000, step=1, label="Maximum length token", interactive=True)

    system_message = gr.Textbox(placeholder="You are helpful assistence", lines=5, label="System Message")
    chatbot = gr.Chatbot()
    message = gr.Textbox(placeholder="Halo kak, aku mau bertanya", label="Chat Here")
    with gr.Row():
        with gr.Column(scale=5):
            send = gr.Button("Send")
        with gr.Column(scale=5):
            retry = gr.Button("Retry")

    def respond(chat_history, message, system_message, model, max_length=1000):
        response = get_answer_chatgpt(chat_history, message, system_message, model, max_length)
        response = response["completion"]

        return chat_history + [[message, response]]

    message.submit(respond, [chatbot, message, system_message, model, max_length], chatbot)

    clear.click(lambda: None, None, chatbot, queue=False)
    send.click(respond, [chatbot, message, system_message, model, max_length], chatbot)
    send.click(reset_textbox, [], [message])
    message.submit(reset_textbox, [], [message])

    retry.click(respond, [chatbot, message, system_message, model, max_length], chatbot)
    retry.click(reset_textbox, [], [message])

    demo.launch(debug=True)