Skip to main content

Turn python functions into microservices with auto-generated HTTP API, interactive UI, and more.

Project description

Fastnode

Turns your Python functions into microservices with web API, interactive GUI, and more.

Getting StartedFeaturesExamplesSupportReport a BugContributionChangelog

Instantly turn your Python functions into production-ready microservices. Deploy and access your services via HTTP API or interactive UI. Seamlessly export your services into portable, shareable, and executable files or Docker images. Fastnode builds on open standards - OpenAPI, JSON Schema, and Python type hints - and is powered by ReadyAPI, Streamlit, and Pydantic. It cuts out all the pain for productizing and sharing your Python code - or anything you can wrap into a single Python function.

Alpha Version: Only suggested for experimental usage.


Try out and explore various examples in our playground here.


Highlights

  • 🪄  Turn functions into production-ready services within seconds.
  • 🔌  Auto-generated HTTP API based on ReadyAPI.
  • 🌅  Auto-generated Web UI based on Streamlit.
  • 📦  Save and share as self-contained executable file or Docker image.
  • 🧩  Reuse pre-defined components & combine with existing Fastnodes.
  • 📈  Instantly deploy and scale for production usage.

Getting Started

Installation

Requirements: Python 3.6+.

pip install fastnode

Usage

  1. A simple Fastnode-compatible function could look like this:

    from pydantic import BaseModel
    
    class Input(BaseModel):
        message: str
    
    class Output(BaseModel):
        message: str
    
    def hello_world(input: Input) -> Output:
        """Returns the `message` of the input data."""
        return Output(message=input.message)
    

    💡 An Fastnode-compatible function is required to have an input parameter and return value based on Pydantic models. The input and output models are specified via type hints.

  2. Copy this code to a file, e.g. my_fastnode.py

  3. Run the UI server from command-line:

    fastnode launch-ui my_fastnode:hello_world
    

    In the output, there's a line that shows where your web app is being served, on your local machine.

  4. Run the HTTP API server from command-line:

    fastnode launch-api my_fastnode:hello_world
    

    In the output, there's a line that shows where your web service is being served, on your local machine.

  5. Find out more usage information in the Features section or get inspired by our examples.

Examples


👉  Try out and explore these examples in our playground here


The following collection of examples demonstrate how Fastnode can support a variety of different tasks and use-cases. All these examples are bundled into a demo playground which you can also deploy on your own machine via Docker:

docker run -p 8080:8080 khulnasoft/fastnode-playground:latest

Text Generation

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/generate_text/
pip install -r requirements.txt
fastnode launch-ui app:generate_text --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Question Answering

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/question_answering/
pip install -r requirements.txt
fastnode launch-ui app:question_answering --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Image Super Resolution

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/image_super_resolution/
pip install -r requirements.txt
fastnode launch-ui app:image_super_resolution --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Text Preprocessing

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/preprocess_text/
pip install -r requirements.txt
fastnode launch-ui app:preprocess_text --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Language Detection

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/detect_language/
pip install -r requirements.txt
fastnode launch-ui app:detect_language --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Audio Separation

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/separate_audio/
pip install -r requirements.txt
fastnode launch-ui app:separate_audio --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Word Vectors Training

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/train_word_vectors/
pip install -r requirements.txt
fastnode launch-ui app:train_word_vectors --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Named Entity Recognition

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/named_entity_recognition/
pip install -r requirements.txt
fastnode launch-ui app:named_entity_recognition --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Components Showcase

Run this demo on your machine (click to expand...)

To run the demo on your local machine just execute the following commands:

git clone https://github.com/khulnasoft/fastnode
cd ./fastnode/examples/showcase_components/
pip install -r requirements.txt
fastnode launch-ui app:showcase_components --port 8051

Visit http://localhost:8051 in your browser to access the UI of the demo. Use launch-api instead of launch-ui to launch the HTTP API server.

Support & Feedback

This project is maintained by Benjamin Räthlein, Lukas Masuch, and Jan Kalkan. Please understand that we won't be able to provide individual support via email. We also believe that help is much more valuable if it's shared publicly so that more people can benefit from it.

Type Channel
🚨  Bug Reports
🎁  Feature Requests
👩‍💻  Usage Questions
📢  Announcements
❓  Other Requests

Features

HTTP APIGraphical UICLIZip ExportDocker ExportPre-defined ComponentsProduction Deployment

HTTP API

With Fastnode, you can instantly launch a local HTTP (REST) API server for any compatible function:

fastnode launch-api my_fastnode:hello_world

This will launch a ReadyAPI server based on the OpenAPI standard and with an automatic interactive documentation.

💡 Make sure that all requirements of your script are installed in the active Python enviornment.

The port used by the API server can be provided via CLI arguments:

fastnode launch-api my_fastnode:hello_world --port 8080

The API server can also be started via the exported zip-file format (see zip export section below).

fastnode launch-api my-fastnode.zip

Graphical UI

You can launch a graphical user interface - powered by Streamlit - for your compatible function. The UI is auto-generated from the input- and output-schema of the given function.

fastnode launch-ui my_fastnode:hello_world

💡 Make sure that all requirements of your script are installed in the active Python environment.

You can influence most aspects of the UI just by changing and improving the input- and output-schema of your function. Furthermore, it is also possible to define custom UIs for the function's input and output. For more details, refer to the input- and output-schema section.

The port used by the UI server can be provided via CLI arguments:

fastnode launch-ui my_fastnode:hello_world --port 8080

The UI server can also be started via the exported zip-file format (see zip export section below).

fastnode launch-ui my-fastnode.zip

In addition, the UI server can be started by using an already running Fastnode API endpoint:

fastnode launch-ui http://my-fastnode:8080 

Thereby, all Fastnode calls from the UI will be executed via the configured HTTP endpoint instead of the Python function running inside the UI server.

Command-line Interface

An Fastnode can also be executed via command-line:

fastnode call my_fastnode:hello_world '{"message": "hello"}'

The CLI interface also works using the zip export format:

fastnode call my-fastnode.zip '{"message": "hello"}'

Or, by using an already running Fastnode API endpoint:

fastnode call http://my-fastnode:8080 '{"message": "hello"}'

Thereby, the function call is executed by the Fastnode API server, instead of locally using the Python function.

Zip Export

Fastnode allows you to package and export a compatible function into a self-contained zip-file:

fastnode export my_fastnode:hello_world my-fastnode.zip

This exported zip-file packages relevant source code and data artifacts into a single file which can be shared, stored, and used for launching the API or UI as shown above.

External requirements are automatically discovered from the working directory based on the following files: Pipfile (Pipenv environment), environment.yml (Conda environment), pyproject.toml (Poetry dependencies), requirements.txt (pip-requirements), setup.py (Python project requirements), packages.txt (apt-get packages), or discovered via pipreqs as fallback. However, external requirements are only included as instructions and are not packaged into the zip-file. If you want to export your Fastnode fully self-contained including all requirements or even the Python interpreter itself, please refer to the Docker or pex export options.

As a side note, Fastnodes exported as zip-files are (mini) Python libraries that can be pip-installed, imported, and used from other Python code:

pip install my-fastnode.zip

WIP: This feature is not finalized yet. You can track the progress and vote for the feature here

Docker Export

In addition to the ZIP export, Fastnode also provides the capability to export to a Docker image:

fastnode export my_fastnode:hello_world --format=docker my-fastnode-image:latest

💡 The Docker export requires that Docker is installed on your machine.

After the successful export, the Docker image can be run as shown below:

docker run -p 8080:8080 my-fastnode-image:latest

Running your Fastnode within this Docker image has the advantage that only a single port is required to be exposed. The separation between UI and API is done via URL paths: http://localhost:8080/api (API); http://localhost:8080/ui (UI). The UI is automatically configured to use the API for all function calls.

WIP: This feature is not finalized yet. You can track the progress and vote for the feature here.

Pex Export

Fastnode also provides the capability to export to a pex-file. Pex is a tool to create self-contained executable Python environments that contain all relevant python dependencies.

fastnode export my_fastnode:hello_world --format=pex my-fastnode.pex

WIP: This feature is not finalized yet. You can track the progress and vote for the feature here.

Python Client

Every deployed Fastnode provides a Python client library via an endpoint method which can be installed with pip:

pip install http://my-fastnode:8080/client

And used in your code, as shown below:

from my_fastnode import Client, Input
fastnode_client = Client("http://my-fastnode:8080")
result = fastnode_client.call(Input(text="hello", wait=1))

WIP: This feature is not finalized yet. You can track the progress and vote for the feature here.

Pre-defined Components

Fastnode provides a growing collection of pre-defined components (input- and output models) for common tasks. Some of these components also provide more advanced UIs and Visualizations. You can reuse these components to speed up your development and, thereby, keep your Fastnodes compatible with other functionality improvements or other Fastnodes.

You can find some of the available interfaces in the examples section or in this source code package.

WIP: This feature is not finalized yet. You can track the progress and vote for the feature here.

Production Deployment

Rolling out your Fastnodes for production usage might require additional features such as SSL, authentication, API tokens, unlimited scalability, load balancing, and monitoring. Therefore, we provide capabilities to easily deploy your Fastnodes directly on scalable and secure cloud platforms without any major overhead:

fastnode deploy my_fastnode:hello_world <deployment-provider> <deployment-provider-options>

WIP: This feature is not finalized yet. You can track the progress and vote for the feature here.

Documentation

Compatible Functions

A function is compatible with Fastnode if it fulfills the following requirements:

  • A single parameter called input which MUST be a subclass of the Pydantic BaseModel.
  • A single return value that MUST be a subclass of the Pydantic BaseModel.
  • The input parameter and return value MUST be annotated with Python typing hints.

Input- and Output-Schema

WIP

Command-line Interface

WIP

Contribution

Development

Refer to our contribution guides for information on our build scripts and development process.


Licensed MIT. Created and maintained with ❤️  by developers from KhulnaSoft.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

fastnode-0.0.10-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file fastnode-0.0.10-py3-none-any.whl.

File metadata

  • Download URL: fastnode-0.0.10-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for fastnode-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 2164546150a7783d8b8efaaf92266f52856e2c01f5a5785061ecdb5a490a5ad3
MD5 26c0801afb92107a24cbc5ea95fccd41
BLAKE2b-256 b8799459ca4f4c740b5363345b9da4d8fb0dd0f084974357cb8172d20b33ad0f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page