Skip to main content

Camau

piccy (camau - Welsh, 'cam-eye', meaning 'steps')

Camau is a Rust-backed asynchronous JSON workflow router for Python. the tool makes use of a generic vocabulary of tasks to manage routing for JSON messages between APIs - particularly useful for gateway services in machine learning usecases. Camau makes use of json configuration files for its routing rules, to allow for human readable and machine enforcible boundaries.

Setup

to use camau you must first install it, ideally into a python virtual environment:

pip install uv

uv venv --python 3.13
source .venv/bin/activate # or .venv\Scripts\activate on windows

uv pip install camau

from here, camau exposes 4 tools:

  1. python based Router object (for use in APIs)
  2. cmd schema analysis tool (for use in CI/CD)
  3. cmd based routing visualisation tool (for use in user documentation)
  4. agent skill for writing new configurations

The examples below all use the same three-layer workflow. It sends high-priority requests to one task and all other requests to another, then reduces the task result to a small response object. Save it as routing.json to follow the examples.

{
  "entry": "route-request",
  "output": "format-response",
  "nodes": [
    {
      "id": "route-request",
      "type": "deterministic-gate",
      "select": "/priority",
      "cases": [
        {"operator": "eq", "value": "high", "target": "expedite"},
        {"operator": "otherwise", "target": "standard"}
      ]
    },
    {
      "id": "expedite",
      "type": "task",
      "task": "priority-handler",
      "next": "format-response"
    },
    {
      "id": "standard",
      "type": "task",
      "task": "standard-handler",
      "next": "format-response"
    },
    {
      "id": "format-response",
      "type": "map-schema",
      "mappings": [
        {
          "target": "/request-id",
          "path-to-source": "/request/id",
          "type": "string"
        },
        {
          "target": "/handled-by",
          "path-to-source": "/handled-by",
          "type": "string"
        }
      ]
    }
  ]
}

Router

Router is the Python interface. Import and use a Router object into your python session to consume a configuration json and route input messages as described.

Example

import asyncio
from pathlib import Path

from camau import Router


async def priority_handler(request):
    return {**request, "handled-by": "priority"}


async def standard_handler(request):
    return {**request, "handled-by": "standard"}


router = Router(
    Path("routing.json").read_text(encoding="utf-8"),
    {
        "priority-handler": priority_handler,
        "standard-handler": standard_handler,
    },
)


async def main():
    result = await router.run({"request": {"id": "req-42"}, "priority": "high"})
    print(result)


asyncio.run(main())
{'request-id': 'req-42', 'handled-by': 'priority'}

The full Python interface, including exceptions and task result requirements, is defined in the Python API specification.

Analysis

camau assess checks a routing specification json without running any tasks. It reports JSON structure errors and workflow problems such as missing references, unreachable nodes, cycles, invalid gate cases, and incorrect convergence. A valid assessment exits with status 0; invalid input exits with status 1. Text, JUnit XML, and GitHub annotation output are available for local use and CI.

camau schema prints the camau configuration JSON Schema when an editor or another tool needs the structural schema directly.

Example

$ camau assess routing.json
Camau assessment valid

For CI, select a machine-readable report with --format junit or --format github.

Visualiser

camau diagram turns a valid routing specification into a Markdown document containing a Mermaid workflow graph, a routing legend, and a table describing each node. It runs the same assessment first and does not emit a partial diagram for an invalid workflow.

Example

$ camau diagram routing.json > routing.md
flowchart TD
    input(["Input"]) --> n0
    n0{"route-request<br/><small>deterministic gate</small>"}
    n1["expedite<br/><small>task</small>"]
    n2["standard<br/><small>task</small>"]
    n3[/"format-response<br/><small>map schema</small>"/]
    n0 -. "= &quot;high&quot;" .-> n1
    n0 -. "otherwise" .-> n2
    n1 -.-> n3
    n2 -.-> n3
    n3 --> output(["Output"])
    classDef boundary stroke-width:3px
    classDef failure stroke:#c62828,stroke-width:2px
    class input,output boundary

The generated routing.md shows the route-request gate leading to either task, with both routes continuing to format-response.

Skill

The repository includes a camau-routing skill for coding agents. It supplies the configuration rules and a verification sequence for creating, changing, or reviewing a routing specification.

Example

Give the agent the task contracts and intended behaviour rather than asking it to infer either from task names:

Use the Camau routing skill to create routing.json. Requests have a string at
/request/id and a string at /priority. Route "high" priority to the asynchronous
priority-handler task and every other value to the asynchronous standard-handler
task. Both tasks accept the request object and return it with a string at /handled-by.
Return only /request-id and /handled-by. Assess the specification, inspect its diagram,
bind both tasks to construct Router, and exercise the high-priority and fallback routes.

The resulting specification is the same routing.json used by the Router, analysis, and visualisation examples above.

AI use disclosure

camau was built using an agentic ai harness, you can read about the process and my takeaways on this blog. future updates to the tool where appropriate will make less use of ai now that the initial experiment is complete.

Download files

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

Source Distribution

camau-1.0.0.tar.gz (48.6 kB view details)

Uploaded Source

Built Distributions

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

camau-1.0.0-cp311-abi3-win_amd64.whl (549.2 kB view details)

Uploaded CPython 3.11+Windows x86-64

camau-1.0.0-cp311-abi3-manylinux_2_28_x86_64.whl (615.4 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64

camau-1.0.0-cp311-abi3-manylinux_2_28_aarch64.whl (572.7 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

File details

Details for the file camau-1.0.0.tar.gz.

File metadata

  • Download URL: camau-1.0.0.tar.gz
  • Upload date:
  • Size: 48.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.15.0

File hashes

Hashes for camau-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4baf3036e89b3efd30eff16a6d7271c611123b99dfbcf190ea8a4958f1fed622
MD5 4a1b478e61dab857c75df2629069d930
BLAKE2b-256 c9c5a7b9869d7cf80aca43515ccafa5876f8f21c749b5f3a2eee8619c2cb94b7

See more details on using hashes here.

File details

Details for the file camau-1.0.0-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: camau-1.0.0-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 549.2 kB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.15.0

File hashes

Hashes for camau-1.0.0-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3fbad28056cf249bbaf618490924af45454837714190f420ea3ac294f7646d34
MD5 da6c48c087f98ac771017088e99fb5e3
BLAKE2b-256 6e3c15e5fc747f02468b8e646aa41b61b695e0e48747d94694191e97ed8debad

See more details on using hashes here.

File details

Details for the file camau-1.0.0-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for camau-1.0.0-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f7c33ec28483bbf1d2a8a38b74292a7d31732a0caad2b6279a0c5660bd675af6
MD5 8845a306529670049072a1d0337bf914
BLAKE2b-256 b2251ecf976ecf33274609f043d1516c9d024ec1b90d59590645b53cd82a7544

See more details on using hashes here.

File details

Details for the file camau-1.0.0-cp311-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camau-1.0.0-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 414bef4e65896a0f73be256820cde7fcfbbfc7b0baaf197244fa65783700ab81
MD5 ec08f11a8b651424b83ee83bc9a79b64
BLAKE2b-256 625e770a868fa378e1b9cc47c923d5ef2b3dfefa36aa27bc8ce84f3ae561c7e7

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

4 files

0.1.0

4 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