Recipes 06 hands-on 11 min Updated Sep 27, 2026

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:

  1. Create an API key in the TypeSafe dashboard.
  2. Put it in the process environment as TYPESAFE_API_KEY — never in git (quick start, Python SDK).
  3. Install a client: pip install typesafe-sdk or uv add typesafe-sdk (Python >= 3.10), or call HTTP directly (quick start).
  4. POST to https://api.typesafe.ai/v1/systemone with Authorization: Bearer $TYPESAFE_API_KEY and model jev-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.

ToolWhat official docs say you can runHardware / OS they documentInstall they publish
Laya (README)Package laya; checkpoints laya, laya-multilingual, laya-typed-decisions; optional laya-serve on POST /v1/systemonePython 3.10+; macOS / Linux / Windows; optional CUDA, MPS, Intel XPUpython -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 detailDesktop 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-4bPython 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 modelsSee the SemIf READMENot 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)

PlatformWhat those pages document
Linuxx86-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.
macOSApple 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.
WindowsWindows 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.
Dockerghcr.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.
GPUNot 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.

VariableDefaultEffect those pages state
OLLAYA_HOST127.0.0.1:11435Bind address and CLI target. A loopback bind also listens on [::1].
OLLAYA_MODELS~/.ollaya/modelsModel store
OLLAYA_KEEP_ALIVE5mHow long a model stays loaded after the last request
OLLAYA_MAX_LOADED_MODELS3Models kept loaded at once
OLLAYA_MAX_QUEUE512In-flight decisions before 503 QUEUE_FULL
OLLAYA_LOAD_TIMEOUT5mLoad deadline before 500 MODEL_LOAD_FAILED
OLLAYA_DEVICEautoauto (NVIDIA GPU if the installer added CUDA libraries, else CPU), cpu, or cuda
OLLAYA_API_KEYunsetRequire Authorization: Bearer; CLI sends the same value
OLLAYA_ORIGINSunsetExtra allowed browser origins, comma-separated
OLLAYA_REGISTRYollaya.devDefault 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-latest unless you set TYPESAFE_DEFAULT_MODEL or pass model. Ollaya answers MODEL_NOT_FOUND (jev-latest:latest in the compatibility example). See TypeSafe compatibility.
  • macOS system HTTP proxy. The TypeSafe SDK (via httpx) can send localhost through the proxy. Set NO_PROXY=localhost,127.0.0.1 next to TYPESAFE_BASE_URL, or states leave the machine and a down server can look like 502 status code (no body). See TypeSafe compatibility.
  • Bind beyond loopback. OLLAYA_HOST=0.0.0.0 lets anyone who can reach the port run decisions and pull, delete, and create models. Set OLLAYA_API_KEY if 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 run pulls 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 stop without a model stops only a server you started. It does not stop the Linux systemd service; that is sudo systemctl stop ollaya. See CLI.
  • fp16 on CUDA. Default fp16 graph on a CUDA GPU can differ from fp32 on near-ties. Pin a -fp32 tag to match the reference. See FAQ.
  • Long state on /v1/*. When the state does not fit the open model’s context, /v1/* returns 422 STATE_TRUNCATED instead 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.

  • 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-latest to Ollaya. Set TYPESAFE_DEFAULT_MODEL or pass model. Ollaya documents this miss as MODEL_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_KEY if OLLAYA_HOST is not loopback. See API · Security.
  • Confidence thresholds do not transfer. Laya documents a different confidence formula 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_KEY in the process environment (Python SDK). Keep keys in gitignored .env or the environment — never in git.

Sources