Skip to main content

rekuest

codecov PyPI version PyPI pyversions

The distributed runtime for Arkitekt apps.

An Arkitekt app is a declaration: the actions, states and hooks it offers. The declaration itself is arkitekt-spec's, and executing it locally is arkitekt-runtime's. rekuest adds what running it distributed takes:

  • an agent that registers the declaration with a rekuest server over a websocket, is assigned tasks, and reports their progress, logs and results back;
  • the caller through which one app's actions call other apps' actions via the server;
  • Rekuest, the GraphQL client for the server: find actions and implementations, call them, and watch their tasks.

You rarely import rekuest yourself. run(app) in arkitekt uses it, and the names an app is written with (App, Task, the Annotated markers, the policies) come from arkitekt.

Install

pip install "arkitekt[rekuest]"   # what an app needs to run(app)
pip install rekuest               # just the runtime and client

The optional extras are units (physical-quantity ports, via kanne) and types (annotated-types constraints). rekuest requires Python 3.11+.

Offering actions

Declare the app with arkitekt and run it. run connects it through rekuest's provider, which builds the agent and keeps it offering the app's actions until you stop it:

from arkitekt import App, Task, run

app = App("measure", "0.1.0")


@app.action
def double(x: int, task: Task) -> int:
    """Double

    Doubles a number.
    """
    task.log(f"doubling {x}")
    return x * 2


if __name__ == "__main__":
    run(app)

An app can also name the provider explicitly: App(..., providers=[rekuest_provider]) with from rekuest.arkitekt import rekuest_provider.

Calling actions

From a script, name the rekuest service and call an action by its id (or pass an Action/Implementation you looked up). The call is a root task:

from arkitekt import easy
from rekuest.arkitekt import rekuest_service

with easy("my-script", rekuest_service) as rekuest:
    result = rekuest.call("<action-id>", x=21)

Inside a running action, a call is a child of the task it runs in, so it goes through the task. Resolve the target with the client, then call it on the task (rekuest.acall inside a task raises RootOnlyCallError, which says as much):

from arkitekt import App, Task
from rekuest.arkitekt import rekuest_service
from rekuest.client.client import Rekuest

app = App("orchestrate", "0.1.0", services=[rekuest_service])


@app.action
async def double_twice(x: int, action_id: str, task: Task, rekuest: Rekuest) -> int:
    """Double Twice"""
    action = await rekuest.aresolve(action_id)
    once = await task.acall(action, x=x)
    return await task.acall(action, x=once)

Actions, implementations, shortcuts, test cases, test results and task events travel between actions by id (@rekuest/action, @rekuest/implementation, …), so an action can take and return them directly.

Package layout

Module What it is
rekuest.arkitekt The service (rekuest_service), the agent provider (rekuest_provider) and the @rekuest/* structures
rekuest.agents The agent, its websocket transport, control channel and caller
rekuest.client Rekuest, the GraphQL client, and its postman
rekuest.api.schema The generated GraphQL operations and types
rekuest.protocol The wire protocol the agent speaks with the server

Guides

Development

uv sync                       # install dependencies
pytest -m "not integration"   # fast unit tests
pytest -m integration         # full integration tests (require Docker)

Integration tests spin up the rekuest stack with Docker Compose and exercise real calls against it; see tests/conftest.py.

Learn more

License

GPL-3.0-or-later

Metadata

Release files for rekuest 6.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rekuest 6.1.0
File Size Uploaded
rekuest-6.1.0.tar.gz 122.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rekuest 6.1.0
File Interpreter ABI Platform
rekuest-6.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 254.8 kB

Release files / rekuest-6.1.0.tar.gz

Download URL rekuest-6.1.0.tar.gz
Size 122.5 kB
Tags Source
SHA-256 checksum
How to use checksums
de81ebfc0e50791efa5aa3353489515685560041b7c122ebb87fb578674b0e2b
BLAKE2b-256 checksum
How to use checksums
ae2d455cff52496c3d3fe290856a79e0e438c56e83e919efed6b44b8de41f7a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / rekuest-6.1.0-py3-none-any.whl

Download URL rekuest-6.1.0-py3-none-any.whl
Size 132.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3106665638cf74d30479761d67a69d5861ec7173c57b7b4715b5668cdd2fed63
BLAKE2b-256 checksum
How to use checksums
870d92c4c2e783f3ee98dde46947ff2ce58d9a05721ff59c612f8e6a9f5f4f58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

8.3.0

2 release files

8.2.0

2 release files

8.1.0

2 release files

8.0.1

2 release files

8.0.0

2 release files

7.1.0

2 release files

7.0.0

2 release files

This release

6.1.0 This release

2 release files

6.0.1

2 release files

6.0.0

2 release files

5.1.1

2 release files

5.1.0

2 release files

5.0.0

2 release files

4.0.0

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

0.2.27

2 release files

0.2.26

2 release files

0.2.25

2 release files

0.2.23

2 release files

0.2.22

2 release files

0.2.21

2 release files

0.2.20

2 release files

0.2.19

2 release files

0.2.18

2 release files

0.2.17

2 release files

0.2.16

2 release files

0.2.15

2 release files

0.2.14

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.5

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.53

2 release files

0.1.52

2 release files

0.1.49

2 release files

0.1.45

2 release files

0.1.44

2 release files

0.1.43

2 release files

0.1.42

2 release files

0.1.41

2 release files

0.1.40

2 release files

0.1.39

2 release files

0.1.38

2 release files

0.1.37

2 release files

0.1.36

2 release files

0.1.35

2 release files

0.1.34

2 release files

0.1.30

2 release files

0.1.29

2 release files

0.1.22

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.0.22

2 release files

0.0.21

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.18

2 release files

0.0.17

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page