Docs: update api configuration (#4354)
This commit is contained in:
parent
a7f28394ae
commit
dc4e0e5ce1
2 changed files with 109 additions and 127 deletions
Binary file not shown.
|
Before Width: | Height: | Size: 2.9 KiB |
|
|
@ -4,48 +4,26 @@ sidebar_position: 1
|
||||||
slug: /configuration-api-keys
|
slug: /configuration-api-keys
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header, query parameter, or as a command line argument to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow.
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
|
||||||
This page may contain outdated information. It will be updated as soon as possible.
|
The default user and password are set using the LANGFLOW_SUPERUSER and LANGFLOW_SUPERUSER_PASSWORD environment variables. The default values are `langflow` and `langflow`, respectively.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## Generate an API key
|
||||||
|
|
||||||
|
|
||||||
Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header or query parameter to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow.
|
|
||||||
|
|
||||||
|
|
||||||
:::info
|
|
||||||
|
|
||||||
The default user and password are set using the LANGFLOW_SUPERUSER and LANGFLOW_SUPERUSER_PASSWORD environment variables. The default values are langflow and langflow, respectively.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Generate an API key {#c29986a69cad4cdbbe7537e383ea7207}
|
|
||||||
|
|
||||||
|
|
||||||
Generate a user-specific token to use with Langflow.
|
Generate a user-specific token to use with Langflow.
|
||||||
|
|
||||||
|
### Generate an API key with the Langflow UI
|
||||||
|
|
||||||
### Generate an API key with the Langflow UI {#3d90098ddd7c44b6836c0273acf57123}
|
1. Click your user icon and select **Settings**.
|
||||||
|
2. Click **Langflow API**, and then click **Add New**.
|
||||||
1. Click on the "API Key" icon.
|
3. Name your key, and then click **Create Secret Key**.
|
||||||
|
4. Copy the API key and store it in a secure location.
|
||||||

|
|
||||||
|
|
||||||
2. Click on "Create new secret key".
|
|
||||||
3. Give it an optional name.
|
|
||||||
4. Click on "Create secret key".
|
|
||||||
5. Copy the API key and store it in a secure location.
|
|
||||||
|
|
||||||
### Generate an API key with the Langflow CLI {#2368f62fc4b8477e8080c9c2d3659d76}
|
|
||||||
|
|
||||||
|
### Generate an API key with the Langflow CLI
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
langflow api-key
|
langflow api-key
|
||||||
|
|
@ -64,148 +42,152 @@ python -m langflow api-key
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Authenticate requests with the Langflow API key
|
||||||
## Use the Langflow API key {#ae787e4b0d3846aa9094fac75e0ac04f}
|
|
||||||
|
|
||||||
|
|
||||||
Include your API key in API requests to authenticate requests to Langflow.
|
Include your API key in API requests to authenticate requests to Langflow.
|
||||||
|
|
||||||
|
### Include the API key in the HTTP header
|
||||||
|
|
||||||
### Use the `x-api-key` header {#70965b3ad24d467ca4f90e7c13a1f394}
|
To use the API key when making API requests with cURL, include the API key in the HTTP header.
|
||||||
|
|
||||||
|
|
||||||
Include the `x-api-key` in the HTTP header when making API requests:
|
|
||||||
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
curl -X POST \\
|
curl -X POST \
|
||||||
<http://localhost:3000/api/v1/run/><your_flow_id> \\
|
"http://127.0.0.1:7860/api/v1/run/*`YOUR_FLOW_ID`*?stream=false" \
|
||||||
-H 'Content-Type: application/json'\\
|
-H 'Content-Type: application/json' \
|
||||||
-H 'x-api-key: <your api key>'\\
|
-H 'x-api-key: *`YOUR_API_KEY`*' \
|
||||||
-d '{"inputs": {"text":""}, "tweaks": {}}'
|
-d '{"inputs": {"text":""}, "tweaks": {}}'
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To instead pass the API key as a query parameter, do the following:
|
||||||
|
|
||||||
With Python using `requests`:
|
```shell
|
||||||
|
curl -X POST \
|
||||||
|
"http://127.0.0.1:7860/api/v1/run/*`YOUR_FLOW_ID`*?x-api-key=*`YOUR_API_KEY`*?stream=false" \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"inputs": {"text":""}, "tweaks": {}}'
|
||||||
|
```
|
||||||
|
|
||||||
|
To use the API key when making API requests with the Python `requests` library, include the API key as a variable string.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
from argparse import RawTextHelpFormatter
|
||||||
import requests
|
import requests
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
import warnings
|
||||||
|
try:
|
||||||
|
from langflow.load import upload_file
|
||||||
|
except ImportError:
|
||||||
|
warnings.warn("Langflow provides a function to help you upload files to the flow. Please install langflow to use it.")
|
||||||
|
upload_file = None
|
||||||
|
|
||||||
|
BASE_API_URL = "http://127.0.0.1:7860"
|
||||||
|
FLOW_ID = "*`YOUR_FLOW_ID`*"
|
||||||
|
ENDPOINT = "" # You can set a specific endpoint name in the flow settings
|
||||||
|
|
||||||
BASE_API_URL = "<http://localhost:3001/api/v1/process>"
|
|
||||||
FLOW_ID = "4441b773-0724-434e-9cee-19d995d8f2df"
|
|
||||||
# You can tweak the flow by adding a tweaks dictionary
|
# You can tweak the flow by adding a tweaks dictionary
|
||||||
# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}
|
# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}
|
||||||
TWEAKS = {}
|
TWEAKS = {
|
||||||
|
"ChatInput-8a86T": {},
|
||||||
|
"Prompt-pKfl9": {},
|
||||||
|
"ChatOutput-WcGpD": {},
|
||||||
|
"OpenAIModel-5UyvQ": {}
|
||||||
|
}
|
||||||
|
|
||||||
def run_flow(inputs: dict,
|
def run_flow(message: str,
|
||||||
flow_id: str,
|
endpoint: str,
|
||||||
tweaks: Optional[dict] = None,
|
output_type: str = "chat",
|
||||||
apiKey: Optional[str] = None) -> dict:
|
input_type: str = "chat",
|
||||||
|
tweaks: Optional[dict] = None,
|
||||||
|
api_key: Optional[str] = None) -> dict:
|
||||||
"""
|
"""
|
||||||
Run a flow with a given message and optional tweaks.
|
Run a flow with a given message and optional tweaks.
|
||||||
|
|
||||||
:param message: The message to send to the flow
|
:param message: The message to send to the flow
|
||||||
:param flow_id: The ID of the flow to run
|
:param endpoint: The ID or the endpoint name of the flow
|
||||||
:param tweaks: Optional tweaks to customize the flow
|
:param tweaks: Optional tweaks to customize the flow
|
||||||
:return: The JSON response from the flow
|
:return: The JSON response from the flow
|
||||||
"""
|
"""
|
||||||
api_url = f"{BASE_API_URL}/{flow_id}"
|
api_url = f"{BASE_API_URL}/api/v1/run/{endpoint}"
|
||||||
|
|
||||||
payload = {"inputs": inputs}
|
|
||||||
headers = {}
|
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"input_value": message,
|
||||||
|
"output_type": output_type,
|
||||||
|
"input_type": input_type,
|
||||||
|
}
|
||||||
|
headers = None
|
||||||
if tweaks:
|
if tweaks:
|
||||||
payload["tweaks"] = tweaks
|
payload["tweaks"] = tweaks
|
||||||
if apiKey:
|
if api_key:
|
||||||
headers = {"x-api-key": apiKey}
|
headers = {"x-api-key": api_key}
|
||||||
|
|
||||||
response = requests.post(api_url, json=payload, headers=headers)
|
response = requests.post(api_url, json=payload, headers=headers)
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
# Setup any tweaks you want to apply to the flow
|
def main():
|
||||||
inputs = {"text":""}
|
parser = argparse.ArgumentParser(description="""Run a flow with a given message and optional tweaks.
|
||||||
api_key = "<your api key>"
|
Run it like: python <your file>.py "your message here" --endpoint "your_endpoint" --tweaks '{"key": "value"}'""",
|
||||||
print(run_flow(inputs, flow_id=FLOW_ID, tweaks=TWEAKS, apiKey=api_key))
|
formatter_class=RawTextHelpFormatter)
|
||||||
|
parser.add_argument("message", type=str, help="The message to send to the flow")
|
||||||
|
parser.add_argument("--endpoint", type=str, default=ENDPOINT or FLOW_ID, help="The ID or the endpoint name of the flow")
|
||||||
|
parser.add_argument("--tweaks", type=str, help="JSON string representing the tweaks to customize the flow", default=json.dumps(TWEAKS))
|
||||||
|
parser.add_argument("--api_key", type=str, help="API key for authentication", default=None)
|
||||||
|
parser.add_argument("--output_type", type=str, default="chat", help="The output type")
|
||||||
|
parser.add_argument("--input_type", type=str, default="chat", help="The input type")
|
||||||
|
parser.add_argument("--upload_file", type=str, help="Path to the file to upload", default=None)
|
||||||
|
parser.add_argument("--components", type=str, help="Components to upload the file to", default=None)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
try:
|
||||||
|
tweaks = json.loads(args.tweaks)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
raise ValueError("Invalid tweaks JSON string")
|
||||||
|
|
||||||
|
if args.upload_file:
|
||||||
|
if not upload_file:
|
||||||
|
raise ImportError("Langflow is not installed. Please install it to use the upload_file function.")
|
||||||
|
elif not args.components:
|
||||||
|
raise ValueError("You need to provide the components to upload the file to.")
|
||||||
|
tweaks = upload_file(file_path=args.upload_file, host=BASE_API_URL, flow_id=args.endpoint, components=[args.components], tweaks=tweaks)
|
||||||
|
|
||||||
|
response = run_flow(
|
||||||
|
message=args.message,
|
||||||
|
endpoint=args.endpoint,
|
||||||
|
output_type=args.output_type,
|
||||||
|
input_type=args.input_type,
|
||||||
|
tweaks=tweaks,
|
||||||
|
api_key=args.api_key
|
||||||
|
)
|
||||||
|
|
||||||
|
print(json.dumps(response, indent=2))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To pass the API key to your script with a command line argument, do the following:
|
||||||
### Use the query parameter {#febb797f3bb5403b9f070afc0fa4f453}
|
|
||||||
|
|
||||||
|
|
||||||
Include the API key as a query parameter in the URL:
|
|
||||||
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
curl -X POST \\
|
python your_script.py "*`YOUR_INPUT_MESSAGE`*" --api_key "*`YOUR_API_KEY`*"
|
||||||
<http://localhost:3000/api/v1/process/><your_flow_id>?x-api-key=<your_api_key> \\
|
|
||||||
-H 'Content-Type: application/json'\\
|
|
||||||
-d '{"inputs": {"text":""}, "tweaks": {}}'
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Security considerations
|
||||||
With Python using `requests`:
|
|
||||||
|
|
||||||
|
|
||||||
```python
|
|
||||||
import requests
|
|
||||||
|
|
||||||
BASE_API_URL = "<http://localhost:3001/api/v1/process>"
|
|
||||||
FLOW_ID = "4441b773-0724-434e-9cee-19d995d8f2df"
|
|
||||||
# You can tweak the flow by adding a tweaks dictionary
|
|
||||||
# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}
|
|
||||||
TWEAKS = {}
|
|
||||||
|
|
||||||
def run_flow(inputs: dict,
|
|
||||||
flow_id: str,
|
|
||||||
tweaks: Optional[dict] = None,
|
|
||||||
apiKey: Optional[str] = None) -> dict:
|
|
||||||
"""
|
|
||||||
Run a flow with a given message and optional tweaks.
|
|
||||||
|
|
||||||
:param message: The message to send to the flow
|
|
||||||
:param flow_id: The ID of the flow to run
|
|
||||||
:param tweaks: Optional tweaks to customize the flow
|
|
||||||
:return: The JSON response from the flow
|
|
||||||
"""
|
|
||||||
api_url = f"{BASE_API_URL}/{flow_id}"
|
|
||||||
|
|
||||||
payload = {"inputs": inputs}
|
|
||||||
headers = {}
|
|
||||||
|
|
||||||
if tweaks:
|
|
||||||
payload["tweaks"] = tweaks
|
|
||||||
if apiKey:
|
|
||||||
api_url += f"?x-api-key={apiKey}"
|
|
||||||
|
|
||||||
response = requests.post(api_url, json=payload, headers=headers)
|
|
||||||
return response.json()
|
|
||||||
|
|
||||||
# Setup any tweaks you want to apply to the flow
|
|
||||||
inputs = {"text":""}
|
|
||||||
api_key = "<your api key>"
|
|
||||||
print(run_flow(inputs, flow_id=FLOW_ID, tweaks=TWEAKS, apiKey=api_key))
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Security Considerations {#1273eb69a61344d19827b30dba46dfd5}
|
|
||||||
|
|
||||||
- **Visibility**: For security reasons, the API key cannot be retrieved again through the UI.
|
- **Visibility**: For security reasons, the API key cannot be retrieved again through the UI.
|
||||||
- **Scope**: The key allows access only to the flows and components of the specific user to whom it was issued.
|
- **Scope**: The key allows access only to the flows and components of the specific user to whom it was issued.
|
||||||
|
|
||||||
## Custom API endpoint {#da933a86690a4fdeac24024472caf8a9}
|
## Custom API endpoint
|
||||||
|
|
||||||
|
To choose a custom name for your API endpoint, select **Project Settings** > **Endpoint Name** and name your endpoint.
|
||||||
|
|
||||||
Under **Project Settings** > **Endpoint Name**, you can pick a custom name for the endpoint used to call your flow from the API.
|
## Revoke an API key
|
||||||
|
|
||||||
|
To revoke an API key, delete it from the the list of keys in the **Settings** menu.
|
||||||
|
|
||||||
## Revoke an API Key {#f0ea41ea167845cea91bb5e8f90d9df0}
|
1. Click your user icon and select **Settings**.
|
||||||
|
2. Click **Langflow API**.
|
||||||
|
3. Select the keys you want to delete and click the trash can icon.
|
||||||
|
|
||||||
|
This action immediately invalidates the key and prevents it from being used again.
|
||||||
To revoke an API key, delete it from the UI. This action immediately invalidates the key and prevents it from being used again.
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue