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
149 lines
4.8 KiB
Plaintext
149 lines
4.8 KiB
Plaintext
// DRAFT: COMPILE-VERIFIED on Linux. Sister kernel to polar.comp.
|
|
// Wave-4-D: match polar.comp's threadgroup-cooperative residual add and
|
|
// Hadamard butterfly so get_rows fallback has the same parallel shape as the
|
|
// dot-product path.
|
|
// Ports `kernel_get_rows_q4_polar` from metal/polar.metal — decode one
|
|
// PolarQuant block to fp32 head_dim vector.
|
|
//
|
|
// Same 5-step decode as polar.comp's mul_mv but writes the dequantized
|
|
// vector directly instead of dotting against q.
|
|
|
|
#version 450
|
|
#extension GL_EXT_shader_16bit_storage : require
|
|
#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
|
|
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
|
|
|
layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
|
|
|
|
layout(std430, binding = 0) readonly buffer KBlock {
|
|
uint k_packed[]; // single 82-byte block
|
|
};
|
|
|
|
layout(std430, binding = 1) writeonly buffer Out {
|
|
float out_buf[]; // QK_POLAR floats
|
|
};
|
|
|
|
layout(push_constant) uniform Push {
|
|
uint head_dim; // must equal QK_POLAR (128)
|
|
uint use_qjl; // 0 / 1
|
|
} push;
|
|
|
|
const uint QK_POLAR = 128u;
|
|
const float POLAR_QJL_CORRECTION_MAGNITUDE = 0.5;
|
|
const float POLAR_QJL_INV_SQRT_QK = 0.08838834764831845;
|
|
const float POLAR_INV_QK = 1.0 / 128.0;
|
|
|
|
const float POLAR_Q4_CENTROIDS[16] = float[16](
|
|
-2.754354807, -2.093562707, -1.643041510, -1.279739752,
|
|
-0.962640978, -0.672392117, -0.397897103, -0.131757782,
|
|
0.131757782, 0.397897103, 0.672392117, 0.962640978,
|
|
1.279739752, 1.643041510, 2.093562707, 2.754354807
|
|
);
|
|
|
|
const float POLAR_QJL_SIGNS[128] = float[128](
|
|
-1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0,
|
|
1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0,
|
|
-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0,
|
|
-1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0,
|
|
-1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0,
|
|
-1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0,
|
|
1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0,
|
|
1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0,
|
|
1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0,
|
|
-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0,
|
|
1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0,
|
|
-1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0,
|
|
1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0,
|
|
-1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0,
|
|
1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0,
|
|
1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0
|
|
);
|
|
|
|
uint read_byte(uint b) {
|
|
uint w = k_packed[b >> 2];
|
|
return (w >> ((b & 3u) * 8u)) & 0xFFu;
|
|
}
|
|
|
|
uint read_u16(uint b) {
|
|
return read_byte(b) | (read_byte(b + 1u) << 8u);
|
|
}
|
|
|
|
float fp16_to_fp32(uint h16) {
|
|
uint sign = (h16 & 0x8000u) << 16;
|
|
uint exp = (h16 >> 10) & 0x1Fu;
|
|
uint mant = h16 & 0x3FFu;
|
|
uint u;
|
|
if (exp == 0u) {
|
|
if (mant == 0u) {
|
|
u = sign;
|
|
} else {
|
|
uint e = 1u;
|
|
while ((mant & 0x400u) == 0u) { mant <<= 1; e += 1u; }
|
|
mant &= 0x3FFu;
|
|
u = sign | ((127u - 15u - e + 1u) << 23) | (mant << 13);
|
|
}
|
|
} else if (exp == 0x1Fu) {
|
|
u = sign | 0x7F800000u | (mant << 13);
|
|
} else {
|
|
u = sign | ((exp + 127u - 15u) << 23) | (mant << 13);
|
|
}
|
|
return uintBitsToFloat(u);
|
|
}
|
|
|
|
shared float buf[128];
|
|
|
|
void polar_hadamard_inplace_tg32(uint tid) {
|
|
for (uint h = 1u; h < QK_POLAR; h <<= 1) {
|
|
uint p0 = tid;
|
|
uint p1 = tid + 32u;
|
|
uint twoh = h << 1;
|
|
uint b0 = (p0 / h) * twoh;
|
|
uint o0 = p0 - (p0 / h) * h;
|
|
uint b1 = (p1 / h) * twoh;
|
|
uint o1 = p1 - (p1 / h) * h;
|
|
uint j0 = b0 + o0;
|
|
uint j1 = b1 + o1;
|
|
float a0 = buf[j0];
|
|
float c0 = buf[j0 + h];
|
|
float a1 = buf[j1];
|
|
float c1 = buf[j1 + h];
|
|
buf[j0] = a0 + c0;
|
|
buf[j0 + h] = a0 - c0;
|
|
buf[j1] = a1 + c1;
|
|
buf[j1 + h] = a1 - c1;
|
|
barrier();
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
uint tid = gl_LocalInvocationID.x;
|
|
if (push.head_dim != QK_POLAR) return;
|
|
|
|
// Step 1+2: unpack codes.
|
|
for (uint b = tid; b < QK_POLAR / 2u; b += 32u) {
|
|
uint byte = read_byte(2u + b);
|
|
buf[2u * b] = POLAR_Q4_CENTROIDS[byte & 0x0Fu];
|
|
buf[2u * b + 1u] = POLAR_Q4_CENTROIDS[(byte >> 4) & 0x0Fu];
|
|
}
|
|
barrier();
|
|
|
|
if (push.use_qjl != 0u) {
|
|
uint bit = read_byte(2u + 64u) & 1u;
|
|
float sign_v = bit != 0u ? 1.0 : -1.0;
|
|
float mag = POLAR_QJL_CORRECTION_MAGNITUDE * POLAR_QJL_INV_SQRT_QK;
|
|
float scaled = sign_v * mag;
|
|
for (uint i = tid; i < QK_POLAR; i += 32u) {
|
|
buf[i] += scaled * POLAR_QJL_SIGNS[i];
|
|
}
|
|
barrier();
|
|
}
|
|
|
|
polar_hadamard_inplace_tg32(tid);
|
|
|
|
uint norm16 = read_u16(0u);
|
|
float scale = fp16_to_fp32(norm16) * POLAR_INV_QK;
|
|
for (uint i = tid; i < QK_POLAR; i += 32u) {
|
|
out_buf[i] = buf[i] * scale;
|
|
}
|
|
}
|