starsaround commited on
Commit
747864d
1 Parent(s): 50ee399

Update app.py

Browse files

wiki and duckduckgo agent. check provider available

Files changed (1) hide show
  1. app.py +72 -14
app.py CHANGED
@@ -15,12 +15,21 @@ from g4f.Provider import (
15
  H2o,
16
  ChatgptLogin,
17
  DeepAi,
18
- GetGpt
 
 
 
 
 
 
 
 
19
  )
20
  import os
21
  import json
22
  import pandas as pd
23
-
 
24
  from models_for_langchain.model import CustomLLM
25
  from langchain.memory import ConversationBufferWindowMemory, ConversationTokenBufferMemory
26
  from langchain import LLMChain, PromptTemplate
@@ -31,6 +40,10 @@ from langchain.prompts import (
31
  AIMessagePromptTemplate,
32
  HumanMessagePromptTemplate,
33
  )
 
 
 
 
34
 
35
  provider_dict = {
36
  'Ails': Ails,
@@ -47,19 +60,39 @@ provider_dict = {
47
  'H2o': H2o,
48
  'ChatgptLogin': ChatgptLogin,
49
  'DeepAi': DeepAi,
50
- 'GetGpt': GetGpt
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
52
 
53
  def change_prompt_set(prompt_set_name):
54
  return gr.Dropdown.update(choices=list(prompt_set_list[prompt_set_name].keys()))
55
 
 
 
 
 
56
  def change_prompt(prompt_set_name, prompt_name):
57
  return gr.update(value=prompt_set_list[prompt_set_name][prompt_name])
58
 
59
  def user(user_message, history):
60
  return gr.update(value="", interactive=False), history + [[user_message, None]]
61
 
62
- def bot(message, history, model_name, provider_name, system_msg):
63
  response = ''
64
 
65
  if len(system_msg)>3000:
@@ -68,23 +101,45 @@ def bot(message, history, model_name, provider_name, system_msg):
68
  global template, memory
69
  llm.model_name = model_name
70
  llm.provider_name = provider_name
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  prompt = PromptTemplate(
72
- input_variables=["chat_history", "human_input"], template=template.format(system_instruction=system_msg)
73
- )
74
  llm_chain = LLMChain(
75
  llm=llm,
76
  prompt=prompt,
77
- verbose=False,
78
  memory=memory,
79
  )
80
  bot_msg = llm_chain.run(message)
81
  for c in bot_msg:
82
  response += c
83
- yield response
84
 
85
  def empty_chat():
86
  global memory
87
- memory = ConversationBufferWindowMemory(k=10, memory_key="chat_history")
88
  return None
89
 
90
  prompt_set_list = {}
@@ -112,23 +167,26 @@ with gr.Blocks() as demo:
112
  Human: {{human_input}}
113
  Chatbot:"""
114
 
115
- memory = ConversationBufferWindowMemory(k=10, memory_key="chat_history")
116
  with gr.Row():
117
- model_name = gr.Dropdown(['gpt-3.5-turbo', 'gpt-4'], value='gpt-3.5-turbo', label='模型')
118
- provider = gr.Dropdown(provider_dict.keys(), value='GetGpt', label='提供者', min_width=20)
 
119
  system_msg = gr.Textbox(value="你是一名助手,可以解答问题。", label='系统提示')
120
  gr.ChatInterface(bot,
121
  additional_inputs=[
122
  model_name,
123
  provider,
124
- system_msg]
 
125
  )
126
  with gr.Row():
127
  default_prompt_set = "1 中文提示词.json"
128
  prompt_set_name = gr.Dropdown(prompt_set_list.keys(), value=default_prompt_set, label='提示词集合')
129
- prompt_name = gr.Dropdown(prompt_set_list[default_prompt_set].keys(), label='提示词', min_width=20)
130
 
131
  prompt_set_name.select(change_prompt_set, prompt_set_name, prompt_name)
 
132
  prompt_name.select(change_prompt, [prompt_set_name, prompt_name], system_msg)
133
 
134
  demo.title = "AI Chat"
 
15
  H2o,
16
  ChatgptLogin,
17
  DeepAi,
18
+ GetGpt,
19
+ AItianhu,
20
+ EasyChat,
21
+ Acytoo,
22
+ DfeHub,
23
+ AiService,
24
+ BingHuan,
25
+ Wewordle,
26
+ ChatgptAi,
27
  )
28
  import os
29
  import json
30
  import pandas as pd
31
+ from langchain.tools.python.tool import PythonREPLTool
32
+ from langchain.agents.agent_toolkits import create_python_agent
33
  from models_for_langchain.model import CustomLLM
34
  from langchain.memory import ConversationBufferWindowMemory, ConversationTokenBufferMemory
35
  from langchain import LLMChain, PromptTemplate
 
40
  AIMessagePromptTemplate,
41
  HumanMessagePromptTemplate,
42
  )
43
+ from langchain.agents.agent_types import AgentType
44
+ from langchain.tools import WikipediaQueryRun
45
+ from langchain.utilities import WikipediaAPIWrapper
46
+ from langchain.tools import DuckDuckGoSearchRun
47
 
48
  provider_dict = {
49
  'Ails': Ails,
 
60
  'H2o': H2o,
61
  'ChatgptLogin': ChatgptLogin,
62
  'DeepAi': DeepAi,
63
+ 'GetGpt': GetGpt,
64
+ 'AItianhu': AItianhu,
65
+ 'EasyChat': EasyChat,
66
+ 'Acytoo': Acytoo,
67
+ 'DfeHub': DfeHub,
68
+ 'AiService': AiService,
69
+ 'BingHuan': BingHuan,
70
+ 'Wewordle': Wewordle,
71
+ 'ChatgptAi': ChatgptAi,
72
+ }
73
+
74
+ available_dict = {
75
+ 'gpt-3.5-turbo':['Acytoo', 'AiService', 'Aichat', 'GetGpt', 'Wewordle'],
76
+ 'gpt-4':['ChatgptAi'],
77
+ 'falcon-7b':['H2o'],
78
+ 'falcon-13b':['H2o'],
79
+ 'llama-13b':['H2o']
80
  }
81
 
82
  def change_prompt_set(prompt_set_name):
83
  return gr.Dropdown.update(choices=list(prompt_set_list[prompt_set_name].keys()))
84
 
85
+ def change_model(model_name):
86
+ new_choices = list(available_dict[model_name])
87
+ return gr.Dropdown.update(choices=new_choices, value=new_choices[0])
88
+
89
  def change_prompt(prompt_set_name, prompt_name):
90
  return gr.update(value=prompt_set_list[prompt_set_name][prompt_name])
91
 
92
  def user(user_message, history):
93
  return gr.update(value="", interactive=False), history + [[user_message, None]]
94
 
95
+ def bot(message, history, model_name, provider_name, system_msg, agent):
96
  response = ''
97
 
98
  if len(system_msg)>3000:
 
101
  global template, memory
102
  llm.model_name = model_name
103
  llm.provider_name = provider_name
104
+ if agent == '系统提示':
105
+ new_template = template.format(system_instruction=system_msg)
106
+ elif agent == '维基百科':
107
+ wikipedia = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
108
+ target = llm(f'用户的问题:```{message}```。为了回答用户的问题,你需要在维基百科上进行搜索,只有一次搜索的机会,请返回需要搜索的词汇,只需要返回一个英文词汇,不要加任何解释:')
109
+ new_template = template.format(system_instruction=wikipedia.run(str(target)))
110
+ elif agent == 'duckduckgo':
111
+ search = DuckDuckGoSearchRun()
112
+ target = llm(f'用户的问题:```{message}```。为了回答用户的问题,你需要在duckduckgo搜索引擎上进行搜索,只有一次搜索的机会,请返回需要搜索的内容,只需要返回纯英文的搜索语句,不要加任何解释:')
113
+ new_template = template.format(system_instruction=search.run(str(target)))
114
+ elif agent == 'python':
115
+ py_agent = create_python_agent(
116
+ llm,
117
+ tool=PythonREPLTool(), # REPL,一种代码交互方式,类似jupyter,可以执行代码
118
+ verbose=True,
119
+ # agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION
120
+ handle_parsing_errors=True, # 输出无法解析,返回给llm要求改正。
121
+ )
122
+ response = py_agent.run(message)
123
+ return str(response)
124
+ else:
125
+ new_template = template.format(system_instruction=system_msg)
126
  prompt = PromptTemplate(
127
+ input_variables=["chat_history", "human_input"], template=new_template
128
+ )
129
  llm_chain = LLMChain(
130
  llm=llm,
131
  prompt=prompt,
132
+ verbose=True,
133
  memory=memory,
134
  )
135
  bot_msg = llm_chain.run(message)
136
  for c in bot_msg:
137
  response += c
138
+ return response
139
 
140
  def empty_chat():
141
  global memory
142
+ memory = ConversationBufferWindowMemory(k=6, memory_key="chat_history")
143
  return None
144
 
145
  prompt_set_list = {}
 
167
  Human: {{human_input}}
168
  Chatbot:"""
169
 
170
+ memory = ConversationBufferWindowMemory(k=6, memory_key="chat_history")
171
  with gr.Row():
172
+ model_name = gr.Dropdown(list(available_dict.keys()), value='gpt-3.5-turbo', label='模型')
173
+ provider = gr.Dropdown(available_dict['gpt-3.5-turbo'], value='AiService', label='提供者', min_width=20)
174
+ agent = gr.Dropdown(['系统提示', '维基百科', 'duckduckgo'], value='系统提示', label='Agent')
175
  system_msg = gr.Textbox(value="你是一名助手,可以解答问题。", label='系统提示')
176
  gr.ChatInterface(bot,
177
  additional_inputs=[
178
  model_name,
179
  provider,
180
+ system_msg,
181
+ agent]
182
  )
183
  with gr.Row():
184
  default_prompt_set = "1 中文提示词.json"
185
  prompt_set_name = gr.Dropdown(prompt_set_list.keys(), value=default_prompt_set, label='提示词集合')
186
+ prompt_name = gr.Dropdown(prompt_set_list[default_prompt_set].keys(), label='提示词', min_width=5, container=True)
187
 
188
  prompt_set_name.select(change_prompt_set, prompt_set_name, prompt_name)
189
+ model_name.select(change_model, model_name, provider)
190
  prompt_name.select(change_prompt, [prompt_set_name, prompt_name], system_msg)
191
 
192
  demo.title = "AI Chat"