Spaces:
Sleeping
Sleeping
File size: 12,172 Bytes
02b5c87 |
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 192 193 194 195 196 197 198 199 200 201 202 203 204 |
from imports import *
from pipelines import *
from hal_check import *
from prompts import *
from prompt_templates import *
from retrieval import *
from all_apis import *
from prompts import *
from update_api_toolset import *
from mem_check import *
warnings.filterwarnings('ignore')
# retrieval examples
retrieval_loader = CSVLoader(file_path=r'Seed_Dataset.csv', source_column = 'QUERY')
retrieval_data = retrieval_loader.load()
retrieval_embeddings = HuggingFaceEmbeddings()
if "available_tools" not in st.session_state:
st.session_state.available_tools = available_tools.copy()
if "available_arguments" not in st.session_state:
st.session_state.available_arguments = available_arguments.copy()
if "arg_allowed_values_dict" not in st.session_state:
st.session_state.arg_allowed_values_dict = arg_allowed_values_dict.copy()
if "args_in_list_dict" not in st.session_state:
st.session_state.args_in_list_dict = args_in_list_dict.copy()
if "api_list_updated" not in st.session_state:
st.session_state.api_list_updated = API_LIST.copy()
if "retrieval_vector_db" not in st.session_state:
st.session_state.retrieval_vector_db = FAISS.from_documents(
documents=retrieval_data,
embedding=retrieval_embeddings,
)
# Initialize session state for messages if not already present
if "messages" not in st.session_state:
st.session_state.messages = []
if "PAST_QUERY" not in st.session_state:
st.session_state.PAST_QUERY = "NO PAST QUERIES"
st.session_state.PAST_RESPONSE = "NO PAST RESPONSES"
st.session_state.PREV_QUERY = ""
st.session_state.PREV_RESPONSE = ""
# Function to clear the session state variable
def clear_api_list_updated():
st.session_state.api_list_updated = API_LIST.copy()
st.session_state.args_in_list_dict = args_in_list_dict.copy()
st.session_state.arg_allowed_values_dict = arg_allowed_values_dict.copy()
st.session_state.available_arguments = available_arguments.copy()
st.session_state.available_tools = available_tools.copy()
st.session_state.retrieval_vector_db = FAISS.from_documents(
documents=retrieval_data,
embedding=retrieval_embeddings,
)
# file_path = r'Updated_API_list.json'
# Page navigation
st.sidebar.title("Navigation")
page = st.sidebar.radio("Go to", ["Chatbot", "Tool Management", "API_LIST"])
if page == "Chatbot":
# Chatbot UI Code
st.title("DevRev AI Agent")
# Display chat messages from history
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Accept user input
if prompt := st.chat_input("What is up?"):
print("okay")
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
print(f"User query: {prompt}")
query = prompt
with st.chat_message("assistant"):
message_placeholder = st.empty()
json_answer = pipeline(query, st.session_state.api_list_updated, st.session_state.available_tools, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db) # allowed args dict ka placeholder modify karna bacha
full_response = json_answer
try:
message_placeholder.json(full_response)
except:
message_placeholder.markdown(full_response)
st.session_state.messages.append({"role": "assistant", "content": full_response})
elif page == "Tool Management":
print("TOOLS")
# Tool Management Code
st.title("API Tool Management")
# Load or initialize the API list in session state
if "api_list_updated" not in st.session_state:
st.session_state.api_list_updated = API_LIST
# Button to trigger the clearing action
if st.button("Reset API list"):
clear_api_list_updated()
# Add a new tool
st.header("Add a New Tool")
with st.form("new_tool_form"):
new_tool_name = st.text_input("Tool Name")
new_tool_desc = st.text_area("Tool Description")
submitted = st.form_submit_button("Add Tool")
if submitted:
st.session_state.api_list_updated, st.session_state.available_tools, st.session_state.available_arguments = add_tool(st.session_state.api_list_updated, new_tool_name, new_tool_desc, st.session_state.available_tools, st.session_state.available_arguments, st.session_state.retrieval_vector_db)
st.success("Tool Added Successfully!")
if st.session_state.api_list_updated:
selected_tool_name = st.selectbox("Select a tool", options=[tool["name"] for tool in st.session_state.api_list_updated])
selected_tool = next((tool for tool in st.session_state.api_list_updated if tool['name'] == selected_tool_name), None)
# Update or Delete Tools
st.header("Update or Delete Tools")
if selected_tool:
with st.form("update_delete_tool_form"):
st.write(f"Selected Tool: {selected_tool_name}")
new_name = st.text_input("New Name", value=selected_tool['name'])
new_description = st.text_area("New Description", value=selected_tool['description'])
update_button = st.form_submit_button("Update Tool")
delete_button = st.form_submit_button("Delete Tool")
if update_button:
st.session_state.api_list_updated, st.session_state.available_tools, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict = update_tool(st.session_state.api_list_updated, selected_tool_name, new_name, new_description, st.session_state.available_tools, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db)
st.success("Tool Updated Successfully!")
if delete_button:
st.session_state.api_list_updated, st.session_state.available_tools, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db = delete_tool(st.session_state.api_list_updated, selected_tool_name, st.session_state.available_tools, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db)
st.success("Tool Deleted Successfully!")
# Add a New Argument to a Tool
st.header("Add a New Argument to a Tool")
# if st.session_state.api_list_updated: # Check if there are tools available
# selected_tool_name = st.selectbox("Select a tool to add an argument", options=[tool["name"] for tool in st.session_state.api_list_updated])
if selected_tool:
with st.form("new_argument_form"):
new_arg_name = st.text_input("Argument Name")
new_arg_desc = st.text_area("Argument Description")
new_arg_allowed_values = st.text_area("Argument Allowed Values")
new_arg_type = st.text_input("Argument Type")
submitted_arg = st.form_submit_button("Add Argument")
if submitted_arg:
st.session_state.api_list_updated, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict= add_argument(st.session_state.api_list_updated, selected_tool_name, new_arg_name, new_arg_desc, new_arg_type, new_arg_allowed_values, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db)
arg_allowed_values_dict[f"{selected_tool_name}/{new_arg_name}"] = new_arg_allowed_values
st.success("Argument Added Successfully!")
else:
st.write("No tools available. Add a tool first.")
# Update or Delete Arguments
st.header("Update or Delete Arguments")
if selected_tool:
st.write(f"Selected Tool: {selected_tool_name}")
selected_arg_name = st.selectbox("Select an argument", options=[arg["argument_name"] for arg in selected_tool["arguments"]])
selected_arg = next((arg for arg in selected_tool['arguments'] if arg['argument_name'] == selected_arg_name), None)
if selected_arg:
with st.form("update_delete_arg_form"):
new_arg_name = st.text_input("New Argument Name", value=selected_arg['argument_name'])
new_arg_desc = st.text_area("New Argument Description", value=selected_arg['argument_description'])
if f"{selected_tool_name}/{selected_arg_name}" in arg_allowed_values_dict:
new_arg_allowed_values = st.text_area("New Argument Allowed Values", value=arg_allowed_values_dict[f"{selected_tool_name}/{selected_arg_name}"])
else:
new_arg_allowed_values = st.text_area("New Argument Allowed Values")
new_arg_type = st.text_input("New Argument Type", value=selected_arg['argument_type'])
update_arg_button = st.form_submit_button("Update Argument")
delete_arg_button = st.form_submit_button("Delete Argument")
if update_arg_button:
st.session_state.api_list_updated, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict = update_argument(st.session_state.api_list_updated, selected_tool_name, selected_arg_name, new_arg_name, new_arg_desc, new_arg_type, new_arg_allowed_values, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db)
arg_allowed_values_dict[f"{selected_tool_name}/{new_arg_name}"] = new_arg_allowed_values
st.success("Argument Updated Successfully!")
if delete_arg_button:
st.session_state.api_list_updated, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict = delete_argument(st.session_state.api_list_updated, selected_tool_name, selected_arg_name, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db)
st.success("Argument Deleted Successfully!")
# Delete Multiple Arguments
if selected_tool:
st.header("Delete Multiple Arguments from Tool")
all_arg_names = [arg["argument_name"] for arg in selected_tool["arguments"]]
selected_args_to_delete = st.multiselect("Select arguments to delete from the tool", options=all_arg_names)
if st.button("Delete Selected Arguments"):
st.session_state.api_list_updated, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict = delete_multiple_arguments(st.session_state.api_list_updated, selected_tool_name, selected_args_to_delete, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict, st.session_state.retrieval_vector_db)
st.success("Selected Arguments Deleted Successfully!")
# Display the current API list
st.header("Current API List")
st.text(json.dumps(st.session_state.api_list_updated, indent=2))
with open(file_path, 'w') as file:
json.dump(st.session_state.api_list_updated, file)
elif page == "API_LIST":
st.session_state.api_list_updated, st.session_state.available_tools, st.session_state.available_arguments, st.session_state.arg_allowed_values_dict, st.session_state.args_in_list_dict
st.write(len(st.session_state.retrieval_vector_db.docstore._dict))
|