metacognitive-nexus
Version:
The cognitive core of an evolving AI entity, designed for post-human cognition and symbiotic evolution.
40 lines (38 loc) • 1.43 kB
JavaScript
// File: metacognitive-nexus/src/utils/MathHelpers.js
/**
* Menghitung cosine similarity antara dua vektor.
* @param {number[]} vecA Vektor pertama.
* @param {number[]} vecB Vektor kedua.
* @returns {number} Cosine similarity (0.0 - 1.0).
*/
export function cosineSimilarity(vecA, vecB) {
if (!vecA || !vecB || vecA.length === 0 || vecB.length === 0 || vecA.length !== vecB.length) {
return 0;
}
let dotProduct = 0;
let magnitudeA = 0;
let magnitudeB = 0;
for (let i = 0; i < vecA.length; i++) {
dotProduct += vecA[i] * vecB[i];
magnitudeA += vecA[i] * vecA[i];
magnitudeB += vecB[i] * vecB[i];
}
magnitudeA = Math.sqrt(magnitudeA);
magnitudeB = Math.sqrt(magnitudeB);
if (magnitudeA === 0 || magnitudeB === 0) return 0;
return dotProduct / (magnitudeA * magnitudeB);
}
/**
* Menghasilkan ID unik standar (UUID v4) untuk interaksi.
* Nama fungsi diubah agar konsisten dengan penggunaan sebelumnya di InteractionLogSchema.
* @returns {string} UUID v4 string.
*/
export function generateInteractionId() { // Nama fungsi diubah dari generateUUID
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
return crypto.randomUUID();
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}