From b76e14bf9348cb5d5023d54a687284c071b9c6b0 Mon Sep 17 00:00:00 2001 From: openhands Date: Thu, 20 Mar 2025 13:54:17 +0000 Subject: [PATCH] Add Tesla auth provider and toolkit --- .../tesla/config_provider.engine.yaml | 9 ++ .../code/integrations/tesla/custom_auth.js | 21 ++++ .../code/integrations/tesla/custom_auth.py | 21 ++++ .../code/integrations/tesla/custom_tool.py | 59 +++++++++ pages/home/auth-providers/index.mdx | 7 ++ pages/home/auth-providers/tesla.mdx | 112 ++++++++++++++++++ .../social-communication/tesla/index.mdx | 106 +++++++++++++++++ public/images/icons/tesla.png | Bin 0 -> 48298 bytes .../custom/Toolkits/toolkits-config.ts | 8 ++ 9 files changed, 343 insertions(+) create mode 100644 examples/code/integrations/tesla/config_provider.engine.yaml create mode 100644 examples/code/integrations/tesla/custom_auth.js create mode 100644 examples/code/integrations/tesla/custom_auth.py create mode 100644 examples/code/integrations/tesla/custom_tool.py create mode 100644 pages/home/auth-providers/tesla.mdx create mode 100644 pages/toolkits/social-communication/tesla/index.mdx create mode 100644 public/images/icons/tesla.png diff --git a/examples/code/integrations/tesla/config_provider.engine.yaml b/examples/code/integrations/tesla/config_provider.engine.yaml new file mode 100644 index 00000000..caa38d8b --- /dev/null +++ b/examples/code/integrations/tesla/config_provider.engine.yaml @@ -0,0 +1,9 @@ +auth: + providers: + - id: default-tesla + description: "The default Tesla provider" + enabled: true + type: oauth2 + provider_id: tesla + client_id: ${env:TESLA_CLIENT_ID} + client_secret: ${env:TESLA_CLIENT_SECRET} \ No newline at end of file diff --git a/examples/code/integrations/tesla/custom_auth.js b/examples/code/integrations/tesla/custom_auth.js new file mode 100644 index 00000000..9a87f215 --- /dev/null +++ b/examples/code/integrations/tesla/custom_auth.js @@ -0,0 +1,21 @@ +import { ArcadeClient } from "@arcade-ai/client"; + +// Initialize the Arcade client +const client = new ArcadeClient(); + +// Start the authorization flow for Tesla +// This will redirect the user to Tesla's authorization page if needed +const authResult = await client.auth.start({ + provider: "tesla", + scopes: ["vehicle_data", "vehicle_cmds"], +}); + +// Use the token to make API calls to Tesla Fleet API +const token = authResult.token; + +// Now you can use the token to make API calls to Tesla Fleet API +// For example: +// const response = await fetch( +// 'https://fleet-api.prd.eu.vn.cloud.tesla.com/api/1/vehicles', +// { headers: { Authorization: `Bearer ${token}` } } +// ); diff --git a/examples/code/integrations/tesla/custom_auth.py b/examples/code/integrations/tesla/custom_auth.py new file mode 100644 index 00000000..ef049f75 --- /dev/null +++ b/examples/code/integrations/tesla/custom_auth.py @@ -0,0 +1,21 @@ +from arcade import ArcadeClient + +# Initialize the Arcade client +client = ArcadeClient() + +# Start the authorization flow for Tesla +# This will redirect the user to Tesla's authorization page if needed +auth_result = client.auth.start( + provider="tesla", + scopes=["vehicle_data", "vehicle_cmds"] +) + +# Use the token to make API calls to Tesla Fleet API +token = auth_result.token + +# Now you can use the token to make API calls to Tesla Fleet API +# For example: +# response = requests.get( +# "https://fleet-api.prd.eu.vn.cloud.tesla.com/api/1/vehicles", +# headers={"Authorization": f"Bearer {token}"} +# ) \ No newline at end of file diff --git a/examples/code/integrations/tesla/custom_tool.py b/examples/code/integrations/tesla/custom_tool.py new file mode 100644 index 00000000..79b984c9 --- /dev/null +++ b/examples/code/integrations/tesla/custom_tool.py @@ -0,0 +1,59 @@ +from arcade.tools import tool, ToolContext +from arcade.auth import Tesla +import requests +from typing import Dict, Any, List + +@tool( + name="get_vehicle_data", + description="Get data about the user's Tesla vehicles", + auth=Tesla(scopes=["vehicle_data"]) +) +def get_vehicle_data(context: ToolContext) -> Dict[str, Any]: + """ + Get a list of vehicles associated with the user's Tesla account. + + Returns: + A dictionary containing the vehicle data. + """ + # The token is automatically provided by the Arcade Engine + token = context.authorization.token + + # Use the token to call the Tesla Fleet API + headers = {"Authorization": f"Bearer {token}"} + response = requests.get("https://fleet-api.prd.eu.vn.cloud.tesla.com/api/1/vehicles", headers=headers) + + # Return the vehicle data + return response.json() + +@tool( + name="send_vehicle_command", + description="Send a command to a Tesla vehicle", + auth=Tesla(scopes=["vehicle_cmds"]) +) +def send_vehicle_command( + context: ToolContext, + vehicle_id: str, + command: str +) -> Dict[str, Any]: + """ + Send a command to a Tesla vehicle. + + Args: + vehicle_id: The ID of the vehicle to send the command to. + command: The command to send (e.g., "wake_up", "door_unlock", "climate_on"). + + Returns: + A dictionary containing the response from the Tesla API. + """ + # The token is automatically provided by the Arcade Engine + token = context.authorization.token + + # Use the token to call the Tesla Fleet API + headers = {"Authorization": f"Bearer {token}"} + response = requests.post( + f"https://fleet-api.prd.eu.vn.cloud.tesla.com/api/1/vehicles/{vehicle_id}/command/{command}", + headers=headers + ) + + # Return the response + return response.json() \ No newline at end of file diff --git a/pages/home/auth-providers/index.mdx b/pages/home/auth-providers/index.mdx index a60f744b..83bdeb03 100644 --- a/pages/home/auth-providers/index.mdx +++ b/pages/home/auth-providers/index.mdx @@ -96,6 +96,13 @@ Auth providers enable users to seamlessly and securely allow Arcade tools to acc link="/home/auth-providers/twitch" category="Auth" /> + + At this time, Arcade does not offer a default Tesla Auth Provider. To use + Tesla auth, you must create a custom Auth Provider with your own Tesla + OAuth 2.0 credentials as described below. + + +The Tesla auth provider enables tools and agents to call the [Tesla Fleet API](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api) on behalf of a user. Behind the scenes, the Arcade Engine and the Tesla auth provider seamlessly manage Tesla OAuth 2.0 authorization for your users. + +### What's documented here + +This page describes how to use and configure Tesla auth with Arcade. + +This auth provider is used by: + +- Your [app code](#using-tesla-auth-in-app-code) that needs to call Tesla Fleet API +- Or, your [custom tools](#using-tesla-auth-in-custom-tools) that need to call Tesla Fleet API + +## Configuring Tesla auth + +### Create a Tesla developer account + +- Create a Tesla developer account at the [Tesla Developer Portal](https://developer.tesla.com/) +- Register a new application in the developer console +- Set the redirect URL to: `https://cloud.arcade.dev/api/v1/oauth/callback` +- Request the necessary scopes for your application (vehicle data, commands, etc.) +- Copy the Client ID and Client Secret to use below + +Next, add the Tesla app to your Arcade Engine configuration. You can do this in the Arcade Dashboard, or by editing the `engine.yaml` file directly (for a self-hosted instance). + +### Configuring Tesla auth with the Arcade Dashboard + +1. Navigate to the OAuth section of the Arcade Dashboard and click **Add OAuth Provider**. +2. Select **Tesla** as the provider. +3. Choose a unique **ID** for your provider (e.g. "my-tesla-provider") with an optional **Description**. +4. Enter your **Client ID** and **Client Secret** from your Tesla developer account. +5. Click **Save**. + +When you use tools that require Tesla auth using your Arcade account credentials, the Arcade Engine will automatically use this Tesla OAuth provider. + +### Configuring Tesla auth in self-hosted Arcade Engine configuration + + + +### Set environment variables + +Set the following environment variables: + +```bash +export TESLA_CLIENT_ID="" +export TESLA_CLIENT_SECRET="" +``` + +Or, you can set these values in a `.env` file: + +```bash +TESLA_CLIENT_ID="" +TESLA_CLIENT_SECRET="" +``` + + + See [Engine configuration](/home/configure/engine) for more information on how + to set environment variables and configure the Arcade Engine. + + +### Edit the Engine configuration + +Edit the `engine.yaml` file and add a `tesla` item to the `auth.providers` section: + +```yaml file=/examples/code/integrations/tesla/config_provider.engine.yaml {3-9} + +``` + + + +## Using Tesla auth in app code + +Use the Tesla auth provider in your own agents and AI apps to get a user token for the Tesla Fleet API. See [authorizing agents with Arcade](/home/auth/how-arcade-helps) to understand how this works. + +Use `client.auth.start()` to get a user token for the Tesla Fleet API: + + + + +```python file=/examples/code/integrations/tesla/custom_auth.py {8-12} + +``` + + + + + +```javascript file=/examples/code/integrations/tesla/custom_auth.js {8-10} + +``` + + + + + +## Using Tesla auth in custom tools + +The Arcade [Model API](/home/use-tools/call-tools-with-models) is a convenient way to call language models and automatically invoke tools. You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Tesla Fleet API. + +Use the `Tesla()` auth class to specify that a tool requires authorization with Tesla. The `context.authorization.token` field will be automatically populated with the user's Tesla token: + +```python file=/examples/code/integrations/tesla/custom_tool.py {5-6,9-13,23} + +``` \ No newline at end of file diff --git a/pages/toolkits/social-communication/tesla/index.mdx b/pages/toolkits/social-communication/tesla/index.mdx new file mode 100644 index 00000000..82cdaac6 --- /dev/null +++ b/pages/toolkits/social-communication/tesla/index.mdx @@ -0,0 +1,106 @@ +--- +title: Tesla Toolkit +description: Control and monitor Tesla vehicles with your agents +--- + +import { Callout } from 'nextra/components' + +# Tesla Toolkit + + + This toolkit requires the [Tesla auth provider](/home/auth-providers/tesla). + + +The Tesla toolkit allows your agents to interact with Tesla vehicles through the [Tesla Fleet API](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api). With this toolkit, your agents can: + +- Get information about Tesla vehicles +- Control vehicle features (climate, doors, etc.) +- Monitor vehicle status and location +- Manage charging settings + +## Getting Started + +To use the Tesla toolkit, you'll need to: + +1. Set up the [Tesla auth provider](/home/auth-providers/tesla) +2. Install the Tesla toolkit + +```bash +pip install arcade-tesla +``` + +## Example Usage + +```python +from arcade import ArcadeClient +from arcade.tools import ModelAPI + +# Initialize the Arcade client +client = ArcadeClient() + +# Create a model API instance with the Tesla toolkit +model_api = ModelAPI( + client=client, + model="gpt-4", + tools=["tesla"] +) + +# Run the model with a prompt +response = model_api.run( + "Check the battery level of my Tesla and turn on the climate control if it's below 20%." +) + +print(response.content) +``` + +## Available Tools + +The Tesla toolkit provides the following tools: + +### get_vehicles + +Get a list of vehicles associated with the user's Tesla account. + +### get_vehicle_data + +Get detailed information about a specific Tesla vehicle, including battery level, climate settings, and more. + +### wake_up_vehicle + +Wake up a sleeping Tesla vehicle. + +### set_climate + +Control the climate settings of a Tesla vehicle, including temperature and climate mode. + +### control_doors + +Lock or unlock the doors of a Tesla vehicle. + +### control_windows + +Open or close the windows of a Tesla vehicle. + +### start_charging + +Start charging a Tesla vehicle if it's connected to a charger. + +### stop_charging + +Stop charging a Tesla vehicle. + +### set_charge_limit + +Set the charging limit for a Tesla vehicle. + +### get_vehicle_location + +Get the current location of a Tesla vehicle. + +## Authentication + +This toolkit uses the [Tesla auth provider](/home/auth-providers/tesla) for authentication. When a user interacts with your agent, they will be prompted to authorize access to their Tesla account if they haven't already done so. + +## API Reference + +For more details on the Tesla Fleet API, see the [official documentation](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api). \ No newline at end of file diff --git a/public/images/icons/tesla.png b/public/images/icons/tesla.png new file mode 100644 index 0000000000000000000000000000000000000000..bb44cbd61b835ff0438125f04a678fd01d8fea30 GIT binary patch literal 48298 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