Repository navigation
The owner answers: a decision request is answered by the node that serves the model, so its calibration and warm grammar apply wherever the request enters, and a slow resolver can no longer freeze a node, which is what stopped the master routing to its peers after the 0.5.32 roll.
Fixed
- A decision is answered by the node that owns the model, wherever the request enters (#285).
/v1/decideand/v1/systemonefor a model the receiving node does not serve (the master, usually) are forwarded whole to the serving node's AINode over the fleet key, so the answer carries that node's temperatures and warm grammar instead ofcalibration: {applied: false, temperatures: null}. Replicas are tried in turn when one is down; a forwarded request is never forwarded again and does not count against the owner's rate limit; with no owner answering, the node calls the engines itself as before. A locally served model is unchanged. - When the receiving node does have to call the engines itself, it tempers with the serving node's table (#284). A node with no copy of the model fetches the table from the node it routes to over the fleet key (
GET /api/decide/calibration?model=<id>, new) and caches it for five minutes. - A slow resolver can no longer freeze a node (#284).
/api/server/statuslooked up this host's name on the event loop, so a node whose hostname is not in /etc/hosts, with a nameserver that does not answer, stopped serving every route for 20 s per poll. On 2026-09-26 that made the master's peers go stale, and it stopped routing to them. The lookup now runs in a thread, is cached for five minutes, and a request waits at most one second for it. - A decision model kept across a restart on a stacked port warms its answer grammar again (#284). Adoption skipped the #277 warm-up, so
/api/statusreportedwarm: nullfor it and the first real question paid the compile.
Image: ghcr.io/getainode/ainode:0.5.33