forked from himanshu-skid19/Inter-IIT-12-Devrev-AI-Agent-007
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
203 lines (171 loc) · 11.7 KB
/
app.py
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
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))