96 lines
4.0 KiB
Markdown
96 lines
4.0 KiB
Markdown
## Giving MemGPT access to additional tools / functions
|
|
|
|
If you would like to give MemGPT the ability to call new tools or functions, you can write a Python `.py` file with the functions you want to add, and place it inside of `~/.memgpt/functions`. You can see the example function sets provided [here](https://github.com/cpacker/MemGPT/tree/main/memgpt/functions/function_sets).
|
|
|
|
As an example, we provide a preset called [`memgpt_extras`](https://github.com/cpacker/MemGPT/blob/main/memgpt/presets/examples/memgpt_extras.yaml) that includes additional functions to read and write from text files, as well as make HTTP requests:
|
|
```yaml
|
|
# this preset uses the same "memgpt_chat" system prompt, but has more functions enabled
|
|
system_prompt: "memgpt_chat"
|
|
functions:
|
|
- "send_message"
|
|
- "pause_heartbeats"
|
|
- "core_memory_append"
|
|
- "core_memory_replace"
|
|
- "conversation_search"
|
|
- "conversation_search_date"
|
|
- "archival_memory_insert"
|
|
- "archival_memory_search"
|
|
# extras for read/write to files
|
|
- "read_from_text_file"
|
|
- "append_to_text_file"
|
|
# internet access
|
|
- "http_request"
|
|
```
|
|
|
|
### Writing your own functions and connecting them to MemGPT
|
|
|
|
There are three steps to adding more MemGPT functions:
|
|
|
|
1. Write the functions themselves in Python
|
|
2. (Optional) Create a new system prompt that instructs MemGPT how to use these functions
|
|
3. Create a new preset that imports these functions (and optionally uses the new system prompt)
|
|
|
|
### Step 1: Writing the functions
|
|
|
|
!!! warning "Function requirements"
|
|
|
|
The functions you write MUST have proper docstrings and type hints - this is because MemGPT will use these docstrings and types to automatically create a JSON schema that is used in the LLM prompt. Use the docstrings and types annotations from the [example functions](https://github.com/cpacker/MemGPT/blob/main/memgpt/functions/function_sets/base.py) for guidance.
|
|
|
|
As an example, if you wanted to give MemGPT the ability to make HTTP requests, you would write the function in Python (you would save this python file inside `~/.memgpt/functions/your_new_functions.py`):
|
|
```python
|
|
import json
|
|
import requests
|
|
|
|
def http_request(self, method: str, url: str, payload_json: Optional[str] = None):
|
|
"""
|
|
Generates an HTTP request and returns the response.
|
|
|
|
Args:
|
|
method (str): The HTTP method (e.g., 'GET', 'POST').
|
|
url (str): The URL for the request.
|
|
payload_json (Optional[str]): A JSON string representing the request payload.
|
|
|
|
Returns:
|
|
dict: The response from the HTTP request.
|
|
"""
|
|
try:
|
|
headers = {"Content-Type": "application/json"}
|
|
|
|
# For GET requests, ignore the payload
|
|
if method.upper() == "GET":
|
|
print(f"[HTTP] launching GET request to {url}")
|
|
response = requests.get(url, headers=headers)
|
|
else:
|
|
# Validate and convert the payload for other types of requests
|
|
if payload_json:
|
|
payload = json.loads(payload_json)
|
|
else:
|
|
payload = {}
|
|
print(f"[HTTP] launching {method} request to {url}, payload=\n{json.dumps(payload, indent=2)}")
|
|
response = requests.request(method, url, json=payload, headers=headers)
|
|
|
|
return {"status_code": response.status_code, "headers": dict(response.headers), "body": response.text}
|
|
except Exception as e:
|
|
return {"error": str(e)}
|
|
```
|
|
|
|
### Step 3: Create a new preset file
|
|
|
|
Now we need to create a new preset file, let's create one called `~/.memgpt/presets/memgpt_http.yaml`:
|
|
```yaml
|
|
# if we had created a new system prompt, we would replace "memgpt_chat" with the new prompt filename (no .txt)
|
|
system_prompt: "memgpt_chat"
|
|
functions:
|
|
- "send_message"
|
|
- "pause_heartbeats"
|
|
- "core_memory_append"
|
|
- "core_memory_replace"
|
|
- "conversation_search"
|
|
- "conversation_search_date"
|
|
- "archival_memory_insert"
|
|
- "archival_memory_search"
|
|
# internet access
|
|
- "http_request"
|
|
```
|
|
|
|
Now when we run `memgpt configure`, we should see the option to use `memgpt_http` as a preset. |