File size: 2,290 Bytes
f1a48f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
'''
1. 原生的ChatGPT的中文输出没问题,但是llama index的版本中文输出有问题,而且也可以“继续这个回答”。
1. 可以在terminal中同时运行2个不同版本的ChatGPT,一个原生,一个定制的。python3 xxx.py。
'''

import openai
import gradio as gr
import os

## 这里是huggingface的secret里面存放当前可以用的api key。
openai.api_key = os.environ['my_api_key']


messages = [
    {"role": "system", "content": "You are a helpful and kind AI Assistant."},
]

def chatbot(input):

    history = []
    
    try:
        if input:

            ## no streaming version. 
            # messages.append({"role": "user", "content": input})
            # print(input)
            # chat = openai.ChatCompletion.create(
            #     model="gpt-3.5-turbo", messages=messages
            # )
            # reply = chat.choices[0].message.content
            # messages.append({"role": "assistant", "content": reply})

            ## streaming version. typewriter effect, word by word output. 
            messages.append({"role": "user", "content": input})
            for resp in openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages, stream=True, max_tokens=2048):
                
                # sys.stdout.write(str(resp['choices'][0]['delta'].get('content'))) #! 这个方式仅在terminal中是working的。
                # sys.stdout.flush()
                
                #! 以下内容在Gradio中是working的。
                answer = str(resp['choices'][0]['delta'].get('content'))
                if answer != "None":
                    history.append(answer)
                    result = "".join(history).strip() #* working!
                    yield result
   
    except Exception as e:
        print(e)
        pass
    
    return None



## 如果要优化显示效果,参见: https://gradio.app/theming-guide/
try: 
    inputs = gr.inputs.Textbox(lines=5, label="Prompt提示词")
    outputs = gr.outputs.Textbox(label="ChatGPT")
    interface = gr.Interface(fn=chatbot, inputs=inputs, outputs=outputs, title="石博士的极简版ChatGPT", description="请输入你的提示词",theme=gr.themes.Monochrome(), height=300)
    interface.launch()
except Exception as e:
    print(e)