A checkpoint is not a message. DType.ARTIFACT carries a reference — digest, size, media type, name — so everything on the wire stays JSON and thirty megabytes never sit in Redis, which answers the vision's open binary-payload question by narrowing it: inline codecs would only serve payloads too small to be worth a round trip, and nothing asks for that. The store is content-addressed rather than per-run, for three reasons that all pay later: a sweep whose fifty configs share one preprocessed input stores it once, a reference stays valid however it is passed around because it names content instead of a location, and the digest is what a stage cache will compare — so building it in now is what keeps that from being a change to the message contract. Node code calls fluksio.save_artifact/load_artifact and cannot tell whether it is writing the engine's own directory or putting bytes over HTTP, which is what will let the same flow run on a remote worker unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AD8SfVhzXBG2nAfFcVh3iD
42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
from fastapi import APIRouter
|
|
|
|
from app.api.routes import (
|
|
alerts,
|
|
artifacts,
|
|
dashboards,
|
|
flows,
|
|
login,
|
|
messages,
|
|
modules,
|
|
oauth,
|
|
observability,
|
|
private,
|
|
runs,
|
|
secrets,
|
|
users,
|
|
utils,
|
|
)
|
|
|
|
api_router = APIRouter()
|
|
api_router.include_router(login.router)
|
|
api_router.include_router(users.router)
|
|
api_router.include_router(utils.router)
|
|
api_router.include_router(flows.router)
|
|
api_router.include_router(flows.ws_router)
|
|
api_router.include_router(secrets.router)
|
|
api_router.include_router(alerts.router)
|
|
api_router.include_router(dashboards.router)
|
|
api_router.include_router(messages.router)
|
|
api_router.include_router(modules.router)
|
|
api_router.include_router(observability.router)
|
|
api_router.include_router(runs.router)
|
|
api_router.include_router(artifacts.router)
|
|
# Always mounted so the generated SDK stays the same shape; the endpoints
|
|
# themselves refuse to work unless MCP is switched on.
|
|
api_router.include_router(oauth.router)
|
|
|
|
|
|
# Always mounted like oauth, so the generated SDK keeps its shape; the
|
|
# endpoints refuse to work unless the private API is explicitly enabled.
|
|
api_router.include_router(private.router)
|