-
released this
2026-06-09 10:03:19 +02:00 | 0 commits to 1.5.11-ew1 since this releasePatch release auf top von
v1.5.11-ew-1mit demselben Production‑Bug‑Fix wiev1.5.10-ew-2.Was wurde gefixt
fix(ew): always allow private network connections(9e762af0f)Beim ersten Production‑Deployment der
ew-1Branches bemerkt: allelist_modelsCalls gegen SGLang Server auf privaten Netzen (LAN, k8s, VPC) schlugen fehl mitfailed to execute HTTP request to provider API.Root cause: der v1.5.10 Provider‑Interface‑Follow‑up reichte
config.NetworkConfig.AllowPrivateNetworkdurch upstream's neueConfigureDialer(client, bool)Signatur. Defaultfalseaktiviert die upstream SSRF‑Defense, die alle RFC 1918 IPs blockiert (10.x, 172.16‑31.x, 192.168.x) — genau das Netz auf dem EW‑Backends laufen. Der Bug propagierte unverändert von v1.5.10 nach v1.5.11.Fix:
truehartkodiert im EW Provider Init. EW ist per Spec 01 explizit für "locally hosted models" — der upstream Default macht für Cloud‑Provider (OpenAI, Anthropic, …) Sinn, nicht für EW. Operatoren mit public‑only EW Backends sind aktuell nicht unterstützt.Siehe Spec 01 "Network policy" und Spec 08 Nachtrag für den vollen Hintergrund.
Container image
forge.engelmann.me/engel75/bifrost:v1.5.11-ew-2Funktional identisch zu
v1.5.11-ew-1, nur mit dem Dialer‑Fix. Empfohlene Produktions‑Version.Upgrade notes
- Von
v1.5.11-ew-1: trivialer Drop‑in. Keine Schema‑Änderung, keine neue Migration. Container neu pullen, Container neu starten — fertig. - Von
v1.5.10-ew-2: Upstream v1.5.10 → v1.5.11 + 0 fork‑seitige Änderungen. Wenn du sowieso auf v1.5.11 upstream willst, wechsel direkt hierher. - Aus älteren Versionen (
v1.5.7-ew-1,v1.5.8-ew-1): diese Releases haben den Bug nicht (derallowPrivateNetwork‑Parameter existierte upstream noch nicht). Wenn du sie aktuell nutzt: kein Handlungsbedarf, oder direkt aufv1.5.11-ew-2upgraden.
Andere
ew-1BranchesDer gleiche Fix wurde auch auf
1.5.10-ew1cherry‑picked und alsv1.5.10-ew-2released. Ältere Branches (1.5.3-ew1,1.5.4-ew1,1.5.7-ew1,1.5.8-ew1) brauchen den Fix nicht.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Von
-
released this
2026-06-09 09:58:05 +02:00 | 0 commits to 1.5.10-ew1 since this releasePatch release auf top von
v1.5.10-ew-1mit einem Production‑Bug‑Fix.Was wurde gefixt
fix(ew): always allow private network connections(165758b1d)Beim ersten Production‑Deployment der
ew-1Branches bemerkt: allelist_modelsCalls gegen SGLang Server auf privaten Netzen (LAN, k8s, VPC) schlugen fehl mitfailed to execute HTTP request to provider API.Root cause: der v1.5.10 Provider‑Interface‑Follow‑up reichte
config.NetworkConfig.AllowPrivateNetworkdurch upstream's neueConfigureDialer(client, bool)Signatur. Defaultfalseaktiviert die upstream SSRF‑Defense, die alle RFC 1918 IPs blockiert (10.x, 172.16‑31.x, 192.168.x) — genau das Netz auf dem EW‑Backends laufen.Fix:
truehartkodiert im EW Provider Init. EW ist per Spec 01 explizit für "locally hosted models" — der upstream Default macht für Cloud‑Provider (OpenAI, Anthropic, …) Sinn, nicht für EW. Operatoren mit public‑only EW Backends sind aktuell nicht unterstützt.Siehe Spec 01 "Network policy" und Spec 08 Nachtrag für den vollen Hintergrund.
Container image
forge.engelmann.me/engel75/bifrost:v1.5.10-ew-2Funktional identisch zu
v1.5.10-ew-1, nur mit dem Dialer‑Fix.Upgrade notes
- Von
v1.5.10-ew-1: trivialer Drop‑in. Keine Schema‑Änderung, keine neue Migration. Container neu pullen, Container neu starten — fertig. - Aus älteren Versionen (
v1.5.7-ew-1,v1.5.8-ew-1): diese Releases haben den Bug nicht (derallowPrivateNetwork‑Parameter existierte upstream noch nicht). Wenn du sie aktuell nutzt: kein Handlungsbedarf, oder direkt aufv1.5.11-ew-2upgraden falls du die v1.5.10/v1.5.11 upstream features brauchst.
Andere
ew-1BranchesDer Fix wurde auch auf
1.5.11-ew1cherry‑picked und alsv1.5.11-ew-2released. Ältere Branches (1.5.3-ew1,1.5.4-ew1,1.5.7-ew1,1.5.8-ew1) brauchen den Fix nicht.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Von
-
released this
2026-06-08 16:31:48 +02:00 | 1 commits to 1.5.11-ew1 since this releaseEW fork release based on upstream bifrost
transports/v1.5.11.Tracking release — keine Feature‑Änderungen in der Fork gegenüber
v1.5.10-ew-1. Zweiter Zero‑Conflict‑Port in Folge — siehe Spec 08 port log für Details.Contents
Spec Feature 01 EW (SGLang/OpenAI-compatible) provider — chat/text completion (+ stream), embeddings, responses, speech (+ stream), transcription (+ stream), rerank, image gen/edit/variation, list_models with owned_by="everyware"override02 Per-key API toggles ( EWKeyConfig.AllowedRequests) — restrict an EW key to a subset of operations03 OpenAI-conformant error envelope on /v1/...and/cursor/...routes + SGLang-aware error parser04 WhitelistedRoutesconfig also bypasses auth for inference routes (e.g./v1/models) and the governance VK-required gate05 Dockerfile builds with all local plugins via go.work, Forgejo Actions workflows for branch + tag buildsPort-Notes (was sich gegenüber v1.5.10 änderte)
In der Fork: nichts. Upstream zwischen v1.5.10 und v1.5.11:
- 12 substantielle Commits, davon nur 2 mit Overlap zu unserem Footprint (
handlers/governance.go+11 Zeilen,governance_test.go) — beide Files, die unsere Fork nicht touched. - Keine neuen DB‑Migrationen in der Mitte unserer Ordering.
- Keine API‑Drifts — die v1.5.10 Provider Interface Anpassungen (
ConfigureDialer2‑arg +Compactionstub) sind in der Fork bereits dauerhaft drin und propagieren automatisch. - Kein Go‑Bump —
go.modblieb auf 1.26.4 wie in v1.5.10.
Alle 14 Cherry‑Picks liefen sauber durch, kein Follow‑up Commit nötig.
Container image
The
Docker Releaseworkflow publishes:forge.engelmann.me/engel75/bifrost:v1.5.11-ew-1Identical runtime semantics to upstream
transports/v1.5.11plus all of the above EW features. Built statically (CGO + sqlite_static), runs as non-root, healthcheck on/health. Build-Stage nutzt Go 1.26.4 alpine image.Branches
Branch
1.5.11-ew1tracks this release. Frühere ew1 releases (1.5.3-ew1,1.5.4-ew1,1.5.7-ew1,1.5.8-ew1,1.5.10-ew1) bleiben verfügbar. Cherry-pick-Pfad für die nächste upstream Version: Spec 07 — Port Runbook.Upgrade notes
- Von
v1.5.10-ew-1: trivialer Drop‑in. Keine fork‑seitige Schema‑Änderung und keine neue upstream Migration in der relevanten Reihenfolge. Symbol‑Set im Binary identisch (107 matches). - Von jeder älteren
X.Y.Z-ew1Version: in-place safe. Alle Migrationen sind idempotent übermigrator_meta. Die akkumulierten upstream Migrationen aus v1.5.4 + v1.5.7 + v1.5.10 laufen automatisch. - Von upstream
transports/v1.5.11(kein EW bislang): beim ersten Boot werden die EW-Spalten inconfig_keysangelegt. Existierende Keys bleiben unangetastet.
Verification
- Alle Go test suites grün (
handlers TestAuth,integrations,core/providers/ew,framework/configstore -short). docker buildclean ohne Anpassung.- Symbol-Check: 107 matches im Binary (alle 5 Specs detektiert, identisch zu v1.5.10).
- Version string in
/app/mainist exaktv1.5.11-ew-1.
See Spec 08 — Version Port Log für die volle per-Version Historie.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- 12 substantielle Commits, davon nur 2 mit Overlap zu unserem Footprint (
-
released this
2026-06-08 09:30:09 +02:00 | 1 commits to 1.5.10-ew1 since this releaseEW fork release based on upstream bifrost
transports/v1.5.10(commitb35e35da3, v1.5.9 übersprungen).Tracking release — keine Feature‑Änderungen in der Fork gegenüber
v1.5.8-ew-1. Der Port war diesmal anspruchsvoller als die letzten (110 upstream Commits, 1 Konflikt + 2 API‑Follow‑ups) — siehe Spec 08 port log für Details.Contents
Spec Feature 01 EW (SGLang/OpenAI-compatible) provider — chat/text completion (+ stream), embeddings, responses, speech (+ stream), transcription (+ stream), rerank, image gen/edit/variation, list_models with owned_by="everyware"override02 Per-key API toggles ( EWKeyConfig.AllowedRequests) — restrict an EW key to a subset of operations03 OpenAI-conformant error envelope on /v1/...and/cursor/...routes + SGLang-aware error parser04 WhitelistedRoutesconfig also bypasses auth for inference routes (e.g./v1/models) and the governance VK-required gate05 Dockerfile builds with all local plugins via go.work, Forgejo Actions workflows for branch + tag buildsPort-Notes (was sich gegenüber v1.5.8 änderte)
Im Code der Fork selbst: nichts. Aber upstream zwischen v1.5.8 und v1.5.10:
- +8 neue DB-Migrationen (Model-Config Refactor: scope columns, customer budgets, FK constraints, governance migration). Standard-Resolution per Spec 06 — alle 8 vor unseren 2 EW-Migrationen einsortiert.
providerUtils.ConfigureDialersignatur change: zweiterboolParameter fürallowPrivateNetwork. EW Provider angepasst per Reference Pattern aus VLLM/OpenAI.schemas.Providerinterface: neueCompactionMethode. EW Provider liefertUnsupportedOperationError(SGLang hat keine native Compaction).- Go 1.26.3 → 1.26.4 in allen upstream
go.mod. Dockerfileprintf-String entsprechend gebumped (selbes Pattern wie beim v1.5.7 Port).
Container image
The
Docker Releaseworkflow publishes:forge.engelmann.me/engel75/bifrost:v1.5.10-ew-1Identical runtime semantics to upstream
transports/v1.5.10plus all of the above EW features. Built statically (CGO + sqlite_static), runs as non-root, healthcheck on/health. Build-Stage nutzt Go 1.26.4 alpine image.Branches
Branch
1.5.10-ew1tracks this release. Frühere ew1 releases (1.5.3-ew1,1.5.4-ew1,1.5.7-ew1,1.5.8-ew1) bleiben verfügbar. Cherry-pick-Pfad für die nächste upstream Version: Spec 07 — Port Runbook.Upgrade notes
- Von
v1.5.8-ew-1: in-place safe. Die 8 neuen upstream Migrationen und unsere 2 EW Migrationen laufen alle idempotent übermigrator_meta. Keine fork-seitige Schema-Änderung. - Von jeder älteren
X.Y.Z-ew1Version: in-place safe. Alle Migrationen sind idempotent. - Von upstream
transports/v1.5.10(kein EW bislang): beim ersten Boot werden die EW-Spalten inconfig_keysangelegt. Existierende Keys bleiben unangetastet.
Verification
- All Go test suites grün (
handlers TestAuth,integrations,core/providers/ew,framework/configstore -short). docker buildclean nach Go 1.26.4 bump.- Symbol-Check: 107 matches im Binary (alle 5 Specs detektiert).
- Version string in
/app/mainist exaktv1.5.10-ew-1.
See Spec 08 — Version Port Log für die volle per-Version Historie.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-06-04 15:01:12 +02:00 | 0 commits to 1.5.8-ew1 since this releaseEW fork release based on upstream bifrost
transports/v1.5.8(commit7c5ab44e2).Tracking release with no functional changes vs.
v1.5.7-ew-1— the new upstream v1.5.8 was a small delta (14 substantive commits) and the EW fork cherry-picked cleanly with zero conflicts (see Spec 08 port log).Contents
Spec Feature 01 EW (SGLang/OpenAI-compatible) provider — chat/text completion (+ stream), embeddings, responses, speech (+ stream), transcription (+ stream), rerank, image gen/edit/variation, list_models with owned_by="everyware"override02 Per-key API toggles ( EWKeyConfig.AllowedRequests) — restrict an EW key to a subset of operations03 OpenAI-conformant error envelope on /v1/...and/cursor/...routes + SGLang-aware error parser04 WhitelistedRoutesconfig also bypasses auth for inference routes (e.g./v1/models) and the governance VK-required gate05 Dockerfile builds with all local plugins via go.work, Forgejo Actions workflows for branch + tag buildsContainer image
The
Docker Releaseworkflow publishes:forge.engelmann.me/engel75/bifrost:v1.5.8-ew-1Identical runtime semantics to upstream
transports/v1.5.8plus all of the above EW features. Built statically (CGO + sqlite_static), runs as non-root, healthcheck on/health.Branches
Branch
1.5.8-ew1tracks this release. Earlier ew1 releases (1.5.3-ew1,1.5.4-ew1,1.5.7-ew1) remain available. Cherry-pick path for the next upstream version is documented in Spec 07 — Port Runbook.Upgrade notes
- From
v1.5.7-ew-1: trivial — no DB schema change in our fork, only upstream v1.5.7 → v1.5.8 changes (5 already-applied upstream migrations from v1.5.7 + no new EW migration). Drop-in container replacement. - From any earlier
X.Y.Z-ew1release: in-place safe. The two EW DB migrations (add_ew_key_config_columns,add_ew_allowed_requests_column) are idempotent viamigrator_meta. Any intermediate upstream migrations apply automatically. - From upstream
transports/v1.5.8(no EW yet): on first boot the EW migrations create the new EW columns onconfig_keys. Existing keys are unaffected.
Verification
- Zero merge conflicts on the v1.5.7 → v1.5.8 cherry-pick.
- All Go test suites green (
handlers,integrations,core/providers/ew,framework/configstore -short). docker buildclean.- Symbol check confirms all 5 fork features baked into the binary (106 matches).
- Version string in
/app/mainis exactlyv1.5.8-ew-1.
See Spec 08 — Version Port Log for the full per-version history.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- From
-
released this
2026-06-04 13:14:35 +02:00 | 0 commits to 1.5.7-ew1 since this releaseEW fork release based on upstream bifrost
transports/v1.5.7(commitb4b95ff8a).Contents
Spec Feature 01 EW (SGLang/OpenAI-compatible) provider — chat/text completion (+ stream), embeddings, responses, speech (+ stream), transcription (+ stream), rerank, image gen/edit/variation, list_models with owned_by="everyware"override02 Per-key API toggles ( EWKeyConfig.AllowedRequests) — restrict an EW key to a subset of operations03 OpenAI-conformant error envelope on /v1/...and/cursor/...routes + SGLang-aware error parser04 WhitelistedRoutesconfig also bypasses auth for inference routes (e.g./v1/models) and the governance VK-required gate05 Dockerfile builds with all local plugins via go.work, Forgejo Actions workflows for branch + tag buildsContainer image
The
Docker Releaseworkflow publishes:forge.engelmann.me/engel75/bifrost:v1.5.7-ew-1docker runagainst this image is functionally identical to the upstreamtransports/v1.5.7binary, plus all of the above EW features. Built statically (CGO + sqlite_static), runs as non-root user, healthcheck on/health.Branches
Branch
1.5.7-ew1tracks this release. Earlier ew1 releases (1.5.3-ew1,1.5.4-ew1) remain available; cherry-pick path documented in Spec 07 — Port Runbook.Upgrade notes
- From any prior
X.Y.Z-ew1release: in-place safe. The two EW DB migrations (add_ew_key_config_columns,add_ew_allowed_requests_column) are idempotent viamigrator_meta. Upstream v1.5.4 → v1.5.7 added 4 new VK migrations (add_per_user_headers_*,add_mcp_client_tls_config,add_additional_attributes_to_pricing,drop_azure_api_version) — all also idempotent. - From upstream
transports/v1.5.7(no ew yet): on first boot the EW migrations create two new columns onconfig_keys(ew_url,ew_model_name,ew_allowed_requests_json). Existing keys are unaffected.
Verification
- All Go test suites green (
handlers,integrations,core/providers/ew,framework/configstore -short). docker buildclean (build cache fresh + warm), image runs.- Symbol check confirms all 5 fork features baked into the binary.
- Version string in
/app/mainis exactlyv1.5.7-ew-1.
See Spec 08 — Version Port Log for the conflict resolutions encountered during the v1.5.4 → v1.5.7 port.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- From any prior
-
released this
2026-04-29 09:38:58 +02:00 | 0 commits to 1.4.23-ew since this releasev1.4.23-ew-4
Patch-Release auf v1.4.23-ew-3.
Bugfix: WhitelistedRoutes-Bypass fürs Governance-Plugin landete nie im Image
In
v1.4.23-ew-3haben wir den VK-Pflicht-Bypass im Governance-Plugin (Commit55515ff37) committet, aber das gebaute Docker-Image hat den Bypass NIE ausgeliefert.Ursache: Der Dockerfile-Build erstellt einen
go.workmit nurcore/undframework/. Alle Plugins — auchgovernance— werden übertransports/go.modaus dem Module-Cache (Upstream-Versionen, z. B.governance v1.4.39) gezogen. Lokale Plugin-Änderungen waren also unsichtbar für den Build.Folge:
/v1/modelslieferte trotzWhitelistedRoutes-Eintrag weiter401 virtual key is required— die VK-Pflicht im Plugin lief gegen die alte Upstream-Version.Fix: Alle 8 lokalen Plugins (
governance,litellmcompat,logging,maxim,mocker,otel,semanticcache,telemetry) werden ins Build-Image kopiert und in den Workspace aufgenommen. Damit bautgo buildjeden Plugin aus lokalem Source statt aus der pinned Module-Cache-Version.Was geändert wurde
transports/Dockerfile:COPY plugins/ /plugins/ergänzt.- Workspace-Generation um alle 8 Plugin-Pfade erweitert:
use ( . /core /framework /plugins/governance /plugins/litellmcompat /plugins/logging /plugins/maxim /plugins/mocker /plugins/otel /plugins/semanticcache /plugins/telemetry )
Warum betraf das nicht alle Änderungen?
Frühere Patch-Releases haben funktioniert, weil ihre Änderungen in
core/,framework/odertransports/lagen — diese drei Module sind seit jeher Teil der Workspace. Erst55515ff37(Bypass im Governance-Plugin) musste überplugins/governance/deployed werden — und genau da hatte der Build die Lücke.Upgrade
Nach diesem Image-Push: einmal pullen + neu starten. Die UI-Konfiguration bleibt unverändert (Whitelist-Eintrag z. B.
/v1/models).Vollständiger Changelog
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-04-28 18:39:16 +02:00 | 1 commits to 1.4.23-ew since this releasev1.4.23-ew-3
Patch-Release auf v1.4.23-ew-2.
Highlight: Inference-Routen über
WhitelistedRoutesöffentlich machenDas bestehende Setting Workspace → Config → Security → "Whitelisted Routes" greift jetzt auch für Inference-Endpunkte (z. B.
/v1/models). Vorher griff es nur für/api/...-Dashboard-Routen.Anwendungsfall:
- „Password protect the dashboard" aktiviert, „Enforce virtual keys on inference" aktiviert.
/v1/models(oder/v1/models*,/v1/*) unter „Whitelisted Routes" eintragen.curl http://bifrost/v1/modelsohneAuthorization-Header und ohnex-bf-vk-Virtual-Key liefert die Modellliste.
Anonyme Aufrufe sehen die ungefilterte Modellliste — Virtual-Key-basiertes Filtering kann ohne Virtual Key naturgemäß nicht greifen.
Was passiert ist
Das Setting
WhitelistedRouteslebte schon, aber die Enforcement war auf zwei Schichten unvollständig:- AuthMiddleware (Basic-Auth/Session-Token) prüfte die Whitelist nur in
APIMiddleware(für/api/...), nicht inInferenceMiddleware(für/v1/...). - Selbst wenn die AuthMiddleware durchließ, gab das Governance-Plugin unabhängig „virtual key is required" zurück, sobald „Enforce auth on inference" aktiv war.
Beide Schichten respektieren jetzt die Whitelist.
Was geändert wurde
feat(auth): allow inference routes in WhitelistedRoutes configtransports/bifrost-http/handlers/middlewares.go: Match-Logik (exakt +*-Suffix-Wildcard) inisUserWhitelistedextrahiert.InferenceMiddlewareruft den Helper jetzt zusätzlich zuDisableAuthOnInference.APIMiddleware-Verhalten unverändert.- UI: Hilfetext und Placeholder im Security-Tab erwähnen Inference-Routen.
fix(auth): propagate WhitelistedRoutes bypass into governance plugin- Neue Context-Konstante
schemas.BifrostContextKeyAuthRouteWhitelistedincore/schemas/bifrost.go. - AuthMiddleware setzt das Flag, wenn die URL gegen die User-Whitelist matcht.
plugins/governance/main.go:evaluateGovernanceRequestcheckt das Flag ganz vorne und gibt direktDecisionAllowzurück — vor dem VK-Pflicht-Gate.
fix(auth): strip query string before whitelist matchisUserWhitelistedstrippt jetzt?…vom URL, bevor sie matcht. Damit greift ein exakter Eintrag/v1/modelsauch bei Aufrufen wie/v1/models?provider=openai.
Geänderte Dateien
core/schemas/bifrost.go— neue Context-Konstante.transports/bifrost-http/handlers/middlewares.go— Helper, Inference-Whitelist, Query-String-Strip.transports/bifrost-http/handlers/middlewares_test.go— Regression-Tests (5 Fälle inkl. Query-String).plugins/governance/main.go— Bypass im Plugin.ui/app/workspace/config/views/securityView.tsx— Hinweistext + Placeholder.
Upgrade
- Service neu starten, Docker-Image:
forge.engelmann.me/engel75/bifrost:v1.4.23-ew-3(wird durch Tag-Push gebaut). - Bestehende Whitelist-Einträge werden automatisch auch für Inference-Routen wirksam — keine Migration nötig.
Vollständiger Changelog
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-04-28 13:08:24 +02:00 | 4 commits to 1.4.23-ew since this releasev1.4.23-ew-2
Patch-Release auf v1.4.23-ew-1.
Neuerungen
EW-Provider:
owned_byOverride (feat)Die
/v1/models-Antwort gibt für jedes Modell des EW-Providers jetztowned_by: "everyware"zurück, unabhängig davon, was die SGLang-Backends melden. SGLang reicht typischerweise den ursprünglichen Hugging-Face-Owner durch (z. B.Qwen,meta-llama); für EW-Deployments ist der kanonische Eigentümer aber der Operator, nicht der Modell-Autor.Implementierung: Override in
listModelsByKeydirekt nach dem geteiltenopenai.ListModelsByKey-Call. KonstanteEWModelOwner = "everyware"incore/providers/ew/ew.go. Regression-Test inlist_models_test.goergänzt.Bugfixes
Docker-Build: doppeltes
vin der Binary-VERSION (fix)Der Forgejo-Actions-Workflow
docker-release.ymlreicht den Git-Tag (z. B.v1.4.23-ew-1) als--build-arg VERSION=…weiter, dastransports/Dockerfilesetzte aber zusätzlich nochmal einvdavor (-X main.Version=v${VERSION}). Folge: Die Binary meldete ihre Version alsvv1.4.23-ew-1.Behoben durch:
- Default-
ARG VERSION=v1.4.23-ew(mitv-Prefix). - ldflag jetzt
-X main.Version=${VERSION}(kein zusätzlichesvmehr).
Makefile,Dockerfile.localund die GitHub-Action-Skripte lesenVERSIONaustransports/version(Wert ohnev-Prefix) und behalten ihrev${VERSION}-Form bei — dort ist dasvkorrekt.Geänderte Dateien
core/providers/ew/ew.go—EWModelOwner-Konstante + Override-Loop inlistModelsByKey.core/providers/ew/list_models_test.go— Regression-Test fürowned_by == "everyware".transports/Dockerfile— doppeltesventfernt.
Upgrade
Service neu starten und Docker-Image
forge.engelmann.me/engel75/bifrost:v1.4.23-ew-2ziehen (wird durch den Tag-Push gebaut).Vollständiger Changelog
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Default-
-
released this
2026-04-28 10:54:21 +02:00 | 6 commits to 1.4.23-ew since this releasev1.4.23-ew-1
Erstes Release des EW-flavored Bifrost-Forks. Setzt auf Upstream Bifrost v1.4.23 auf und ergänzt um den EW/SGLang-Provider, per-Key-API-Toggles sowie OpenAI-konforme Fehlerantworten auf den OpenAI-Compat-Routen.
Highlights
EW (SGLang) Provider
- Neuer Provider
ewfür OpenAI-kompatible SGLang/EW-Instanzen- Per-Key-Konfiguration (
ew_key_config.url,ew_key_config.model_name) — jede Key-Instanz routet auf einen eigenen Backend-Server - Round-Robin-Loadbalancing über mehrere SGLang-Backends
- Per-Key-Konfiguration (
- Streaming-Support für Chat, Text, Speech, Transcription
- OpenAI-kompatible
SpeechStream-Implementierung - SGLang-spezifischer Error-Parser (
ParseSGLangError) — fängt sowohl die top-level ({"object":"error","message":...,"type":"BadRequestError","code":400}) als auch die streaming-wrapped ({"error":{...}}) Fehler-Shapes von SGLang ab und füllt denBifrostErrormit der korrekten Message/Type
Per-Key API Toggles
Ein Operator kann pro EW-Key explizit steuern, welche APIs erlaubt sind:
ew_key_config.allowed_requests = null⇒ alle APIs erlaubt (backwards compatible)- Explizite Whitelist für 16 EW-unterstützte APIs (Chat, Text, Responses, Embedding, Rerank, Speech, Transcription, Image-Gen/Edit/Variation, ListModels — jeweils inkl. Streaming-Varianten wo verfügbar)
- Doppelte Durchsetzung:
- Routing-Filter in
selectKeyFromProviderForModelüberspringt gesperrte Keys ⇒ Bifrost wählt automatisch einen anderen passenden Key - Defensiver Check in jeder EW-Provider-Methode liefert
UnsupportedOperationError, falls der Key explizit perx-bf-key-idreferenziert wird
- Routing-Filter in
- UI-Toggles im Provider-Form (Workspace → Providers → EW Key)
- Automatische DB-Migration
add_ew_allowed_requests_columnbeim Start
OpenAI-konforme Fehlerantworten
Alle OpenAI-Compat-Routen liefern Fehler im OpenAI-Standardformat:
{ "is_bifrost_error": false, "status_code": 400, "error": { "message": "Requested token count exceeds the model's maximum context length of 196608 tokens. ...", "type": "invalid_request_error", "code": "context_length_exceeded", "param": "messages" }, "extra_fields": { "provider": "ew", "model_requested": "minimax27", "request_type": "chat_completion_stream" } }- SGLang→OpenAI Type-Mapping:
BadRequestError/BadRequest/DecodeError⇒invalid_request_error;InternalServerError/NotImplementedError⇒api_error; HTTP-Statuscodes (401/403/404/429) ⇒authentication_error/permission_error/not_found_error/rate_limit_error. - Code-Heuristiken: „maximum context length" ⇒
context_length_exceeded; „no keys found" ⇒model_not_found; pro Statuscode passende Defaults. - Bifrost-Diagnostik bleibt erhalten:
is_bifrost_error,status_codeundextra_fieldsan Top-Level (OpenAI-Clients ignorieren unbekannte Felder). - Vollständige Abdeckung: 45 ErrorConverter in
integrations/openai.go, 2 incursor.go, plus die nativen PfadeSendBifrostError/SendSSEErrorinhandlers/utils.go.
Bugfixes
- Redaction-Lücke (
framework/configstore/clientconfig.go): Beim Bauen der UI-Antwort wurdenallowed_requestsweggelassen, sodass beim Reload des Keys der Master-Switch auf „Allow All APIs" zurücksprang. ⇒ Behoben. - Native Streaming-Setup-Fehler: Wenn SGLang vor dem ersten SSE-Chunk einen 400 zurückgab, lief der Fehler durch
SendBifrostError, das vorher denBifrostError1:1 ausgab und die Integrations-ErrorConverterumging. ⇒SendBifrostError/SendSSEErrorleiten jetzt durchToOpenAIErrorEnvelope.
Infrastruktur
- Forgejo Actions Workflow (
.forgejo/workflows/docker-release.yml): Baut Docker-Images automatisch aufv*-Tags und pusht nachforge.engelmann.me/engel75/bifrost:<tag>. - GitNexus MCP-Konfiguration für die Codebase.
Wichtige Dateien
Datei Bedeutung core/providers/ew/(NEU)Kompletter EW-Provider inkl. errors.go(ParseSGLangError)core/schemas/account.goEWKeyConfig.AllowedRequestscore/bifrost.goRouting-Filter für EW pro RequestType framework/configstore/tables/key.go+ MigrationDB-Persistenz framework/configstore/clientconfig.goRedaction-Bugfix transports/bifrost-http/integrations/utils.goOpenAIErrorEnvelope,ToOpenAIErrorEnvelope, SGLang→OpenAI Mapping-Tabelletransports/bifrost-http/integrations/openai.go+cursor.goErrorConverter-Umstellung transports/bifrost-http/handlers/utils.goSendBifrostError/SendSSEErrordurch Envelope geleitetui/lib/types/config.ts,schemas.tsTS-Typen + Zod-Schema für allowed_requestsui/app/workspace/providers/fragments/ewAllowedApisFields.tsx(NEU)EW-spezifische API-Toggle-Komponente ui/app/workspace/providers/fragments/apiKeysFormFragment.tsxWiring des EW-Form-Bereichs Upgrade
- Service neu starten — die DB-Migration läuft automatisch.
- Bestehende EW-Keys behalten alle APIs erlaubt (Default
allowed_requests = null). - Docker-Image:
forge.engelmann.me/engel75/bifrost:v1.4.23-ew-1(wird durch den Tag-Push gebaut).
Bekannte Einschränkungen
- Embedding-, Speech-, Transcription- (non-stream), Image-* haben keinen
customErrorConverter-Slot in der OpenAI-Hilfsbibliothek. Dort werden Backend-Fehler weiterhin viaParseOpenAIErrorgeparst — der Transport-Envelope normalisiert immerhin die JSON-Shape, aber bei tiefen Backend-Fehlern könnte die innere Message generisch sein („provider API error (status 400)") statt der originalen SGLang-Botschaft.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Neuer Provider