| import pickle |
| import pandas as pd |
| import numpy as np |
|
|
| class ToolRegistry: |
| def __init__(self, tools): |
| self.tools = [] |
| self.next_id = 0 |
|
|
| for j in tools.values(): |
| for tool in j: |
| self.register_tool(tool) |
|
|
| docs = [] |
| for tool_id in range(len(self.tools)): |
| docs.append([int(tool_id), self.get_tool_by_id(int(tool_id))]) |
| self.document_df = pd.DataFrame(docs, columns=["docid", "document_content"]) |
|
|
| def register_tool(self, tool): |
| if self.validate_tool(tool): |
| tool["id"] = self.next_id |
| self.tools.append(tool) |
| self.next_id += 1 |
| else: |
| raise ValueError("Invalid tool format") |
|
|
| def validate_tool(self, tool): |
| required_keys = ["name", "description", "required_parameters"] |
| return all(key in tool for key in required_keys) |
|
|
| def get_tool_by_name(self, name): |
| for tool in self.tools: |
| if tool["name"] == name: |
| return tool |
| return None |
|
|
| def get_tool_by_id(self, tool_id): |
| for tool in self.tools: |
| if tool["id"] == tool_id: |
| return tool |
| return None |
|
|
| def get_id_by_name(self, name): |
| for tool in self.tools: |
| if tool["name"] == name: |
| return tool["id"] |
| return None |
|
|
| def get_name_by_id(self, tool_id): |
| for tool in self.tools: |
| if tool["id"] == tool_id: |
| return tool["name"] |
| return None |
|
|
| def list_tools(self): |
| return [{"name": tool["name"], "id": tool["id"]} for tool in self.tools] |
|
|
| def remove_tool_by_id(self, tool_id): |
| |
| tool = self.get_tool_by_id(tool_id) |
| if tool: |
| self.tools = [t for t in self.tools if t["id"] != tool_id] |
| return True |
| return False |
|
|
| def remove_tool_by_name(self, name): |
| |
| tool = self.get_tool_by_name(name) |
| if tool: |
| self.tools = [t for t in self.tools if t["name"] != name] |
| return True |
| return False |
|
|
| def save_registry(self, filename): |
| with open(filename, "wb") as file: |
| pickle.dump(self, file) |
|
|
| |
| |
|
|
| @staticmethod |
| def load_registry(filename): |
| with open(filename, "rb") as file: |
| return pickle.load(file) |
|
|