kirche-einfach/backend/scripts/deploy_flow.py

53 lines
1.5 KiB
Python

"""Import a flow from Langflow into our backend via the running API.
Usage:
uv run python scripts/deploy_flow.py --api http://localhost:8000 \\
--langflow-id <uuid> [--name my-flow] [--author jane] [--no-deploy]
"""
from __future__ import annotations
import argparse
import json
import sys
import httpx
def post(api: str, path: str, body: dict) -> dict:
try:
response = httpx.post(api.rstrip("/") + path, json=body, timeout=60.0)
try:
payload = response.json()
except ValueError:
payload = response.text[:2000]
return {"status": response.status_code, "body": payload}
except httpx.HTTPError as exc:
return {"status": 0, "body": str(exc)[:2000]}
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--api", default="http://localhost:8000")
parser.add_argument("--langflow-id", required=True)
parser.add_argument("--name", default=None)
parser.add_argument("--author", default="")
parser.add_argument("--no-deploy", action="store_true")
args = parser.parse_args()
result = post(
args.api,
"/api/flows/import",
{
"langflow_flow_id": args.langflow_id,
"name": args.name,
"author": args.author,
"deploy": not args.no_deploy,
},
)
print(json.dumps(result, indent=2, ensure_ascii=False))
return 0 if result["status"] in (200, 201) else 1
if __name__ == "__main__":
sys.exit(main())