File size: 8,862 Bytes
f8f41b9 8e967a7 1d2148a 411007e a72034e 90729fc 8e967a7 7a27b40 411007e 951b467 474437d 951b467 8e967a7 90729fc f8f41b9 951b467 8e967a7 f8f41b9 951b467 8e967a7 474437d 8e967a7 2459b19 a72034e 2459b19 8e967a7 474437d 2459b19 474437d 8e967a7 951b467 8e967a7 90729fc 2a0c033 90729fc 474437d 90729fc 2a0c033 90729fc cbbcc75 90729fc 2459b19 474437d 2459b19 a72034e 2459b19 411007e 405c09f 2459b19 8e967a7 e5580aa 2459b19 405c09f 2459b19 a72034e 2459b19 7a27b40 a72034e 2459b19 a72034e 2459b19 405c09f 2459b19 405c09f 2459b19 7a27b40 2459b19 1d2148a 90729fc 2459b19 cbbcc75 405c09f 411007e 405c09f 411007e 7a27b40 8e967a7 474437d 2459b19 474437d a72034e 8ce2b62 |
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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
import gradio as gr
from langchain.document_loaders import TextLoader
from agents.tools.python_code_tool import generate_and_excute_python_code
from agents.tools.shell_tool import generate_and_excute_shell_code
from chains import HumanFeedBackChain, contextRewriteChain
from embedding import CustomEmbedding
from memories import HumenFeedbackBufferMemory
from agents.code_generate_agent import code_agent_executor, code_agent_tools
from agents.code_execute_agent import generate_and_excute_code_agent
baMemory = HumenFeedbackBufferMemory(
input_key="input", human_prefix="Answer", ai_prefix="AI")
baChain = HumanFeedBackChain(verbose=True, memory=baMemory)
"""读取document/business_context.py文件内容作为context"""
context_path = "./documents/bussiness_context/business_context.md"
def sendMessage(chatbot, input):
chatbot.append((
(None if len(input) == 0 else input), None))
return chatbot
def clearMemory(chatbot):
chatbot.clear()
if baMemory != None:
baMemory.clear()
return chatbot, ""
def loadContext():
textloader = TextLoader(context_path)
return textloader.load()[0].page_content
def saveContext(context):
with open(context_path, 'w') as f:
f.write(context)
def feedBack(context, story, chatbot=[], input=""):
if len(input) > 0:
context += (f"\n\n {input}")
saveContext(context)
response = baChain.run(
input=(input if len(input) == 0 else input), context=context, story=story, stop="\nAnswer:")
chatbot[-1][1] = response
return chatbot, "", context
customerEmbedding = CustomEmbedding()
faqChain = customerEmbedding.getFAQAgent()
code_agent_executor = code_agent_executor()
def faqFromLocal(input, chatbot=[]):
# response = faqChain({"question": f"{input}"})
response = faqChain.run(input)
chatbot.append((input, response))
return chatbot, ""
def generateEmbeddings(chatbot=[]):
response = customerEmbedding.calculateEmbedding()
chatbot.append((None, response))
return chatbot
def generateCode(input: str, chatbot=[], returnCode=False):
if len(input) <=0:
chatbot[-1][1] = None
return chatbot, ""
response = code_agent_executor.run(
input=(input if len(input) == 0 else input))
chatbot[-1][1] = response
return chatbot, ""
def generateCodeByMultiPart(context: str, relateCode: str, toolName: str, chatbot=[]):
input = f"请根据如下信息{toolName}:\n{context}\n\n{relateCode}"
return generateCode(input, chatbot)
def sendMessageByMultiPart(chatbot, context: str, relateCode: str, toolName: str):
input = f"请根据如下信息{toolName}:\n{context}\n\n{relateCode}"
chatbot.append((input, None))
return chatbot
def rewriteContext(input, chatbot):
response = contextRewriteChain.run(input=input, verbose=True)
chatbot.append((input, response))
return chatbot, response
def generateCodeAndExcute(input, chatbot=[], language="python"):
request = f'''write a {language} script to solve the following problem and return code and the results:\n{input}'''
result = generate_and_excute_code_agent.run(request)
chatbot.append((input, result))
return chatbot
def generatePyhonCodeAndExcute(input, chatbot=[]):
request = f'''write a {language} script to solve the following problem and return code and the results:\n{input}'''
result = generate_and_excute_python_code.run(request)
chatbot.append((input, result))
return chatbot
def generateShellCodeAndExcute(input, chatbot=[]):
request = f'''write a {language} script to solve the following problem and return code and the results:\n{input}'''
result = generate_and_excute_shell_code.run(request)
chatbot.append((input, result))
return chatbot
toolTextBox = []
with gr.Blocks() as demo:
with gr.Row():
with gr.Tab("Business"):
with gr.Row():
with gr.Column():
chatbot = gr.Chatbot().style()
with gr.Row():
txt = gr.Textbox(show_label=False, placeholder="Enter text and press enter").style(
container=False)
with gr.Column():
with gr.Row():
context = gr.Textbox(show_label=True, label="Context", placeholder="Enter Context").style(
container=False)
with gr.Row():
story = gr.Textbox(show_label=True, label="User Story", placeholder="Enter User Story").style(
container=False)
with gr.Row():
gr.Button("Generate Scenarios").click(clearMemory, [chatbot], [chatbot, txt]).then(sendMessage, [chatbot, txt], [chatbot]).then(
feedBack, [context, story, chatbot], [chatbot, txt])
with gr.Row():
with gr.Column(scale=5):
gr.Button("Rewrite Context").click(rewriteContext, [context, chatbot], [chatbot, context])
with gr.Column(scale=1):
gr.Button("Revert").click(loadContext, [], [context])
with gr.Row():
gr.Button("Save Context").click(saveContext, [context], [])
with gr.Tab("Tech"):
with gr.Row():
with gr.Column():
code_chatbot = gr.Chatbot().style()
with gr.Row():
code = gr.Textbox(show_label=False, label="Code Generate", placeholder="Enter text and press enter").style(
container=False)
with gr.Column():
with gr.Row():
code_context = gr.Textbox(show_label=True, label="Context", placeholder="Enter Context").style(
container=False)
with gr.Row():
relateCode = gr.Textbox(show_label=True, label="Relate Code", placeholder="Enter Relate Code").style(
container=False)
for index, tool in enumerate(code_agent_tools):
with gr.Row():
toolTextBox.append(gr.Textbox(show_label=False, visible=False, label=tool.name, value=tool.name).style())
gr.Button(tool.name).click(
sendMessageByMultiPart, [code_chatbot, code_context, relateCode, toolTextBox[index]], [code_chatbot]).then(
generateCodeByMultiPart, [code_context, relateCode, toolTextBox[index], code_chatbot], [code_chatbot, code])
with gr.Tab("FAQ"):
faq_chatbot = gr.Chatbot().style()
with gr.Row():
faq = gr.Textbox(show_label=False, placeholder="Enter text and press enter").style(
container=False)
with gr.Row():
gr.Button("Regenerate embedding").click(generateEmbeddings,[faq_chatbot], [faq_chatbot])
with gr.Tab("TOOL"):
with gr.Row():
with gr.Column():
tool_request = gr.Textbox(show_label=False, placeholder="Enter your tool Request").style(
container=False, show_copy_button=True)
language = gr.Dropdown(choices=["Python", "Shell"], label="Language", value="Python").style()
tool_button = gr.Button("Generate Code and Execute with agent")
python_tool_button = gr.Button("Generate Python Code and Execute")
shell_tool_button = gr.Button("Generate Sehll Code and Execute")
with gr.Column():
tool_chatbot = gr.Chatbot(elem_id="chatbot").style(container=False)
tool_button.click(generateCodeAndExcute,[tool_request, tool_chatbot, language], [tool_chatbot])
python_tool_button.click(generatePyhonCodeAndExcute,[tool_request, tool_chatbot], [tool_chatbot])
shell_tool_button.click(generateShellCodeAndExcute,[tool_request, tool_chatbot], [tool_chatbot])
txt.submit(sendMessage, [chatbot, txt], [chatbot]).then(
feedBack, [context, story, chatbot, txt], [chatbot, txt, context])
code.submit(sendMessage, [code_chatbot, code], [code_chatbot]).then(
generateCode, [code, code_chatbot], [code_chatbot, code])
faq.submit(faqFromLocal, [faq, faq_chatbot], [faq_chatbot, faq])
demo.load(loadContext, [], [context])
demo.launch()
|