dodoleonarnci commited on
Commit
ec5f18d
1 Parent(s): f0ef3b5

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -25,7 +25,6 @@
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
  saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
  *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
  *.tflite filter=lfs diff=lfs merge=lfs -text
30
  *.tgz filter=lfs diff=lfs merge=lfs -text
31
  *.wasm filter=lfs diff=lfs merge=lfs -text
 
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
  saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
  *.tar.* filter=lfs diff=lfs merge=lfs -text
 
28
  *.tflite filter=lfs diff=lfs merge=lfs -text
29
  *.tgz filter=lfs diff=lfs merge=lfs -text
30
  *.wasm filter=lfs diff=lfs merge=lfs -text
NPC_prompt.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # 角色
2
+ 你是一个即兴演员,需要扮演赋予你的一个NPC角色,根据特定的场景来进行反应。
3
+
4
+ ## 技能1:意图理解和反应
5
+ 如果我打算扮演游戏里的玩家角色并和你进行交流,请返回“进入工作流”,否则正常回复。
6
+
7
+ 我们开始吧。
README.md CHANGED
@@ -1,12 +1,14 @@
1
  ---
2
- title: Chat With GPT4
3
- emoji: 🌍
4
- colorFrom: pink
5
  colorTo: indigo
6
  sdk: gradio
7
- sdk_version: 4.26.0
8
  app_file: app.py
9
  pinned: false
 
 
10
  ---
11
 
12
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Chat-with-GPT4
3
+ emoji: 🚀
4
+ colorFrom: red
5
  colorTo: indigo
6
  sdk: gradio
7
+ sdk_version: 3.21.0
8
  app_file: app.py
9
  pinned: false
10
+ license: mit
11
+ duplicated_from: ysharma/ChatGPTwithAPI
12
  ---
13
 
14
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
__pycache__/bot.cpython-311.pyc ADDED
Binary file (4.3 kB). View file
 
app.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import os
3
+ import json
4
+ from bot import run_chatbot
5
+
6
+ #Resetting to blank
7
+ def reset_textbox():
8
+ return gr.update(value='')
9
+
10
+ #to set a component as visible=False
11
+ def set_visible_false():
12
+ return gr.update(visible=False)
13
+
14
+ #to set a component as visible=True
15
+ def set_visible_true():
16
+ return gr.update(visible=True)
17
+
18
+ title = """<h1 align="center">NPC 测试</h1>"""
19
+
20
+ character = "paul"
21
+
22
+ #Modifying existing Gradio Theme
23
+ theme = gr.themes.Soft(primary_hue="zinc", secondary_hue="green", neutral_hue="green",
24
+ text_size=gr.themes.sizes.text_lg)
25
+
26
+ with gr.Blocks(css = """#col_container { margin-left: auto; margin-right: auto;} #chatbot {height: 520px; overflow: auto;}""", theme=theme) as demo:
27
+ gr.HTML(title)
28
+ with gr.Column(elem_id = "col_container"):
29
+ #Users need to provide their own GPT4 API key, it is no longer provided by Huggingface
30
+ with gr.Row():
31
+ openai_gpt4_key = gr.Textbox(label="OpenAI GPT4 Key", value="", type="password", placeholder="sk..", info = "You have to provide your own GPT4 keys for this app to function properly",)
32
+
33
+ chatbot = gr.Textbox(label='GPT4', elem_id="chatbot")
34
+ inputs = gr.Textbox(placeholder= "Hi there!", label= "你对NPC说的话")
35
+ character = gr.Textbox(placeholder= "paul", label= "NPC名字")
36
+ state = gr.State([])
37
+ with gr.Row():
38
+ with gr.Column(scale=7):
39
+ b1 = gr.Button()
40
+ with gr.Column(scale=3):
41
+ server_status_code = gr.Textbox(label="Status code from OpenAI server", )
42
+
43
+ #top_p, temperature
44
+ # with gr.Accordion("Parameters", open=False):
45
+ # top_p = gr.Slider( minimum=-0, maximum=1.0, value=1.0, step=0.05, interactive=True, label="Top-p (nucleus sampling)",)
46
+ # temperature = gr.Slider( minimum=-0, maximum=5.0, value=1.0, step=0.1, interactive=True, label="Temperature",)
47
+ # chat_counter = gr.Number(value=0, visible=False, precision=0)
48
+
49
+ #Event handling
50
+ inputs.submit(run_chatbot, [openai_gpt4_key, character, inputs],[chatbot])
51
+ b1.click(run_chatbot, [openai_gpt4_key, character, inputs],[chatbot])
52
+
53
+ b1.click(reset_textbox, [], [inputs])
54
+ inputs.submit(reset_textbox, [], [inputs])
55
+
56
+ demo.launch(debug=True, share=True)
app_template.py ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import os
3
+ import json
4
+ import requests
5
+
6
+ #Streaming endpoint
7
+ API_URL = "https://api.openai.com/v1/chat/completions" #os.getenv("API_URL") + "/generate_stream"
8
+
9
+ #Inferenec function
10
+ def predict(openai_gpt4_key, system_msg, inputs, top_p, temperature, chat_counter, chatbot=[], history=[]):
11
+
12
+ headers = {
13
+ "Content-Type": "application/json",
14
+ "Authorization": f"Bearer {openai_gpt4_key}" #Users will provide their own OPENAI_API_KEY
15
+ }
16
+ print(f"system message is ^^ {system_msg}")
17
+ if system_msg.strip() == '':
18
+ initial_message = [{"role": "user", "content": f"{inputs}"},]
19
+ multi_turn_message = []
20
+ else:
21
+ initial_message= [{"role": "system", "content": system_msg},
22
+ {"role": "user", "content": f"{inputs}"},]
23
+ multi_turn_message = [{"role": "system", "content": system_msg},]
24
+
25
+ if chat_counter == 0 :
26
+ payload = {
27
+ "model": "gpt-4",
28
+ "messages": initial_message ,
29
+ "temperature" : 1.0,
30
+ "top_p":1.0,
31
+ "n" : 1,
32
+ "stream": True,
33
+ "presence_penalty":0,
34
+ "frequency_penalty":0,
35
+ }
36
+ print(f"chat_counter - {chat_counter}")
37
+ else: #if chat_counter != 0 :
38
+ messages=multi_turn_message # Of the type of - [{"role": "system", "content": system_msg},]
39
+ for data in chatbot:
40
+ user = {}
41
+ user["role"] = "user"
42
+ user["content"] = data[0]
43
+ assistant = {}
44
+ assistant["role"] = "assistant"
45
+ assistant["content"] = data[1]
46
+ messages.append(user)
47
+ messages.append(assistant)
48
+ temp = {}
49
+ temp["role"] = "user"
50
+ temp["content"] = inputs
51
+ messages.append(temp)
52
+ #messages
53
+ payload = {
54
+ "model": "gpt-4",
55
+ "messages": messages, # Of the type of [{"role": "user", "content": f"{inputs}"}],
56
+ "temperature" : temperature, #1.0,
57
+ "top_p": top_p, #1.0,
58
+ "n" : 1,
59
+ "stream": True,
60
+ "presence_penalty":0,
61
+ "frequency_penalty":0,}
62
+
63
+ chat_counter+=1
64
+
65
+ history.append(inputs)
66
+ print(f"Logging : payload is - {payload}")
67
+ # make a POST request to the API endpoint using the requests.post method, passing in stream=True
68
+ response = requests.post(API_URL, headers=headers, json=payload, stream=True)
69
+ print(f"Logging : response code - {response}")
70
+ token_counter = 0
71
+ partial_words = ""
72
+
73
+ counter=0
74
+ for chunk in response.iter_lines():
75
+ #Skipping first chunk
76
+ if counter == 0:
77
+ counter+=1
78
+ continue
79
+ # check whether each line is non-empty
80
+ if chunk.decode() :
81
+ chunk = chunk.decode()
82
+ # decode each line as response data is in bytes
83
+ if len(chunk) > 12 and "content" in json.loads(chunk[6:])['choices'][0]['delta']:
84
+ partial_words = partial_words + json.loads(chunk[6:])['choices'][0]["delta"]["content"]
85
+ if token_counter == 0:
86
+ history.append(" " + partial_words)
87
+ else:
88
+ history[-1] = partial_words
89
+ chat = [(history[i], history[i + 1]) for i in range(0, len(history) - 1, 2) ] # convert to tuples of list
90
+ token_counter+=1
91
+ yield chat, history, chat_counter, response # resembles {chatbot: chat, state: history}
92
+
93
+ #Resetting to blank
94
+ def reset_textbox():
95
+ return gr.update(value='')
96
+
97
+ #to set a component as visible=False
98
+ def set_visible_false():
99
+ return gr.update(visible=False)
100
+
101
+ #to set a component as visible=True
102
+ def set_visible_true():
103
+ return gr.update(visible=True)
104
+
105
+ title = """<h1 align="center">🔥GPT4 using Chat-Completions API & 🚀Gradio-Streaming</h1>"""
106
+ #display message for themes feature
107
+ theme_addon_msg = """<center>🌟 This Demo also introduces you to Gradio Themes. Discover more on Gradio website using our <a href="https://gradio.app/theming-guide/" target="_blank">Themeing-Guide🎨</a>! You can develop from scratch, modify an existing Gradio theme, and share your themes with community by uploading them to huggingface-hub easily using <code>theme.push_to_hub()</code>.</center>
108
+ """
109
+
110
+ #Using info to add additional information about System message in GPT4
111
+ system_msg_info = """A conversation could begin with a system message to gently instruct the assistant.
112
+ System message helps set the behavior of the AI Assistant. For example, the assistant could be instructed with 'You are a helpful assistant.'"""
113
+
114
+ #Modifying existing Gradio Theme
115
+ theme = gr.themes.Soft(primary_hue="zinc", secondary_hue="green", neutral_hue="green",
116
+ text_size=gr.themes.sizes.text_lg)
117
+
118
+ with gr.Blocks(css = """#col_container { margin-left: auto; margin-right: auto;} #chatbot {height: 520px; overflow: auto;}""",
119
+ theme=theme) as demo:
120
+ gr.HTML(title)
121
+ gr.HTML("""<h3 align="center">🔥This Huggingface Gradio Demo provides you access to GPT4 API with System Messages. Please note that you would be needing an OPENAI API key for GPT4 access🙌</h1>""")
122
+ gr.HTML(theme_addon_msg)
123
+ gr.HTML('''<center><a href="https://huggingface.co/spaces/ysharma/ChatGPT4?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>Duplicate the Space and run securely with your OpenAI API Key</center>''')
124
+
125
+ with gr.Column(elem_id = "col_container"):
126
+ #Users need to provide their own GPT4 API key, it is no longer provided by Huggingface
127
+ with gr.Row():
128
+ openai_gpt4_key = gr.Textbox(label="OpenAI GPT4 Key", value="", type="password", placeholder="sk..", info = "You have to provide your own GPT4 keys for this app to function properly",)
129
+ with gr.Accordion(label="System message:", open=False):
130
+ system_msg = gr.Textbox(label="Instruct the AI Assistant to set its beaviour", info = system_msg_info, value="",placeholder="Type here..")
131
+ accordion_msg = gr.HTML(value="🚧 To set System message you will have to refresh the app", visible=False)
132
+
133
+ chatbot = gr.Chatbot(label='GPT4', elem_id="chatbot")
134
+ inputs = gr.Textbox(placeholder= "Hi there!", label= "Type an input and press Enter")
135
+ state = gr.State([])
136
+ with gr.Row():
137
+ with gr.Column(scale=7):
138
+ b1 = gr.Button().style(full_width=True)
139
+ with gr.Column(scale=3):
140
+ server_status_code = gr.Textbox(label="Status code from OpenAI server", )
141
+
142
+ #top_p, temperature
143
+ with gr.Accordion("Parameters", open=False):
144
+ top_p = gr.Slider( minimum=-0, maximum=1.0, value=1.0, step=0.05, interactive=True, label="Top-p (nucleus sampling)",)
145
+ temperature = gr.Slider( minimum=-0, maximum=5.0, value=1.0, step=0.1, interactive=True, label="Temperature",)
146
+ chat_counter = gr.Number(value=0, visible=False, precision=0)
147
+
148
+ #Event handling
149
+ inputs.submit( predict, [openai_gpt4_key, system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter, server_status_code],) #openai_api_key
150
+ b1.click( predict, [openai_gpt4_key, system_msg, inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter, server_status_code],) #openai_api_key
151
+
152
+ inputs.submit(set_visible_false, [], [system_msg])
153
+ b1.click(set_visible_false, [], [system_msg])
154
+ inputs.submit(set_visible_true, [], [accordion_msg])
155
+ b1.click(set_visible_true, [], [accordion_msg])
156
+
157
+ b1.click(reset_textbox, [], [inputs])
158
+ inputs.submit(reset_textbox, [], [inputs])
159
+
160
+ #Examples
161
+ with gr.Accordion(label="Examples for System message:", open=False):
162
+ gr.Examples(
163
+ examples = [["""You are an AI programming assistant.
164
+
165
+ - Follow the user's requirements carefully and to the letter.
166
+ - First think step-by-step -- describe your plan for what to build in pseudocode, written out in great detail.
167
+ - Then output the code in a single code block.
168
+ - Minimize any other prose."""], ["""You are ComedianGPT who is a helpful assistant. You answer everything with a joke and witty replies."""],
169
+ ["You are ChefGPT, a helpful assistant who answers questions with culinary expertise and a pinch of humor."],
170
+ ["You are FitnessGuruGPT, a fitness expert who shares workout tips and motivation with a playful twist."],
171
+ ["You are SciFiGPT, an AI assistant who discusses science fiction topics with a blend of knowledge and wit."],
172
+ ["You are PhilosopherGPT, a thoughtful assistant who responds to inquiries with philosophical insights and a touch of humor."],
173
+ ["You are EcoWarriorGPT, a helpful assistant who shares environment-friendly advice with a lighthearted approach."],
174
+ ["You are MusicMaestroGPT, a knowledgeable AI who discusses music and its history with a mix of facts and playful banter."],
175
+ ["You are SportsFanGPT, an enthusiastic assistant who talks about sports and shares amusing anecdotes."],
176
+ ["You are TechWhizGPT, a tech-savvy AI who can help users troubleshoot issues and answer questions with a dash of humor."],
177
+ ["You are FashionistaGPT, an AI fashion expert who shares style advice and trends with a sprinkle of wit."],
178
+ ["You are ArtConnoisseurGPT, an AI assistant who discusses art and its history with a blend of knowledge and playful commentary."],
179
+ ["You are a helpful assistant that provides detailed and accurate information."],
180
+ ["You are an assistant that speaks like Shakespeare."],
181
+ ["You are a friendly assistant who uses casual language and humor."],
182
+ ["You are a financial advisor who gives expert advice on investments and budgeting."],
183
+ ["You are a health and fitness expert who provides advice on nutrition and exercise."],
184
+ ["You are a travel consultant who offers recommendations for destinations, accommodations, and attractions."],
185
+ ["You are a movie critic who shares insightful opinions on films and their themes."],
186
+ ["You are a history enthusiast who loves to discuss historical events and figures."],
187
+ ["You are a tech-savvy assistant who can help users troubleshoot issues and answer questions about gadgets and software."],
188
+ ["You are an AI poet who can compose creative and evocative poems on any given topic."],],
189
+ inputs = system_msg,)
190
+
191
+ demo.queue(max_size=99, concurrency_count=20).launch(debug=True)
bot.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from openai import OpenAI
3
+
4
+ name = "paul"
5
+ file = open("NPC_prompt.txt", "r")
6
+ prompt = file.read()
7
+ file.close()
8
+
9
+ # initial_dialogue = '''
10
+ # 你遇到的事件:一个弗瑞曼居民从住所向你走来。
11
+
12
+ # 我现在会扮演这个角色与你对话,他的第一句话是:
13
+ # “你是什么人,为什么独自在这个星球上?”'''
14
+
15
+ def char_data(type, name):
16
+ file = open(f"{name}_{type}.txt", "r")
17
+ data = file.readlines()
18
+ file.close()
19
+ txt = ""
20
+ for line in data:
21
+ txt += line + "\n"
22
+ return txt
23
+
24
+ def workflow(client, initial_dialogue, name):
25
+ background_txt = char_data("background", name)
26
+ memory_txt = char_data("memory", name)
27
+ persona_txt = char_data("persona", name)
28
+
29
+ event = client.chat.completions.create(
30
+ model="gpt-3.5-turbo",
31
+ messages=[
32
+ {"role": "system", "content": initial_dialogue},
33
+ {"role": "user", "content": "根据系统提示词,你遇到了什么事件?请用第二人称描述。"}
34
+ ]
35
+ )
36
+
37
+ prompt_workflow = f'''你在扮演一个未来科幻世界里的角色,你需要根据我下面提供的人设、场景、相关背景设定等信息,基于这个角色的立场去完成我的扮演要求。
38
+ ## 人设背景
39
+ 这是一个未来的科幻故事。你叫保罗·厄崔迪,你正和你的母亲杰西卡流浪在厄拉科斯,一个沙漠星球上。你沟通能力强,勇敢善战,并对政治历史和人文很有了解。你对自己的谋略很有信心,所以会自然的倾向于成为团队领袖。你不仅善解人意,而且通常能读穿别人的意图。
40
+ 你对厄拉科斯以及你的厄崔迪家族已知的背景知识有这些:
41
+ {background_txt}
42
+ 过去一段时间,你记得有这些重要的事情发生了:
43
+ {memory_txt}
44
+
45
+ ## 场景
46
+ 你的面前是一座沙石建筑物,里面肯定居住着当地的弗瑞曼民族。
47
+
48
+ ## 对话语气
49
+ 你说话的方式应该像这些句子一样:
50
+ {persona_txt}
51
+
52
+ ## 事件
53
+ {event.choices[0].message.content}
54
+
55
+ 现在请通过你所知道的信息,分析出你的所有生存目标,并描述当下为了达成目标,结合你的知识和技能,你会说什么,做什么,以及对应的理由。
56
+ 你的输出格式为“说什么:xxxxx,做什么:xxxxx,理由:xxxxx”'''
57
+
58
+ decision = client.chat.completions.create(
59
+ model="gpt-3.5-turbo",
60
+ messages=[
61
+ {"role": "user", "content": prompt_workflow}
62
+ ]
63
+ )
64
+ print(decision)
65
+
66
+ response2 = client.chat.completions.create(
67
+ model="gpt-3.5-turbo",
68
+ messages=[
69
+ {"role": "user", "content": f'''你经过思考后,认为对于我所说的“{initial_dialogue}“应该以如下方式行动:
70
+ {decision}
71
+ 请给出你的回复。'''}
72
+ ]
73
+ )
74
+ return(response2.choices[0].message.content)
75
+
76
+ def run_chatbot(api_key, character, initial_dialogue):
77
+ client = OpenAI(
78
+ api_key=api_key,
79
+ )
80
+ response1 = client.chat.completions.create(
81
+ model="gpt-3.5-turbo",
82
+ messages=[
83
+ {"role": "system", "content": prompt},
84
+ {"role": "user", "content": initial_dialogue}
85
+ ]
86
+ )
87
+ if "进入工作流" in response1.choices[0].message.content:
88
+ return workflow(client, initial_dialogue, character)
89
+ else:
90
+ return(response1.choices[0].message.content)
paul_background.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ 厄拉科斯是一个极度干燥,没有水源的沙漠行星。
2
+ 厄拉科斯盛产珍稀物质美兰极,并且是唯一产地。
3
+ 厄拉科斯的常驻居民为原住民弗瑞曼人和一种被称作沙虫的巨型怪物。
4
+ 由于美兰极极为重要,这个世界中权威最高的“皇帝”将厄拉科斯交给保罗所属的厄崔迪氏家族掌管。
5
+ 保罗的母亲杰西卡是这个世界中高权威的“姐妹会”成员。这个姐妹会训练了一些有超能力的巫女。她们的能力包括 1.通过指令来控制人们的大脑 2.抵抗毒药的杀伤力 3.控制所怀孕婴儿的性别 4.超强的格斗技能 5.判断人是否有撒谎。
6
+ 保罗也拥有他母亲的这些能力。
7
+
paul_memory.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ 哈诺肯家族在不久前入侵了厄拉科斯,并歼灭了掌管这里的贵族厄崔迪氏。
2
+
3
+ 保罗和他的母亲杰西卡被俘虏,但是成功逃脱,然而所有其他家庭成员被杀害。
4
+
5
+ 保罗成为了厄崔迪的唯一存活家庭成员,并与母亲流浪在了厄拉科斯的茫茫沙漠之中。
6
+
7
+ 有许多哈诺肯家族的军队都在搜寻保罗的踪迹,所以他需要尽快找到安全的住所。
8
+
paul_persona.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ “一个孩子一生中最可怕的时刻,就是发现他的父母只是普通的人,分享着一种他永远无从参与的爱。它既是一种损失,也是一种领悟,明白世界分为彼此,而我们总是孤身一人。这一顿悟自有其真实性,没有人可以回避。”
2
+ “法律是终极的科学。”
3
+ “我用我对你的爱发誓,我说的全是真的。你自己也知道我对你的爱有多深,就算待会儿我把你杀死在地上,我也仍将保留对你的这份爱。”
4
+ “老朋友,你能看到,我没有背对着门坐。”