Files
elizaos--eliza/.github/workflows/benchmark-orchestrator-scheduled.yml
T
wehub-resource-sync 426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
ci / test (push) Waiting to run
ci / lint-and-format (push) Waiting to run
ci / build (push) Waiting to run
ci / dev-startup (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
gitleaks / gitleaks (push) Waiting to run
Markdown Links / Relative Markdown Links (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Quality (Extended) / Homepage Build (PR smoke) (push) Waiting to run
Quality (Extended) / Comment-only diff guard (push) Waiting to run
Quality (Extended) / Format + Type Safety Ratchet (push) Waiting to run
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Waiting to run
Quality (Extended) / Develop Gate (lint) (push) Waiting to run
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

155 lines
6.1 KiB
YAML

# Benchmark orchestrator — scheduled real-model lane
#
# Runs a core subset of registry benchmarks through the Python orchestrator on a
# REAL model provider (Cerebras gemma-4-31b), so the suite is actually exercised
# end-to-end on a schedule rather than only vitest-testing the bridge code
# (#9475). Before this lane, `python -m benchmarks.orchestrator run` was invoked
# by exactly one workflow (hyperliquid-bench-live.yml), leaving 42/43 registered
# benchmarks with zero scheduled real-model runs.
#
# OPERATOR PREREQUISITE: add a `CEREBRAS_API_KEY` repo secret. With no secret
# configured this workflow SKIPS GRACEFULLY — it never fails CI when the key is
# absent (mirrors hyperliquid-bench-live.yml's gate).
#
# The benchmark subset (bfcl, action-calling, agentbench, tau_bench, mint,
# context_bench) is the confirmed-real, bridge-wired core that routes through a
# real AgentRuntime + LLM plugins via the eliza-adapter.
#
# Required repo secret (self-documented):
# CEREBRAS_API_KEY — Cerebras API key for the real-model orchestrator run.
name: Benchmark orchestrator (scheduled)
on:
schedule:
# Mondays 06:00 UTC — a weekly real-model smoke of the core registry subset.
- cron: "0 6 * * 1"
workflow_dispatch:
inputs:
benchmarks:
description: "Comma-separated registry benchmark ids"
required: false
type: string
default: "bfcl,action-calling,agentbench,tau_bench,mint,context_bench"
provider:
description: "Model provider"
required: false
type: string
default: "cerebras"
model:
description: "Model name"
required: false
type: string
default: "gemma-4-31b"
concurrency:
group: benchmark-orchestrator-scheduled-${{ github.ref }}
cancel-in-progress: false
# Default to least privilege.
permissions:
contents: read
env:
PYTHON_VERSION: "3.12"
BUN_VERSION: "canary"
NODE_VERSION: "24"
jobs:
orchestrator-run:
name: orchestrator-run
runs-on: ${{ fromJSON(vars.HETZNER_FLEET_ONLINE == 'false' && '["ubuntu-24.04"]' || '["self-hosted","hetzner-robot"]') }}
timeout-minutes: 120
env:
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
steps:
# ------------------------------------------------------------------
# Gate: skip everything (exit 0) when CEREBRAS_API_KEY is unset, so this
# workflow never fails CI when the secret is not configured. Mirrors the
# gate in hyperliquid-bench-live.yml.
# ------------------------------------------------------------------
- name: Check CEREBRAS_API_KEY secret
id: gate
run: |
set -euo pipefail
if [ -z "${CEREBRAS_API_KEY:-}" ]; then
echo "::notice::Benchmark orchestrator scheduled run skipped — CEREBRAS_API_KEY is not configured. Add it as a repo secret to enable real-model orchestrator runs."
echo "skip=true" >> "$GITHUB_OUTPUT"
else
echo "skip=false" >> "$GITHUB_OUTPUT"
fi
- name: Checkout
if: steps.gate.outputs.skip != 'true'
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
submodules: recursive
fetch-depth: 1
- name: Setup Python
if: steps.gate.outputs.skip != 'true'
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Setup Node.js
if: steps.gate.outputs.skip != 'true'
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
with:
node-version: ${{ env.NODE_VERSION }}
- name: Setup workspace dependencies
if: steps.gate.outputs.skip != 'true'
uses: ./.github/actions/setup-bun-workspace
with:
bun-version: ${{ env.BUN_VERSION }}
install-command: bun install --ignore-scripts --no-frozen-lockfile
# ------------------------------------------------------------------
# The orchestrator package is `benchmarks` under `packages/`, so the
# module is invoked as `python -m benchmarks.orchestrator` with
# `PYTHONPATH=packages` from the repo root.
#
# NOTE: `validate-runtime-gates` is intentionally NOT run here — it checks
# ALL live gates globally (Hyperliquid key, Docker backends, …) and exits
# non-zero when any is unavailable, which is unrelated to this LLM-only core
# subset. The subset-scoped publishability gate below is the relevant check.
# ------------------------------------------------------------------
- name: Run core registry subset on a real model
if: steps.gate.outputs.skip != 'true'
id: run
env:
BENCHMARKS: ${{ inputs.benchmarks || 'bfcl,action-calling,agentbench,tau_bench,mint,context_bench' }}
PROVIDER: ${{ inputs.provider || 'cerebras' }}
MODEL: ${{ inputs.model || 'gemma-4-31b' }}
PYTHONUNBUFFERED: "1"
run: |
set -e
PYTHONPATH=packages python -m benchmarks.orchestrator run \
--benchmarks "$BENCHMARKS" \
--provider "$PROVIDER" \
--model "$MODEL" \
--force \
--show-incompatible \
2>&1 | tee orchestrator-scheduled.log
- name: Validate latest publishability (rejects mock/sample/demo rows)
if: steps.gate.outputs.skip != 'true'
env:
PYTHONUNBUFFERED: "1"
run: |
set -e
PYTHONPATH=packages python -m benchmarks.orchestrator validate-latest-publishability \
--include-benchmarks "${{ inputs.benchmarks || 'bfcl,action-calling,agentbench,tau_bench,mint,context_bench' }}"
- name: Upload orchestrator artifacts
if: always() && steps.gate.outputs.skip != 'true'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: benchmark-orchestrator-scheduled-${{ github.run_id }}
path: |
packages/benchmarks/benchmark_results/**
orchestrator-scheduled.log
if-no-files-found: warn
retention-days: 90