Files
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

145 lines
5.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Shared memory-benchmark metric schema.
*
* This is the single source of truth for the per-(tier × modality) record the
* desktop/server harness emits (issue #8809) AND the schema the mobile Resource
* Workbench (#8800) consumes. Both surfaces read the same field names so a
* desktop report and an on-device report line up column-for-column. Do NOT
* rename a field here without updating both consumers — the whole point of a
* shared schema is that the two reports are diffable.
*
* The field set mirrors the per-model metric list specced in
* `plugins/plugin-local-inference/docs/memory-and-e2e-latency-review.md` §5
* ("load ms, first-token/first-audio/first-result ms, throughput (tok/s or
* RTF), peak RSS delta, ... eviction count") and the on-device iOS grind
* (`plugin-capacitor-bridge/src/ios/model-grind.ts`), so the desktop harness,
* the iOS grind, and the #8800 workbench all speak the same metric language.
*
* Pure ESM, built-ins only — importable from `.mjs` harness scripts and from
* `.ts` via the same path.
*/
/** Schema version. Bump on any breaking field change so consumers can detect drift. */
export const METRIC_SCHEMA_VERSION = "1.0.0";
/**
* The modalities a single Eliza-1 bundle can serve. One row per (tier ×
* modality) in the report. Order is the co-residency load order used by the
* scripted sequence (text first — it is the pinned target — then the
* auxiliaries).
*/
export const MODALITIES = /** @type {const} */ ([
"text",
"embedding",
"transcription",
"tts",
"vad",
"vision",
]);
/**
* The throughput unit per modality. Token-generating modalities report
* tokens/sec; streaming-audio modalities report a real-time factor (RTF =
* processing_time / audio_duration; < 1 is faster than real time). Modalities
* with neither leave `throughput` null.
*/
export const THROUGHPUT_UNIT = /** @type {const} */ ({
text: "tok/s",
embedding: "tok/s",
transcription: "rtf",
tts: "rtf",
vad: "rtf",
vision: "tok/s",
});
/**
* The canonical metric record. Every harness (desktop #8809, mobile #8800,
* iOS grind) emits rows of this exact shape.
*
* @typedef {Object} ModalityMetric
* @property {string} tier Eliza-1 tier id (e.g. "eliza-1-2b").
* @property {string} modality One of MODALITIES.
* @property {boolean} measured true when a real load+run produced the numbers; false when skipped.
* @property {string=} skipReason Present iff measured === false — why this row was not measured.
* @property {number|null} loadMs Wall-clock ms to bring the model online (load only).
* @property {number|null} firstResultMs Ms from request to first token/audio/result (TTAP component).
* @property {number|null} throughput tok/s or RTF per THROUGHPUT_UNIT[modality]; null when N/A.
* @property {string|null} throughputUnit "tok/s" | "rtf" | null.
* @property {number|null} rssBeforeMb Resident RSS (MB) sampled immediately before the load.
* @property {number|null} rssAfterMb Resident RSS (MB) sampled immediately after the load+run.
* @property {number|null} rssDeltaMb rssAfterMb - rssBeforeMb (the resident footprint this model added).
* @property {number|null} peakRssMb Peak RSS (MB) observed across the load+run window.
* @property {number|null} estimatedMb The model's declared estimatedMb (what the arbiter budgets against), when known.
*/
/**
* The co-residency record. One per harness run. Captures the eviction telemetry
* emitted by the MemoryArbiter while the scripted sequence
* (load text → load vision → load voice → force pressure) executes.
*
* @typedef {Object} CoResidencyMetric
* @property {boolean} measured true when real backends drove the sequence; false when it ran as the wiring self-check.
* @property {string} mode "real" | "self-check".
* @property {string[]} sequence Ordered list of capability::modelKey loads attempted.
* @property {number} loadCount arbiter "model_load" events observed.
* @property {number} evictionCount arbiter "eviction" events observed (fit + pressure + swap).
* @property {number} pressureEvents arbiter "memory_pressure" events observed.
* @property {number} budgetMb the usable-RAM budget the arbiter fit-path was driven against.
* @property {Array<{capability:string,modelKey:string,reason:string,estimatedMb:number}>} evictions
*/
/** The top-level report envelope. */
export const METRIC_SCHEMA = Object.freeze({
version: METRIC_SCHEMA_VERSION,
/** Field names a consumer (#8800) can rely on per modality row. */
modalityFields: Object.freeze([
"tier",
"modality",
"measured",
"skipReason",
"loadMs",
"firstResultMs",
"throughput",
"throughputUnit",
"rssBeforeMb",
"rssAfterMb",
"rssDeltaMb",
"peakRssMb",
"estimatedMb",
]),
/** Field names a consumer can rely on for the co-residency block. */
coResidencyFields: Object.freeze([
"measured",
"mode",
"sequence",
"loadCount",
"evictionCount",
"pressureEvents",
"budgetMb",
"evictions",
]),
modalities: MODALITIES,
throughputUnit: THROUGHPUT_UNIT,
/** Consumers: this issue (#8809 desktop/server) and #8800 (mobile workbench). */
sharedWith: Object.freeze(["#8809", "#8800"]),
});
/** Build an empty (skipped) modality row with the canonical fields populated. */
export function skippedModalityRow(tier, modality, skipReason) {
return {
tier,
modality,
measured: false,
skipReason,
loadMs: null,
firstResultMs: null,
throughput: null,
throughputUnit: THROUGHPUT_UNIT[modality] ?? null,
rssBeforeMb: null,
rssAfterMb: null,
rssDeltaMb: null,
peakRssMb: null,
estimatedMb: null,
};
}