From ccfb72887940d3a53c0a44a1329fd7009e1c09ea Mon Sep 17 00:00:00 2001 From: Grant Linville Date: Wed, 18 Dec 2024 15:39:32 -0500 Subject: [PATCH 1/2] docs: rebrand to obot Signed-off-by: Grant Linville --- docs/docs/01-overview.md | 19 ++-- docs/docs/02-concepts/01-agents.md | 42 +++++--- docs/docs/02-concepts/02-threads.md | 7 +- docs/docs/02-concepts/03-tools.md | 4 +- docs/docs/02-concepts/04-users.md | 4 +- docs/docs/02-concepts/05-oauth-apps.md | 18 +++- docs/docs/02-concepts/06-workflows.md | 15 ++- docs/docs/02-concepts/07-models.md | 7 +- docs/docs/03-tools/01-first-tool.mdx | 8 +- docs/docs/03-tools/02-integrating-oauth.md | 51 +++++++--- docs/docs/04-tutorials/01-github-assistant.md | 4 +- .../04-tutorials/02-knowledge-assistant.md | 4 +- .../04-tutorials/03-slack-alerts-assistant.md | 4 +- .../docs/04-tutorials/04-webhook-workflows.md | 41 ++++---- docs/docs/05-configuration/01-general.md | 18 ++-- .../05-configuration/02-model-providers.md | 86 ++++++++-------- .../05-configuration/03-auth-providers.md | 28 +++--- .../05-configuration/04-workspace-provider.md | 11 ++- docs/docusaurus.config.ts | 22 ++--- docs/static/img/obot-logo-blue-black-text.svg | 90 +++++++++++++++++ docs/static/img/obot-logo-blue-white-text.svg | 93 ++++++++++++++++++ .../static/img/otto8-logo-blue-black-text.svg | 92 ----------------- .../static/img/otto8-logo-blue-white-text.svg | 93 ------------------ docs/static/img/webhook-overview.png | Bin 136089 -> 75840 bytes 24 files changed, 417 insertions(+), 344 deletions(-) create mode 100644 docs/static/img/obot-logo-blue-black-text.svg create mode 100644 docs/static/img/obot-logo-blue-white-text.svg delete mode 100644 docs/static/img/otto8-logo-blue-black-text.svg delete mode 100644 docs/static/img/otto8-logo-blue-white-text.svg diff --git a/docs/docs/01-overview.md b/docs/docs/01-overview.md index 2584591e..16cb7b5a 100644 --- a/docs/docs/01-overview.md +++ b/docs/docs/01-overview.md @@ -5,7 +5,7 @@ slug: / import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -Otto8 is an open source enterprise agent platform. Key features include: +Obot is an open source enterprise agent platform. Key features include: - Ability to build agents to support a variety of usecases including copilots, assistants, and autonomous agentic workflows. - Integration with leading LLM providers - Built-in RAG for your data @@ -13,15 +13,20 @@ Otto8 is an open source enterprise agent platform. Key features include: - OAuth 2.0 authentication ### Getting Started -Launch Otto8 via docker: + +Launch Obot via Docker: + ```bash -docker run -d -p 8080:8080 -e "OPENAI_API_KEY=" ghcr.io/otto8-ai/otto8:latest +docker run -d -p 8080:8080 -e "OPENAI_API_KEY=" ghcr.io/obot-platform/obot:main ``` + Then visit http://localhost:8080. -The `otto8` CLI can be installed via brew on MacOS or Linux: +The `Obot` CLI can be installed via brew on macOS or Linux: + ```bash -brew tap otto8-ai/tap -brew install otto8 +brew tap obot-platform/tap +brew install obot ``` -or by downloading the binary for your platform from our [latest release](https://github.com/otto8-ai/otto8/releases/latest). + +or by downloading the binary for your platform from our [latest release](https://github.com/obot-platform/obot/releases/latest). diff --git a/docs/docs/02-concepts/01-agents.md b/docs/docs/02-concepts/01-agents.md index 7d2f9f49..4b0a8723 100644 --- a/docs/docs/02-concepts/01-agents.md +++ b/docs/docs/02-concepts/01-agents.md @@ -1,12 +1,15 @@ # Agents -An agent is a program that combines AI, a set of instructions, and access to your services and data to perform tasks, answer questions, and interact with its environment. Administrators create agents for end-users to interact with. Below are the key concepts and fields you need to understand to build an agent. +An agent is a program that combines AI, a set of instructions, and access to your services and data to perform tasks, answer questions, and interact with its environment. +Administrators create agents for end-users to interact with. Below are the key concepts and fields you need to understand to build an agent. ### Name and Description These fields will be shown to your end-users to help them identify and understand your agents. ### Instructions -Instructions let you guide your agent's behavior. You should use this field to specify things like the agent's objectives, goals, personality, and anything special it should know about its users or use cases. Here is an example set of instructions for a HR Assistant designed to answer employee's HR-related questions and requests: +Instructions let you guide your agent's behavior. +You should use this field to specify things like the agent's objectives, goals, personality, and anything special it should know about its users or use cases. +Here is an example set of instructions for a HR Assistant designed to answer employee's HR-related questions and requests: > You are an HR assistant for Acme Corporation. Employees of Acme Corporation will chat with you to get answers to HR related questions. If an employee seems unsatisfied with your answers, you can direct them to email hr@acmecorp.com. @@ -14,29 +17,44 @@ Instructions let you guide your agent's behavior. You should use this field to s You can specify the model each agent will use. If you make no selection, the system default will be used. For more on models, see our [Models concept](models). ### Tools -Tools dictate what an agent can do and how it can interact with the rest of the world. The tools shipped with Otto8 help make their purpose clear. A few examples include: +Tools dictate what an agent can do and how it can interact with the rest of the world. The tools shipped with Obot help make their purpose clear. A few examples include: - Creating an email draft - Sending a Slack message - Getting the contents of a web page You can configure an agent with **Agent Tools** and **User Tools**, described below: - **Agent Tools** will always be enabled on an agent. The agent will always be able to call them. -- **User Tools** are optional. They are available for a user to add to their chat with the agent. Users can add and remove these tools at will. +- **User Tools** are optional. They are available for a user to add to their chat with the agent. Users can add and remove these tools at will. ### Knowledge -Knowledge lets you supply your agent with information unique to its use case. You can upload files directly or pull in data from Notion, OneDrive, or a website. If you've configured your agent with knowledge, it will make queries to its knowledge database to help respond to the users' requests. +Knowledge lets you supply your agent with information unique to its use case. +You can upload files directly or pull in data from Notion, OneDrive, or a website. +If you've configured your agent with knowledge, it will make queries to its knowledge database to help respond to the users' requests. -You should supply a useful **Knowledge Description** to help the agent determine when it should make a query. Here is an example knowledge description for an HR Assistant that has documents regarding a companies HR policies and procedures: +You should supply a useful **Knowledge Description** to help the agent determine when it should make a query. +Here is an example knowledge description for an HR Assistant that has documents regarding a companies HR policies and procedures: > Detailed documentation about the human resource policies and procedures for Acme Corporation. ### Preview Chat and Threads -When creating an agent, you can chat with it to see how it behaves based on how you've configured it. You can even create access past preview threads to compare behavior as your iterate on it. +When creating an agent, you can chat with it to see how it behaves based on how you've configured it. +You can even create access past preview threads to compare behavior as your iterate on it. ### Publishing -When you publish an agent, you make it available for end-users to chat with. You'll first be asked to specify an alias for the agent. This alias will be used to generate a unique URL for the agent. Only alphanumeric characters and hyphens are allowed. Once you've picked an alias and hit the publish button, the agent will immediately be available for users to discover and chat with. - -The end-user chat interface is available at the root of the domain on which otto8 is running. For example, if you accessed the admin UI at `https://otto8.acmecorp.com/admin`, the end-user chat UI is available at `https://otto8.acmecorp.com/`. A publish agent will be available in the agent dropdown on this page as well as at its own dedicated page based on its alias. For example, if you gave your agent the alias `hr-assistant`, it would be available at https://otto8.acmecorp.com/hr-assistant`. - -It is possible to request the same alias for two agents. This is to allow you to seamlessly swap agents out without your users noticing. For example, suppose you've published your first agent with the alias `hr-assistant` and it's available at `https://otto8.acmecorp.com/hr-assistant`. If you want to experiment with a new version of your agent, you can create a brand new one, refine its behavior, and when you're ready, set its alias to `hr-assistant` as well. When you're ready to switch your users to the new agent, just unpublish your first agent. Users will be swapped over to the new agent without losing any of their chat history. \ No newline at end of file +When you publish an agent, you make it available for end-users to chat with. +You'll first be asked to specify an alias for the agent. This alias will be used to generate a unique URL for the agent. +Only alphanumeric characters and hyphens are allowed. +Once you've picked an alias and hit the publish button, the agent will immediately be available for users to discover and chat with. + +The end-user chat interface is available at the root of the domain on which Obot is running. +For example, if you accessed the admin UI at `https://obot.acmecorp.com/admin`, the end-user chat UI is available at `https://obot.acmecorp.com/`. +A published agent will be available in the agent dropdown on this page as well as at its own dedicated page based on its alias. +For example, if you gave your agent the alias `hr-assistant`, it would be available at https://obot.acmecorp.com/hr-assistant`. + +It is possible to request the same alias for two agents. +This is to allow you to seamlessly swap agents out without your users noticing. +For example, suppose you've published your first agent with the alias `hr-assistant` and it's available at `https://obot.acmecorp.com/hr-assistant`. +If you want to experiment with a new version of your agent, you can create a brand new one, refine its behavior, and when you're ready, set its alias to `hr-assistant` as well. +When you're ready to switch your users to the new agent, just unpublish your first agent. +Users will be swapped over to the new agent without losing any of their chat history. diff --git a/docs/docs/02-concepts/02-threads.md b/docs/docs/02-concepts/02-threads.md index c90efda4..eb664460 100644 --- a/docs/docs/02-concepts/02-threads.md +++ b/docs/docs/02-concepts/02-threads.md @@ -1,5 +1,8 @@ # Threads -A thread represents each chat conversation between an agent and a user or the execution of a workflow. On the Threads page, you'll find a list of all threads within your system. Clicking on a thread will display all related messages and metadata, such as files created or uploaded by the user. +A thread represents each chat conversation between an agent and a user or the execution of a workflow. +On the Threads page, you'll find a list of all threads within your system. +Clicking on a thread will display all related messages and metadata, such as files created or uploaded by the user. -Deleting a thread will permanently remove it from the system. If a deleted thread was associated with an agent, the user's chat history with that agent will be lost, and any new conversation will start afresh. \ No newline at end of file +Deleting a thread will permanently remove it from the system. +If a deleted thread was associated with an agent, the user's chat history with that agent will be lost, and any new conversation will start afresh. diff --git a/docs/docs/02-concepts/03-tools.md b/docs/docs/02-concepts/03-tools.md index edef4a7f..6b36a63b 100644 --- a/docs/docs/02-concepts/03-tools.md +++ b/docs/docs/02-concepts/03-tools.md @@ -1,10 +1,10 @@ # Tools -Tools define an agent's capabilities and determine how it interacts with the world. Otto8 includes a wide range of built-in tools. To help illustrate what tools can do, here are a few examples: +Tools define an agent's capabilities and determine how it interacts with the world. Obot includes a wide range of built-in tools. To help illustrate what tools can do, here are a few examples: - Creating email drafts - Sending Slack messages - Retrieving the contents of a web page -The **Tools** page displays all built-in tools available in Otto8, along with any custom tools you've added. The built-in tools are open source and can be accessed [here](https://github.com/otto8-ai/tools). +The **Tools** page displays all built-in tools available in Obot, along with any custom tools you've added. The built-in tools are open source and can be accessed [here](https://github.com/obot-platform/tools). For instructions on creating your own tools, refer to our [Tool Authoring Guide](/tools/first-tool). \ No newline at end of file diff --git a/docs/docs/02-concepts/04-users.md b/docs/docs/02-concepts/04-users.md index 01e8808f..4fc0b01f 100644 --- a/docs/docs/02-concepts/04-users.md +++ b/docs/docs/02-concepts/04-users.md @@ -1,3 +1,5 @@ # Users -The **Users** page displays all the users in your system. Users can be configured as admins by following our [configuration guide](/configuration/general). Non-admin users, referred to as "end-users" in this documentation, only have access to the chat interface available at the root of the domain where Otto8 is running. For example, if the admin interface is accessed at `https://otto8.acmecorp.com/admin`, the end-user chat interface would be available at `https://otto8.acmecorp.com/`. +The **Users** page displays all the users in your system. Users can be configured as admins by following our [configuration guide](/configuration/general). +Non-admin users, referred to as "end-users" in this documentation, only have access to the chat interface available at the root of the domain where Obot is running. +For example, if the admin interface is accessed at `https://obot.acmecorp.com/admin`, the end-user chat interface would be available at `https://obot.acmecorp.com/`. diff --git a/docs/docs/02-concepts/05-oauth-apps.md b/docs/docs/02-concepts/05-oauth-apps.md index a38ab0c4..a25357c8 100644 --- a/docs/docs/02-concepts/05-oauth-apps.md +++ b/docs/docs/02-concepts/05-oauth-apps.md @@ -1,15 +1,23 @@ # OAuth Apps -OAuth 2.0 (hereon referred to as simply OAuth) is an open standard for authorization, designed to allow applications to access a user’s resources on another service without sharing their password. It enables a secure and standardized way for apps to connect to external services. +OAuth 2.0 (hereafter referred to as simply OAuth) is an open standard for authorization, designed to allow applications to access a user’s resources on another service without sharing their password. +It enables a secure and standardized way for apps to connect to external services. -Otto8 makes use of OAuth to allow agents to interact with systems and services on behalf of the user. For example, through OAuth, an agent can check a user's Slack messages or even send a message as the user. +Obot makes use of OAuth to allow agents to interact with systems and services on behalf of the user. +For example, through OAuth, an agent can check a user's Slack messages or even send a message as the user. -If an Otto8 tool needs to talk to an external service and wants to use Oauth to do so, it will need a corresponding Oauth App. The built-in OAuth Apps corresponding to our built-in tools. +If an Obot tool needs to talk to an external service and wants to use Oauth to do so, it will need a corresponding Oauth App. +The built-in OAuth Apps corresponding to our built-in tools. -Because configuring an OAuth integration can be complicated, Otto8's built-in Oauth Apps are pre-configured to use a public gateway and ran by Acorn Labs. We've configured a corresponding OAuth application in each service provider (ie, GitHub, Google, and Microsoft) so that you can start using the tools without any additional configuration. Any of these integrations can be overridden to use your own custom integration. Each service provider is different, but you just need to follow the in-app instructions to configure them properly. +Because configuring an OAuth integration can be complicated, Obot's built-in OAuth Apps are pre-configured to use a public gateway and ran by Acorn Labs. +We've configured a corresponding OAuth application in each service provider (i.e., GitHub, Google, and Microsoft) so that you can start using the tools without any additional configuration. +Any of these integrations can be overridden to use your own custom integration. +Each service provider is different, but you just need to follow the in-app instructions to configure them properly. ### Custom OAuth Apps -You can configure a custom OAuth app to integrate with any service provider that supports OAuth. You can then use this when authoring your own custom tools that call that service. For more details, see our [Tool Authoring Guide](/tools/integrating-oauth). +You can configure a custom OAuth app to integrate with any service provider that supports OAuth. +You can then use this when authoring your own custom tools that call that service. +For more details, see our [Tool Authoring Guide](/tools/integrating-oauth). When configuring a custom OAuth App, you'll first be asked to provide the following values: - **Name** - This is just the friendly name you'll use to identify your app diff --git a/docs/docs/02-concepts/06-workflows.md b/docs/docs/02-concepts/06-workflows.md index b3634121..ef07a7fb 100644 --- a/docs/docs/02-concepts/06-workflows.md +++ b/docs/docs/02-concepts/06-workflows.md @@ -4,7 +4,7 @@ A workflow is a series of steps that can be easily expressed through natural lan **Parameters** are optional and allow you to specify inputs to your workflow. This is particularly useful when another workflow or an agent is calling your workflow. -**Steps** represent instructions to be carried out by the workflow. A step can have it's own set of tools and can even call out to other workflows or agents. Otto8 supports two special types of steps: **If Statements** and **While Loops**. +**Steps** represent instructions to be carried out by the workflow. A step can have it's own set of tools and can even call out to other workflows or agents. Obot supports two special types of steps: **If Statements** and **While Loops**. **If Statements** allow you to specify a condition and different actions to take based on whether that condition is true or false. @@ -12,16 +12,16 @@ A workflow is a series of steps that can be easily expressed through natural lan ### Triggering Workflows -You can trigger a workflow in a few ways. The firest is via the **invoke** cli command. Here's an example that invokes a workflow that has two parameters: +You can trigger a workflow in a few ways. The first is via the **invoke** cli command. Here's an example that invokes a workflow that has two parameters: ``` -otto8 --debug invoke w1km9xw "name='John Doe', address='123 Main Street'" +obot --debug invoke w1km9xw "name='John Doe', address='123 Main Street'" ``` You can find the workflow id by listing workflows: ``` -otto8 workflows +obot workflows ``` -Another way to trigger a workflow is via a **webhook**. This feature is still under development and doesn't yet have a corresponding CLI commmand, but you can create a webhook via **curl**. Here's an example: +Another way to trigger a workflow is via a **webhook**. This feature is still under development and doesn't yet have a corresponding CLI command, but you can create a webhook via **curl**. Here's an example: ``` curl -X POST 'http://127.0.0.1:8080/api/webhooks' -d '{ \ "description": "Webhook to respond to pagerduty events", \ @@ -47,11 +47,10 @@ If any of these headers are seen in the webhook request, they'll be passed to th } ``` -Services that offer webhook integration typically supply a shared secret used to compute a signature for the request and expect the webhook receiver to verify the signature, which otto8 does. Two such services are GitHub and PagerDuty. To understand how to set these fields, you can find their webhook documentation here: +Services that offer webhook integration typically supply a shared secret used to compute a signature for the request and expect the webhook receiver to verify the signature, which Obot does. +Two such services are GitHub and PagerDuty. To understand how to set these fields, you can find their webhook documentation here: - https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries - https://developer.pagerduty.com/docs/28e906a0e4f36-verifying-signatures Refer to your service's webhook documentation to find the values to set for these fields. - - diff --git a/docs/docs/02-concepts/07-models.md b/docs/docs/02-concepts/07-models.md index 84519b5b..a6f11a80 100644 --- a/docs/docs/02-concepts/07-models.md +++ b/docs/docs/02-concepts/07-models.md @@ -2,12 +2,13 @@ A model is an AI program that has been trained on data to perform tasks, recognize patterns, and make decisions. Popular examples include OpenAI's GPT-4o and Anthropic's Claude 3.5 Sonnet. -Otto8 comes with popular models for OpenAI preconfigured, but admins can modify them or create new ones. Agents, workflows, and tools can specify what model they should use. If they do not specify one, the system's default model is used. +Obot comes with popular models for OpenAI preconfigured, but admins can modify them or create new ones. +Agents, workflows, and tools can specify what model they should use. If they do not specify one, the system's default model is used. -To create a model for a provider other than OpenAI, you must first enable the corresponding **Model Provider**. Otto8 currently supports four model providers: +To create a model for a provider other than OpenAI, you must first enable the corresponding **Model Provider**. Obot currently supports four model providers: - OpenAI - Azure OpenAI - Anthropic - Ollama -You can learn more about how to configure Model providers in our [Model Provider Configuration Guide](/configuration/model-providers) \ No newline at end of file +You can learn more about how to configure Model providers in our [Model Provider Configuration Guide](/configuration/model-providers) diff --git a/docs/docs/03-tools/01-first-tool.mdx b/docs/docs/03-tools/01-first-tool.mdx index 6cb2f8f1..df2e8c87 100644 --- a/docs/docs/03-tools/01-first-tool.mdx +++ b/docs/docs/03-tools/01-first-tool.mdx @@ -11,11 +11,11 @@ import GoHashToolReadme from '../../snippets/go-hash-tool-readme.md.mdx'; # Writing your First Tool -While Otto8 ships with a robust library of built-in [Tools](../02-concepts/03-tools.md), building custom -Tools tailored to your ecosystem will supercharge your Agents. +While Obot ships with a robust library of built-in [Tools](../02-concepts/03-tools.md), building custom +tools tailored to your ecosystem will supercharge your Agents. -The following guides will show you how to write and package custom Tools in Python, Node.js, and Go; -unleashing the full potential of your Agents by enabling them to integrate with any data source, service, +The following guides will show you how to write and package custom tools in Python, Node.js, and Go; +unleashing the full potential of your agents by enabling them to integrate with any data source, service, or platform with just a few lines of code. diff --git a/docs/docs/03-tools/02-integrating-oauth.md b/docs/docs/03-tools/02-integrating-oauth.md index 9d2654d6..cebceccf 100644 --- a/docs/docs/03-tools/02-integrating-oauth.md +++ b/docs/docs/03-tools/02-integrating-oauth.md @@ -1,6 +1,7 @@ # Integrating Tools with OAuth -One of the most powerful features of Otto8 is its ability to integrate agents with your services using custom tools and OAuth apps. This guide will walk you through the process of creating and using these. We'll be integrating with [GitLab](https://about.gitlab.com/). +One of the most powerful features of Obot is its ability to integrate agents with your services using custom tools and OAuth apps. +This guide will walk you through the process of creating and using these. We'll be integrating with [GitLab](https://about.gitlab.com/). The high-level steps we'll follow are: 1. Create our custom tool @@ -13,7 +14,10 @@ The high-level steps we'll follow are: You'll need a [GitLab](https://gitlab.com/) account with at least one project (their equivalent of a GitHub repo). ### Create our custom tool -The source for the tool we are creating can be found at https://github.com/otto8-ai/gitlab-example-tool. This guide won't cover writing the python code for the tool, so feel free to clone or fork this repo. We will review the **tool.gpt** file: +The source for the tool we are creating can be found at https://github.com/otto8-ai/gitlab-example-tool. +This guide won't cover writing the Python code for the tool, so feel free to clone or fork this repo. +We will review the **tool.gpt** file: + ``` Name: List Projects Description: List the user's GitLab Projects @@ -29,27 +33,39 @@ GitLab !metadata:*:icon https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/gitlab-logo-duotone.svg ``` -This tool.gpt file just has a single tool name "List Projects" defined. You can define more tools by separating them with `---`. You can see that this tool defines a name, description, credential (we'll revisit this in a later step), and a command that is the actual code to be run. If you review the repository, you'll notice that `projects.py` is one of the files in the repository. -There are two metadata sections: one for category and one for icon. These will be used to display the tool in the Otto8 UI. +This tool.gpt file just has a single tool name "List Projects" defined. +You can define more tools by separating them with `---`. +You can see that this tool defines a name, description, credential (we'll revisit this in a later step), and a command that is the actual code to be run. +If you review the repository, you'll notice that `projects.py` is one of the files in the repository. + +There are two metadata sections: one for category and one for icon. These will be used to display the tool in the Obot UI. ### Create our OAuth App -Next we need to create our OAuth app in Otto8. This always involves also creating an equivalent resource in the service provider (GitLab in this case). Each service differs in how you do this. For GitLab, the guide is [here](https://docs.gitlab.com/ee/integration/oauth_provider.html). For this guide, follow the [Create a User Owned Application](https://docs.gitlab.com/ee/integration/oauth_provider.html#create-a-user-owned-application) instructions. +Next we need to create our OAuth app in Obot. This always involves also creating an equivalent resource in the service provider (GitLab in this case). +Each service differs in how you do this. For GitLab, the guide is [here](https://docs.gitlab.com/ee/integration/oauth_provider.html). +For this guide, follow the [Create a User Owned Application](https://docs.gitlab.com/ee/integration/oauth_provider.html#create-a-user-owned-application) instructions. -Once you get to the step where you're asked to supply a Redirect URL, go to your Otto8 installation, navigate to OAuth Apps, and click **Create a Custom OAuth App**. You're then asked to supply a name, integration (which will be auto-filled), authorization URL, and token URL. Set the name to "GitLab Example". This will cause the Integration field to be set to **gitlab-example**. +Once you get to the step where you're asked to supply a Redirect URL, go to your Obot installation, navigate to OAuth Apps, and click **Create a Custom OAuth App**. +You're then asked to supply a name, integration (which will be auto-filled), authorization URL, and token URL. Set the name to "GitLab Example". +This will cause the Integration field to be set to **gitlab-example**. GitLab's documentation doesn't make this clear, but the authorization and token URLs are as follows: - Authorization: https://gitlab.com/oauth/authorize - Token: https://gitlab.com/oauth/token -Set these values accordingly and click Next. You'll now be presented with a Redirect URL and be asked to supply a Client ID and Client Secret. First, return to GitLab, supply the Redirect URL, select the scopes **read_api* and **read_user**, and click **Save application**. You'll then be presented with the Client ID (which they call Application ID) and Client Secret (which they just call Secret). Return to Otto8, enter these values, and click Submit. This will create the OAuth app. +Set these values accordingly and click Next. You'll now be presented with a Redirect URL and be asked to supply a Client ID and Client Secret. +First, return to GitLab, supply the Redirect URL, select the scopes **read_api** and **read_user**, and click **Save application**. +You'll then be presented with the Client ID (which they call Application ID) and Client Secret (which they just call Secret). +Return to Obot, enter these values, and click Submit. This will create the OAuth app. ### Configure a credential tool that integrates our custom tool and OAuth app The credential tool can be found in our example repo at https://github.com/otto8-ai/gitlab-example-tool/blob/main/credential/tool.gpt. Here's the contents: + ``` Name: GitLab OAuth Credential -Share Credential: github.com/otto8-ai/tools/oauth2/tool.gpt as gitlab-example +Share Credential: github.com/obot-platform/tools/oauth2/tool.gpt as gitlab-example with GITLAB_OAUTH_TOKEN as env and gitlab-example as integration and "read_api read_user" as scope @@ -58,24 +74,31 @@ Type: credential Here is a breakdown of the above: - `Name` is not too important. It can be whatever name you choose -- `Share Credential: github.com/otto8-ai/tools/oauth2/tool.gpt as gitlab-example` causes this tool to use Otto8's OAuth framework. +- `Share Credential: github.com/obot-platform/tools/oauth2/tool.gpt as gitlab-example` causes this tool to use Obot's OAuth framework. - `gitlab-example as integration` ties this tool to the OAuth app we created because it matches the value set for the **integration** field. - `"read_api read_user" as scope` indicates the scopes that will be requested. They need to be the same as or a subset of the scopes granted when creating the OAuth application in GitLab. -- `Type: credential` tells Otto8 that this is a credential tool +- `Type: credential` tells Obot that this is a credential tool Returning to our custom tool, we use this credential tool via this line: + ``` Credential: ./credential ``` + That is a relative path reference to the credential directory where the credential tool is defined. -Once you've finished with all this, the tool must be pushed to a GitHub repository. Again, the original version of this tool is at https://github.com/otto8-ai/gitlab-example-tool. You can use this value directly if you did not choose to fork the repo. +Once you've finished with all this, the tool must be pushed to a GitHub repository. +Again, the original version of this tool is at https://github.com/otto8-ai/gitlab-example-tool. +You can use this value directly if you did not choose to fork the repo. ### Register the tool -Next we need to register the tool in your Otto8 installation. Go to the Tools page and click **Register New Tool**. Then, drop in the github repo where your tool lives. If you're using ours, you would drop in **github.com/otto8-ai/gitlab-example-tool**. After a few moments of processing, you should see a new GitLab section with one "List Projects" tool list at the bottom of the page. The tool is now ready for use. +Next we need to register the tool in your Obot installation. Go to the Tools page and click **Register New Tool**. +Then, drop in the GitHub repo where your tool lives. If you're using ours, you would drop in **github.com/otto8-ai/gitlab-example-tool**. +After a few moments of processing, you should see a new GitLab section with one "List Projects" tool list at the bottom of the page. The tool is now ready for use. ### Use the tool in an agent -Now, we can use the tool in an agent. Create a new agent, click **Add Tool** under the Agent Tools section, find your GitLab tool, and add it. After that, just ask "what are my gitlab projects?" in the chat. You should see the List Projects tool begin to get invoked and then be prompted to authenticate with GitLab. Authenticate with GitLab and you'll see the tool call complete successfully and your projects listed. +Now, we can use the tool in an agent. Create a new agent, click **Add Tool** under the Agent Tools section, find your GitLab tool, and add it. +After that, just ask "what are my gitlab projects?" in the chat. You should see the List Projects tool begin to get invoked and then be prompted to authenticate with GitLab. +Authenticate with GitLab, and you'll see the tool call complete successfully and your projects listed. That concludes our guide. Use this as a jumping off point to create your own integrations. - diff --git a/docs/docs/04-tutorials/01-github-assistant.md b/docs/docs/04-tutorials/01-github-assistant.md index 7332b0d5..08351f30 100644 --- a/docs/docs/04-tutorials/01-github-assistant.md +++ b/docs/docs/04-tutorials/01-github-assistant.md @@ -1,6 +1,6 @@ # Create a Personal GitHub Task Agent -This is a short tutorial demonstrating how to create an Otto8 agent that interacts with GitHub. The agent will help you keep track of the work assigned to you in GitHub. +This is a short tutorial demonstrating how to create an Obot agent that interacts with GitHub. The agent will help you keep track of the work assigned to you in GitHub. :::note As you configure the agent, changes will be saved and applied automatically. @@ -46,7 +46,7 @@ If you gave your agent instructions about a "status update", ask for one and see ## 4. Publishing the agent (optional) -If you're happy with the agent and want other users on your Otto8 instance to be able to use it, +If you're happy with the agent and want other users on your Obot instance to be able to use it, you can click the **Publish** button on the agent configuration page. This will make it available in the user UI for all users to chat with. Each user will have to sign in to GitHub on their own when prompted to do so by the agent. diff --git a/docs/docs/04-tutorials/02-knowledge-assistant.md b/docs/docs/04-tutorials/02-knowledge-assistant.md index 463e3b3d..f1a045fe 100644 --- a/docs/docs/04-tutorials/02-knowledge-assistant.md +++ b/docs/docs/04-tutorials/02-knowledge-assistant.md @@ -1,6 +1,6 @@ # Create an HR Q&A Agent -Otto8 makes it easy to create an agent to answer questions about a set of documents, using its built-in RAG feature. +Obot makes it easy to create an agent to answer questions about a set of documents, using its built-in RAG feature. This tutorial will demonstrate how to do this. :::note @@ -38,6 +38,6 @@ Start by asking it a simple question that can be answered by at least one of the ## 4. Publishing the agent (optional) -If you're happy with the agent and want other users on your Otto8 instance to be able to use it, +If you're happy with the agent and want other users on your Obot instance to be able to use it, you can click the **Publish** button on the agent configuration page. This will make it available in the user UI for all users to chat with. diff --git a/docs/docs/04-tutorials/03-slack-alerts-assistant.md b/docs/docs/04-tutorials/03-slack-alerts-assistant.md index 3b248d5b..772f8a25 100644 --- a/docs/docs/04-tutorials/03-slack-alerts-assistant.md +++ b/docs/docs/04-tutorials/03-slack-alerts-assistant.md @@ -1,6 +1,6 @@ # Create a Slack Alerts Agent -This is a short tutorial demonstrating how to create an Otto8 agent that helps with alerts in a Slack channel. +This is a short tutorial demonstrating how to create an Obot agent that helps with alerts in a Slack channel. :::note As you configure the agent, changes will be saved and applied automatically. @@ -46,7 +46,7 @@ You can also ask it to come up with remediation steps for you. ## 4. Publishing the agent (optional) -If you're happy with the agent and want other users on your Otto8 instance to be able to use it, +If you're happy with the agent and want other users on your Obot instance to be able to use it, you can click the **Publish** button on the agent configuration page. This will make it available in the user UI for all users to chat with. Each user will have to sign in to Slack on their own when prompted to do so by the agent. diff --git a/docs/docs/04-tutorials/04-webhook-workflows.md b/docs/docs/04-tutorials/04-webhook-workflows.md index d410c352..98f7179b 100644 --- a/docs/docs/04-tutorials/04-webhook-workflows.md +++ b/docs/docs/04-tutorials/04-webhook-workflows.md @@ -2,7 +2,10 @@ ## Overview -This guide demonstrates adding an automated AI workflow to an existing Kubernetes - PagerDuty monitoring setup. A webhook event will be added to PagerDuty that triggers automated troubleshooting and remediation in Otto8. The automation is capable of downloading a runbook specified by the alert, searching the knowledge base for workflows, and then executing the diagnostic steps against the cluster. The On-Call engineer will receive this information as notes in the PagerDuty incident. +This guide demonstrates adding an automated AI workflow to an existing Kubernetes - PagerDuty monitoring setup. +A webhook event will be added to PagerDuty that triggers automated troubleshooting and remediation in Obot. +The automation is capable of downloading a runbook specified by the alert, searching the knowledge base for workflows, and then executing the diagnostic steps against the cluster. +The On-Call engineer will receive this information as notes in the PagerDuty incident. ![Workflow Overview](/img/webhook-overview.png) @@ -11,12 +14,12 @@ This guide demonstrates adding an automated AI workflow to an existing Kubernete - A Kubernetes cluster that is configured to send alerts to PagerDuty. - A PagerDuty API Key. - Kubeconfig file from the Kubernetes cluster you would like to interact with. (The workflow users read/write permissions to the cluster ) -- Otto8 CLI installed and configured. See the [CLI installation instructions](/#getting-started) -- Otto8 server will need to be accessible from the internet. +- Obot CLI installed and configured. See the [CLI installation instructions](/#getting-started) +- Obot server will need to be accessible from the internet. -## Setup the workflow +## Set up the workflow -A workflow can be created in the Otto8 Admin UI, or it can be created using the Otto8 CLI. This example has several steps that lend it to be created via the CLI. +A workflow can be created in the Obot Admin UI, or it can be created using the Obot CLI. This example has several steps that lend it to be created via the CLI. First, create a new file called `issue-triage.yaml` and add the following content: @@ -47,10 +50,10 @@ steps: - step: “Get the PAGERDUTY_EMAIL env var. This is the user_email for all interactions with PagerDuty” tools: - sys.getenv - - step: "Get the env value for ${OTTO8_THREAD_ID}." + - step: "Get the env value for ${OBOT_THREAD_ID}." tools: - sys.getenv - - step: "Add a note to the incident that Otto is looking into the issue, and a link to ${OTTO8_SERVER_URL}/admin/thread/${OTTO8_THREAD_ID}" + - step: "Add a note to the incident that Obot is looking into the issue, and a link to ${OBOT_SERVER_URL}/admin/thread/${OBOT_THREAD_ID}" tools: - sys.getenv - step: "Get the incidents alerts" @@ -78,14 +81,14 @@ steps: Save the file and run the following command to create the workflow: ```bash -otto8 create issue-triage.yaml +obot create issue-triage.yaml ``` You will see an ID returned as part of the output, you will need this value in the next steps. ## Authenticate the workflow -Lets prepare our data for the workflow to interact with Kubernetes and PagerDuty. +Let's prepare our data for the workflow to interact with Kubernetes and PagerDuty. ### Prepare the `kubeconfig` file @@ -95,19 +98,19 @@ Your `kubeconfig` file needs to be base64 encoded, with the new lines removed. cat ./kubeconfig | base64 | tr -d '\n' > kubeconfig.base64 ``` -You will also need your PagerDuty API key, and the email address of the user that Otto will use to interact with PagerDuty. +You will also need your PagerDuty API key, and the email address of the user that Obot will use to interact with PagerDuty. ### Run the authentication command ```bash -otto8 workflow auth +obot workflow auth ``` Follow the prompts to authenticate. When asked for the `KUBECONFIG_FILE`, use the file notation `@kubeconfig.base64` to point directly to the file. ## Add Knowledge to the workflow -Visit the workflow in the Otto8 Admin UI. Click on `workflows > issue triage`. +Visit the workflow in the Obot Admin UI. Click on `workflows > issue triage`. Scroll to the bottom of the workflow form. Then click on the `+ Add Knowledge` button. Select `Website` as the source. @@ -123,19 +126,19 @@ This will take you to a form which will list the pages on the website. Select al On PagerDuty side, click integrations > Developer Tools > Generic Webhooks (v3) -Put the URL in it should be \/api/webhooks/default/pd-hook +Put the URL in. It should be `/api/webhooks/default/pd-hook` -Select the Scope type, In the demo setup, I had Scope Type = Service and Scope = Default Service +Select the Scope type. In the demo setup, I had Scope Type = Service and Scope = Default Service -Deselect All events, and select incident.triggered +Deselect all events, and select `incident.triggered` -Click ‘Add Webhook’ button. +Click `Add Webhook` button. -You will get a subscription created pop up, copy the secret so we can verify payloads. +You will get a "subscription created" pop up. Copy the secret so we can verify payloads. -### Create the webhook receiver in Otto8 +### Create the webhook receiver in Obot -Go to the Otto8 Admin UI, click on the `Webhooks` tab, and click `Create Webhook`. +Go to the Obot Admin UI, click on the `Webhooks` tab, and click `Create Webhook`. Name the webhook `pd-hook`, and use the secret you copied from PagerDuty. diff --git a/docs/docs/05-configuration/01-general.md b/docs/docs/05-configuration/01-general.md index f4af1f1f..24cea50a 100644 --- a/docs/docs/05-configuration/01-general.md +++ b/docs/docs/05-configuration/01-general.md @@ -1,10 +1,11 @@ # General -The Otto8 server is configured via environment variables. The following configuration is available: +The Obot server is configured via environment variables. The following configuration is available: #### `OPENAI_API_KEY` -The foundation of Otto8 is a large language model that supports function-calling. The default is OpenAI and specifying an OpenAI key here will ensure none of the users need to worry about specifying their own API key. +The foundation of Obot is a large language model that supports function-calling. +The default is OpenAI and specifying an OpenAI key here will ensure none of the users need to worry about specifying their own API key. :::note @@ -14,12 +15,15 @@ You can configure other [model-providers](02-model-providers.md) besides OpenAI. #### `GITHUB_AUTH_TOKEN` -Otto8 and its underlying tool GPTScript make heavy use of tools hosted on GitHub. Care is taken to cache these tools and only re-check when necessary. However, rate-limiting can happen. Setting a read-only token here can alleviate many of these issues. +Obot and its underlying tool GPTScript make heavy use of tools hosted on GitHub. Care is taken to cache these tools and only re-check when necessary. +However, rate-limiting can happen. Setting a read-only token here can alleviate many of these issues. -#### `OTTO8_SERVER_DSN` +#### `OBOT_SERVER_DSN` -Otto8 uses a database backend. By default, it will use a sqlite3 local database. This environment variable allows you to specify another database option. For example, you can use a postgres database with something like `OTTO8_SERVER_DSN=postgres://user:password@host/database`. +Obot uses a database backend. By default, it will use a sqlite3 local database. +This environment variable allows you to specify another database option. +For example, you can use a postgres database with something like `OBOT_SERVER_DSN=postgres://user:password@host/database`. -#### `OTTO8_SERVER_HOSTNAME` +#### `OBOT_SERVER_HOSTNAME` -Tell Otto8 what its server URL is so that things like OAuth, LLM proxying, and invoke URLs are handled correctly. +Tell Obot what its server URL is so that things like OAuth, LLM proxying, and invoke URLs are handled correctly. diff --git a/docs/docs/05-configuration/02-model-providers.md b/docs/docs/05-configuration/02-model-providers.md index faa2d17d..17e8a94c 100644 --- a/docs/docs/05-configuration/02-model-providers.md +++ b/docs/docs/05-configuration/02-model-providers.md @@ -1,6 +1,10 @@ # Model Providers -Each packaged model provider has a slightly different configuration. Below is a summary of the configuration options for each provider. However, the packaged model providers indicate which configuration parameters they require, and which ones aren't set in the current environment. For example, `/api/model-providers/azure-openai-model-provider` would indicate the status of the Azure OpenAI model provider. If this model provider hasn't been configured, then the API would return something like: +Each packaged model provider has a slightly different configuration. +Below is a summary of the configuration options for each provider. +However, the packaged model providers indicate which configuration parameters they require, and which ones aren't set in the current environment. +For example, `/api/model-providers/azure-openai-model-provider` would indicate the status of the Azure OpenAI model provider. +If this model provider hasn't been configured, then the API would return something like: ```json { @@ -9,23 +13,23 @@ Each packaged model provider has a slightly different configuration. Below is a "revision": "1033", "type": "modelprovider", "name": "azure-openai-model-provider", - "toolReference": "github.com/otto8-ai/tools/azure-openai-model-provider", + "toolReference": "github.com/obot-platform/tools/azure-openai-model-provider", "configured": false, "requiredConfigurationParameters": [ - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP" + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP" ], "missingConfigurationParameters": [ - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP" + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP" ] } @@ -34,12 +38,12 @@ Each packaged model provider has a slightly different configuration. Below is a To configure a model provider using the API, a `POST` request can be made to `/api/model-providers/azure-openai-model-provider/configure` with each required configuration parameter set in the body: ```json { - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT": "...", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID": "...", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET": "...", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID": "...", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID": "...", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP": "..." + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT": "...", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID": "...", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET": "...", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID": "...", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID": "...", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP": "..." } ``` @@ -52,15 +56,15 @@ Once the model provider has been configured, then the API would return something "revision": "1033", "type": "modelprovider", "name": "azure-openai-model-provider", - "toolReference": "github.com/otto8-ai/tools/azure-openai-model-provider", + "toolReference": "github.com/obot-platform/tools/azure-openai-model-provider", "configured": true, "requiredConfigurationParameters": [ - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID", - "OTTO8_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP" + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID", + "OBOT_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP" ] } ``` @@ -69,37 +73,37 @@ The UI also uses this API to indicate the status of the model provider. ## OpenAI -The OpenAI model provider is the default and has one required configuration parameter: `OTTO8_OPENAI_MODEL_PROVIDER_API_KEY`. +The OpenAI model provider is the default and has one required configuration parameter: `OBOT_OPENAI_MODEL_PROVIDER_API_KEY`. -The OpenAI model provider is also special: you can start Otto8 with the `OPENAI_API_KEY` environment variable set and Otto8 will automatically configure the OpenAI model provider. +The OpenAI model provider is also special: you can start Obot with the `OPENAI_API_KEY` environment variable set and Obot will automatically configure the OpenAI model provider. ## Azure OpenAI The Azure OpenAI model provider requires the following configuration parameters: -- `OTTO8_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT`: The endpoint to use, found by clicking on the "Deployment" name from the "Deployments" page of the Azure OpenAI Studio. The provider endpoint must be in the format `https://.openai.azure.com` - if your Azure OpenAI resource doesn't have an endpoint that looks like this, you need to create one. -- `OTTO8_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP`: The resource group name for the Azure OpenAI resource, found by clicking on the resource name in the top-right of the Azure OpenAI Studio. +- `OBOT_AZURE_OPENAI_MODEL_PROVIDER_ENDPOINT`: The endpoint to use, found by clicking on the "Deployment" name from the "Deployments" page of the Azure OpenAI Studio. The provider endpoint must be in the format `https://.openai.azure.com` - if your Azure OpenAI resource doesn't have an endpoint that looks like this, you need to create one. +- `OBOT_AZURE_OPENAI_MODEL_PROVIDER_RESOURCE_GROUP`: The resource group name for the Azure OpenAI resource, found by clicking on the resource name in the top-right of the Azure OpenAI Studio. -A service principal must be created with the (equivalent permissions of the) `Cognitive Services OpenAI User`. After this service principal is created, use the following parameters to configure the model provider in Otto8: -- `OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID`: The client ID for the app registration. -- `OTTO8_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET`: The client secret for the app registration. -- `OTTO8_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID`: The tenant ID for the app registration. -- `OTTO8_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID`: The subscription ID for the Azure account. -- `OTTO8_AZURE_OPENAI_MODEL_PROVIDER_API_VERSION`: (optional) Specify the API version to use with Azure OpenAI instead of `2024-10-21`. +A service principal must be created with the (equivalent permissions of the) `Cognitive Services OpenAI User`. After this service principal is created, use the following parameters to configure the model provider in Obot: +- `OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_ID`: The client ID for the app registration. +- `OBOT_AZURE_OPENAI_MODEL_PROVIDER_CLIENT_SECRET`: The client secret for the app registration. +- `OBOT_AZURE_OPENAI_MODEL_PROVIDER_TENANT_ID`: The tenant ID for the app registration. +- `OBOT_AZURE_OPENAI_MODEL_PROVIDER_SUBSCRIPTION_ID`: The subscription ID for the Azure account. +- `OBOT_AZURE_OPENAI_MODEL_PROVIDER_API_VERSION`: (optional) Specify the API version to use with Azure OpenAI instead of `2024-10-21`. :::note -When configuring models with the Azure OpenAI provider in Otto8, the "Target Model" should be the "Deployment" from Azure. +When configuring models with the Azure OpenAI provider in Obot, the "Target Model" should be the "Deployment" from Azure. ::: ## Anthropic -The Anthropic model provider requires one configuration parameter: `OTTO8_ANTHROPIC_MODEL_PROVIDER_API_KEY`. You can get an API key for your Anthropic account [here](https://console.anthropic.com/settings/keys). +The Anthropic model provider requires one configuration parameter: `OBOT_ANTHROPIC_MODEL_PROVIDER_API_KEY`. You can get an API key for your Anthropic account [here](https://console.anthropic.com/settings/keys). ## Voyage AI -Voyage is Anthropic's recommended text-embedding provider. The Voyage model provider requires `OTTO8_VOYAGE_MODEL_PROVIDER_API_KEY`. You can get an API key for your Voyage account [here](https://dash.voyageai.com/api-keys). +Voyage is Anthropic's recommended text-embedding provider. The Voyage model provider requires `OBOT_VOYAGE_MODEL_PROVIDER_API_KEY`. You can get an API key for your Voyage account [here](https://dash.voyageai.com/api-keys). ## Ollama -The Ollama model provider requires the configuration parameter `OTTO8_OLLAMA_MODEL_PROVIDER_HOST`. This host must point to a running instance of Ollama. For your reference, the default host and port for Ollama is `127.0.0.1:11434`. Otto8 doesn't set this by default. +The Ollama model provider requires the configuration parameter `OBOT_OLLAMA_MODEL_PROVIDER_HOST`. This host must point to a running instance of Ollama. For your reference, the default host and port for Ollama is `127.0.0.1:11434`. Obot doesn't set this by default. To set up and run an instance of Ollama, refer to the [Ollama GitHub readme](https://github.com/ollama/ollama/blob/main/README.md). diff --git a/docs/docs/05-configuration/03-auth-providers.md b/docs/docs/05-configuration/03-auth-providers.md index 14208ff0..fc827371 100644 --- a/docs/docs/05-configuration/03-auth-providers.md +++ b/docs/docs/05-configuration/03-auth-providers.md @@ -1,19 +1,21 @@ # Auth Providers -Authentication providers allow your Otto8 installation to authenticate users with the identity provider of your choice. All authentication providers are configured using environment variables. +Authentication providers allow your Obot installation to authenticate users with the identity provider of your choice. All authentication providers are configured using environment variables. ## Common Environment Variables -The following environment variables are required for all authentication providers. Setting the Client ID and Client Secret will mean that the authentication provider is enabled. The remaining configuration will be validated on startup. +The following environment variables are required for all authentication providers. +Setting the Client ID and Client Secret will mean that the authentication provider is enabled. +The remaining configuration will be validated on startup. -- `OTTO8_AUTH_CLIENT_ID`: The client ID of the authentication provider. -- `OTTO8_AUTH_CLIENT_SECRET`: The client secret of the authentication provider. -- `OTTO8_AUTH_COOKIE_SECRET`: The secret used to encrypt the authentication cookie. Must be of size 16, 24, or 32 bytes. -- `OTTO8_AUTH_ADMIN_EMAILS`: A comma-separated list of the email addresses of the admin users. +- `OBOT_AUTH_CLIENT_ID`: The client ID of the authentication provider. +- `OBOT_AUTH_CLIENT_SECRET`: The client secret of the authentication provider. +- `OBOT_AUTH_COOKIE_SECRET`: The secret used to encrypt the authentication cookie. Must be of size 16, 24, or 32 bytes. +- `OBOT_AUTH_ADMIN_EMAILS`: A comma-separated list of the email addresses of the admin users. The following environment variables are optional for all authentication providers: -- `OTTO8_AUTH_EMAIL_DOMAINS`: A comma-separated list of email domains allowed for authentication. Ignored if not set. -- `OTTO8_AUTH_CONFIG_TYPE`: The type of the authentication provider. For example, `google` or `github`. Defaults to `google`. +- `OBOT_AUTH_EMAIL_DOMAINS`: A comma-separated list of email domains allowed for authentication. Ignored if not set. +- `OBOT_AUTH_CONFIG_TYPE`: The type of the authentication provider. For example, `google` or `github`. Defaults to `google`. ## Google @@ -23,8 +25,8 @@ Google is the default authentication provider. There are currently no additional GitHub authentication has the following optional configuration: -- `OTTO8_AUTH_GITHUB_ORG`: The name of the organization allowed for authentication. Ignored if not set. -- `OTTO8_AUTH_GITHUB_TEAM`: The name of the team allowed for authentication. Ignored if not set. -- `OTTO8_AUTH_GITHUB_REPO`: Restrict logins to collaborators of this repository formatted as `orgname/repo`. Ignored if not set. -- `OTTO8_AUTH_GITHUB_TOKEN`: The token to use when verifying repository collaborators (must have push access to the repository). -- `OTTO8_AUTH_GITHUB_ALLOW_USERS`: A comma-separated list of users allowed to login even if they don't belong to the organization or team. \ No newline at end of file +- `OBOT_AUTH_GITHUB_ORG`: The name of the organization allowed for authentication. Ignored if not set. +- `OBOT_AUTH_GITHUB_TEAM`: The name of the team allowed for authentication. Ignored if not set. +- `OBOT_AUTH_GITHUB_REPO`: Restrict logins to collaborators of this repository formatted as `orgname/repo`. Ignored if not set. +- `OBOT_AUTH_GITHUB_TOKEN`: The token to use when verifying repository collaborators (must have push access to the repository). +- `OBOT_AUTH_GITHUB_ALLOW_USERS`: A comma-separated list of users allowed to log in even if they don't belong to the organization or team. \ No newline at end of file diff --git a/docs/docs/05-configuration/04-workspace-provider.md b/docs/docs/05-configuration/04-workspace-provider.md index 67482740..9cf445ec 100644 --- a/docs/docs/05-configuration/04-workspace-provider.md +++ b/docs/docs/05-configuration/04-workspace-provider.md @@ -1,10 +1,12 @@ # Workspace Provider -In Otto8, a workspace is where files are stored and manipulated by a user. By default, any workspace is a directory on local disk. However, is some server-based applications, this is not acceptable. The concept of a workspace provider is used to abstract away the concept of a workspace and use other options. +In Obot, a workspace is where files are stored and manipulated by a user. By default, any workspace is a directory on local disk. +However, in some server-based applications, this is not acceptable. +The concept of a workspace provider is used to abstract away the concept of a workspace and use other options. This section describes the configuration of the workspace provider. -#### `OTTO8_WORKSPACE_PROVIDER_TYPE` +#### `OBOT_WORKSPACE_PROVIDER_TYPE` The type of provider to use. The current options are `directory` or `s3`. Note that the `s3` provider is compatible with s3-compatible services like CloudFlare R2. @@ -12,13 +14,14 @@ The type of provider to use. The current options are `directory` or `s3`. Note t #### `WORKSPACE_PROVIDER_DATA_HOME` -Specify the directory where workspaces are nested. The default is `$XDG_CONFIG_HOME/otto8/workspace-provider`. +Specify the directory where workspaces are nested. The default is `$XDG_CONFIG_HOME/obot/workspace-provider`. ### The s3 provider configuration #### `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`, `WORKSPACE_PROVIDER_S3_BUCKET` -Specifying these variables allows you to configure access to an s3 or s3-compatible bucket for the workspace provider to use. If the `OTTO8_WORKSPACE_PROVIDER_TYPE` is `s3`, then all of these variables are required for proper configuration. +Specifying these variables allows you to configure access to an s3 or s3-compatible bucket for the workspace provider to use. +If the `OBOT_WORKSPACE_PROVIDER_TYPE` is `s3`, then all of these variables are required for proper configuration. #### `WORKSPACE_PROVIDER_S3_BASE_ENDPOINT` diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 224f977c..0255d0c4 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -5,13 +5,13 @@ import type * as Preset from '@docusaurus/preset-classic'; // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) const config: Config = { - title: 'Otto8 Docs', + title: 'Obot Docs', tagline: '', favicon: 'img/favicon.ico', - url: 'https://docs.otto8.ai', + url: 'https://docs.obot.ai', baseUrl: '/', - organizationName: 'otto8-ai', - projectName: 'otto8', + organizationName: 'obot-platform', + projectName: 'obot', onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'warn', @@ -26,7 +26,7 @@ const config: Config = { { docs: { sidebarPath: './sidebars.ts', - editUrl: 'https://github.com/otto8-ai/otto8/tree/main/docs', + editUrl: 'https://github.com/obot-platform/obot/tree/main/docs', routeBasePath: "/", // Serve the docs at the site's root }, theme: { @@ -43,16 +43,16 @@ const config: Config = { themeConfig: { // Replace with your project's social card - image: 'img/otto8-logo-blue-black-text.svg', + image: 'img/obot-logo-blue-black-text.svg', navbar: { logo: { - alt: 'Otto8 Logo', - src: 'img/otto8-logo-blue-black-text.svg', - srcDark: 'img/otto8-logo-blue-white-text.svg', + alt: 'Obot Logo', + src: 'img/obot-logo-blue-black-text.svg', + srcDark: 'img/obot-logo-blue-white-text.svg', }, items: [ { - href: "https://github.com/otto8-ai/otto8", + href: "https://github.com/obot-platform/obot", label: "GitHub", position: "right", }, @@ -68,7 +68,7 @@ const config: Config = { links: [ { label: "GitHub", - to: "https://github.com/otto8-ai/otto8", + to: "https://github.com/obot-platform/obot", }, { label: "Discord", diff --git a/docs/static/img/obot-logo-blue-black-text.svg b/docs/static/img/obot-logo-blue-black-text.svg new file mode 100644 index 00000000..e510f22a --- /dev/null +++ b/docs/static/img/obot-logo-blue-black-text.svg @@ -0,0 +1,90 @@ + + + + + + otto8 + + + + + + + + + + + + + + + + diff --git a/docs/static/img/obot-logo-blue-white-text.svg b/docs/static/img/obot-logo-blue-white-text.svg new file mode 100644 index 00000000..f921cf73 --- /dev/null +++ b/docs/static/img/obot-logo-blue-white-text.svg @@ -0,0 +1,93 @@ + + + + + + otto8 + + + + + + + + + + + + + + + + diff --git a/docs/static/img/otto8-logo-blue-black-text.svg b/docs/static/img/otto8-logo-blue-black-text.svg deleted file mode 100644 index ed08cd9e..00000000 --- a/docs/static/img/otto8-logo-blue-black-text.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - otto8 - - - - - - - - - - - - - - - - - diff --git a/docs/static/img/otto8-logo-blue-white-text.svg b/docs/static/img/otto8-logo-blue-white-text.svg deleted file mode 100644 index e1597933..00000000 --- a/docs/static/img/otto8-logo-blue-white-text.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - otto8 - - - - - - - - - - - - - - - - - diff --git a/docs/static/img/webhook-overview.png b/docs/static/img/webhook-overview.png index 12069e256ebca3316e6938b8607f358658d74467..9df89e9ad6e843ad203bd90d46f54ab3a094a0c5 100644 GIT binary patch literal 75840 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 j`QO9z|KG#(>*&PrmuW*gt)=$AfS Date: Wed, 18 Dec 2024 15:46:32 -0500 Subject: [PATCH 2/2] update snippets Signed-off-by: Grant Linville --- docs/snippets/go-hash-tool-readme.md.mdx | 106 +++++++++--------- docs/snippets/node-hash-tool-readme.md.mdx | 107 ++++++++++--------- docs/snippets/python-hash-tool-readme.md.mdx | 100 ++++++++--------- 3 files changed, 157 insertions(+), 156 deletions(-) diff --git a/docs/snippets/go-hash-tool-readme.md.mdx b/docs/snippets/go-hash-tool-readme.md.mdx index 3bf628a0..f942db8a 100644 --- a/docs/snippets/go-hash-tool-readme.md.mdx +++ b/docs/snippets/go-hash-tool-readme.md.mdx @@ -1,20 +1,20 @@ ## Writing your first tool in Go {#writing-your-first-tool-in-go-eb5bb8c4} -[go-hash-tool](https://github.com/otto8-ai/go-hash-tool) contains a reference `Go` implementation of the `Hash` Tool. +[go-hash-tool](https://github.com/obot-platform/go-hash-tool) contains a reference `Go` implementation of the `Hash` tool. -This guide walks through the structure and design of the Tool and outlines the packaging requirements for [Otto8](https://docs.otto8.ai/concepts/agents) +This guide walks through the structure and design of the tool and outlines the packaging requirements for [Obot](https://docs.obot.ai/concepts/agents) To clone this repo and follow along, run the following command: ```bash -git clone git@github.com:otto8-ai/go-hash-tool +git clone git@github.com:obot-platform/go-hash-tool ```
## Tool Repo Structure {#tool-repo-structure-eb5bb8c4} -The directory tree below highlights the files required to implement `Hash` in Go and package it for `Otto8`. +The directory tree below highlights the files required to implement `Hash` in Go and package it for Obot. ``` go-hash-tool @@ -25,21 +25,21 @@ go-hash-tool └── hash.go ``` -> **Note:** Most Tools implemented in Go will also have a `go.sum` file that is also required when present. +> **Note:** Most tools implemented in Go will also have a `go.sum`, which is required if the tool has dependencies. > It is not present in the reference implementation because it has no external dependencies and relies solely on the Go standard library.
## Defining the `Hash` Tool {#defining-the-hash-tool-eb5bb8c4} -The `tool.gpt` file contains [GPTScript Tool Definitions](https://docs.gptscript.ai/tools/gpt-file-reference) which describe a set of Tools that can be used by Agents in `Otto8`. -Every Tool repository must have a `tool.gpt` file in its root directory. +The `tool.gpt` file contains [GPTScript Tool Definitions](https://docs.gptscript.ai/tools/gpt-file-reference) which describe a set of tools that can be used by agents in Obot. +Every tool repository must have a `tool.gpt` file in its root directory. -The Tools defined in this file must have a descriptive `Name` and `Description` that will help Agents understand what the Tool does, what it returns (if anything), and all the `Parameters` it takes. -Agents use these details to infer a Tool's usage. -We call the section of a Tool definition that contains this info a `Preamble`. +The tools defined in this file must have a `Name` and `Description` that will help agents understand what the tool does, what it returns (if anything), and all the `Parameters` it takes. +Agents use these details to infer a tool's usage. +We call the section of a tool definition that contains this info a `Preamble`. -We want the `Hash` Tool to return the hash of some given `data`. It would also be nice to support a few different algorithms for the Agent to choose from. +We want the `Hash` tool to return the hash of some given `data`. It would also be nice to support a few different algorithms for the agent to choose from. Let's take a look at the `Preamble` for `Hash` to see how that's achieved: ```yaml @@ -51,14 +51,14 @@ Param: algo: The algorithm to generate a hash with. Supports "sha256" and "md5". Breaking this down a bit: -- The `Preamble` above declares a Tool named `Hash`. -- The `Param` fields enumerate the arguments that an Agent must provide when calling `Hash`, `data` and `algo`. +- The `Preamble` above declares a tool named `Hash`. +- The `Param` fields enumerate the arguments that an agent must provide when calling `Hash`, `data` and `algo`. - In this case, the description of the `algo` parameter outlines the valid options (`sha256` or `md5`) and defines a default value (`sha256`) - The `Description` explains what `Hash` returns with respect to the given arguments; the hash of `data` using the algorithm selected with `algo`.
-Immediately below the `Preamble` is the `Tool Body`, which tells `Otto8` how to execute the Tool: +Immediately below the `Preamble` is the `Tool Body`, which tells Obot how to execute the tool: ```bash #!{GPTSCRIPT_TOOL_DIR}/bin/gptscript-go-tool hash @@ -66,17 +66,17 @@ Immediately below the `Preamble` is the `Tool Body`, which tells `Otto8` how to This is where the magic happens. -To oversimplify, when an Agent calls the `Hash` Tool, `Otto8` reads this line and then: +To simplify, when an agent calls the `Hash` tool, Obot reads this line and then: -1. Downloads the appropriate `Go` tool chain -2. Sets up a working directory for the Tool +1. Downloads the appropriate `Go` toolchain +2. Sets up a working directory for the tool 3. Runs `go build` to install dependencies (from `go.mod` and `go.sum`) and build a binary named `gptscript-go-tool` (`gptscript-go-tool.exe` on Windows) 4. Projects the call arguments onto environment variables (`DATA` and `ALGO`) -5. Runs `gptscript-go-tool hash`. +5. Runs `gptscript-go-tool hash`
-Putting it all together, here's the complete definition of the `Hash` Tool: +Putting it all together, here's the complete definition of the `Hash` tool: ```yaml Name: Hash @@ -91,14 +91,14 @@ Param: algo: The algorithm to generate a hash with. Default is "sha256". Support ## Tool Metadata {#tool-metadata-eb5bb8c4} -The `tool.gpt` file also provides the following metadata for use in `Otto8`: +The `tool.gpt` file also provides the following metadata for use in Obot: -- `!metadata:*:category` which tags Tools with the `Crypto` category to promote organization and discovery -- `!metadata:*:icon` which assigns `https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-duotone.svg` as the Tool icon +- `!metadata:*:category` which tags tools with the `Crypto` category to promote organization and discovery +- `!metadata:*:icon` which assigns `https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-duotone.svg` as the tool icon
-> **Note:** `*` is a wild card pattern that applies the metadata to all Tools in the `tool.gpt` file. +> **Note:** `*` is a wildcard pattern that applies the metadata to all tools in the `tool.gpt` file. ```yaml --- @@ -112,7 +112,7 @@ https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-d

- Note: Metadata can be applied to a specific Tool by either specifying the exact name (e.g. !metadata:Hash:category) or by adding the metadata directly to a Tool's Preamble + Note: Metadata can be applied to a specific tool by either specifying the exact name (e.g. !metadata:Hash:category) or by adding the metadata directly to a tool's Preamble ```yaml @@ -152,9 +152,9 @@ https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-d ## Implementing Business Logic {#implementing-business-logic-eb5bb8c4} -The `main.go` file is the entry point of the `gptscript-go-tool` binary that is executed by `Otto8` when the `Hash` Tool is called. +The `main.go` file is the entry point of the `gptscript-go-tool` binary that is executed by Obot when the `Hash` tool is called. -Let's walk through the the code to understand what happens at runtime: +Let's walk through the code to understand what happens at runtime: ```go // ... @@ -175,9 +175,9 @@ if res != "" { } ``` -This code implements a simple CLI responsible for dispatching the `commands.Hash` function on request -- when `hash` is passed in as an argument -- after extracting the Tool arguments, `data` and `algo`, from the respective environment variables. +This code implements a simple CLI responsible for dispatching the `commands.Hash` function on request -- when `hash` is passed in as an argument -- after extracting the tool arguments, `data` and `algo`, from the respective environment variables. -It also ensures that the return value and errors of the call to `commands.Hash` are written to stdout. This is crucial because only stdout is returned to the Agent, while stderr is discarded. +It also ensures that the return value and errors of the call to `commands.Hash` are written to stdout. This is crucial because only stdout is returned to the agent, while stderr is discarded.
@@ -186,7 +186,7 @@ It also ensures that the return value and errors of the call to `commands.Hash`
-For example, to add business logic for a new Tool to verify a hash, we just have to tack on `verify` case: +For example, to add business logic for a new tool to verify a hash, we just have to tack on `verify` case: ```go // ... @@ -198,7 +198,7 @@ default: //... ``` -The Body of the `Verify` Tool definition would then simply pass `verify` to `gptscript-go-tool` instead of `hash`: +The Body of the `Verify` tool definition would then simply pass `verify` to `gptscript-go-tool` instead of `hash`: ```yaml Name: Verify @@ -211,7 +211,7 @@ Name: Verify
-The `commands.Hash` function implements the bulk of the `Hash` Tool's business logic. +The `commands.Hash` function implements the bulk of the `Hash` tool's business logic. It starts off by validating the `data` and `algo` arguments. @@ -234,12 +234,12 @@ func Hash(data, algo string) (string, error) { ``` When an argument is invalid, the function returns an error that describes the validation issue in detail. -The goal is to provide useful information that an Agent can use to construct valid arguments for future calls. +The goal is to provide useful information that an agent can use to construct valid arguments for future calls. For example, when an invalid `algo` argument is provided, the code returns an error that contains the complete list of valid algorithms.
-Once it determines that all of the arguments are valid, it then calculates the hash and writes a JSON object to stdout. +Once it determines that all the arguments are valid, it calculates the hash and writes a JSON object to stdout. This object contains both the hash and the algorithm used to generate it. ```go @@ -257,7 +257,7 @@ This object contains both the hash and the algorithm used to generate it. ``` > **Note:** Producing structured data with extra contextual info (e.g. the algorithm) is considered good form. -> It's a pattern that improves the Agent's ability to correctly use the Tool's result over time. +> It's a pattern that improves the agent's ability to correctly use the tool's result over time.
Complete main.go and hash.go @@ -270,7 +270,7 @@ import ( "fmt" "os" - "github.com/otto8-ai/go-hash-tool/commands" + "github.com/obot-platform/go-hash-tool/commands" ) func main() { @@ -373,7 +373,7 @@ func keys[V any](m map[string]V) []string { ## Testing `main.go` Locally {#testing-main-go-locally-eb5bb8c4} -Before adding a Tool to `Otto8`, verify that the Go business logic works on your machine. +Before adding a tool to Obot, verify that the Go business logic works on your machine. To do this, run through the following steps in the root of your local fork: @@ -383,10 +383,10 @@ To do this, run through the following steps in the root of your local fork: make build ``` -2. Run the Tool with some test arguments: +2. Run the tool with some test arguments: | **Command** | **Output** | - | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | + | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `DATA='foo' bin/gptscript-go-tool hash` | `{ "algo": "sha256", "hash": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae" }` | | `DATA='' bin/gptscript-go-tool hash` | `Error: A data argument must be provided` | | `DATA='foo' ALGO='md5' bin/gptscript-go-tool hash` | `{ "algo": "md5", "hash": "acbd18db4cc2f85cedef654fccc4a4d8" }` | @@ -394,14 +394,14 @@ To do this, run through the following steps in the root of your local fork:
-## Adding The `Hash` Tool to `Otto8` {#adding-the-hash-tool-to-otto8-eb5bb8c4} +## Adding the `Hash` tool to Obot {#adding-the-hash-tool-to-obot-eb5bb8c4} -Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto8` by performing the steps below: +Before a tool can be used by an agent, an admin must first add the tool to Obot by performing the steps below: 1.
- Navigate to the Otto8 admin UI in a browser and open the Tools page by clicking the Tools button in the left drawer + Navigate to the Obot admin UI in a browser and open the Tools page by clicking the Tools button in the left drawer
- Open The Tools Page
@@ -409,15 +409,15 @@ Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto 2.
Click the Register New Tool button on the right
- Click The Register New Tool Button
3.
- Type the Tool repo reference into the modal's input box and click Register Tool + Type the tool repo reference into the modal's input box and click Register Tool
- Enter Tool Repo Reference
@@ -427,35 +427,35 @@ Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto
Once the tool has been added, you can search for it by category or name on the Tools page to verify
- Search For Newly Added Tools
-## Using The `Hash` Tool in an Agent {#using-the-hash-tool-in-an-agent-eb5bb8c4} +## Using The `Hash` tool in an agent {#using-the-hash-tool-in-an-agent-eb5bb8c4} -To use the `Hash` Tool in an Agent, open the Agent's Edit page, then: +To use the `Hash` tool in an agent, open the agent's Edit page, then: 1.
Click the Add Tool button under either the Agent Tools or User Tools sections
- Click The Add Tool Button
2.
- Search for "Hash" or "Crypto" in the Tool search pop-out and select the Hash Tool + Search for "Hash" or "Crypto" in the tool search pop-out and select the Hash tool
- Add Hash Tool To Agent
3.
- Ask the Agent to generate a hash + Ask the agent to generate a hash
- Ask The Agent To Generate a Hash
diff --git a/docs/snippets/node-hash-tool-readme.md.mdx b/docs/snippets/node-hash-tool-readme.md.mdx index ae3fecf6..b01ac1ee 100644 --- a/docs/snippets/node-hash-tool-readme.md.mdx +++ b/docs/snippets/node-hash-tool-readme.md.mdx @@ -1,19 +1,19 @@ ## Writing your first tool in Node.js (with Typescript) {#writing-your-first-tool-in-node-js-with-typescript-aeed7f15} -[node-hash-tool](https://github.com/otto8-ai/node-hash-tool) contains a reference Typescript `Node.js` implementation of the `Hash` Tool. +[node-hash-tool](https://github.com/obot-platform/node-hash-tool) contains a reference TypeScript Node.js implementation of the `Hash` tool. -This guide walks through the structure and design of the Tool and outlines the packaging requirements for [Otto8](https://docs.otto8.ai/concepts/agents) +This guide walks through the structure and design of the tool and outlines the packaging requirements for [Obot](https://docs.obot.ai/concepts/agents) To clone this repo and follow along, run the following command: ```bash -git clone git@github.com:otto8-ai/node-hash-tool +git clone git@github.com:obot-platform/node-hash-tool ```
## Tool Repo Structure {#tool-repo-structure-aeed7f15} -The directory tree below highlights the files required to implement `Hash` in Typescript and package it for `Otto8`. +The directory tree below highlights the files required to implement `Hash` in TypeScript and package it for Obot. ``` node-hash-tool @@ -26,21 +26,21 @@ node-hash-tool    └── tools.ts ``` -> **Note:** The `tsconfig.json` file is only required for tools written in Typescript. +> **Note:** The `tsconfig.json` file is only required for tools written in TypeScript. > It is not necessary for tools written in JavaScript.
-## Defining the `Hash` Tool {#defining-the-hash-tool-aeed7f15} +## Defining the `Hash` tool {#defining-the-hash-tool-aeed7f15} -The `tool.gpt` file contains [GPTScript Tool Definitions](https://docs.gptscript.ai/tools/gpt-file-reference) which describe a set of Tools that can be used by Agents in `Otto8`. +The `tool.gpt` file contains [GPTScript Tool Definitions](https://docs.gptscript.ai/tools/gpt-file-reference) which describe a set of tools that can be used by agents in Obot. Every Tool repository must have a `tool.gpt` file in its root directory. -The Tools defined in this file must have a descriptive `Name` and `Description` that will help Agents understand what the Tool does, what it returns (if anything), and all the `Parameters` it takes. -Agents use these details to infer a Tool's usage. -We call the section of a Tool definition that contains this info a `Preamble`. +The tools defined in this file must have a `Name` and `Description` that will help agents understand what the tool does, what it returns (if anything), and all the `Parameters` it takes. +Agents use these details to infer a tool's usage. +We call the section of a tool definition that contains this info a `Preamble`. -We want the `Hash` Tool to return the hash of some given `data`. It would also be nice to support a few different algorithms for the Agent to choose from. +We want the `Hash` tool to return the hash of some given `data`. It would also be nice to support a few different algorithms for the agent to choose from. Let's take a look at the `Preamble` for `Hash` to see how that's achieved: ```yaml @@ -52,14 +52,14 @@ Param: algo: The algorithm to generate a hash with. Supports "sha256" and "md5". Breaking this down a bit: -- The `Preamble` above declares a Tool named `Hash`. -- The `Param` fields enumerate the arguments that an Agent must provide when calling `Hash`, `data` and `algo`. +- The `Preamble` above declares a tool named `Hash`. +- The `Param` fields enumerate the arguments that an agent must provide when calling `Hash`, `data` and `algo`. - In this case, the description of the `algo` parameter outlines the valid options (`sha256` or `md5`) and defines a default value (`sha256`) - The `Description` explains what `Hash` returns with respect to the given arguments; the hash of `data` using the algorithm selected with `algo`.
-Immediately below the `Preamble` is the `Tool Body`, which tells `Otto8` how to execute the Tool: +Immediately below the `Preamble` is the `Tool Body`, which tells Obot how to execute the tool: ```bash #!/usr/bin/env npm --silent --prefix ${GPTSCRIPT_TOOL_DIR} run tool -- hash @@ -67,17 +67,17 @@ Immediately below the `Preamble` is the `Tool Body`, which tells `Otto8` how to This is where the magic happens. -To oversimplify, when an Agent calls the `Hash` Tool, `Otto8` reads this line and then: +To simplify, when an Agent calls the `Hash` tool, Obot reads this line and then: -1. Downloads the appropriate `Node.js` tool chain (`node` and `npm`) -2. Sets up a working directory for the Tool -3. Installs the dependencies from the Tool's `package.json` and `package-lock.json` +1. Downloads the appropriate `Node.js` toolchain (`node` and `npm`) +2. Sets up a working directory for the tool +3. Installs the dependencies from the tool's `package.json` and `package-lock.json` 4. Projects the call arguments onto environment variables (`DATA` and `ALGO`) -5. Runs `npm --silent --prefix ${GPTSCRIPT_TOOL_DIR} run tool -- hash`. +5. Runs `npm --silent --prefix ${GPTSCRIPT_TOOL_DIR} run tool -- hash`
-Putting it all together, here's the complete definition of the `Hash` Tool. +Putting it all together, here's the complete definition of the `Hash` tool. ```yaml Name: Hash @@ -92,14 +92,14 @@ Param: algo: The algorithm to generate a hash with. Default is "sha256". Support ## Tool Metadata {#tool-metadata-aeed7f15} -The `tool.gpt` file also provides the following metadata for use in `Otto8`: +The `tool.gpt` file also provides the following metadata for use in Obot: -- `!metadata:*:category` which tags Tools with the `Crypto` category to promote organization and discovery -- `!metadata:*:icon` which assigns `https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-duotone.svg` as the Tool icon +- `!metadata:*:category` which tags tools with the `Crypto` category to promote organization and discovery +- `!metadata:*:icon` which assigns `https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-duotone.svg` as the tool icon
-> **Note:** `*` is a wild card pattern that applies the metadata to all Tools in the `tool.gpt` file. +> **Note:** `*` is a wildcard pattern that applies the metadata to all tools in the `tool.gpt` file. ```yaml --- @@ -113,7 +113,7 @@ https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-d
- Note: Metadata can be applied to a specific Tool by either specifying the exact name (e.g. !metadata:Hash:category) or by adding the metadata directly to a Tool's Preamble + Note: Metadata can be applied to a specific tool by either specifying the exact name (e.g. !metadata:Hash:category) or by adding the metadata directly to a tool's Preamble ```yaml @@ -173,9 +173,9 @@ This means that when the `Tool Body` is executed, the effective command that run node --no-warnings --loader ts-node/esm src/tools.ts hash ``` -> **Note:** The `--loader ts-node/esm` option, in conjunction with the contents of `tsconfig.json`, is the "special sauce" that lets us run Typescript code directly without transpiling it to JavaScript first. +> **Note:** The `--loader ts-node/esm` option, in conjunction with the contents of `tsconfig.json`, is the "special sauce" that lets us run TypeScript code directly without transpiling it to JavaScript first. -To summarize, when the `Hash` Tool is called by an Agent, `src/tools.ts` gets run with `hash` as an argument. +To summarize, when the `Hash` tool is called by an agent, `src/tools.ts` gets run with `hash` as an argument. Let's walk through the `src/tools.ts` to understand what happens at runtime: @@ -199,7 +199,8 @@ try { } ``` -This code implements a simple CLI that wraps business logic in a try/catch block and forwards any exceptions to stdout. Writing errors to stdout instead of stderr is crucial because only stdout is returned to the Agent, while sdterr is discarded. +This code implements a simple CLI that wraps business logic in a try/catch block and forwards any exceptions to stdout. +Writing errors to stdout instead of stderr is crucial because only stdout is returned to the agent, while stderr is discarded.
@@ -208,7 +209,7 @@ This code implements a simple CLI that wraps business logic in a try/catch block
-For example, if we wanted to add a new Tool to verify a given hash, we'd add a `verify` case: +For example, if we wanted to add a new tool to verify a given hash, we'd add a `verify` case: ```typescript switch (cmd) { @@ -222,7 +223,7 @@ switch (cmd) { } ``` -And the Body of the `Verify` Tool would pass `verify` to the `tool` script instead of `hash`: +And the body of the `Verify` tool would pass `verify` to the `tool` script instead of `hash`: ```yaml Name: Verify @@ -235,7 +236,7 @@ Name: Verify
-When `"hash"` is passed as an argument, the code extracts the `data` and `algo` Tool arguments from the respective environment variables, then passes them to the `hash` function. +When `"hash"` is passed as an argument, the code extracts the `data` and `algo` tool arguments from the respective environment variables, then passes them to the `hash` function. The `hash` function is where the bulk of the business logic is implemented. @@ -262,10 +263,10 @@ export function hash(data: string = '', algo = 'sha256'): string { It starts off by validating the `data` and `algo` arguments. When an argument is invalid, the function throws an exception that describes the validation issue in detail. -The goal is to provide useful information that an Agent can use to construct valid arguments for future calls. +The goal is to provide useful information that an agent can use to construct valid arguments for future calls. For example, when an invalid `algo` argument is provided, the code returns an error that contains the complete list of valid algorithms. -Once it determines that all of the arguments are valid, it calculates the hash and writes a JSON object to stdout. +Once it determines that all the arguments are valid, it calculates the hash and writes a JSON object to stdout. This object contains the hash and the algorithm used to generate it. ```typescript @@ -277,7 +278,7 @@ This object contains the hash and the algorithm used to generate it. ``` > **Note:** Producing structured data with extra contextual info (e.g. the algorithm) is considered good form. -> It's a pattern that improves the Agent's ability to correctly use the Tool's result over time. +> It's a pattern that improves the agent's ability to correctly use the tool's result over time.
@@ -353,7 +354,7 @@ export function hash(data: string = '', algo = 'sha256'): string { ## Testing `src/tools.ts` and `src/hash.ts` Locally {#testing-src-tools-ts-and-src-hash-ts-locally-aeed7f15} -Before adding a Tool to `Otto8`, verify that the Typescript business logic works on your machine. +Before adding a tool to Obot, verify that the TypeScript business logic works on your machine. To do this, run through the following steps in the root of your local fork: @@ -363,10 +364,10 @@ To do this, run through the following steps in the root of your local fork: npm install ``` -2. Run the Tool with some test arguments: +2. Run the tool with some test arguments: - | **Command** |**Output** | - | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | + | **Command** | **Output** | + | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `DATA='foo' npm run tool hash` | `{ "algo": "sha256", "hash": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae" }` | | `npm run tool hash` | `Error: A data argument must be provided` | | `DATA='foo' ALGO='md5' npm run tool hash` | `{ "algo": "md5", "hash": "acbd18db4cc2f85cedef654fccc4a4d8" }` | @@ -374,14 +375,14 @@ To do this, run through the following steps in the root of your local fork:
-## Adding The `Hash` Tool to `Otto8` {#adding-the-hash-tool-to-otto8-aeed7f15} +## Adding The `Hash` tool to Obot {#adding-the-hash-tool-to-obot-aeed7f15} -Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto8` by performing the steps below: +Before a tool can be used by an agent, an admin must first add the tool to Obot by performing the steps below: 1.
- Navigate to the Otto8 admin UI in a browser and open the Tools page by clicking the Tools button in the left drawer + Navigate to the Obot admin UI in a browser and open the Tools page by clicking the Tools button in the left drawer
- Open The Tools Page
@@ -389,15 +390,15 @@ Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto 2.
Click the Register New Tool button on the right
- Click The Register New Tool Button
3.
- Type the Tool repo reference into the modal's input box and click Register Tool + Type the tool repo reference into the modal's input box and click Register Tool
- Enter Tool Repo Reference
@@ -407,35 +408,35 @@ Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto
Once the tool has been added, you can search for it by category or name on the Tools page to verify
- Search For Newly Added Tools
-## Using The `Hash` Tool in an Agent {#using-the-hash-tool-in-an-agent-aeed7f15} +## Using The `Hash` tool in an agent {#using-the-hash-tool-in-an-agent-aeed7f15} -To use the `Hash` Tool in an Agent, open the Agent's Edit page, then: +To use the `Hash` tool in an agent, open the agent's Edit page, then: 1.
Click the Add Tool button under either the Agent Tools or User Tools sections
- Click The Add Tool Button
2.
- Search for "Hash" or "Crypto" in the Tool search pop-out and select the Hash Tool + Search for "Hash" or "Crypto" in the tool search pop-out and select the Hash Tool
- Add Hash Tool To Agent
3.
- Ask the Agent to generate a hash + Ask the agent to generate a hash
- Ask The Agent To Generate a Hash
diff --git a/docs/snippets/python-hash-tool-readme.md.mdx b/docs/snippets/python-hash-tool-readme.md.mdx index 0f79505d..6cf1bf7e 100644 --- a/docs/snippets/python-hash-tool-readme.md.mdx +++ b/docs/snippets/python-hash-tool-readme.md.mdx @@ -1,20 +1,20 @@ ## Writing your first tool in Python {#writing-your-first-tool-in-python-28572835} -[python-hash-tool](https://github.com/otto8-ai/python-hash-tool) contains a reference `Python` implementation of the `Hash` Tool. +[python-hash-tool](https://github.com/obot-platform/python-hash-tool) contains a reference `Python` implementation of the `Hash` tool. -This guide walks through the structure and design of the Tool and outlines the packaging requirements for [Otto8](https://docs.otto8.ai/concepts/agents) +This guide walks through the structure and design of the tool and outlines the packaging requirements for [Obot](https://docs.obot.ai/concepts/agents) To clone this repo and follow along, run the following command: ```bash -git clone git@github.com:otto8-ai/python-hash-tool +git clone git@github.com:obot-platform/python-hash-tool ```
## Tool Repo Structure {#tool-repo-structure-28572835} -The directory tree below highlights the files required to implement `Hash` in Python and package it for `Otto8`. +The directory tree below highlights the files required to implement `Hash` in Python and package it for Obot. ``` python-hash-tool @@ -26,13 +26,13 @@ python-hash-tool ## Defining the `Hash` Tool {#defining-the-hash-tool-28572835} -The `tool.gpt` file contains [GPTScript Tool Definitions](https://docs.gptscript.ai/tools/gpt-file-reference) which describe a set of Tools that can be used by Agents in `Otto8`. -Every Tool repository must have a `tool.gpt` file in its root directory. +The `tool.gpt` file contains [GPTScript Tool Definitions](https://docs.gptscript.ai/tools/gpt-file-reference) which describe a set of tools that can be used by agents in Obot. +Every tool repository must have a `tool.gpt` file in its root directory. -The Tools defined in this file must have a descriptive `Name` and `Description` that will help Agents understand what the Tool does, what it returns (if anything), and all the `Parameters` it takes. -Agents use these details to figure out when and how to use the Tool. We call the section of a Tool definition that contains this info a `Preamble`. +The tools defined in this file must have a `Name` and `Description` that will help agents understand what the tool does, what it returns (if anything), and all the `Parameters` it takes. +Agents use these details to figure out when and how to use the tool. We call the section of a tool definition that contains this info a `Preamble`. -We want the `Hash` Tool to return the hash of some given `data`. It would also be nice to support a few different algorithms for the Agent to choose from. +We want the `Hash` tool to return the hash of some given `data`. It would also be nice to support a few different algorithms for the agent to choose from. Let's take a look at the `Preamble` for `Hash` to see how that's achieved: @@ -45,14 +45,14 @@ Param: algo: The algorithm to generate a hash with. Supports "sha256" and "md5". Breaking this down a bit: -- The `Preamble` above declares a Tool named `Hash`. -- The `Param` fields enumerate the arguments that an Agent must provide when calling `Hash`, `data` and `algo`. +- The `Preamble` above declares a tool named `Hash` +- The `Param` fields enumerate the arguments that an agent must provide when calling `Hash`, `data` and `algo` - In this case, the description of the `algo` parameter outlines the valid options (`sha256` or `md5`) and defines a default value (`sha256`) -- The `Description` explains what `Hash` returns with respect to the given arguments; the hash of `data` using the algorithm selected with `algo`. +- The `Description` explains what `Hash` returns with respect to the given arguments; the hash of `data` using the algorithm selected with `algo`
-Immediately below the `Preamble` is the `Tool Body`, which tells `Otto8` how to execute the Tool: +Immediately below the `Preamble` is the `Tool Body`, which tells Obot how to execute the tool: ```bash #!/usr/bin/env python3 ${GPTSCRIPT_TOOL_DIR}/hash.py @@ -61,17 +61,17 @@ Immediately below the `Preamble` is the `Tool Body`, which tells `Otto8` how to This is where the magic happens. -To oversimplify, when an Agent calls the `Hash` Tool, `Otto8` reads this line and then: +To simplify, when an agent calls the `Hash` tool, Obot reads this line and then: -1. Downloads the appropriate `Python` tool chain -2. Sets up a working directory for the Tool and creates a virtual environment +1. Downloads the appropriate `Python` toolchain +2. Sets up a working directory for the tool and creates a virtual environment 3. Installs the dependencies from the `requirements.txt`, if present 4. Projects the call arguments onto environment variables (`DATA` and `ALGO`) -5. Runs `python3 ${GPTSCRIPT_TOOL_DIR}/hash.py`. +5. Runs `python3 ${GPTSCRIPT_TOOL_DIR}/hash.py`
-Putting it all together, here's the complete definition of the `Hash` Tool. +Putting it all together, here's the complete definition of the `Hash` tool. ```yaml Name: Hash @@ -86,14 +86,14 @@ Param: algo: The algorithm to generate a hash with. Default is "sha256". Support ## Tool Metadata {#tool-metadata-28572835} -The `tool.gpt` file also provides the following metadata for use in `Otto8`: +The `tool.gpt` file also provides the following metadata for use in Obot: -- `!metadata:*:category` which tags Tools with the `Crypto` category to promote organization and discovery -- `!metadata:*:icon` which assigns `https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-duotone.svg` as the Tool icon +- `!metadata:*:category` which tags tools with the `Crypto` category to promote organization and discovery +- `!metadata:*:icon` which assigns `https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-duotone.svg` as the tool icon
-> **Note:** `*` is a wild card pattern that applies the metadata to all Tools in a `tool.gpt`. +> **Note:** `*` is a wildcard pattern that applies the metadata to all tools in a `tool.gpt`. ```yaml --- @@ -107,7 +107,7 @@ https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-d
- Note: Metadata can be applied to a specific Tool by either specifying the exact name (e.g. !metadata:Hash:category) or by adding the metadata directly to a Tool's Preamble + Note: Metadata can be applied to a specific tool by either specifying the exact name (e.g. !metadata:Hash:category) or by adding the metadata directly to a tool's Preamble ```yaml @@ -146,7 +146,7 @@ https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2/assets/duotone/fingerprint-d ## Implementing Business Logic {#implementing-business-logic-28572835} -The `hash.py` file executed by the `Tool Body` is the concrete implementation of the Tool's business logic. +The `hash.py` file executed by the `Tool Body` is the concrete implementation of the tool's business logic. Let's walk through the code to understand how it works. @@ -161,10 +161,10 @@ if __name__ == '__main__': ``` Starting at the bottom, the `main` function is called in a `try` block so that any runtime exceptions caught are written to stdout. -This is important because everything written to stdout is returned to the Agent when the Tool call is completed, while everything written to stderr is discarded. -Using this pattern ensures that when a Tool call fails, the calling Agent is informed of the failure. +This is important because everything written to stdout is returned to the agent when the tool call is completed, while everything written to stderr is discarded. +Using this pattern ensures that when a tool call fails, the calling agent is informed of the failure. -Moving on, the `main` function implements the meat and potatoes of the `Hash` Tool. +Moving on, the `main` function implements the core logic of the `Hash` tool. ```python SUPPORTED_HASH_ALGORITHMS = ['sha256', 'md5'] @@ -184,12 +184,12 @@ def main(): #... ``` -It starts off by extracting the Tool's arguments from the respective environment variables and validates them. +It starts off by extracting the tool's arguments from the respective environment variables and validates them. When an argument is invalid, the function raises an exception that describes the validation issue in detail. -The goal is to provide useful information that an Agent can use to construct valid arguments for future calls. +The goal is to provide useful information that an agent can use to construct valid arguments for future calls. For example, when an invalid `algo` argument is provided, the code returns an error that contains the complete list of valid algorithms. -After validating the Tool arguments, it calculates the hash and writes a JSON object to stdout. +After validating the tool arguments, it calculates the hash and writes a JSON object to stdout. This object contains the hash and the algorithm used to generate it. ```python @@ -208,7 +208,7 @@ This object contains the hash and the algorithm used to generate it. ``` > **Note:** Producing structured data with extra contextual info (e.g. the algorithm) is considered good form. -> It's a pattern that improves the Agent's ability to correctly use the Tool's result over time. +> It's a pattern that improves the Agent's ability to correctly use the tool's result over time.
Complete hash.py @@ -263,7 +263,7 @@ if __name__ == '__main__': ## Testing `hash.py` Locally {#testing-hash-py-locally-28572835} -Before adding a Tool to `Otto8`, verify that the Python business logic works on your machine. +Before adding a tool to Obot, verify that the Python business logic works on your machine. To do this, run through the following steps in the root of your local fork: @@ -287,10 +287,10 @@ To do this, run through the following steps in the root of your local fork: pip freeze > requirements.txt ``` -4. Run the Tool with some test arguments: +4. Run the tool with some test arguments: - | **Command** | **Output** | - | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | + | **Command** | **Output** | + | --------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `DATA='foo' python3 hash.py` | `{ "algo": "sha256", "hash": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae" }` | | `python3 hash.py` | `Error: A data argument must be provided` | | `DATA='foo' ALGO='md5' python3 hash.py` | `{ "algo": "md5", "hash": "acbd18db4cc2f85cedef654fccc4a4d8" }` | @@ -298,14 +298,14 @@ To do this, run through the following steps in the root of your local fork:
-## Adding The `Hash` Tool to `Otto8` {#adding-the-hash-tool-to-otto8-28572835} +## Adding The `Hash` tool to Obot {#adding-the-hash-tool-to-obot-28572835} -Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto8` by performing the steps below: +Before a tool can be used by an agent, an admin must first add the tool to Obot by performing the steps below: 1.
- Navigate to the Otto8 admin UI in a browser and open the Tools page by clicking the Tools button in the left drawer + Navigate to the Obot admin UI in a browser and open the Tools page by clicking the Tools button in the left drawer
- Open The Tools Page
@@ -313,15 +313,15 @@ Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto 2.
Click the Register New Tool button on the right
- Click The Register New Tool Button
3.
- Type the Tool repo reference into the modal's input box and click Register Tool + Type the tool repo reference into the modal's input box and click Register Tool
- Enter Tool Repo Reference
@@ -331,35 +331,35 @@ Before a Tool can be used by an Agent, an admin must first add the Tool to `Otto
Once the tool has been added, you can search for it by category or name on the Tools page to verify
- Search For Newly Added Tools
-## Using The `Hash` Tool in an Agent {#using-the-hash-tool-in-an-agent-28572835} +## Using The `Hash` tool in an agent {#using-the-hash-tool-in-an-agent-28572835} -To use the `Hash` Tool in an Agent, open the Agent's Edit page, then: +To use the `Hash` tool in an agent, open the agent's Edit page, then: 1.
Click the Add Tool button under either the Agent Tools or User Tools sections
- Click The Add Tool Button
2.
- Search for "Hash" or "Crypto" in the Tool search pop-out and select the Hash Tool + Search for "Hash" or "Crypto" in the tool search pop-out and select the Hash Tool
- Add Hash Tool To Agent
3.
- Ask the Agent to generate a hash + Ask the agent to generate a hash
- Ask The Agent To Generate a Hash