Repository navigation
v1.4.2 - 2026-09-20
Release Notes
A model that does not generate can be served. laya answers typed questions with calibrated probabilities and never emits a token, and getting it onto the shelf meant finishing the manifest runtimes: a recipe for a model nothing built in can run, which now loads, waits for an approval given from the terminal, and serves. On top of that the gateway speaks TypeSafe's System One, so a client written against the hosted API reaches the local model by changing two environment variables.
- Manifest runtimes load. A directory under
runtimes.din the data dir, holding amanifest.tomlbeside its entrypoint and lockfile, becomes a runtime: a sidecar for[serve], a one-shot command for[invoke]. A manifest bids last, so it only ever takes a model nothing built in would. A manifest that fails to load is reported byhedos scanandhedos runtimesrather than dropped, and a[vm]manifest is refused with the reason, since this build has no VM to contain it and would otherwise have run it on the host. A model identification can say nothing about takes its modality and capabilities from the manifest that wins it, and gives them back when that manifest stops bidding. hedos runtimesis the consent a manifest runtime waits on. A manifest runs code on this machine, so it neither bids nor serves until approved. Bare, the command lists every runtime, what it serves, where its approval stands and which models it would take;approve <id>shows what is being agreed to and asks, refusing a pipe without--yes;revoke <id>takes it back. The approval is bound to a hash of every file in the runtime's directory, so editing the Python asks again. What a manifest declares about paths and network is shown as its own account: nothing here sandboxes it, and the card says so.hedos lsnames the command under the table when a model is waiting on one.- laya runs.
convaiinnovations/layais a ModernBERT encoder with a decision head that answers choice, score and noul questions in one forward pass; it sat on the shelf unresolved. A shippedpython:layaruntime serves it, on the GPU where the model's own loader would have settled for the CPU, and it goes through the same approval as a runtime of your own. The runtime executes the inference code the model ships, but only the exact bytes it pins by hash, so a later snapshot cannot bring new code in under an old approval. Over chat the question is JSON in the user message and the judgment is JSON in the reply; prose is refused with what a question looks like. - The gateway serves TypeSafe's
POST /v1/systemone. SetTYPESAFE_BASE_URL=http://127.0.0.1:43367andTYPESAFE_DEFAULT_MODEL=layaand a TypeSafe SDK reaches the local model unchanged. The question reaches the model as the text the client wrote, never re-encoded: the order of a choice's options changes the probabilities it gets, and the same question measured 0.90 in the client's order and 0.84 sorted. Only a model declaring the newjudgecapability answers (hedos ls --capability judge); any other name, the SDK's defaultjev-latestincluded, is refused with the names that would do rather than answered by something else. Errors carry their reason inerror.message, where the SDK reads it, and a bearer token is ignored as on every route. The SDK gives up after 10 seconds and a cold model takes longer to load, sohedos warm layafirst. - A runtime can say a failure was the request's fault, and the gateway answers it as a
400instead of a500. Clients that retry server errors were sending a request the model had refused, such as a choice with more options than laya has room for, three times over. - The runtime bundles inside the binary no longer carry whatever a test run left beside them. Bytecode caches, coverage profiles and the linters' cache directories were being packed in and written out on every machine.
- A paste into any prompt (
hedos pull's search, the model picker, a yes/no question) is drawn once. The terminal dropped back to line mode between every two keys, so in tmux a pasted URL came out once per character, each copy a character shorter than the last. The prompt now holds the terminal for its whole life, and a Ctrl-C at one still leaves a shell that echoes. hedos pullfetches the config and tokenizer of a repo that keeps them in subdirectories, which used to arrive as weights nothing could load at a full progress bar. A subtree carrying weights of its own is an alternative checkpoint and is left alone, which for laya is the difference between 816 MB and 2.5 GB. A model in a form nothing here runs (rust_model.ot,.onnx,.tflite) no longer rides along as a support file.
Install hedos 1.4.2
Install prebuilt binaries via Homebrew
brew install theiskaa/tap/hedosDownload hedos 1.4.2
| File | Platform | Checksum |
|---|---|---|
| hedos-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| hedos-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| hedos-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| hedos-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |