File size: 2,955 Bytes
fc3884c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ee6ed64
fc3884c
 
ee6ed64
fc3884c
ee6ed64
fc3884c
 
 
 
 
 
 
 
ee6ed64
fc3884c
 
ee6ed64
fc3884c
 
 
 
 
 
ee6ed64
fc3884c
 
 
ee6ed64
fc3884c
 
 
 
ee6ed64
fc3884c
 
 
 
ee6ed64
fc3884c
 
ee6ed64
fc3884c
 
 
ee6ed64
 
fc3884c
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
# import gradio as gr
# import os, openai
#
#
# conversation = []
#
# class ChatGPT:
#
#
#     def __init__(self):
#         self.api_key = ""
#         self.messages = conversation
#         self.model = os.getenv("OPENAI_MODEL", default = "gpt-3.5-turbo")
#
#     def save_api_key(self, user_input0):
#         self.api_key = user_input0
#
#     def get_response(self, user_input):
#         openai.api_key = self.api_key
#         conversation.append({"role": "user", "content": user_input})
#
#
#         response = openai.ChatCompletion.create(
# 	            model=self.model,
#                 messages = self.messages
#
#                 )
#
#         conversation.append({"role": "assistant", "content": response['choices'][0]['message']['content']})
#
#         print("AI回答內容:")
#         print(response['choices'][0]['message']['content'].strip())
#
#
#
#         return response['choices'][0]['message']['content'].strip()
#
#
# chatgpt = ChatGPT()
#
#
# def greet(prompt, api_key):
#     chatgpt.save_api_key(api_key)
#
#     reply_text = chatgpt.get_response(prompt)
#
#     greeting = f"{reply_text}"
#
#     return greeting
#
# demo = gr.Interface(
#     fn=greet,
#     inputs=["text", "text"],
#     outputs=["text"],
# )
#
# demo.launch()

import argparse

import gradio as gr
from loguru import logger

from chat_completion import ChatCompletion

parser = argparse.ArgumentParser()
parser.add_argument('--api_key_path', type=str, default='./openai_api_key')
parser.add_argument('--log_path', type=str, default='./log.txt')
parser.add_argument('--share', action='store_true', default=False)
parser.add_argument('--welcome', type=str, default='Say something to ChatGPT here ...')
parser.add_argument('--title', type=str, default='ChatGPT')
parser.add_argument('--setting', type=str, default=None)
args = parser.parse_args()

bot = ChatCompletion(api_key_path=args.api_key_path)
logger.add(args.log_path)

with gr.Blocks(title=args.title) as demo:
    chatbot = gr.Chatbot(show_label=False)
    msg = gr.TextArea(show_label=False, placeholder=args.welcome)
    send_btn = gr.Button('Send')
    retry_btn = gr.Button('Retry')
    reset_btn = gr.Button('Reset')

    def send(user_message, history):
        if not user_message:
            return '', history

        logger.info(f'[MSG] {user_message}')
        response = bot(user_message, setting=args.setting) if user_message != 'retry' else bot.retry()
        logger.info(f'[ANS] {response}')
        return '', history + [[user_message, response]]

    def reset():
        bot.reset()
        logger.info('[RESET]')
        return None, [[None, None]]

    def retry(history):
        return send('retry', history)

    send_btn.click(send, inputs=[msg, chatbot], outputs=[msg, chatbot], show_progress=True)
    reset_btn.click(reset, inputs=None, outputs=[msg, chatbot])
    retry_btn.click(retry, inputs=chatbot, outputs=[msg, chatbot])


demo.launch(share=args.share)