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