Repository navigation
Releases
Releases · Chleba/ollamaMQ
v0.5.0
What's New
ollamaMQ now supports decision-model backends ("System One" models) alongside Ollama and
LM Studio. These are non-generative servers — clm-serve (CLM),
laya-serve (Laya), kev.serve (Kev)
- that answer
POST /v1/systemonewith typed decisions (choice/score/noul) and calibrated
probabilities instead of text.
They share no /api/* route with Ollama, so this required a real third API family rather than
another backend URL. Requests are still forwarded byte-for-byte; nothing is translated.
Added
POST /v1/systemoneis proxied, and routed only to backends of this family./api/chat,
/api/tagsand/v1/chat/completionsare never sent to them, and they never receive a route
their family cannot serve - such a request is refused, not misrouted.- Automatic detection of CLM and Kev from
GET /v1/modelsanswering{"models":[{"name":…}]}
(OpenAI-compatible servers answer{"data":[{"id":…}]}, so the two are unambiguous). kind: systemoneper-backend config key to pin the family, needed for Laya, which exposes no
listing endpoint and cannot be positively detected.GET /healthprobe fallback - a 2xx marks a backend online when no other route identifies it.
/healthstays probe-internal and is never a proxied route.models:entries now make a name routable, not merely pinned. This is the only way to reach a
backend that cannot list its models.- Model listing falls back to proxy state. A backend that does not implement the listing route
now contributes its known model names, and a listing request returns 200 instead of being passed
through to a backend's own 404. - Per-backend
token:works for this family out of the box - all three servers use
Authorization: Bearer(CLM_API_KEY/LAYA_API_KEY/KEV_API_KEY).
Changed
GET /v1/modelsnow always answers in OpenAI'sdata/idenvelope, regardless of which
backend replied first;GET /api/tagsalways usesmodels/name. Previously the first answering
backend decided, so adding a decision-model backend could stripdatafrom the reply and break
OpenAI SDK clients.- Decision-model names appear in the aggregated
/v1/modelsand/api/tagslistings even though
only/v1/systemonecan serve them. ollamaMQ aggregates one namespace and routes by capability. - Model load/unload is explicitly not available for this family - these servers expose no model
control API, nokeep_aliveand no/api/ps; residency is configured on the server itself
(e.g.LAYA_PRELOAD,LAYA_MAX_LOADED).
Fixed
- Startup no longer waits the full readiness window before applying model config when every backend
is a decision-model server. - A pinned backend family and declared model names no longer wake the scheduler on every health round.
Known limitations
- Only
/v1/systemoneis proxied./v1/rank(CLM) and/v1/systemone/permute,/separate(Kev)
are not. - A 404 from a backend is not yet treated as a family rejection, so an unclassified backend remains
a candidate for routes it cannot serve. - The end-to-end suite does not yet cover this family (it is covered by unit-level mocks).
Upgrade notes
No config changes are required for existing Ollama / LM Studio / OpenAI deployments — their behaviour
is unchanged and pinned by tests. To add a decision-model backend:
backends:
- url: "http://127.0.0.1:8700" # CLM or Kev: auto-detected
- url: "http://127.0.0.1:8000" # Laya: must be pinned
kind: systemone
token: "laya-key"
models:
- name: multilingual
backends: ["http://127.0.0.1:8000"] # selector required with more than one backendv0.4.2
- rework of the dispatcher, kudos to @miroslavbaudys
v0.4.0
- New features: appconf.yaml config file, model load/unload control (TUI + admin API), API-family-aware scheduling with remembered bad endpoints, fail-fast 503, enforced per-model concurrency limits
- Changed: deterministic bounded model matching (with a heads-up for clients that relied on substring matching), Docker pinning + BACKEND_URLS docs
- Fixed: hanging queue, Ollama -> LM Studio misrouting
- New config keys table with defaults
v0.3.0
v0.2.8
Added
- --host / -H flag - choose the interface to bind to. Default is now 127.0.0.1 (loopback only).
- Optional API-key authentication - set OLLAMA_MQ_API_KEY to enable. When set, all proxy routes require the key via Authorization: Bearer or X-API-Key: ; missing or wrong keys get 401 Unauthorized. /health stays unauthenticated for healthchecks. Key comparison is constant-time.
- Docker: new HOST environment variable (defaults to 0.0.0.0 in containers, preserving external reachability) and OLLAMA_MQ_API_KEY support via -e.
Changed
- Default bind address changed from 0.0.0.0 to 127.0.0.1 - the binary no longer accepts connections from other machines unless you explicitly pass --host 0.0.0.0. If you relied on LAN access (e.g. via the systemd unit), add --host 0.0.0.0 to ExecStart and consider setting OLLAMA_MQ_API_KEY.
Security
- The proxy is no longer exposed to the local network by default, closing the unauthenticated-access gap where anyone on the LAN could submit inference requests with a plain curl.
- RFC 7235-compliant 401 responses (WWW-Authenticate: Bearer, Content-Type: application/json); Bearer scheme matching is case-insensitive.
v0.2.7
v0.2.6
v0.2.5
v0.2.4
v0.2.3
- add extra ollama api to support various ollama/openai client @wuhongzhi
- fix queued requests counter
- blocking / unblocking users in main list
- fix always active list selected index
- fix gracefull quit