You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/swarms/prompts/tools.py

197 lines
6.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Prompts
DYNAMIC_STOP_PROMPT = """
Now, when you 99% sure you have completed the task, you may follow the instructions below to escape the autonomous loop.
When you have finished the task from the Human, output a special token: <DONE>
This will enable you to leave the autonomous loop.
"""
# Make it able to handle multi input tools
DYNAMICAL_TOOL_USAGE = """
You have access to the following tools:
Output a JSON object with the following structure to use the tools
commands: {
"tools": {
tool1: "search_api",
"params": {
"query": "What is the weather in New York?",
"description": "Get the weather in New York"
}
"tool2: "weather_api",
"params": {
"query": "What is the weather in Silicon Valley",
}
"tool3: "rapid_api",
"params": {
"query": "Use the rapid api to get the weather in Silicon Valley",
}
}
}
"""
########### FEW SHOT EXAMPLES ################
SCENARIOS = """
commands: {
"tools": {
tool1: "function",
"params": {
"input": "inputs",
"tool1": "inputs"
}
"tool2: "tool_name",
"params": {
"parameter": "inputs",
"tool1": "inputs"
}
"tool3: "tool_name",
"params": {
"tool1": "inputs",
"tool1": "inputs"
}
}
}
"""
def tools_prompt_prep(
tool_docs: str = None, tool_few_shot_examples: str = None
):
"""
Tools prompt prep
Args:
docs (str, optional): _description_. Defaults to None.
scenarios (str, optional): _description_. Defaults to None.
Returns:
_type_: _description_
"""
PROMPT = f"""
# Task
You will be provided with a list of APIs. These APIs will have a
description and a list of parameters and return types for each tool. Your
task involves creating varied, complex, and detailed user scenarios
that require to call API calls. You must select what api to call based on
the context of the task and the scenario.
For instance, given the APIs: SearchHotels, BookHotel, CancelBooking,
GetNFLNews. Given that GetNFLNews is explicitly provided, your scenario
should articulate something akin to:
"The user wants to see if the Broncos won their last game (GetNFLNews).
They then want to see if that qualifies them for the playoffs and who
they will be playing against (GetNFLNews). The Broncos did make it into
the playoffs, so the user wants watch the game in person. They want to
look for hotels where the playoffs are occurring (GetNBANews +
SearchHotels). After looking at the options, the user chooses to book a
3-day stay at the cheapest 4-star option (BookHotel)."
13
This scenario exemplifies a scenario using 5 API calls. The scenario is
complex, detailed, and concise as desired. The scenario also includes two
APIs used in tandem, the required API, GetNBANews to search for the
playoffs location and SearchHotels to find hotels based on the returned
location. Usage of multiple APIs in tandem is highly desirable and will
receive a higher score. Ideally each scenario should contain one or more
instances of multiple APIs being used in tandem.
Note that this scenario does not use all the APIs given and re-uses the "
GetNBANews" API. Re-using APIs is allowed, but each scenario should
involve as many different APIs as the user demands. Note that API usage is also included
in the scenario, but exact parameters ar necessary. You must use a
different combination of APIs for each scenario. All APIs must be used in
at least one scenario. You can only use the APIs provided in the APIs
section.
Note that API calls are not explicitly mentioned and their uses are
included in parentheses. This behaviour should be mimicked in your
response.
Output the tool usage in a strict json format with the function name and input to
the function. For example, Deliver your response in this format:
{tool_few_shot_examples}
# APIs
{tool_docs}
# Response
"""
return PROMPT
def tool_sop_prompt() -> str:
return """
You've been granted tools to assist users by always providing outputs in JSON format for tool usage.
Whenever a tool usage is required, you must output the JSON wrapped inside markdown for clarity.
Provide a commentary on the tool usage and the user's request and ensure that the JSON output adheres to the tool's schema.
Here are some rules:
Do not ever use tools that do not have JSON schemas attached to them.
Do not use tools that you have not been granted access to.
Do not use tools that are not relevant to the task at hand.
Do not use tools that are not relevant to the user's request.
Here are the guidelines you must follow:
1. **Output Format**:
- All outputs related to tool usage should be formatted as JSON.
- The JSON should be encapsulated within triple backticks and tagged as a code block with 'json'.
2. **Schema Compliance**:
- Ensure that the JSON output strictly follows the provided schema for each tool.
- Each tool's schema will define the structure and required fields for the JSON output.
3. **Schema Example**:
If a tool named `example_tool` with a schema requires `param1` and `param2`, your response should look like:
```json
{
"type": "function",
"function": {
"name": "example_tool",
"parameters": {
"param1": 123,
"param2": "example_value"
}
}
}
```
4. **Error Handling**:
- If there is an error or the information provided by the user is insufficient to generate a valid JSON, respond with an appropriate error message in JSON format, also encapsulated in markdown.
Remember, clarity and adherence to the schema are paramount. Your primary goal is to ensure the user receives well-structured JSON outputs that align with the tool's requirements.
---
Here is the format you should always follow for your responses involving tool usage:
```json
{
"type": "function",
"function": {
"name": "<tool_name>",
"parameters": {
"param1": "<value1>",
"param2": "<value2>"
}
}
}
```
Please proceed with your task accordingly.
"""