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

146 lines
4.4 KiB
JavaScript

#!/usr/bin/env node
/**
* End-to-end probe runner for the Model Tester routes: against a live agent server
* it asserts the static shell renders (and carries no Vite/HMR code), the status
* endpoint lists every probe, and each probe runs — treating a known-unavailable
* backend as a skip while requiring text-small, text-large, embedding, and vad to
* pass. Configured via MODEL_TESTER_BASE_URL / MODEL_TESTER_REQUIRE_ALL.
*/
const baseUrl = process.env.MODEL_TESTER_BASE_URL ?? "http://127.0.0.1:31337";
const requireAll = process.env.MODEL_TESTER_REQUIRE_ALL === "1";
const requiredPass = new Set(["text-small", "text-large", "embedding", "vad"]);
const tests = [
"text-small",
"text-large",
"embedding",
"text-to-speech",
"transcription",
"vad",
"image-description",
"image",
];
const knownUnavailable = [
"no TTS backend available",
"Cannot transcribe audio: no voice session active",
"No handler found for delegate type: TRANSCRIPTION",
"vision describe requires an mmproj-loaded server",
"imagegen-sd-1_5-q5_0 is not installed",
"OpenAI TTS failed: 404",
"OpenAI transcription failed: 404",
"OpenAI image generation failed: 404",
"OpenAI image description failed: 404",
"credit balance is too low",
];
function fail(message) {
console.error(message);
process.exitCode = 1;
}
function skip(message) {
console.log(`[model-tester-e2e] SKIP ${message}`);
}
async function fetchJson(path, init) {
const response = await fetch(new URL(path, baseUrl), init);
const text = await response.text();
if (!response.ok) {
throw new Error(
`${path} returned ${response.status}: ${text.slice(0, 500)}`,
);
}
return JSON.parse(text);
}
async function main() {
let htmlResponse;
try {
htmlResponse = await fetch(new URL("/model-tester", baseUrl), {
signal: AbortSignal.timeout(5_000),
});
} catch (error) {
if (!requireAll) {
skip(
`model tester server is unavailable at ${baseUrl}: ${
error instanceof Error ? error.message : String(error)
}`,
);
return;
}
throw error;
}
const html = await htmlResponse.text();
if (!htmlResponse.ok) {
if (!requireAll && htmlResponse.status === 404) {
skip(`model tester route is not mounted at ${baseUrl}`);
return;
}
throw new Error(`/model-tester returned ${htmlResponse.status}`);
}
if (!html.includes("Model Tester")) {
fail("/model-tester did not render the static tester shell");
}
if (html.includes("@vite/client") || html.includes("react-refresh")) {
fail("/model-tester includes Vite/HMR code; this can reintroduce flicker");
}
const status = await fetchJson("/api/model-tester/status");
const ids = new Set((status.tests ?? []).map((test) => test.id));
for (const test of tests) {
if (!ids.has(test)) fail(`status endpoint is missing ${test}`);
}
const results = [];
for (const test of tests) {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 240_000);
try {
const result = await fetchJson("/api/model-tester/run", {
method: "POST",
headers: { "content-type": "text/plain;charset=utf-8" },
body: JSON.stringify({
test,
prompt:
"Say exactly one short sentence proving the Eliza model tester works.",
}),
signal: controller.signal,
});
results.push(result);
} finally {
clearTimeout(timeout);
}
}
for (const result of results) {
const label = `${result.test}: ${result.ok ? "PASS" : "FAIL"}`;
console.log(label);
if (result.ok) continue;
const error = String(result.error ?? "");
const unavailable = knownUnavailable.some((needle) =>
error.includes(needle),
);
if (requireAll || requiredPass.has(result.test) || !unavailable) {
fail(`${result.test} failed unexpectedly:\n${error}`);
} else {
console.log(` unavailable backend: ${error.split("\n")[0]}`);
}
}
for (const result of results) {
if (result.test !== "text-small" && result.test !== "text-large") continue;
const text = result.output?.text;
if (result.ok && (typeof text !== "string" || text.trim().length === 0)) {
fail(`${result.test} returned ok=true with empty text output`);
}
}
}
main().catch((error) => {
fail(error instanceof Error ? error.stack || error.message : String(error));
});