forked from himanshu-skid19/Inter-IIT-12-Devrev-AI-Agent-007
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate_api_toolset.py
169 lines (156 loc) · 8.75 KB
/
update_api_toolset.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
from imports import *
from retrieval import *
from prompt_templates import *
from hal_check import *
def API_CHOICE(n, tool_name, api_list):
l = []
apis = api_list.copy()
if tool_name in apis:
apis.remove(tool_name)
for i in range(n):
choice = random.choice(apis)
apis.remove(choice)
l.append(choice)
return l
def generate_examples(tool_name, api_list, store, num_examples = 2, arg_name = None):
APIs = API_CHOICE(2, tool_name, api_list)
if len(list(store.docstore._dict.values()))>=2:
few_shot_examples = random.sample(list(store.docstore._dict.values()), 2)
few_shot_examples = [few_shot_examples[0].page_content, few_shot_examples[1].page_content]
elif len(list(store.docstore._dict.values()))==1:
few_shot_examples = random.sample(list(store.docstore._dict.values()), 1)
few_shot_examples = [few_shot_examples[0].page_content]
else:
few_shot_examples=[]
examples = []
if arg_name is not None:
MODIFIED_ARG = f'Now you must only use {APIs} and {tool_name} to generate a query, its reasoning and the finar answer. You, also must use the argument {arg_name} for the tool {tool_name} to generate the query. Now generate a query and give your output in the form of the following dictionary.'
else:
MODIFIED_ARG = f'Now you must only use {APIs} and {tool_name} to generate a query, its reasoning and the finar answer. Now generate a query and give your output in the form of the following dictionary.'
for i in range(num_examples):
examples.append(generation_chain.run(API_LIST = api_list, FEW_SHOT = few_shot_examples, MODIFIED_ARG = MODIFIED_ARG))
return examples
api_weights = {'works_list': 0, 'prioritize_objects' : 0, 'add_work_items_to_sprint' : 0, 'get_sprint_id' : 0, 'get_similar_work_items' : 0, 'search_object_by_name' : 0,
'create_actionable_tasks_from_text' : 0, 'who_am_i' : 0, 'get_works_id' : 0, }
api_list = list(api_weights.keys())
# Function to add a new tool
def add_tool(api_list, name, description, available_tools, available_arguments, store):
available_tools.append(name)
api_list.append({"name": name, "description": description, "arguments": []})
available_arguments.append(f"{name}/")
example = generate_examples(name, api_list, store)
add_to_vector_store(store, example)
return api_list, available_tools, available_arguments
def delete_tool(api_list, tool_name, available_tools, available_arguments, arg_allowed_values_dict, args_in_list_dict, store):
delete_tool_examples(store, tool_name)
available_tools.remove(tool_name)
available_arguments = [s for s in available_arguments if not s.startswith(tool_name)]
arg_allowed_values_dict = {key: value for key, value in arg_allowed_values_dict.items() if not key.startswith(tool_name)}
args_in_list_dict = {key: value for key, value in args_in_list_dict.items() if not key.startswith(tool_name)}
api_list = [tool for tool in api_list if tool['name'] != tool_name]
return api_list, available_tools, available_arguments, arg_allowed_values_dict, args_in_list_dict, store
# Function to update a tool
def update_tool(api_list, old_tool_name, new_tool_name, new_description, available_tools, available_arguments, arg_allowed_values_dict, args_in_list_dict, store):
delete_tool_examples(store, old_tool_name)
for tool in api_list:
if tool['name'] == old_tool_name:
tool['name'] = new_tool_name
tool['description'] = new_description
break
example = generate_examples(new_tool_name, api_list, store, num_examples = 4)
add_to_vector_store(store, example)
available_tools.remove(old_tool_name)
available_tools.append(new_tool_name)
available_arguments = [s.replace(old_tool_name, new_tool_name, 1) if s.startswith(old_tool_name) else s for s in available_arguments]
keys_to_replace1 = [key for key in arg_allowed_values_dict if key.startswith(old_tool_name)]
for key in keys_to_replace1:
new_key = key.replace(old_tool_name, new_tool_name)
arg_allowed_values_dict[new_key] = arg_allowed_values_dict[key]
del arg_allowed_values_dict[key]
keys_to_replace2 = [key for key in args_in_list_dict if key.startswith(old_tool_name)]
for key in keys_to_replace2:
new_key = key.replace(old_tool_name, new_tool_name)
args_in_list_dict[new_key] = args_in_list_dict[key]
del args_in_list_dict[key]
return api_list, available_tools, available_arguments, arg_allowed_values_dict, args_in_list_dict
# Function to add an argument to a tool
def add_argument(api_list, tool_name, arg_name, arg_desc, arg_type, arg_allowed_values, available_arguments, arg_allowed_values_dict, args_in_list_dict, store):
delete_tool_examples(store, tool_name)
for tool in api_list:
if tool['name'] == tool_name:
tool['arguments'].append({
"argument_name": arg_name,
"argument_description": arg_desc,
"argument_type": arg_type
})
break
if 'array' in arg_type.lower() :
args_in_list_dict[f'{tool_name}/{arg_name}'] = 1
else:
args_in_list_dict[f'{tool_name}/{arg_name}'] = 0
example = generate_examples(tool_name, api_list, store, num_examples = 4)
add_to_vector_store(store, example)
available_arguments.append(f"{tool_name}/{arg_name}")
if len(arg_allowed_values) is not 0:
arg_allowed_values_dict[f'{tool_name}/{arg_name}'] = ast.literal_eval(arg_allowed_values)
return api_list, available_arguments, arg_allowed_values_dict, args_in_list_dict
# Function to delete an argument from a tool
def delete_argument(api_list, tool_name, arg_name, available_arguments, arg_allowed_values_dict, args_in_list_dict, store):
delete_tool_examples(store, tool_name, arg_name)
for tool in api_list:
if tool['name'] == tool_name:
tool['arguments'] = [arg for arg in tool['arguments'] if arg['argument_name'] != arg_name]
break
examples = generate_examples(tool_name, api_list, store)
add_to_vector_store(store, examples)
arg_to_delete = f"{tool_name}/{arg_name}"
available_arguments.remove(arg_to_delete)
if arg_to_delete in arg_allowed_values_dict:
del arg_allowed_values_dict[arg_to_delete]
if arg_to_delete in args_in_list_dict:
del args_in_list_dict[arg_to_delete]
return api_list, available_arguments, arg_allowed_values_dict, args_in_list_dict
# Function to update an argument
def update_argument(api_list, tool_name, old_arg_name, new_arg_name, new_arg_desc, new_arg_type, new_arg_allowed_values, available_arguments, arg_allowed_values_dict, args_in_list_dict, store):
delete_tool_examples(store, tool_name, old_arg_name)
for tool in api_list:
if tool['name'] == tool_name:
for arg in tool['arguments']:
if arg['argument_name'] == old_arg_name:
arg['argument_name'] = new_arg_name
arg['argument_description'] = new_arg_desc
arg['argument_type'] = new_arg_type
break
break
examples = generate_examples(tool_name, api_list, store, arg_name = new_arg_name)
add_to_vector_store(store, examples)
available_arguments.remove(f"{tool_name}/{old_arg_name}")
available_arguments.append(f"{tool_name}/{new_arg_name}")
if f"{tool_name}/{old_arg_name}" in arg_allowed_values_dict:
del arg_allowed_values_dict[f"{tool_name}/{old_arg_name}"]
if f"{tool_name}/{old_arg_name}" in args_in_list_dict:
del args_in_list_dict[f"{tool_name}/{old_arg_name}"]
if len(new_arg_allowed_values) is not 0:
arg_allowed_values_dict[f'{tool_name}/{new_arg_name}'] = ast.literal_eval(new_arg_allowed_values)
if 'array' in new_arg_type.lower() :
args_in_list_dict[f'{tool_name}/{new_arg_name}'] = 1
else:
args_in_list_dict[f'{tool_name}/{new_arg_name}'] = 0
return api_list, available_arguments, arg_allowed_values_dict, args_in_list_dict
# Function to delete multiple arguments from a tool
def delete_multiple_arguments(api_list, tool_name, arg_names, available_arguments, arg_allowed_values_dict, args_in_list_dict, store):
for arg_name in arg_names :
delete_tool_examples(store, tool_name, arg_name)
arg_to_delete = f"{tool_name}/{arg_name}"
available_arguments.remove(arg_to_delete)
if arg_to_delete in arg_allowed_values_dict:
del arg_allowed_values_dict[arg_to_delete]
if arg_to_delete in args_in_list_dict:
del args_in_list_dict[arg_to_delete]
for tool in api_list:
if tool['name'] == tool_name:
tool['arguments'] = [arg for arg in tool['arguments'] if arg['argument_name'] not in arg_names]
break
examples = generate_examples(tool_name, api_list, store)
add_to_vector_store(store, examples)
return api_list, available_arguments, arg_allowed_values_dict, args_in_list_dict