Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
6301dbd
Move feedback-related inference queries to InferenceQueries trait (#5…
shuyangli Jan 26, 2026
b44f1be
Update docs (#5845)
GabrielBianconi Jan 26, 2026
1ec7fe4
Add Cursor to CLA whitelist (#5853)
GabrielBianconi Jan 26, 2026
1b3e272
Implement chat json inference tables and count queries for Postgres (…
shuyangli Jan 26, 2026
516de16
Address CI flakiness in test_rate_limiting_time_intervals (#5855)
GabrielBianconi Jan 26, 2026
66efa2e
Bump migration timeout (#5857)
GabrielBianconi Jan 26, 2026
261945c
Add timeouts (so we get retries) to pytest (#5856)
GabrielBianconi Jan 26, 2026
59d298e
Improve `download-large-fixtures.py` (#5850)
GabrielBianconi Jan 26, 2026
2681771
temporarily disable python client build job (#5874)
virajmehta Jan 26, 2026
9040b18
Remove spurious inference request in check_test_streaming_cache_with_…
Aaron1011 Jan 26, 2026
5a8fb5b
Combined fixes to CI (#5886)
virajmehta Jan 27, 2026
138bddc
Namespace valkey keys to be tensorzero_... (#5870)
shuyangli Jan 27, 2026
0f03ff2
Fix an erroneous image for postgres fixture (#5865)
shuyangli Jan 27, 2026
2db386b
Handle unknown autopilot tool calls (#5836)
virajmehta Jan 27, 2026
6c032e5
Use hyphens for workflow-evaluations UI route (#5659)
simeonlee Jan 27, 2026
3f9e15b
Add React Router streaming to api-keys page (#5806)
simeonlee Jan 27, 2026
b5eceff
bumped napi to v3, node.js to 24 (#5848)
virajmehta Jan 27, 2026
d95942f
Add round-trip tests for Python SDK content block types (#5839)
anndvision Jan 27, 2026
cbaae0a
Change backend connection errors from 500 to 503 (#5736) (#5833)
shuyangli Jan 27, 2026
5a52ae1
Add clone_datapoints to DatasetQueries trait (#5834)
shuyangli Jan 27, 2026
6a7f17e
Run pre-commit check in CI (#5854)
GabrielBianconi Jan 27, 2026
38b8ae2
Wrap inference ClickHouse write in a new 'write_inference' span (#5782)
Aaron1011 Jan 27, 2026
6b1bc23
Speed up download provider proxy cache (#5871)
GabrielBianconi Jan 27, 2026
b078372
Only cancel general.yml early when a required job has failed (#5880)
Aaron1011 Jan 27, 2026
b155b73
Add React Router streaming to dataset datapoint detail page (#5651)
simeonlee Jan 27, 2026
29665a8
Migrate workflow evaluation run queries into WorkflowEvaluationQuerie…
shuyangli Jan 27, 2026
be595a9
bumped version to 2026.1.6 (#5885)
virajmehta Jan 27, 2026
ec65984
Reorganize UI sidebar and overview navigation (#5791)
simeonlee Jan 27, 2026
6deaa24
Make Playwright downloads more resilient in CI (#5890)
GabrielBianconi Jan 27, 2026
673c323
Fix nightly clippy (#5895)
GabrielBianconi Jan 27, 2026
92255dd
Fix OpenAI error message format (#5818)
GabrielBianconi Jan 27, 2026
6e21d63
Clean up load_fixtures (#5882)
GabrielBianconi Jan 27, 2026
2a746df
Close autopilot stream when gateway shuts down (#5910)
Aaron1011 Jan 27, 2026
0354925
Improve error details in UI (#5904)
GabrielBianconi Jan 27, 2026
337658c
Print docker logs in mock-optimization-tests (#5913)
GabrielBianconi Jan 27, 2026
795488d
Add `list_datasets` Tool for Autopilot (#5914)
anndvision Jan 27, 2026
90313b9
Fix SQL injection in human_feedback.rs by adding get_inference_output…
shuyangli Jan 27, 2026
3ba2675
Try a different disk space cleanup action in flaky job (#5919)
Aaron1011 Jan 27, 2026
fd0b9cf
E2e tests for endpoints setup for postgres (#5800)
shuyangli Jan 27, 2026
c91706b
Bump rlt to 0.4.1 (#5891)
Aaron1011 Jan 27, 2026
2727d04
Use Docker in merge queue CI (#5875)
GabrielBianconi Jan 27, 2026
dfa25ae
Stop setting up pnpm in a subshell (#5921)
shuyangli Jan 27, 2026
dbffb93
Update small fixtures and organize downloads (#5852)
GabrielBianconi Jan 27, 2026
406549a
Fix OpenAI provider tool serialization bug (#5924)
GabrielBianconi Jan 27, 2026
9e8be10
Give evaluations tests more time to run (#5922)
Aaron1011 Jan 28, 2026
c4ca3d6
Improve reasoning for streaming OpenAI Responses API (#5861)
GabrielBianconi Jan 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ steps:
concurrency: 1
concurrency_group: "clickhouse-cloud-normal-${CLICKHOUSE_ID}"
command: CLICKHOUSE_PREFIX="dev-tensorzero-e2e-tests-instance-" ./ci/buildkite/test-clickhouse-cloud.sh
- label: "Clickhouse Cloud tests - fast release channel"
concurrency: 1
concurrency_group: "clickhouse-cloud-fast-${CLICKHOUSE_ID}"
command: CLICKHOUSE_PREFIX="dev-tensorzero-e2e-tests-fast-instance-" TENSORZERO_CLICKHOUSE_FAST_CHANNEL=1 ./ci/buildkite/test-clickhouse-cloud.sh
# Temporarily disabled - see https://github.com/tensorzero/tensorzero/issues/5887
# - label: "Clickhouse Cloud tests - fast release channel"
# concurrency: 1
# concurrency_group: "clickhouse-cloud-fast-${CLICKHOUSE_ID}"
# command: CLICKHOUSE_PREFIX="dev-tensorzero-e2e-tests-fast-instance-" TENSORZERO_CLICKHOUSE_FAST_CHANNEL=1 ./ci/buildkite/test-clickhouse-cloud.sh

notify:
- github_commit_status:
Expand Down
8 changes: 8 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,14 @@ test-clickhouse-fast = [
"0",
"--no-fail-fast",
]
test-endpoints = [
"nextest",
"run",
"--features",
"e2e_tests",
"--profile",
"endpoints",
]
test-rate-limit-load = [
"run",
"--release",
Expand Down
13 changes: 10 additions & 3 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ default-filter = "not (test(no_aws_credentials) | test(export_bindings_) | test(

[[profile.default.overrides]]
filter = 'test(evaluations)'
slow-timeout = { period = "20s", terminate-after = 3 }
slow-timeout = { period = "20s", terminate-after = 5 }

# Profiles config
# We use these profiles to define our major test groups.
Expand Down Expand Up @@ -62,6 +62,13 @@ default-filter = 'test(batch) and test(mock)'
default-filter = 'test(test_dummy_only) | test(clickhouse::) | (test(db::) & !test(postgres) & !test(valkey))'
junit.path = "junit.xml"

# Run only endpoint e2e tests (tests under tests/e2e/endpoints/)
# These run against both ClickHouse and Postgres-backed TensorZero gateway.
[profile.endpoints]
default-filter = 'binary(e2e) and test(endpoints::)'
junit.path = "junit.xml"
retries = { backoff = "exponential", count = 4, delay = "5s", jitter = true, max-delay = "60s" }

[profile.optimization]
default-filter = 'binary(optimization-live)'

Expand Down Expand Up @@ -155,9 +162,9 @@ slow-timeout = { period = "30s", terminate-after = 3 }
filter = 'test(websearch)'
slow-timeout = { period = "120s", terminate-after = 2 }

# Image inference seems to be slow on GCP Vertex Gemini, so we give it a longer timeout
# Image inference seems to be slow on many providers, so we give it a longer timeout
[[profile.default.overrides]]
filter = 'test(providers::gcp_vertex_gemini::test_image_inference)'
filter = 'test(test_image_inference)'
slow-timeout = { period = "60s", terminate-after = 2 }

[[profile.default.overrides]]
Expand Down
4 changes: 2 additions & 2 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ target-rust-analyzer
**/.env*
**/.vscode
**/.claude
ui/fixtures/*.jsonl
ui/fixtures/s3-fixtures
ui/fixtures/small-fixtures
ui/fixtures/large-fixtures
/recipes
/examples
gcp_jwt_key.json
Expand Down
55 changes: 55 additions & 0 deletions .github/workflows/build-fixtures-container.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Build Fixtures Container

on:
workflow_call:
secrets:
DOCKERHUB_LIMITED_TOKEN:
required: true

jobs:
build-fixtures-container:
runs-on: ubuntu-latest
if: github.repository == 'tensorzero/tensorzero'
permissions:
# Permission to checkout the repository
contents: read
# Permission to fetch GitHub OIDC token authentication
id-token: write

steps:
- name: Check out the repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

- name: Login to DockerHub
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772
with:
username: tensorzero
password: ${{ secrets.DOCKERHUB_LIMITED_TOKEN }}

# We allow the namespace builder setup to fail on Dependabot PRs and PRs from forks
# (where the oidc token is not available)

- name: Install Namespace CLI
uses: namespacelabs/nscloud-setup@d1c625762f7c926a54bd39252efff0705fd11c64
continue-on-error: ${{ github.event.pull_request.head.repo.full_name != github.repository || github.actor == 'dependabot[bot]' }}

- name: Configure Namespace-powered Buildx
uses: namespacelabs/nscloud-setup-buildx-action@91c2e6537780e3b092cb8476406be99a8f91bd5e
with:
wait-for-builder: true
continue-on-error: ${{ github.event.pull_request.head.repo.full_name != github.repository || github.actor == 'dependabot[bot]' }}

- name: Build `fixtures` container
run: |
docker buildx build -f ui/fixtures/Dockerfile . -t tensorzero/fixtures:sha-${{ github.sha }} -t nscr.io/igvf4asmf8kri/fixtures:sha-${{ github.sha }}

- name: Push `fixtures` container to Docker Hub
run: docker push tensorzero/fixtures:sha-${{ github.sha }}

- name: Login to Namespace registry
run: nsc docker login
continue-on-error: ${{ github.event.pull_request.head.repo.full_name != github.repository || github.actor == 'dependabot[bot]' }}

- name: Push `fixtures` container to Namespace registry
run: docker push nscr.io/igvf4asmf8kri/fixtures:sha-${{ github.sha }}
continue-on-error: ${{ github.event.pull_request.head.repo.full_name != github.repository || github.actor == 'dependabot[bot]' }}
39 changes: 35 additions & 4 deletions .github/workflows/cancel-merge-queue-on-job-failure.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,32 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'tensorzero/tensorzero'
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
sparse-checkout: .github/workflows/general.yml
sparse-checkout-cone-mode: false

- name: Check running workflows on merge queue branches
run: |
echo "Checking for running workflows on merge queue branches..."

# Dynamically extract the 'needs' list from 'check-all-general-jobs-passed' job in general.yml
# This ensures we only cancel on failures of jobs that actually block merging
REQUIRED_JOBS=$(yq -r '.jobs["check-all-general-jobs-passed"].needs[]' .github/workflows/general.yml)

if [ -z "$REQUIRED_JOBS" ]; then
echo "ERROR: Could not extract required jobs from general.yml"
exit 1
fi

echo "Required jobs (from check-all-general-jobs-passed needs):"
echo "$REQUIRED_JOBS"
echo ""

# Build jq filter for required jobs as a JSON array
JQ_FILTER=$(echo "$REQUIRED_JOBS" | jq -R -s 'split("\n") | map(select(length > 0))')

# Get all in-progress workflow runs for general.yml
workflow_runs=$(curl -s -H "Authorization: Bearer ${{ github.token }}" \
"https://api.github.com/repos/${{ github.repository }}/actions/workflows/general.yml/runs?status=in_progress&per_page=100")
Expand Down Expand Up @@ -51,11 +73,20 @@ jobs:
jobs=$(curl -s -H "Authorization: Bearer ${{ github.token }}" \
"https://api.github.com/repos/${{ github.repository }}/actions/runs/$run_id/jobs")

# Check if any job has failed
failed_jobs=$(echo "$jobs" | jq -r '.jobs[] | select(.conclusion == "failure") | "\(.name) (status: \(.status), conclusion: \(.conclusion))"')
# Check if any required job has failed
# Job names may include matrix suffixes (e.g., "lint-rust (1)"), so we check if the job name starts with any required job name
failed_jobs=$(echo "$jobs" | jq -r --argjson required "$JQ_FILTER" '
.jobs[] |
select(.conclusion == "failure") |
select(
.name as $job_name |
any($required[]; . as $req | $job_name | startswith($req))
) |
"\(.name) (status: \(.status), conclusion: \(.conclusion))"
')

if [ -n "$failed_jobs" ]; then
echo "Found failed jobs in workflow run $run_id:"
echo "Found failed required jobs in workflow run $run_id:"
echo "$failed_jobs"
echo ""
echo "Cancelling workflow run $run_id on branch $branch..."
Expand All @@ -75,7 +106,7 @@ jobs:
fi
echo ""
else
echo "No failed jobs found in workflow run $run_id"
echo "No failed required jobs found in workflow run $run_id"
fi
done <<< "$merge_queue_runs"

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ jobs:
path-to-signatures: "ci/cla-signatures.json"
path-to-document: "https://github.com/tensorzero/tensorzero/blob/main/CLA.md"
branch: "cla-signatures"
allowlist: claude,dependabot[bot],TensorZero-Experimental-CI-Bot[bot]
allowlist: claude,cursoragent,dependabot[bot],TensorZero-Experimental-CI-Bot[bot]
custom-pr-sign-comment: "I have read the Contributor License Agreement (CLA) and hereby sign the CLA."
lock-pullrequest-aftermerge: false
4 changes: 4 additions & 0 deletions .github/workflows/docker-hub-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ jobs:
tags: ${{ env.DOCKERHUB_USER }}/${{ matrix.container.name }}
labels: ${{ steps.meta.outputs.labels }}
sbom: true
# Use debug builds for dev images
build-args: |
PROFILE=${{ inputs.is_dev && 'dev' || 'performance' }}
DEBUG_BUILD=${{ inputs.is_dev && '1' || '0' }}

- name: Export digest
run: |
Expand Down
Loading
Loading