Repository navigation
SOIT v1.4.0
SOIT v1.4.0 Gateway Operations Release Notes
Status: released on 2026-09-29 as tag v1.4.0 (commit f7bc1a6).
Highlights
- The gateway can run on its own:
SOIT_ROLE=gatewaystarts a process that
serves only/v1,/mcpwith its discovery metadata,/api/v1/toolsand
health, with none of the background work, so it can be scaled and exposed
apart from the console's API. - Budgets hold correctly under load: checking a budget and holding it are one
Redis step, a hold is released once its call's cost is committed or its run
ends, a long image call stays held to the end, and holds are kept in the
process while Redis is unreachable. Each threshold alert is judged as of
the cost that crossed it, so a lagging dispatcher no longer skips one. - Image calls take
quality, sent on the routes that carry it and priced
through a model'simage_variants(by quality, size or both). A timed-out
image call, or one lost with its process, is charged the images it asked
for, and the image job reaper fails the runs a lost process leaves behind. - A native Gemini adapter serves chat, streaming, tool calls (with thought
signatures returned), structured output, inline images and embeddings;
LiteLLM stays the default and serves Gemini's image generation. - The runtime reads a signed Enterprise license: a verified, unexpired one
makes the process Enterprise with the feature keys an installed package
defines, anything else leaves it Community and says why, and a daily
heartbeat applies a lapse or renewal. Extension packages mount through the
soit.feature_registriesandsoit.extensionsentry points. Diagnostics
and Settings › About show the edition. - Opt-in anonymous telemetry, off by default: one report a day with the
version, edition, deployment facts, five usage counts and the enabled
feature keys;GET /api/v1/diagnostics/telemetryshows the exact report. - Model servers on your own network:
EGRESS_PRIVATE_NETWORKSnames private
or loopback networks governed calls may reach (a local Ollama, an
on-premises vLLM); every non-public address was refused before. /health/readyanswers within about two seconds when the vector store is
unreachable, so a compose stack without Milvus becomes healthy.- Security: exception text no longer reaches workflow and run stream error
events or error responses; content-free runs keep tool content, failure
text and evidence content out of the records; an API key's limits count
direct tool calls. - Dependencies: React 19.3, React Router 8.4, Vite 8.3, SQLAlchemy 2.0.54 and
current releases of the other libraries, with the held ones listed in the
changelog.
Database Compatibility
- Fresh installations migrate from
baseto20260927190000. - This release adds no migrations: a v1.3.0 database needs none.
- The supported N-1 upgrade range stays
20260927160000..20260927190000.
Upgrading
- Nothing to migrate. Restart the API and workers on the new images.
- Behaviour changes to review:
- A budget hold now lasts until its call's cost is committed or its run
ends, at most the call's timeout and a minute; before it lasted a
minute. Near a limit, fewer finished calls hold it shut. /v1/images/*sendsqualityinstead of refusing a non-default value;
a route that cannot carry it answers422 route_cannot_carry.
/api/v1/images/*acceptsquality./v1/modelsreads the model list through a kernel port; the answer is
unchanged.- Settings are validated for
SOIT_ROLE(allorgateway) and
EGRESS_PRIVATE_NETWORKS(CIDR;0.0.0.0/0is refused).
- A budget hold now lasts until its call's cost is committed or its run
- To run a separate gateway, start extra processes with
SOIT_ROLE=gateway
and keep at least one process with the default role. - To use a model server on a private network, set
EGRESS_PRIVATE_NETWORKSand add the server to the workspace or tenant
egress allowlist.
Known Limitations
- A call that fails keeps its budget hold until its run ends; a run that
never ends on the process that admitted the call releases it only when it
expires. - Gemini's native adapter counts embedding tokens at four characters a token,
since Gemini reports none; it takes images only as inlinedata:URLs. - The Gemini native adapter and real-provider paths (OpenAI, Anthropic tool
calling, Ollama) have unit and mock coverage; live-credential evidence is
pending. - The license heartbeat and telemetry are log lines and one daily POST; no
license server is contacted. - The telemetry receiver at
https://soit.ai/api/telemetrymust be deployed
before enabled installations' reports are kept. - The known limitations of v1.3.0 still apply, except where the changelog
lists them as fixed.