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