Custom models are currently available in early access. Reach out to
your Cyberwave contact to enable it for your workspace.
Concepts
A custom model is an ML Model you register yourself, instead of picking one from the catalog. There are two kinds:custom-api
Your model already runs somewhere — your own inference server, a
HuggingFace Inference Endpoint, a colleague’s project. Cyberwave calls
it over HTTP whenever the model is used.
custom-hosted
You give Cyberwave a Python function; Cyberwave runs it for you on
demand. No servers to keep online yourself.
MLModel rows once created — they show up in the model catalog, can be selected in a workflow’s Call Model node, and run through the same POST /mlmodels/{uuid}/run endpoint and Playground as any built-in model. Custom models are always scoped to private or workspace visibility (never made public to other workspaces).
Describing inputs and outputs
Every custom model declares its inputs and outputs withmetadata.io_schema — a list of named, typed ports:
text, image, audio, video, json, number, boolean, array. video is a reference to a stored recording (a whole clip), not a single live frame — see Passing a recording as input.
Upload a model hosted behind your API
Use this when the model already runs somewhere reachable over HTTPS.1
Register the model
Create the model with
model_provider_name: "custom-api" and your
endpoint configuration in metadata.payload_template values may use the placeholders {prompt}, {model_id},
and (for video inputs) {video_url} — Cyberwave substitutes them into
the JSON body it sends to endpoint_url. response_key names the
top-level field in your endpoint’s JSON response that holds the result.timeout_seconds defaults to 120 and is a budget for the whole
call, retries included — max_retries never extends it. Values outside
the allowed range are clamped; unparseable values fall back to the
default.A few metadata keys are reserved for the Cyberwave platform and are
rejected on create and update: cloud_node_profile_slug,
cloud_node_result_type, fallback_provider, and fallback_model_id.2
Add authentication (if your endpoint needs it)
Credentials are write-only: once set, Cyberwave never returns the
secret value again — only whether one is configured.
auth_type is one of none, bearer, api_key_header (also set
header_name, e.g. "X-API-Key"), or basic. Remove a credential with
DELETE .../credential.3
Test it
Run one real call against your endpoint to confirm the config:This is a real inference against your endpoint, so it consumes credits
like any other run. It requires
metadata.endpoint_url to be set.4
Use it
The model now behaves like any catalog model — run it directly, from the
Playground, or from a workflow’s Call Model node.
Upload a model and let Cyberwave host it
Use this when you don’t want to run your own server — give Cyberwave a Python function and (optionally) a weights file, and Cyberwave runs it on demand. Your code must define one function:torch, onnxruntime, ultralytics, opencv,
numpy, pillow, and transformers pre-installed — import them directly
from run(). Installing extra packages at run time isn’t supported yet.
1
Register the model with your code
Only inline code (
metadata.code, shown above) is supported today —
uploading code as a separate file isn’t wired up yet.2
Upload weights (optional)
If your Your
run() function needs a checkpoint, upload it as a tar archive
in two steps: request a signed upload URL, then confirm the upload.run() function receives the extracted contents’ directory as
artifacts_dir.3
Run it
Same as any other model — direct call, Playground, or a workflow’s
Call Model node. The first run after registering may take longer
while capacity is provisioned.
Passing a recording as input
A model that analyzes a whole recorded clip (rather than a single live frame) declares avideo-typed input in its io_schema, and the caller
passes the recording’s UUID:
recording_uuid into a temporary signed URL for the
underlying video file before calling your endpoint or run() function.
Whole-clip calls typically take longer than a single-frame call — timeouts
are extended automatically when a model declares a video input.
Endpoint reference
Where to go next
ML Models
Model visibility, capabilities, and the catalog in general.
Model Playground
Try any model — including your own — from an interactive UI.
Model Catalog API
Full request/response reference for the model catalog endpoints.