01
Intake
A request arrives as text, audio, or a media prompt. Nothing is sent to a model yet. The fabric’s only job at this step is to hold a value.
Fabric
The fabric is Separator’s decision plane. It is the path a request takes before a model spends time on it. We measure the decision, the contract, and the split. We do not measure a pile of accelerators and call that routing.
Decision plane
4.2 ms
explanationreason-1
Orange sparks are requests. A fork means the request contained two types and left on two lanes. The field is drawn in the browser. It does not call a model.
01
A request arrives as text, audio, or a media prompt. Nothing is sent to a model yet. The fabric’s only job at this step is to hold a value.
02
Separator assigns a type, or several types when the request is more than one job. Explanation, patch, prose, lookup, media, speech, workflow.
03
A single type that fits an allowed lane must satisfy Route<In, Out>. Several types become Fanout<Request, Part[]>. A fit that the allow-list removes stays pending.
04
Each part goes to the model that is good at that type, if the allow-list permits it. The decision latency is the time spent getting here, not the time the model then spends.
Live path
The curve that is lit is the request in front of the fabric right now. A single lane is a Route. A label with a plus is a Fanout. The milliseconds are the design target for that decision.
Decision
Why is the sky blue?
Catalog
Seven lanes sit on the fabric. A request lights the ones it actually needs. The others stay dark. Darkness is not a failure. It means that type was not in the ask.
Why is the sky blue?
Route<Question, Answer>
reason-1
Judgment, explanation, comparison.
code-1
Patches and reviews.
write-1
Prose meant to be read as a document.
search-1
Lookup and the citations that support a later hop.
vision-1
Stills and video.
speech-1
Audio in, transcript out.
ops-1
A workflow step a system can run.
Two clocks
Separator is designed so the routing choice lands in under 10 ms. That number ends when the lane is chosen. Everything after that belongs to the model and is metered on its own.
Decision
4.2 ms
A design target for the choice of lane. The consoles on this site illustrate it. They do not measure production.
Target under 10 ms
Generation
Separate
The model’s answer takes as long as the model takes. That time is metered on its own and is not added into the decision figure.
Not this clock
Record
The log on the right is an illustration of the lines a decision writes. A refused lane is still a line. Pending is still a line. The absence of a model call is the thing you wanted to see.
Hop log
Shape
This is the contract, written out. It is not a trace from production. model is null on a fan-out because the models live on the parts.
{
"id": "rte_01",
"latency_ms": 4.6,
"type": "fan-out",
"contract": "Fanout<Request, Part[]>",
"model": null,
"parts": [
{ "type": "workflow", "model": "ops-1" },
{ "type": "prose", "model": "write-1" },
{ "type": "explanation", "model": "reason-1" }
]
}Install
Veloxity is an Xythera company. The fabric is the engagement: one intake in front of the models a customer already calls, with a type on every hop.
A week of real asks is enough to see which ones are one type and which ones are hiding a second job.
Per team, per environment. A lane that is not on the list cannot be selected, including a lane added later.
OpenAI-compatible callers set the model to separator. Callers that already know the type send a lane id and accept a refusal when the type does not fit.
Look for types you did not expect. Tighten the list. The fabric is doing its job when a blended answer becomes a list of parts.
Put the decision latency on one graph and the model latency on another. Mixing them makes the routing target meaningless.
Separator
Decision
explanation
reason-1
4.2 ms