Skip to content
Merged
Show file tree
Hide file tree
Changes from 132 commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
6cebda9
refactor: move session key stickiness behind a SessionAffinity seam
Pratham-Mishra04 Sep 14, 2026
6a5f064
feat: session affinity at the provider level, bound on outcome
Pratham-Mishra04 Sep 14, 2026
cd8c35f
ui: session affinity at the provider level, and its engine in the log…
Pratham-Mishra04 Sep 14, 2026
776e70f
refactor: complexity session state keys through the shared session-st…
Pratham-Mishra04 Sep 14, 2026
87b5d20
docs: session affinity guide with routing, agent, and load balancing …
Pratham-Mishra04 Sep 15, 2026
086726b
fix: minor routing fixes
Pratham-Mishra04 Sep 17, 2026
c0878dc
Adds changelog for v2.2.1 --skip-ci
github-actions[bot] Sep 18, 2026
55d864f
streaming gate fixes
akshaydeo Sep 18, 2026
374461d
streaming gate fixes (#7331)
akshaydeo Sep 18, 2026
d660b9e
Merge branch 'main' into dev
akshaydeo Sep 18, 2026
f44b541
stream gate memory fixes (#7332)
akshaydeo Sep 18, 2026
76a5601
adds more gating test cases
akshaydeo Sep 18, 2026
6158a2a
adds more gating test cases (#7333)
akshaydeo Sep 18, 2026
64854d3
enterprise docs (#7334)
akshaydeo Sep 18, 2026
0637bc2
enterprise docs (#7335)
akshaydeo Sep 18, 2026
a9937c9
clean up correct sentence around API key clamping
akshaydeo Sep 18, 2026
4bd1922
feat: extract session stickiness into a pluggable `SessionAffinity` i…
akshaydeo Sep 19, 2026
1267331
feat: route and key session affinity driven by observed outcomes, wit…
akshaydeo Sep 19, 2026
ccdd3a6
feat: add `BifrostContextKeySessionAffinity` for per-request session …
akshaydeo Sep 19, 2026
52594b5
refactor: export `SessionStateKey`, `SessionAffinity`, and related he…
akshaydeo Sep 19, 2026
d2571fd
docs: add Session Affinity guide and cross-link it from routing, CLI …
akshaydeo Sep 19, 2026
94fb9ee
fix: record session affinity agreement with routing in trail and engi…
akshaydeo Sep 19, 2026
217f9d0
[fix]: preserve API web search source names (#7358)
g-yixuan Sep 20, 2026
7f2d5ee
fix(anthropic): carry allowed_tools and parallel_tool_calls into the …
basil-k-aji-dev Sep 20, 2026
1a17949
fix(bedrock): keep cache_control when a message's content is a string…
basil-k-aji-dev Sep 20, 2026
b08d22c
dependabot cleanups (#7378)
akshaydeo Sep 21, 2026
920d743
fix: allow all providers access and api models response (#7375)
TejasGhatte Sep 21, 2026
c686bdf
typesafe models support, new decisions endpoint (#7355)
akshaydeo Sep 21, 2026
70928ea
feat(decision): emulate decisions via LLM tool-calling for all provid…
akshaydeo Sep 21, 2026
ee3d497
benchmarking and api struct fixes (#7384)
akshaydeo Sep 21, 2026
4f01269
fix: removes unnecessary allocations from compat plugin (#7097)
sammaji Sep 21, 2026
8c719d0
fix: strip bedrock cachepoint markers for non-bedrock providers while…
sammaji Sep 21, 2026
40c3f7e
adds bedrock unknown json document handling (#7396)
akshaydeo Sep 21, 2026
2cbb54d
[fix]: preserve Grok 4.7 xhigh reasoning effort (#7403)
nettee Sep 22, 2026
a134a8c
docs: add prompt deployment docs (#7420)
roroghost17 Sep 22, 2026
fb91b10
adds safeguard support for passthrough requests (#7393)
akshaydeo Sep 22, 2026
00042d8
memory fixes for streaming cancellation (#7406)
akshaydeo Sep 22, 2026
8b7978b
fix(responses): stop rewriting OpenAI `computer` tool to `computer_us…
abhishekgahlot2 Sep 22, 2026
1aa53a8
perf: avoid redundant JSON decoding in Responses requests (#7412)
G-XD Sep 22, 2026
a9a3d1f
fix(schemas): deep copy extended Responses fields in DeepCopyResponse…
Madhuvod Sep 22, 2026
8cba983
ci: add CodSpeed benchmarks for the request hot path (#7409)
codspeed[bot] Sep 22, 2026
a8d1d45
readact anthropic billing headers to avoid cache spoiling (#7431)
akshaydeo Sep 22, 2026
a03cdd2
kimi and deepseek support for claude code (#7430)
akshaydeo Sep 22, 2026
c77a588
codspeed fixes and harness fixes
akshaydeo Sep 22, 2026
6c10b8a
fix: claude opus 5-5 changes (#7433)
TejasGhatte Sep 22, 2026
6d75a4b
fix: restore `HTTP_PROXY`/`HTTPS_PROXY` support for MCP connections w…
Pratham-Mishra04 Sep 22, 2026
21bb5b5
test fixes (#7440)
akshaydeo Sep 22, 2026
86378b2
fix: computer toolset compatibility (#7434)
TejasGhatte Sep 22, 2026
230a614
fix: computer toolset model capability (#7441)
TejasGhatte Sep 22, 2026
9aa61ec
changelogs for 2.2.2
akshaydeo Sep 22, 2026
9f0d71d
v2.2.2 (#7442) --skip-core-test
akshaydeo Sep 22, 2026
bfb89cb
changelogs for 2.2.2 (#7443) --skip-core-test
akshaydeo Sep 22, 2026
8f33e30
adds preamble support for all openai model family
akshaydeo Sep 22, 2026
4776d2a
adds preamble support for all openai model family (#7444)
akshaydeo Sep 22, 2026
9455537
adds preamble support for all openai model family (#7445) --skip-core…
akshaydeo Sep 23, 2026
88d954c
framework: bump core to v1.10.1 --skip-ci
github-actions[bot] Sep 23, 2026
932236e
plugins/compat: bump core to v1.10.1 and framework to v1.7.3 --skip-ci
github-actions[bot] Sep 23, 2026
520e706
plugins/governance: bump core to v1.10.1 and framework to v1.7.3 --sk…
github-actions[bot] Sep 23, 2026
727c48d
plugins/jsonparser: bump core to v1.10.1 and framework to v1.7.3 --sk…
github-actions[bot] Sep 23, 2026
a163228
plugins/logging: bump core to v1.10.1 and framework to v1.7.3 --skip-ci
github-actions[bot] Sep 23, 2026
e8cc623
plugins/maxim: bump core to v1.10.1 and framework to v1.7.3 --skip-ci
github-actions[bot] Sep 23, 2026
6c86868
plugins/mocker: bump core to v1.10.1 and framework to v1.7.3 --skip-ci
github-actions[bot] Sep 23, 2026
39e9459
plugins/modelcatalogresolver: bump core to v1.10.1 and framework to v…
github-actions[bot] Sep 23, 2026
2e26207
plugins/otel: bump core to v1.10.1 and framework to v1.7.3 --skip-ci
github-actions[bot] Sep 23, 2026
6644ebf
plugins/prompts: bump core to v1.10.1 and framework to v1.7.3 --skip-ci
github-actions[bot] Sep 23, 2026
6b34eb1
plugins/routing: bump core to v1.10.1 and framework to v1.7.3 --skip-ci
github-actions[bot] Sep 23, 2026
0f1bbde
plugins/semanticcache: bump core to v1.10.1 and framework to v1.7.3 -…
github-actions[bot] Sep 23, 2026
2e6c8dd
plugins/telemetry: bump core to v1.10.1 and framework to v1.7.3 --ski…
github-actions[bot] Sep 23, 2026
046a473
Adds changelog for v2.2.2 --skip-ci
github-actions[bot] Sep 23, 2026
08814c5
transports: update dependencies --skip-ci
github-actions[bot] Sep 23, 2026
3d7fe99
docs fixes (#7447)
akshaydeo Sep 23, 2026
fdeef8e
adds missing changelog for transports
akshaydeo Sep 23, 2026
44b5d94
enterprise docs
akshaydeo Sep 23, 2026
592395a
cherrypicked key id selection to fallbacks
akshaydeo Sep 23, 2026
63273ba
feat(ui): select provider keys for routing fallbacks (#7380)
impoiler Sep 23, 2026
b1b9e09
docs(routing): document pinned fallback keys and legacy behavior (#7381)
impoiler Sep 23, 2026
cf15677
fix(routing): keep a routing rule's key pin with its provider when se…
Pratham-Mishra04 Sep 23, 2026
f512798
test(harness): pin session affinity end to end - routing pins, fallba…
Pratham-Mishra04 Sep 23, 2026
fe41e62
fix(routing): match a session's route on provider and model, and forg…
Pratham-Mishra04 Sep 23, 2026
22247ac
test(harness): pin exact route matching and forgetting a binding foll…
Pratham-Mishra04 Sep 23, 2026
06fbbed
cherrypicked key id selection to fallbacks (#7470)
akshaydeo Sep 24, 2026
9b91bdb
fix: move routing key pins with their routes when session affinity re…
akshaydeo Sep 24, 2026
e29623f
fix: carry route-level key pins through session affinity reorder and …
akshaydeo Sep 24, 2026
b36b30d
fix: drop session bindings the request followed into a failure and ma…
akshaydeo Sep 24, 2026
dfa904f
test: add session affinity matrix cases 12–13 (binding names provider…
akshaydeo Sep 24, 2026
9e9c92b
fix: update UI path to correctly handle user labels toggle (#7490)
roroghost17 Sep 24, 2026
7faebcf
fix(databricks): merge multi-part system prompts for Gemini-backed en…
impoiler Sep 24, 2026
b304e56
fix: openai reasoning and params fixes (#7239)
TejasGhatte Sep 24, 2026
078a7e4
fix: openai prompt cache breakpoint (#7240)
TejasGhatte Sep 24, 2026
a44106a
fix: responses type fixes (#7241)
TejasGhatte Sep 24, 2026
e7bbd09
chore: regenerate openapi.json --skip-ci
github-actions[bot] Sep 24, 2026
be9616f
feat: async tool execution in responsses (#7242)
TejasGhatte Sep 24, 2026
92b7f00
chore: regenerate openapi.json --skip-ci
github-actions[bot] Sep 24, 2026
3a40906
fix: gpt-6 sol and luna support none effort (#7492)
TejasGhatte Sep 24, 2026
d63463d
tests: harness tests gpt-6 (#7496)
TejasGhatte Sep 24, 2026
c958df3
adds handling for bedrocks weird encryption prefix
akshaydeo Sep 23, 2026
ec580cc
decision emulation fixes
akshaydeo Sep 24, 2026
21d6f15
fix: openrouter cache breakpoint and harness fix (#7521)
TejasGhatte Sep 24, 2026
ed2adac
2.2.3 changelog (#7528) --skip-core-test
akshaydeo Sep 24, 2026
6d352ef
bedrock encrypted content decodding fix (#7529) --skip-ci
akshaydeo Sep 24, 2026
0b7fe60
kimi + codex fix. fixes mcp tool name length (#7530) --skip-core-test
akshaydeo Sep 24, 2026
278adbc
framework: bump core to v1.10.2 --skip-ci
github-actions[bot] Sep 24, 2026
e2edc30
plugins/compat: bump core to v1.10.2 and framework to v1.7.4 --skip-ci
github-actions[bot] Sep 24, 2026
6d2b8c3
plugins/governance: bump core to v1.10.2 and framework to v1.7.4 --sk…
github-actions[bot] Sep 24, 2026
6b7f449
plugins/jsonparser: bump core to v1.10.2 and framework to v1.7.4 --sk…
github-actions[bot] Sep 24, 2026
515521e
plugins/logging: bump core to v1.10.2 and framework to v1.7.4 --skip-ci
github-actions[bot] Sep 24, 2026
20a594a
plugins/maxim: bump core to v1.10.2 and framework to v1.7.4 --skip-ci
github-actions[bot] Sep 24, 2026
3557f15
plugins/mocker: bump core to v1.10.2 and framework to v1.7.4 --skip-ci
github-actions[bot] Sep 24, 2026
afe3108
plugins/modelcatalogresolver: bump core to v1.10.2 and framework to v…
github-actions[bot] Sep 24, 2026
862c4c7
plugins/otel: bump core to v1.10.2 and framework to v1.7.4 --skip-ci
github-actions[bot] Sep 24, 2026
346bfbf
plugins/prompts: bump core to v1.10.2 and framework to v1.7.4 --skip-ci
github-actions[bot] Sep 24, 2026
d61c594
plugins/routing: bump core to v1.10.2 and framework to v1.7.4 --skip-ci
github-actions[bot] Sep 24, 2026
1a44fbe
plugins/semanticcache: bump core to v1.10.2 and framework to v1.7.4 -…
github-actions[bot] Sep 24, 2026
402ff3e
plugins/telemetry: bump core to v1.10.2 and framework to v1.7.4 --ski…
github-actions[bot] Sep 24, 2026
411d62b
transports: update dependencies --skip-ci
github-actions[bot] Sep 24, 2026
64acf1e
Merge upstream transports/v2.2.3 (411d62b28) into fork v2.2.1
connorwang Oct 23, 2026
ac82b38
TXE-5086: Strip Anthropic-only Claude Code fields on xAI's native Mes…
connorwang Oct 23, 2026
93d32f1
TXE-5086: Bill emulated decisions as the text calls they are
connorwang Oct 23, 2026
48b1eda
TXE-5086: Charge decision answers that fail validation
connorwang Oct 23, 2026
3b2967c
TXE-5086: Drop unapproved chunks when a paused stream overflows its r…
connorwang Oct 23, 2026
e0a3b88
TXE-5086: Classify the harness's DeepWiki MCP host as provider-dialled
connorwang Oct 23, 2026
95d6f49
TXE-5086: Note the fork's v2.2.3 changes in the transport changelog
connorwang Oct 23, 2026
f3775b7
TXE-5086: Keep a direct-key request on its own provider under session…
connorwang Oct 23, 2026
5a37d35
TXE-5086: Count every variable-sized Responses carrier in the replay cap
connorwang Oct 23, 2026
8b94aa1
TXE-5086: Reject unknown providers in object-form routing fallbacks
connorwang Oct 23, 2026
0a3ef2e
TXE-5086: Resolve proxied MCP hostnames on the gateway before using t…
connorwang Oct 23, 2026
b3cf5f0
TXE-5086: Stub anthropic's list-models in the offline API suite
connorwang Oct 23, 2026
b0c800d
TXE-5086: Keep explicit key selectors on their provider under session…
connorwang Oct 23, 2026
0f619b3
TXE-5086: Apply Responses pricing overrides to emulated decisions
connorwang Oct 23, 2026
e0afc6b
TXE-5086: Price emulated decisions at the tier their text call was se…
connorwang Oct 23, 2026
12fabd5
TXE-5086: Relay the raw Typesafe body only while its answers are current
connorwang Oct 23, 2026
519f922
TXE-5086: Reject a Typesafe choice outside the requested options
connorwang Oct 23, 2026
faa1255
TXE-5086: Keep the served service tier on bare billed usage
connorwang Oct 23, 2026
e8bea14
TXE-5086: Reject a Typesafe score outside the rubric's levels
connorwang Oct 23, 2026
3463b4b
TXE-5086: Keep a toolset member call's toolset name through deep copies
connorwang Oct 23, 2026
5d7a61e
TXE-5086: Let an image-only republish through the memory gate
connorwang Oct 23, 2026
ba609ed
TXE-5086: Treat an empty allowed_tools list as permitting no function…
connorwang Oct 23, 2026
afa10d3
TXE-5086: Carry decision served model and tier through pricing and lo…
connorwang Oct 23, 2026
99ee128
TXE-5086: Keep server tools usable when allowed_tools permits no func…
connorwang Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 4 additions & 3 deletions .claude/skills/harness-test-writer/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,10 @@ Conventions (match the existing collection exactly):
pins the same invariant independently (e.g. native `/v1/responses` alongside the
converted `/v1/chat/completions` path).
- **Test scripts** (Postman `event[].script.exec`, plain ES5 JavaScript):
- Start with an infra guard so auth/rate/server noise skips instead of false-failing:
`if ([401, 403, 429, 500, 502, 503, 504].indexOf(pm.response.code) !== -1) { return; }`
Do NOT guard on 400 when a 400 IS the regression signature - that must fail loudly.
- Never skip any error status code. Do NOT open the script with an early-return
guard like `if ([401, 403, 429, 500, 502, 503, 504].indexOf(pm.response.code) !== -1) { return; }`
- every unexpected status (auth failure, rate limit, 5xx) must fail the case
loudly instead of silently passing it. Assert the exact status the case expects.
- Assert the specific failure signature is absent (error substring, param name) AND
that the happy path succeeded (status below 400, expected fields present).
- Include the response text in failure messages:
Expand Down
133 changes: 133 additions & 0 deletions .github/workflows/codspeed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
name: CodSpeed Benchmarks

# Continuous performance measurement for the request hot path.
#
# Bifrost sits inline on every LLM call, so the CPU cost of the translation
# layers (payload parsing, provider request/response conversion, SSE framing,
# key selection) is paid once per request - and once per chunk on a stream.
# `go test -bench` already covers those paths; this workflow runs the same
# benchmarks under the CodSpeed walltime instrument on every PR so a regression
# shows up as a diff against the base commit instead of surfacing in a load
# test later.
#
# Walltime is the only instrument the Go integration supports, so the job runs
# on CodSpeed macro runners (bare metal, pinned CPU) - GitHub-hosted runners are
# too noisy for wall-clock comparisons.

on:
push:
branches:
- dev
- main
pull_request:
# `workflow_dispatch` allows CodSpeed to trigger backtest performance
# analysis in order to generate initial data.
workflow_dispatch:

permissions:
contents: read

concurrency:
group: codspeed-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
benchmarks:
name: Benchmarks (${{ matrix.name }})
# CodSpeed's managed bare-metal runner for walltime benchmarks.
# https://codspeed.io/docs/benchmarks/go
# The org's Default runner group must "Allow public repositories", or the
# jobs queue without ever starting.
runs-on: codspeed-macro
timeout-minutes: 45

env:
# The modules declare go 1.27.0; keep the toolchain resolution identical to
# the test workflows rather than depending on the runner image default.
GOTOOLCHAIN: auto

permissions:
contents: read # required for actions/checkout
id-token: write # required for OIDC authentication with CodSpeed

strategy:
# One module's benchmarks failing should not hide the others' results.
fail-fast: false
matrix:
include:
# Package lists are explicit rather than ./... : most packages carry no
# benchmarks, and the ones excluded here either need live provider
# credentials or benchmark a comparison baseline that is not worth
# tracking as a trend.
- name: core
module: core
packages: . ./schemas/ ./keyselectors/ ./providers/openai/ ./providers/anthropic/ ./providers/utils/
- name: framework
module: framework
packages: ./modelcatalog/ ./tracing/
- name: plugin-governance
module: plugins/governance
packages: .
- name: plugin-mocker
module: plugins/mocker
packages: .

steps:
# CodSpeed macro runners are self-hosted: their image must have the
# StepSecurity agent installed for this policy to be enforced. The action
# configures an existing agent; it does not install one on self-hosted VMs.
- name: Harden Runner
uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1
with:
egress-policy: block
# Infrastructure only: Go toolchain/modules, GitHub release assets,
# and CodSpeed installation/results. Benchmarks use local fixtures;
# provider APIs and live-test assets are intentionally not allowed.
allowed-endpoints: >
api.codspeed.io:443
api.github.com:443
app.codspeed.io:443
codspeed.io:443
dl.google.com:443
github.com:443
go.dev:443
gql.codspeed.io:443
objects.githubusercontent.com:443
proxy.golang.org:443
raw.githubusercontent.com:443
release-assets.githubusercontent.com:443
storage.googleapis.com:443
sum.golang.org:443

- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version: "1.27.0"
cache-dependency-path: |
core/go.sum
framework/go.sum
plugins/*/go.sum

# The modules are versioned independently and carry no replace directives,
# so without a workspace the framework and plugin benchmarks would measure
# the last PUBLISHED core rather than the commit under test. Same script
# the test workflows use, so the module list cannot drift.
- name: Set up Go workspace
run: source ./.github/workflows/scripts/setup-go-workspace.sh
shell: bash

- name: Download module dependencies
working-directory: ${{ matrix.module }}
run: go mod download

- name: Run benchmarks
uses: CodSpeedHQ/action@373d6868929f444bc08d901fd0eb0ad52a8875ea # v5.2.1
with:
mode: walltime
working-directory: ${{ matrix.module }}
# CodSpeed's Go runner discovers benchmarks without running regular tests.
# Its Go integration currently supports only the -bench flag.
run: go test -bench=. ${{ matrix.packages }}
1 change: 1 addition & 0 deletions .github/workflows/pr-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ jobs:
SGL_API_KEY: ${{ secrets.SGL_API_KEY }}
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
SARVAM_API_KEY: ${{ secrets.SARVAM_API_KEY }}
TYPESAFE_API_KEY: ${{ secrets.TYPESAFE_API_KEY }}
DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
DATABRICKS_WORKSPACE_URL: ${{ secrets.DATABRICKS_WORKSPACE_URL }}
GITHUB_COPILOT_APP_ID: ${{ secrets.GITHUB_COPILOT_APP_ID }}
Expand Down
Loading
Loading