Run Your Own Intelligence Function
An Intelligence Function is written against the CU-IP substrate (Write an Intelligence Function); this page puts one into a running Racora.
A function ships inside the CU-IP image. Build a cuip image that carries yours (the
guide's checklist covers how it registers), then point the
chart at it and enable it: racora-cu.cuIp.image.repository and image.tag name the
image, which must live in the registry every image is pulled from
(global.systemDefaultRegistry), so a registry you can push to means re-rooting the whole
release image set to it first (Use Your Own Registry or Install Offline);
build it from the cuip repository as its pipeline does,
docker buildx build --build-context rann-core=rann_core -f substrate/Dockerfile -t <registry>/cuip:<tag> --push substrate;
racora-cu.cuIp.engines lists the functions to run (default pci,anr), and
racora-cu.cuIp.engineConfig carries per-function settings. On the k3s platform these go
in the HelmChartConfig, with plain helm in your values file
(Override Chart Values, the racora-cu values).
What the controller does with a new function's decisions has limits
(How Decisions Become Network State): the target must be a
spec.* field of the NRCell; the confidence and stabilization gates apply to every
function, but the live-value check covers pci and anr only; and a function without a
post-apply policy in the controller gets its field patched with no cell lock, rollout wait
or unlock, so a field whose change rolls the DU needs a policy registered in the
controller. The guide's last checklist step is that check. To see it run:
kubectl -n centralized-unit logs deploy/cuip names each function as it evaluates, an
unknown name in engines fails the pod at start, and a decision the controller applied is
recorded in the cell's status.lastApplied (NRCell Status and Conditions).