Similar as developing new agents, developing tools also need to follow a simple directory structure:
demo_author/
└── demo_tool/
│── entry.py # Contains your tool's main logic
└── config.json # Tool configuration and metadata
To use the agents in your local device, you need to put the tool folder under the cerebrum/tool/core folder and register your tool in the cerebrum/tool/core/registry.py
Create Tool Class
In entry.py, you'll need to implement a tool class which is identified in the config.json with two essential methods:
get_tool_call_format: Defines how LLMs should interact with your tool
run: Contains your tool's main functionality
Here's an example:
class Wikipedia:
def __init__(self):
super().__init__()
self.WIKIPEDIA_MAX_QUERY_LENGTH = 300
self.top_k_results = 3
self.lang = "en"
self.load_all_available_meta: bool = False
self.doc_content_chars_max: int = 4000
self.wiki_client = self.build_client()
def build_client(self):
try:
import wikipedia
wikipedia.set_lang(self.lang)
except ImportError:
raise ImportError(
"Could not import wikipedia python package. "
"Please install it with `pip install wikipedia`."
)
return wikipedia
def run(self, params) -> str:
"""Run Wikipedia search and get page summaries."""
query = params["query"]
page_titles = self.wiki_client.search(query, results=self.top_k_results)
summaries = []
for page_title in page_titles[: self.top_k_results]:
if wiki_page := self._fetch_page(page_title):
if summary := self._formatted_page_summary(page_title, wiki_page):
summaries.append(summary)
if not summaries:
return "No good Wikipedia Search Result was found"
return "\n\n".join(summaries)[: self.doc_content_chars_max]
@staticmethod
def _formatted_page_summary(page_title: str, wiki_page: Any) -> Optional[str]:
return f"Page: {page_title}\nSummary: {wiki_page.summary}"
def get_tool_call_format(self):
tool_call_format = {
"type": "function",
"function": {
"name": "wikipedia",
"description": "Provides relevant information about the destination",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query for Wikipedia"
}
},
"required": [
"query"
]
}
}
}
return tool_call_format
How to publish tools to the toolhub
Before publishing tools, you need to set up the configurations as the following:
{
"name": "wikipedia",
"description": [
"Search information in the wikipedia"
],
"meta": {
"author": "example",
"version": "0.0.1",
"license": "CC0"
},
"build": {
"entry": "tool.py",
"module": "Wikipedia"
}
}
then you can use the following command to upload tool
python cerebrum/commands/upload_tool.py \
--tool_path <tool_path> \ # tool path to the tool directory
--toolhub_url <toolhub_url> # the url of the toolhub, default is https://app.aios.foundation