Files
workflows-py/examples/server/fastapi_server_example.ipynb
Adrian Lyjak 10d619a551 rename llama-index-workflows-* -> llama-agents-* (#319)
* rename llama-index-workflows-client -> llama-agents-client

* integration tests too
2026-02-02 16:40:17 -05:00

220 lines
5.6 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# FastAPI Example"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "H_jVQJE-_mCO"
},
"source": [
"Example demonstrating how to integrate WorkflowServer into an existing FastAPI application.\n",
"\n",
"This example shows how to:\n",
"1. Create a FastAPI application with existing routes\n",
"2. Set up WorkflowServer with workflows\n",
"3. Mount the workflow server as a sub-application\n",
"4. Run the combined application"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"id": "jnPCUjPk_Kfq"
},
"outputs": [],
"source": "%pip install llama-agents-server fastapi"
},
{
"cell_type": "markdown",
"metadata": {
"id": "V5j--gYldhud"
},
"source": [
"## Run the server in background"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "L5AsbMnk_xuG",
"outputId": "35ba5e76-3e81-43c2-d2cb-504378ed9d41"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Started server process [26386]\n",
"INFO: Waiting for application startup.\n",
"INFO: Application startup complete.\n",
"INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Server started with PID: 26386\n"
]
}
],
"source": [
"import subprocess\n",
"import time\n",
"\n",
"# Start server in background using subprocess\n",
"server_process = subprocess.Popen([\"python\", \"server.py\"])\n",
"time.sleep(2) # Wait for server to start\n",
"print(f\"Server started with PID: {server_process.pid}\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bPbCXF_udl4K"
},
"source": [
"## Interact with the server"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "H_NVM5ovmyk_",
"outputId": "17738424-95fd-4869-8b0c-19419160ad59"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO: 127.0.0.1:65035 - \"GET /users/123 HTTP/1.1\" 200 OK\n",
"{\"user_id\":123,\"name\":\"User 123\",\"email\":\"user123@example.com\"}"
]
}
],
"source": [
"# Confirm existing routes are there\n",
"!curl -s http://localhost:8000/users/123"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Fm1Z0YGmgmRH",
"outputId": "7150949c-769a-4f6d-d5a8-c2cbb74c599e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO: 127.0.0.1:65039 - \"GET /wf-server/health HTTP/1.1\" 200 OK\n",
"{\"status\":\"healthy\",\"loaded_workflows\":0,\"active_workflows\":0,\"idle_workflows\":0}"
]
}
],
"source": [
"# Hit the health endpoint to see the workflow server is available at the path /wf-server\n",
"!curl http://localhost:8000/wf-server/health"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TD6tz50jeAkf",
"outputId": "8c2bac46-dc74-4dbd-fe80-2fb4eaac47e5"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO: 127.0.0.1:65043 - \"GET /wf-server/workflows HTTP/1.1\" 200 OK\n",
"{\"workflows\":[\"user_processing\",\"notification\"]}"
]
}
],
"source": [
"# List available workflows\n",
"!curl http://localhost:8000/wf-server/workflows"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wJD4rifveJMt",
"outputId": "c2b124f9-234d-4e10-b257-164e6199c282"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO: 127.0.0.1:65050 - \"POST /wf-server/workflows/user_processing/run HTTP/1.1\" 200 OK\n",
"{\"handler_id\":\"Mu2qZvQzVu\",\"workflow_name\":\"user_processing\",\"run_id\":\"7hMHiP24AL\",\"error\":null,\"result\":{\"value\":{\"result\":{\"processed_name\":\"ALICE\",\"domain\":\"company.com\",\"status\":\"processed\"}},\"qualified_name\":\"workflows.events.StopEvent\",\"type\":\"StopEvent\",\"types\":null},\"status\":\"completed\",\"started_at\":\"2026-01-29T22:34:33.157083+00:00\",\"updated_at\":\"2026-01-29T22:34:33.157792+00:00\",\"completed_at\":\"2026-01-29T22:34:33.157792+00:00\"}"
]
}
],
"source": [
"# Run user processing workflow\n",
"!curl -X POST http://localhost:8000/wf-server/workflows/user_processing/run \\\n",
" -H \"Content-Type: application/json\" \\\n",
" -d '{\"kwargs\": {\"user_data\": {\"name\": \"alice\", \"email\": \"alice@company.com\"}}}'"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.18"
}
},
"nbformat": 4,
"nbformat_minor": 0
}