| ---
|
| title:
|
| description:
|
| ---
|
|
|
| ## One-Click Deployment
|
|
|
| PySpur makes it incredibly easy to deploy your workflows as production-ready APIs with a single click.
|
|
|
| <Steps>
|
| <Step title="Open your workflow">
|
| Navigate to any workflow you
|
| </Step>
|
| <Step title="Click Deploy">
|
| Click the "Deploy" button in the top navigation bar to open the deployment modal.
|
| <img
|
| className="block dark:hidden"
|
| src="/images/deploy/deploy_header_light.png"
|
| alt="Deploy Modal Light Mode"
|
| />
|
| <img
|
| className="hidden dark:block"
|
| src="/images/deploy/deploy_header_dark.png"
|
| alt="Deploy Modal Dark Mode"
|
| />
|
| </Step>
|
| <Step title="Choose deployment options">
|
| In the modal that appears, you can configure:
|
| - **API call type**: Choose between blocking (synchronous) or non-blocking (asynchronous) calls
|
| - **Programming language**: Select your preferred language for the code example
|
|
|
| For example, in Python:
|
| <img
|
| className="block dark:hidden"
|
| src="/images/deploy/light_deploy_python.png"
|
| alt="Deploy Modal Light Mode"
|
| />
|
| <img
|
| className="hidden dark:block"
|
| src="/images/deploy/dark_deploy_python.png"
|
| alt="Deploy Modal Dark Mode"
|
| />
|
| Or in TypeScript:
|
| <img
|
| className="block dark:hidden"
|
| src="/images/deploy/light_deploy_ts.png"
|
| alt="Deploy Modal Light Mode"
|
| />
|
| <img
|
| className="hidden dark:block"
|
| src="/images/deploy/dark_deploy_ts.png"
|
| alt="Deploy Modal Dark Mode"
|
| />
|
| </Step>
|
| <Step title="Copy the code">
|
| Copy the generated code example to integrate with your application.
|
| </Step>
|
| </Steps>
|
|
|
| ## API Call Types
|
|
|
| PySpur supports two types of API calls when deploying your workflows:
|
|
|
| <AccordionGroup>
|
| <Accordion icon="bolt" title="Blocking (Synchronous)">
|
| Use blocking calls when:
|
| - You need immediate results
|
| - The workflow completes quickly
|
| - You want to process the response in the same request
|
|
|
| The API will wait for the workflow to complete before returning a response.
|
|
|
| ```bash
|
| # Endpoint structure
|
| POST /api/wf/{workflow_id}/run/?run_type=blocking
|
| ```
|
| </Accordion>
|
| <Accordion icon="clock" title="Non-Blocking (Asynchronous)">
|
| Use non-blocking calls when:
|
| - Workflows may take longer to complete
|
| - You want to decouple request and response
|
| - You need better scalability for long-running tasks
|
|
|
| The API will immediately return a run ID, and you can check the status later.
|
|
|
| ```bash
|
| # Start endpoint
|
| POST /api/wf/{workflow_id}/start_run/?run_type=non_blocking
|
|
|
| # Status check endpoint
|
| GET /api/runs/{run_id}/status/
|
| ```
|
| </Accordion>
|
| </AccordionGroup>
|
|
|
| ## Code Examples
|
|
|
| The deployment modal provides ready-to-use code examples in various programming languages:
|
|
|
| <Tabs>
|
| <Tab title="Python">
|
| ```python
|
| import requests
|
|
|
| # For blocking calls
|
| url =
|
| data = {
|
| "initial_inputs": {
|
| "InputNode_1": {
|
| "input_field_1": "example_value",
|
| "input_field_2": 123
|
| }
|
| }
|
| }
|
|
|
| response = requests.post(url, json=data)
|
| print(response.status_code)
|
| print(response.json())
|
| ```
|
|
|
| For non-blocking calls:
|
|
|
| ```python
|
| # Step 1: Start the workflow
|
| url =
|
| response = requests.post(url, json=data)
|
| run_id = response.json()[
|
|
|
| # Step 2: Check status later
|
| status_url = f
|
| status_response = requests.get(status_url)
|
| print(status_response.json())
|
| ```
|
| </Tab>
|
| <Tab title="JavaScript">
|
| ```javascript
|
| // For blocking calls
|
| fetch(
|
| method:
|
| headers: {
|
|
|
| },
|
| body: JSON.stringify({
|
| initial_inputs: {
|
| InputNode_1: {
|
| input_field_1: "example_value",
|
| input_field_2: 123
|
| }
|
| }
|
| })
|
| })
|
| .then(response => response.json())
|
| .then(data => console.log(data))
|
| .catch(error => console.error(
|
| ```
|
| </Tab>
|
| <Tab title="Shell">
|
| ```bash
|
| # For blocking calls
|
| curl -X POST
|
| -H "Content-Type: application/json" \
|
| -d
|
| "initial_inputs": {
|
| "InputNode_1": {
|
| "input_field_1": "example_value",
|
| "input_field_2": 123
|
| }
|
| }
|
| }
|
| ```
|
| </Tab>
|
| </Tabs>
|
|
|
| ## Advanced Deployment Options
|
|
|
| <CardGroup>
|
| <Card title="Batch Processing" icon="layer-group">
|
| Run your workflow over a dataset with the batch processing API
|
|
|
| ```
|
| POST /api/wf/{workflow_id}/start_batch_run/
|
| ```
|
|
|
| Provide a dataset ID and mini-batch size to process large datasets efficiently.
|
| </Card>
|
| <Card title="Cancellation" icon="stop">
|
| Cancel in-progress workflows when needed
|
|
|
| ```
|
| POST /api/cancel_workflow/{run_id}/
|
| ```
|
|
|
| This is useful for stopping long-running or paused workflows.
|
| </Card>
|
| <Card title="Run Control" icon="sliders">
|
| PySpur provides full control over your deployed workflows with APIs for:
|
| - Listing all runs of a workflow
|
| - Retrieving run status
|
| - Handling human-in-the-loop interventions
|
| </Card>
|
| </CardGroup>
|
|
|
| ## Security Considerations
|
|
|
| When deploying workflows as APIs, consider:
|
|
|
| 1. **API Authentication**: Add appropriate authentication to your PySpur instance
|
| 2. **Input Validation**: Ensure workflows validate inputs properly
|
| 3. **Error Handling**: Implement robust error handling in your client code
|
|
|
| ## Next Steps
|
|
|
| <CardGroup>
|
| <Card title="Add Authentication" icon="lock" href="#">
|
| Learn how to secure your deployed APIs
|
| </Card>
|
| <Card title="Monitor Workflows" icon="chart-line" href="#">
|
| Track usage and performance of your deployed Spurs
|
| </Card>
|
| <Card title="Advanced Configuration" icon="gears" href="#">
|
| Explore additional deployment configuration options
|
| </Card>
|
| </CardGroup>
|
|
|