This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+13 more
ReleasePort's take
Light signalBusbar v1.2.0 adds Embeddings, Moderations, Image generation, Audio, and Rerank operations; introduces attempt_timeout_ms for time‑boxed attempts; preserves Logprobs across protocol translations; fixes Gemini streamed thinking leakage; switches to Apache 2.0 licensing.
Why it matters: These feature additions (Embeddings, Moderations, etc.) expand API capabilities while the new attempt_timeout_ms provides a measurable timeout trigger to cap single‑attempt duration and initiate failover on hangs, directly impacting reliability for developers and SREs.
Summary
AI summaryBroad release touches New operations, Verification, Internal, and Titan.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds Embeddings, Moderations, Image generation, Audio, and Rerank operations. Adds Embeddings, Moderations, Image generation, Audio, and Rerank operations. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Medium |
Preserves Logprobs, reasoning/thinking fields, and user/parallel_tool_calls across protocol translations. Preserves Logprobs, reasoning/thinking fields, and user/parallel_tool_calls across protocol translations. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Medium |
Adds attempt_timeout_ms to cap single-attempt time and trigger failover on hang. Adds attempt_timeout_ms to cap single-attempt time and trigger failover on hang. Source: llm_adapter@2026-07-15 Confidence: low |
— |
| Feature | Low |
Changes license to Apache 2.0 for Busbar 1.2.0 and onward. Changes license to Apache 2.0 for Busbar 1.2.0 and onward. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Low |
Introduces `attempt_timeout_ms` to limit attempt duration and trigger failover on hangs. Introduces `attempt_timeout_ms` to limit attempt duration and trigger failover on hangs. Source: granite4.1:30b@2026-07-15-audit Confidence: low |
— |
| Bugfix | Medium |
Fixes Gemini streamed thinking leaking into answer text on cross-protocol streams. Fixes Gemini streamed thinking leaking into answer text on cross-protocol streams. Source: llm_adapter@2026-07-15 Confidence: high |
— |
Full changelog
Busbar 1.2.0
Busbar now speaks more than chat. Five new operations land on top of it, and every one runs through the same lossless translation, pools, failover, and breakers that carried chat: Embeddings, Moderations, Image generation, Audio (transcription, speech-to-English translation, text-to-speech), and Rerank. A Gemini client can call embeddings on a Bedrock backend. An OpenAI client can route images and audio to Gemini. A Cohere client can rerank on Bedrock. Every answer comes back in the caller's own dialect, errors included.
This release also changes the license: Busbar 1.2.0 and onward is Apache 2.0. Permissive, commercial-friendly, with an explicit patent grant and no copyleft obligations.
New operations
- Embeddings: OpenAI, Bedrock (Titan), Cohere (v2), and Gemini, any dialect in, any of them out. Vectors, token accounting, and errors survive the hop.
- Moderations: OpenAI surface, translated through the IR.
- Image generation: OpenAI, Gemini (Imagen), Bedrock (Titan).
- Audio: transcription, speech-to-English translation, and text-to-speech on OpenAI and Gemini.
- Rerank: Cohere v2 rerank and Bedrock rerank models, cross-protocol between the two. The wires share a result shape, so translation is exact.
- Calling an operation a backend does not implement returns a clean 404 in your own protocol's dialect. Never a crash, never a lane penalty.
Reliability: catch the hang
Some providers fail by hanging: the connection opens and response headers never come back, silently eating the whole failover budget. attempt_timeout_ms caps a single attempt's time to response headers; on expiry the attempt counts as a transient breaker failure and the request fails over within the same request. Set it on a model as a default and override it per pool member, so the same model can carry a 10s cap in a batch pool and a 50ms cap in a latency-critical one. It never cuts off a stream that has started answering.
More survives translation
Fields that used to die at the protocol seam now cross it:
- Logprobs (OpenAI and Gemini), buffered and streaming. The ask travels one way, the per-token data travels back in your own shape, chunk by chunk on streams.
- Reasoning and thinking, gated per lane. OpenAI
reasoning_effort, Anthropicthinking.budget_tokens, and GeminithinkingBudgettranslate between each other: numbers copy exactly, words convert through a configurable effort table. Because thinking support is per model, you declare it:reasoning: trueon a model or pool member. Without the flag the ask is dropped with a warning and never sent, so a non-reasoning model can never 400 from translation. userandparallel_tool_callscarry between OpenAI and Anthropic (metadata.user_idandtool_choice.disable_parallel_tool_useare the same fields in different spellings).- The documented field-survival table in the protocols doc is now measured against real egress capture, not asserted.
Fixed
- Gemini streamed thinking no longer leaks into answer text on cross-protocol streams. Thought parts stream as proper thinking blocks with balanced framing.
Internal (but load-bearing)
- The request path is now Router → RequestHandler → OperationHandler → IR: every operation is a small codec over one shared reliability engine, and chat is operation #1 rather than a special case. Adding rerank touched zero lines of routing, failover, or breaker code.
- Billing is a polymorphic data model (tokens, duration, characters, images, flat units). The pricing engine that turns units into cost lands in 1.3.
Verification
- 1,775 unit tests, clippy clean.
- A user-emulating acceptance harness drives a real busbar binary against a six-protocol mock that mimics real providers (native stream framings including AWS eventstream, SigV4 verification, real-capture-modeled payloads): 188/188 offline rows green across translation, streaming, operations, no-handler 404s, reliability (hang/failover/breaker), auth (token and passthrough), governance, and the full admin key lifecycle with exact billing assertions.
- Live-validated against real providers, including streaming logprobs from a Gemini-dialect client served by OpenAI.
Upgrading
No breaking changes: the HTTP API, configuration schema, and all six wire-protocol contracts are unchanged under Semantic Versioning. New config surface is opt-in only (attempt_timeout_ms, reasoning, limits.reasoning_effort_budgets).
As with every release: binaries for Linux/macOS (Intel and ARM) and Windows (Intel), a CycloneDX SBOM, a build-provenance attestation, and cosign-signed GHCR images. Docker: getbusbar/busbar:1.2.0.
Full detail: CHANGELOG · Docs · The 1.2 post
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Busbar
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]