MemGPT/examples/resend_example/README.md
Sarah Wooders 6bd19e15ad
feat: Migrating CLI to run on MemGPT Client for memgpt [list/add/delete] (#1428) (#1449)
Co-authored-by: Krishna Mandal <43015249+KrishnaM251@users.noreply.github.com>
2024-06-13 16:02:59 -07:00

3.4 KiB

Sending emails with MemGPT using Resend

Thank you to @ykhli for the suggestion and initial tool call code!

Defining the custom tool

Create an account on Resend to get an API key.

Once you have an API key, you can set up a custom tool using the requests API in Python to call the Resend API:

import requests
import json


RESEND_API_KEY = "YOUR_RESEND_API_KEY"
RESEND_TARGET_EMAIL_ADDRESS = "YOUR_EMAIL_ADDRESS"

def send_email(self, description: str):
    """
    Sends an email to a predefined user. The email contains a message, which is defined by the description parameter.

    Args:
        description (str): Email contents. All unicode (including emojis) are supported.

    Returns:
        None

    Example:
        >>> send_email("hello")
        # Output: None. This will send an email to the you are talking to with the message "hello".
    """
    url = "https://api.resend.com/emails"
    headers = {"Authorization": f"Bearer {RESEND_API_KEY}", "Content-Type": "application/json"}
    data = {
        "from": "onboarding@resend.dev",
        "to": RESEND_TARGET_EMAIL_ADDRESS,
        "subject": "MemGPT message:",
        "html": f"<strong>{description}</strong>",
    }

    try:
        response = requests.post(url, headers=headers, data=json.dumps(data))
        print(response.text)
    except requests.HTTPError as e:
        raise Exception(f"send_email failed with an HTTP error: {str(e)}")
    except Exception as e:
        raise Exception(f"send_email failed with an error: {str(e)}")

Option 1 (dev portal)

To create the tool in the dev portal, simply navigate to the tool creator tab, create a new tool called send_email, and copy-paste the above code into the code block area and press "Create Tool".

image

Once you've created the tool, create a new agent and make sure to select send_email as an enabled tool.

image

Now your agent should be able to call the send_email function when needed:

image

Option 2 (CLI)

Copy the custom function into the functions directory:

# If you use the *_env_vars version of the function, you will need to define `RESEND_API_KEY` and `RESEND_TARGET_EMAIL_ADDRESS` in your environment variables
cp examples/resend_example/resend_send_email_env_vars.py ~/.memgpt/functions/

Create a preset that has access to that function:

memgpt add preset -f examples/resend_example/resend_preset.yaml --name resend_preset

Make sure we set the env vars:

export RESEND_API_KEY=re_YOUR_RESEND_KEY
export RESEND_TARGET_EMAIL_ADDRESS="YOUR_EMAIL@gmail.com"

Create an agent with that preset (disable --stream if you're not using a streaming-compatible backend):

memgpt run --preset resend_preset --persona sam_pov --human cs_phd --stream
image

Waiting in our inbox:

image