Skip to content
Merged
Changes from all commits
Commits
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
44 changes: 24 additions & 20 deletions packages/ai/src/task/VectorQuantizeTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,23 +187,35 @@ export class VectorQuantizeTask extends Task<
}
}

/**
* Find min and max values in a single pass for better performance
*/
private findMinMax(values: number[]): { min: number; max: number } {
if (values.length === 0) {
return { min: 0, max: 1 };
}

let min = values[0];
let max = values[0];

for (let i = 1; i < values.length; i++) {
const val = values[i];
if (val < min) min = val;
if (val > max) max = val;
}

return { min, max };
}

private quantizeToInt8(values: number[]): Int8Array {
// Assume values are in [-1, 1] range after normalization
// Scale to [-127, 127] to avoid overflow at -128
return new Int8Array(values.map((v) => Math.round(Math.max(-1, Math.min(1, v)) * 127)));
}

private quantizeToUint8(values: number[]): Uint8Array {
if (values.length === 0) return new Uint8Array();

// Find min/max for scaling using a single loop
let min = values[0];
let max = values[0];
for (let i = 1; i < values.length; i++) {
const v = values[i];
if (v < min) min = v;
if (v > max) max = v;
}
// Find min/max for scaling in a single pass
const { min, max } = this.findMinMax(values);
const range = max - min || 1;

// Scale to [0, 255]
Expand All @@ -217,16 +229,8 @@ export class VectorQuantizeTask extends Task<
}

private quantizeToUint16(values: number[]): Uint16Array {
if (values.length === 0) return new Uint16Array();

// Find min/max for scaling using a single loop
let min = values[0];
let max = values[0];
for (let i = 1; i < values.length; i++) {
const v = values[i];
if (v < min) min = v;
if (v > max) max = v;
}
// Find min/max for scaling in a single pass
const { min, max } = this.findMinMax(values);
const range = max - min || 1;

// Scale to [0, 65535]
Expand Down
Loading