@allemandi/embed-utils
Version:
Fast, type-safe utilities for vector embedding comparison and search.
3 lines (2 loc) • 2.98 kB
JavaScript
function r(r,t){for(var n=0,e=0,a=0,o=0;o<r.length;o++){var i=r[o],u=t[o];n+=i*u,e+=i*i,a+=u*u}var l=Math.sqrt(e)*Math.sqrt(a);return 0===l?0:n/l}function t(r,t){for(var n=0,e=0;e<r.length;e++){var a=r[e]-t[e];n+=a*a}return Math.sqrt(n)}function n(r,t){for(var n=0,e=0;e<r.length;e++)n+=Math.abs(r[e]-t[e]);return n}function e(r){for(var t=0,n=0;n<r.length;n++)t+=r[n]*r[n];var e=Math.sqrt(t);if(0===e)return r.slice();for(var a=new Array(r.length),o=0;o<r.length;o++)a[o]=r[o]/e;return a}function a(r,t){void 0===t&&(t=1e-6);for(var n=0,e=0;e<r.length;e++){var a=r[e];n+=a*a}return Math.abs(n-1)<=t}function o(r){var t=r.length;if(0===t)return[];for(var n=r[0].length,e=new Array(n).fill(0),a=0;a<t;a++)for(var o=r[a],i=0;i<n;i++)e[i]+=o[i];for(var u=0;u<n;u++)e[u]/=t;return e}function i(r,t){(null==t||t>r.length)&&(t=r.length);for(var n=0,e=Array(t);n<t;n++)e[n]=r[n];return e}function u(){return u=Object.assign?Object.assign.bind():function(r){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var e in n)({}).hasOwnProperty.call(n,e)&&(r[e]=n[e])}return r},u.apply(null,arguments)}function l(e,a,o){void 0===o&&(o={});var l,c,f,s=o.topK,v=o.threshold,d=o.method,h=void 0!==s?s:void 0!==v?a.length:1,g=[];switch(void 0===d?"cosine":d){case"euclidean":l=t,c=!0,f="distance";break;case"manhattan":l=n,c=!0,f="distance";break;default:l=r,c=!1,f="similarityScore"}for(var b,y=function(r){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=function(r,t){if(r){if("string"==typeof r)return i(r,t);var n={}.toString.call(r).slice(8,-1);return"Object"===n&&r.constructor&&(n=r.constructor.name),"Map"===n||"Set"===n?Array.from(r):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(r,t):void 0}}(r))){t&&(r=t);var n=0;return function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(a);!(b=y()).done;){var m,p,A=b.value,w=l(e,A.embedding);void 0!==v?(c?w<=v:w>=v)&&g.push(u({},A,((m={})[f]=w,m))):g.push(u({},A,((p={})[f]=w,p)))}return g.sort(function(r,t){if("similarityScore"===f||"distance"===f){var n,e,a=null!=(n=r[f])?n:0,o=null!=(e=t[f])?e:0;return c?a-o:o-a}return 0}),g.slice(0,h)}function c(e,a,o){void 0===o&&(o={});var i,l,c,f=o.method;switch(void 0===f?"cosine":f){case"euclidean":i=t,l=!0,c="distance";break;case"manhattan":i=n,l=!0,c="distance";break;default:i=r,l=!1,c="similarityScore"}for(var s=new Array(a.length),v=0;v<a.length;v++){var d;s[v]=u({},a[v],((d={})[c]=i(e,a[v].embedding),d))}return s.sort(function(r,t){return l?r[c]-t[c]:t[c]-r[c]}),s}export{r as computeCosineSimilarity,t as computeEuclideanDistance,n as computeManhattanDistance,l as findNearestNeighbors,a as isNormalized,o as meanVector,e as normalizeVector,c as rankBySimilarity};
//# sourceMappingURL=index.module.js.map