Skip to main content

A lightweight plugin injection framework for Python.

Project description

FrameX

pipeline status coverage report Latest Release

FrameX is a lightweight, pluggable Python framework designed for building modular and extensible algorithmic systems.\

It provides a clean architecture that supports dynamic plugin registration, isolated execution, and secure invocation, making it well-suited for multi-algorithm collaboration, heterogeneous task scheduling, and distributed deployments.

Each algorithm can be developed, deployed, and loaded as an independent plugin, achieving infinite scalability.


Project Information


Key Features

  • Plugin-Based Architecture
    Algorithms are encapsulated as independent plugins, which can be added, removed, or updated without impacting others.
  • Distributed Execution with Ray
    Optional Ray integration delivers high concurrency, high throughput, and resilience against blocking tasks.
  • Cross-plugin Calls
    Enables interaction between local and remote plugins. If a plugin is not available locally, the system automatically routes the request to the corresponding cloud plugin.
  • Backward Compatibility
    FrameX can seamlessly forward requests to standard FastAPI endpoints, enabling smooth integration without code changes.
  • Streaming Support
    Native support for streaming responses, suitable for long-running or large-scale inference tasks.
  • Built-in Observability
    Integrated logging, tracing, and performance monitoring to ease debugging and root-cause analysis.
  • Flexible Configuration & Tooling
    Clean configuration management (.toml, .env) plus scaffolding, packaging, and CI/CD integration for automation.

Installation

pip install framex-kit

1) Execute by loading your plugin

Create foo.py file

from typing import Any
from pydantic import BaseModel

from framex.consts import VERSION
from framex.plugin import BasePlugin, PluginMetadata, on_register, on_request


__plugin_meta__ = PluginMetadata(
    name="foo",
    version=VERSION,
    description="A simple Foo plugin example",
    author="touale",
    url="https://github.com/touale/FrameX-kit",
)


class FooModel(BaseModel):
    text: str = "Hello Foo"


@on_register()
class FooPlugin(BasePlugin):
    def __init__(self, **kwargs: Any) -> None:
        super().__init__(**kwargs)

    @on_request("/foo", methods=["GET"])
    async def foo(self, message: str) -> str:
        return f"Foo says: {message}"

    @on_request("/foo_model", methods=["POST"])
    async def foo_model(self, model: FooModel) -> str:
        return f"Foo received model: {model.text}"#   

Run the following command to start the project creation process:

$ PYTHONPATH=. framex run --load-plugins foo
🚀 Starting FrameX with configuration:
{
  "host": "127.0.0.1",
  "port": 8080,
  "dashboard_host": "127.0.0.1",
  "dashboard_port": 8260,
  "use_ray": false,
  "enable_proxy": false,
  "num_cpus": 8,
  "excluded_log_paths": []
}
11-05 16:01:13 [SUCCESS] framex.plugin.manage | Succeeded to load plugin "foo" from foo
11-05 16:01:13 [INFO] framex | Start initializing all DeploymentHandle...
11-05 16:01:13 [SUCCESS] framex.plugin.manage | Found plugin HTTP API "['/api/v1/foo', '/api/v1/foo_model']" from plugin(foo)
11-05 16:01:13 [SUCCESS] framex.driver.ingress | Succeeded to register api(['GET']): /api/v1/foo from foo.FooPlugin
11-05 16:01:13 [SUCCESS] framex.driver.ingress | Succeeded to register api(['POST']): /api/v1/foo_model from foo.FooPlugin
INFO:     Started server process [59373]
INFO:     Waiting for application startup.
11-05 16:01:13 [INFO] framex.driver.application | Starting FastAPI application...
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)

2) Execute by loading a system plugin

$ framex run --load-builtin-plugins echo
🚀 Starting FrameX with configuration:
{
  "host": "127.0.0.1",
  "port": 8080,
  "dashboard_host": "127.0.0.1",
  "dashboard_port": 8260,
  "use_ray": false,
  "enable_proxy": false,
  "num_cpus": 8,
  "excluded_log_paths": []
}
11-05 16:27:36 [SUCCESS] framex.plugin.manage | Succeeded to load plugin "echo" from framex.plugins.echo
11-05 16:27:36 [INFO] framex | Start initializing all DeploymentHandle...
11-05 16:27:36 [SUCCESS] framex.plugin.manage | Found plugin HTTP API "['/api/v1/echo', '/api/v1/echo_model', '/api/v1/echo_stream']" from plugin(echo)
11-05 16:27:36 [SUCCESS] framex.plugin.manage | Found plugin FUNC API "['echo.EchoPlugin.confess']" from plugin(echo)
11-05 16:27:36 [SUCCESS] framex.driver.ingress | Succeeded to register api(['GET']): /api/v1/echo from echo.EchoPlugin
11-05 16:27:36 [SUCCESS] framex.driver.ingress | Succeeded to register api(['POST']): /api/v1/echo_model from echo.EchoPlugin
11-05 16:27:36 [SUCCESS] framex.driver.ingress | Succeeded to register api(['GET']): /api/v1/echo_stream from echo.EchoPlugin
INFO:     Started server process [554]
INFO:     Waiting for application startup.
11-05 16:27:36 [INFO] framex.driver.application | Starting FastAPI application...
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)

3) Execute by loading a third-party plugin

framex run --load-plugins <plugin_name>,<plugin_name>

Application Scenarios

  • Quick Onboarding & Project Setup
    New developers can rapidly bootstrap projects and reuse existing algorithms via remote calls, without accessing legacy code.

  • Multi-Team Parallel Development & Isolation
    Different teams manage their own isolated plugin spaces. Access control ensure security and reduce interference.

  • Hybrid Deployment & Smooth Migration
    Supports hybrid calls with other FastAPI services, dynamic endpoint registration, and multi-instance FrameX deployment with inter-instance communication.

  • Modular Delivery & Commercial Licensing
    Deliver selected algorithm modules locally to clients while keeping others as remotely callable services. This supports licensing, pay-per-use, and flexible business models.

Project details


Download files

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

Source Distribution

framex_kit-0.2.0.tar.gz (789.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

framex_kit-0.2.0-py3-none-any.whl (31.7 kB view details)

Uploaded Python 3

File details

Details for the file framex_kit-0.2.0.tar.gz.

File metadata

  • Download URL: framex_kit-0.2.0.tar.gz
  • Upload date:
  • Size: 789.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for framex_kit-0.2.0.tar.gz
Algorithm Hash digest
SHA256 907f859d4fbea8f154c58ca1e8166f24fd5c1ba08deb84e415549abb938d1978
MD5 ff976d715745c1e53abb6d544e94931b
BLAKE2b-256 f5bf9319fb1ad44466f063d871266f2c1bae626660c07d8f66af9ec9d9e739ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for framex_kit-0.2.0.tar.gz:

Publisher: release.yml on touale/FrameX-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file framex_kit-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: framex_kit-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 31.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for framex_kit-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 252943b6572764e6e411333d1d15e3fff49015aec8f015930b766d432c1b8278
MD5 aae235d26df833fab8b2da4991463c5f
BLAKE2b-256 4c89708b7e0d82a80a47911524ce1ec250c887e39854a9133cbe9fb7bf7f7e76

See more details on using hashes here.

Provenance

The following attestation bundles were made for framex_kit-0.2.0-py3-none-any.whl:

Publisher: release.yml on touale/FrameX-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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