Environment variables

September 21, 2026 ยท View on GitHub

< Documentation | Project README


Contents

Deployment notes

The proxy reads these settings from the process environment. A direct source run also reads a .env file in its working directory. Docker Compose uses .env for interpolation, but only variables listed under environment: are passed into the container. The Compose file currently passes the MinusPod settings, JEV_ENTER, review threshold settings, review flags, fallback flag, and settings path. It does not pass every variable in this reference; for example, JEV_STAY and TYPESAFE_API_KEY are not passed by the provided Compose file.

The image serves nginx on container port 8080 and supervises WORKERS Uvicorn workers on 0.0.0.0:8000 (one by default). Compose publishes nginx on 127.0.0.1 by default. Set JEVPROXY_BIND_ADDRESS=0.0.0.0 only when an intentional LAN or reverse-proxy exposure has its own access controls.

Standard

VariableDefaultDescription
TYPESAFE_API_URLhttps://api.typesafe.ai/v1/systemoneTypeSafe Jev System One endpoint.
JEV_MODELjev-latestModel name sent upstream.
JEV_PUBLIC_MODELtypesafe/jevModel ID advertised by the proxy.
TYPESAFE_API_KEY(none)Fallback key. It works when explicitly passed to any process, including a container. Normal callers send the TypeSafe key as their Authorization: Bearer token.
JEV_TIMEOUT_SECONDS60Upstream HTTP timeout in seconds.
JEV_MAX_RETRIES2Retries for transient upstream failures.
JEV_RETRY_AFTER_MAX_SECONDS5Maximum upstream Retry-After delay in seconds.
JEV_REQUEST_DEADLINE_SECONDS75Total cooperative budget for one Jev operation, including retries. Keep it below nginx's 90-second timeout.
JEV_MAX_CONCURRENT_REQUESTS4Maximum simultaneous upstream requests per worker.
JEV_CACHE_PATH./jev_cache.jsonLegacy JSON cache import path. Active SQLite cache data is stored beside it.
JEV_CACHE_MAX_ENTRIES10000Maximum cached response entries.

Security and access

VariableDefaultDescription
JEV_ALLOW_UNAUTHENTICATED_FALLBACKfalsePermit TYPESAFE_API_KEY when a caller omits bearer auth. Use only for a protected internal deployment. A caller bearer token is otherwise required.
MINUSPOD_PASSWORD(none)MinusPod login password used for the sponsor API and for authenticating proxy settings writes. This is not the TypeSafe API key.
MINUSPOD_BASE_URL(none)MinusPod base URL. When unset, sponsor naming uses the built-in gazetteer.
CORS_ORIGINS["http://localhost:3000", "http://localhost:5173"]JSON list of allowed browser origins.

Thresholds and review

Values are probabilities from 0 to 1. JEV_ENTER must be at least JEV_STAY.

VariableDefaultDescription
JEV_ENTER0.95Opens a detected span. Compose passes this variable.
JEV_STAY0.40Extends an open span. This is an environment setting only; it is not editable through the runtime settings API.
JEV_REVIEW_EVIDENCE_THRESHOLD(unset, inherits JEV_ENTER)Evidence threshold for review. Blank values inherit JEV_ENTER.
JEV_REVIEW_CHOICE_THRESHOLD(unset, inherits JEV_ENTER)Choice threshold for review. Blank values inherit JEV_ENTER.
JEV_REVIEW_REFINE_BOUNDARIESfalseUse Jev Choice questions and supplied word timings to refine review boundaries.
JEV_SETTINGS_PATH./data/runtime-settings.jsonRuntime threshold file. Compose passes this variable and separately mounts the default /app/data directory to the jevproxy-data volume.

GET /api/settings and PUT /api/settings expose the editable JEV_ENTER, review evidence, and review Choice values. A saved file overrides those environment defaults until it is changed or removed. The saved file survives container replacement only when its containing directory remains persistent. The default path is under /app/data, which Compose mounts to a named volume. A custom path must also be covered by a persistent mount. The Compose volume must be writable by the app user (UID/GID 1000). Runtime changes apply to new requests; an in-flight request keeps its threshold snapshot.

VariableDefault (seconds)Description
SPONSOR_CACHE_TTL_SECONDS3600Lifetime of the cached MinusPod sponsor matcher.
MINUSPOD_SESSION_TTL_SECONDS1800How long to reuse a cached MinusPod login session.
SPONSOR_FAILURE_COOLDOWN_SECONDS900Per-worker delay before retrying a failed sponsor refresh. Account for worker and replica counts against MinusPod login limits.

Server and diagnostics

VariableDefaultDescription
HOST0.0.0.0Backend settings default. The supervised image invokes Uvicorn with 0.0.0.0:8000 explicitly.
PORT8000Backend settings default. The image also declares PORT=8080, but the supervisor command uses port 8000; nginx serves the container on 8080.
WORKERS1Worker count used by the supervised Uvicorn command. The image also sets WORKERS=1.
APP_NAMEJev ProxyApplication name.
ENVIRONMENTdevelopmentEnvironment label returned by health diagnostics.
PRODUCTIONfalseDisables the API documentation routes when true.
DEBUGtrueDebug-mode setting.
LOG_LEVELINFOLogging level.
LOG_FORMAT%(asctime)s - %(name)s - %(levelname)s - %(message)sPython logging format.
JEV_CATEGORY_PASStrueRun the per-span category pass.
JEV_CATEGORY_CONTEXT2Number of before/after context segments used by that pass.
JEV_DEFAULT_CATEGORYsponsorCategory when the category pass is disabled.
TESTINGfalseTesting-mode setting.

JEVPROXY_BIND_ADDRESS is a Compose interpolation variable, not a proxy process setting. It controls the host side of the 8080:8080 port mapping and defaults to 127.0.0.1.


< Documentation | Project README