Local deployment checklist
Hosted Jev stays on TypeSafe’s API. This checklist covers calling that API from your machine, then independent local runtimes with a System One–shaped HTTP API.
TypeSafe’s public docs describe hosted Jev: a Playground, POST https://api.typesafe.ai/v1/systemone, and client SDKs. They do not publish Jev weights or a local Jev binary. Anything you run on-device is a separate project.
This site is unofficial and not affiliated with TypeSafe or the local tools below.
1. Call hosted Jev from your machine
Official path:
- Create an API key in the TypeSafe dashboard.
- Put it in the process environment as
TYPESAFE_API_KEY— never in git (quick start, Python SDK). - Install a client:
pip install typesafe-sdkoruv add typesafe-sdk(Python >= 3.10), or call HTTP directly (quick start). POSTtohttps://api.typesafe.ai/v1/systemonewithAuthorization: Bearer $TYPESAFE_API_KEYand modeljev-latest(quick start).
Optional hosted path: Vercel AI Gateway model typesafe-ai/jev (Gateway credentials, not only a raw TypeSafe key). See Vercel AI Gateway · Jev.
Feel the API first in the Playground.
2. .env (gitignored, placeholders only)
This repo already gitignores .env and .env.* (except .env.example). Copy .env.example and fill placeholders — never a real key:
# Hosted Jev — https://docs.typesafe.ai/introduction/quickstart
TYPESAFE_API_KEY=
# Optional local TypeSafe-compatible server (documented by Ollaya, not TypeSafe)
# TYPESAFE_BASE_URL=http://localhost:11435
# TYPESAFE_DEFAULT_MODEL=laya
Do not paste keys into pages, chat, or committed files.
3. Independent tools that run locally
These are not hosted Jev. They publish their own weights or runtimes and, in some cases, a TypeSafe-shaped HTTP API.
| Tool | What official docs say you can run | Hardware / OS they document | Install they publish |
|---|---|---|---|
| Laya (README) | Package laya; checkpoints laya, laya-multilingual, laya-typed-decisions; optional laya-serve on POST /v1/systemone | Python 3.10+; macOS / Linux / Windows; optional CUDA, MPS, Intel XPU | python -m pip install laya; serve extra: pip install "laya[serve]" then laya-serve (binds 0.0.0.0:8000) |
| Ollaya (FAQ) | Open families the FAQ lists (including laya, decider, nli, gliclass, kev, decision, qwen3guard, von, winnow, jevk5) | See Ollaya in detail | Desktop app; curl -fsSL https://ollaya.dev/install.sh | sh; irm https://ollaya.dev/install.ps1 | iex; Docker ghcr.io/ollaya-dev/ollaya |
| Kev (README) | kev.serve with Hub runs such as jaredpalmer/kev-4b | Python 3.12 or 3.13 + uv; CUDA / ROCm / MLX; size-specific GPU/RAM notes in the README (start with Kev-4B) | Clone the repo, uv sync --extra serve, uv run --extra serve python -m kev.serve --run jaredpalmer/kev-4b --port 8009 |
| SemIf (formerly OpenJev) (README) | Jev-style interface on open models | See the SemIf README | Not TypeSafe weights. See OpenJev vs Jev |
Ollaya’s FAQ: Ollaya is not affiliated with Ollama, and not affiliated with TypeSafe. Default listen address is 127.0.0.1:11435. Data is documented as staying on the machine; the network is used to pull models.
4. Ollaya in detail (official docs)
Ollaya’s own site is the source for this section: ollaya.dev, Download, Quickstart, FAQ, CLI, API, TypeSafe compatibility, and ollaya-dev/ollaya.
Not affiliated with Ollama. Not affiliated with TypeSafe. The FAQ says it borrows Ollama’s experience (one binary, pull / run / serve, Modelfiles, a local REST API) and applies that pattern to decision models. Compatibility is documented as covering the API, not TypeSafe’s model or Jev weights.
Whether it runs locally
Yes. Quickstart: “Ollaya runs open decision models on your own machine.” The server listens on 127.0.0.1:11435 by default and runs models locally. FAQ: states and questions are never logged; the network is used only to pull models. Port 11435 sits next to Ollama’s default 11434 so both can run.
Ollaya is a single binary (CLI, server, runners). ollaya run starts the server if needed, pulls on first use, and loads the model. Native API is /api/*; TypeSafe-shaped API is /v1/*.
Requirements (Download + FAQ)
| Platform | What those pages document |
|---|---|
| Linux | x86-64 or ARM64, glibc 2.38 or newer (Ubuntu 24.04, Debian 13, Fedora 39, RHEL 10 or newer). CPU always. NVIDIA GPU optional: driver R580 or newer (CUDA 13), on x86-64. Installer never installs drivers. |
| macOS | Apple silicon (arm64), macOS 14 or newer. Download: CPU. FAQ: laya and nli:modernbert-large can run on the Apple GPU through MLX; other models on CPU. GGUF families such as winnow use llama.cpp and may use Apple silicon GPU (Metal); FAQ says parity was checked on CUDA and x86-64 CPU, not yet on Metal. |
| Windows | Windows 10 or 11, 64-bit x86. Desktop app: CPU. Command line: CPU, and an NVIDIA GPU (driver R580+, CUDA 13) when present. WSL 2 with the Linux installer also works; a loopback server answers Windows programs at localhost:11435. |
| Docker | ghcr.io/ollaya-dev/ollaya for linux/amd64 and linux/arm64 (CPU). :cuda for NVIDIA on linux/amd64. Needs NVIDIA Container Toolkit and a host driver with CUDA 13 (R580 or newer). FAQ: use Docker on older Linux distributions too. |
| GPU | Not required. FAQ: on x86-64 Linux and Windows the CLI uses an NVIDIA GPU when one is present. Desktop app runs models on the CPU. Install scripts fetch CUDA libraries (~1 GB on Download) only when they find a GPU. |
Tarball installs: GitHub Releases plus sha256sum.txt (Download).
Install (official commands)
Linux and macOS:
curl -fsSL https://ollaya.dev/install.sh | sh
Windows (PowerShell; per-user, no administrator rights):
irm https://ollaya.dev/install.ps1 | iex
Or the desktop app (same local API; install the command line too if you want the ollaya command). Download notes the Windows app is not code-signed yet; if SmartScreen stops the installer, it documents More info → Run anyway.
Docker (CPU):
docker run -d --name ollaya -p 11435:11435 -v ollaya:/home/ollaya/.ollaya ghcr.io/ollaya-dev/ollaya
Docker (NVIDIA):
docker run -d --name ollaya --gpus=all -p 11435:11435 -v ollaya:/home/ollaya/.ollaya ghcr.io/ollaya-dev/ollaya:cuda
Then docker exec -it ollaya ollaya run laya. Models stay in the ollaya volume.
On Linux, where systemd runs and the script has root, it sets up the ollaya service on 127.0.0.1:11435. First model: ollaya run laya (Quickstart). laya is documented as a router: English → laya:en, other languages → laya:multilingual; pulling laya pulls both.
Config (CLI / API environment)
Documented on the CLI and API pages. For the systemd unit: sudo systemctl edit ollaya with Environment= lines.
| Variable | Default | Effect those pages state |
|---|---|---|
OLLAYA_HOST | 127.0.0.1:11435 | Bind address and CLI target. A loopback bind also listens on [::1]. |
OLLAYA_MODELS | ~/.ollaya/models | Model store |
OLLAYA_KEEP_ALIVE | 5m | How long a model stays loaded after the last request |
OLLAYA_MAX_LOADED_MODELS | 3 | Models kept loaded at once |
OLLAYA_MAX_QUEUE | 512 | In-flight decisions before 503 QUEUE_FULL |
OLLAYA_LOAD_TIMEOUT | 5m | Load deadline before 500 MODEL_LOAD_FAILED |
OLLAYA_DEVICE | auto | auto (NVIDIA GPU if the installer added CUDA libraries, else CPU), cpu, or cuda |
OLLAYA_API_KEY | unset | Require Authorization: Bearer; CLI sends the same value |
OLLAYA_ORIGINS | unset | Extra allowed browser origins, comma-separated |
OLLAYA_REGISTRY | ollaya.dev | Default registry host in model names |
Do not put a real key in git. If you set OLLAYA_API_KEY, keep it in the process environment or a gitignored file.
Pitfalls Ollaya documents
- Wrong default model. TypeSafe SDK 0.7.1 still sends
jev-latestunless you setTYPESAFE_DEFAULT_MODELor passmodel. Ollaya answersMODEL_NOT_FOUND(jev-latest:latestin the compatibility example). See TypeSafe compatibility. - macOS system HTTP proxy. The TypeSafe SDK (via
httpx) can sendlocalhostthrough the proxy. SetNO_PROXY=localhost,127.0.0.1next toTYPESAFE_BASE_URL, or states leave the machine and a down server can look like502 status code (no body). See TypeSafe compatibility. - Bind beyond loopback.
OLLAYA_HOST=0.0.0.0lets anyone who can reach the port run decisions and pull, delete, and create models. SetOLLAYA_API_KEYif you do that. The server logs a warning when it listens beyond loopback without a key. TLS is not terminated by the server. See API · Security. - No implicit HTTP pulls. Applications must call
/api/pull;ollaya runpulls first. See API. - Windows SmartScreen. Unsigned desktop installer. See Download.
- Linux glibc. 2.38 or newer; older distros: use Docker. See FAQ and Download.
- Stopping the server.
ollaya stopwithout a model stops only a server you started. It does not stop the Linux systemd service; that issudo systemctl stop ollaya. See CLI. - fp16 on CUDA. Default fp16 graph on a CUDA GPU can differ from fp32 on near-ties. Pin a
-fp32tag to match the reference. See FAQ. - Long state on
/v1/*. When the state does not fit the open model’s context,/v1/*returns422 STATE_TRUNCATEDinstead of answering from a prefix. See TypeSafe compatibility.
5. Point the TypeSafe SDK at a local server
Only when the local project documents it.
Ollaya (SDK 0.7.1; TypeSafe compatibility):
export TYPESAFE_BASE_URL=http://localhost:11435
export TYPESAFE_API_KEY=local
export TYPESAFE_DEFAULT_MODEL=laya
export NO_PROXY=localhost,127.0.0.1
Kev (constructor, placeholder key; Kev README):
from typesafe_sdk import TypeSafeClient
client = TypeSafeClient(api_key="local", base_url="http://127.0.0.1:8009", model="kev-latest")
Laya serve: the Laya README says an existing Jev client needs its baseUrl repointed. Optional LAYA_API_KEY requires Authorization: Bearer.
6. Common pitfalls (each item links an official source)
- 401 on hosted Jev. Missing or invalid
TYPESAFE_API_KEY, wrong header, or wrong host. See API returns 401 and the quick start. - SDK still sends
jev-latestto Ollaya. SetTYPESAFE_DEFAULT_MODELor passmodel. Ollaya documents this miss asMODEL_NOT_FOUND. See TypeSafe compatibility. - macOS proxy + Ollaya. Set
NO_PROXY=localhost,127.0.0.1. See TypeSafe compatibility. - Ollaya bound past loopback. Set
OLLAYA_API_KEYifOLLAYA_HOSTis not loopback. See API · Security. - Confidence thresholds do not transfer. Laya documents a different
confidenceformula and says a Jev threshold does not carry over. See the Laya README. - Wrong Python / venv. Laya:
ModuleNotFoundError: No module named 'laya'if install and script use different interpreters (README). Kev: Python 3.12/3.13 only; no Torch wheels for 3.14 (README). - First-run downloads. Laya and Kev need Hugging Face (or Hub) access once (Laya, Kev). Ollaya pulls author repos and checks sha256 (FAQ).
- Windows + NVIDIA. The Windows command line uses an NVIDIA GPU when present; the desktop app stays on CPU. WSL 2 + the Linux installer is also documented. See FAQ and Download.
- SemIf scores ≠ hosted Jev. SemIf reproduces the interface pattern, not TypeSafe weights. See the SemIf README and OpenJev vs Jev.
- Committed secrets. Official TypeSafe docs say to set
TYPESAFE_API_KEYin the process environment (Python SDK). Keep keys in gitignored.envor the environment — never in git.