DevToolKit / agent.py
acecalisto3's picture
Update agent.py
672e877 verified
raw
history blame
3.39 kB
import os
import subprocess
import random
from huggingface_hub import InferenceClient
import gradio as gr
from safe_search import safe_search
from i_search import google
from i_search import i_search as i_s
from datetime import datetime
from utils import parse_action, parse_file_content, read_python_module_structure
now = datetime.now()
date_time_str = now.strftime("%Y-%m-%d %H:%M:%S")
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
VERBOSE = True
MAX_HISTORY = 100
# Prompts
ACTION_PROMPT = "action prompt"
ADD_PROMPT = "add prompt"
COMPRESS_HISTORY_PROMPT = "compress history prompt"
LOG_PROMPT = "log prompt"
LOG_RESPONSE = "log response"
MODIFY_PROMPT = "modify prompt"
PREFIX = "prefix"
SEARCH_QUERY = "search query"
READ_PROMPT = "read prompt"
TASK_PROMPT = "task prompt"
UNDERSTAND_TEST_RESULTS_PROMPT = "understand test results prompt"
def format_prompt_var(message, history):
prompt = "\n### Instruction:\n{}\n### History:\n{}".format(message, '\n'.join(history))
return prompt
def run_agent(instruction, history):
prompt = format_prompt_var(instruction, history)
response = ""
for chunk in generate(prompt, history[-MAX_HISTORY:], temperature=0.7):
response += chunk
if "\n\n### Instruction:" in chunk:
break
response_actions = []
for line in response.strip().split('\n'):
if line.startswith('action:'):
response_actions.append((line.replace('action: ', '')))
return response, response_actions
def generate(prompt, history, temperature):
seed = random.randint(1, 1111111111111111)
generate_kwargs = {
"temperature": temperature,
"max_new_tokens": 256,
"top_p": 0.95,
"repetition_penalty": 1.0,
"do_sample": True,
"seed": seed,
}
formatted_prompt = format_prompt_var(f"{prompt}", history)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
output = ""
for response in stream:
output += response.token.text
yield output
def create_interface():
global MAX_HISTORY
block = gr.Blocks()
chatbot = gr.Chatbot()
with block.title("Expert Web Developer Assistant"):
with block.tab("Conversation"):
txt = gr.Textbox(show_label=False, placeholder="Type something...")
btn = gr.Button("Send", variant="primary")
txt.submit(run_agent, inputs=[txt, chatbot], outputs=[chatbot, None])
txt.clear(None, [txt, chatbot]).then(_clear_history, chatbot, _update_chatbot_styles)
btn.click(_clear_history, chatbot, _update_chatbot_styles)
with block.tab("Settings"):
MAX_HISTORY_slider = gr.Slider(minimum=1, maximum=100, step=1, label="Max history", value=MAX_HISTORY)
MAX_HISTORY_slider.change(lambda x: setattr(block, "MAX_HISTORY", int(x)), MAX_HISTORY_slider)
return block
def _update_chatbot_styles(history):
num_messages = sum([1 for item in history if isinstance(item, tuple)])
gr.Chatbot.update({"num_messages": num_messages})
def _clear_history(history):
return [], []
# Exportable functions and variables
__all__ = [
"run_agent",
"create_interface",
"format_prompt_var",
"generate",
"MAX_HISTORY",
"client",
"VERBOSE",
"date_time_str",
]