@allemandi/embed-utils
Version:
Fast, type-safe utilities for comparing and searching vector embeddings.
3 lines (2 loc) • 2.45 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,i=0,o=0;o<r.length;o++){var a=r[o],l=e[o];t+=a*l,n+=a*a,i+=l*l}var f=Math.sqrt(n)*Math.sqrt(i);return 0===f?0:t/f}function t(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 n(){return n=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},n.apply(null,arguments)}r.computeCosineSimilarity=e,r.findNearestNeighbors=function(r,i,o){void 0===o&&(o={});for(var a,l=o.topK,f=void 0===l?1:l,u=o.threshold,s=void 0===u?0:u,c=[],d=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 t(r,e);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)?t(r,e):void 0}}(r))){e&&(r=e);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.")}(i);!(a=d()).done;){var v=a.value,m=e(r,v.embedding);m>=s&&c.push(n({},v,{similarityScore:m}))}return c.sort(function(r,e){return e.similarityScore-r.similarityScore}),c.slice(0,f)},r.isNormalized=function(r,e){void 0===e&&(e=1e-6);for(var t=0,n=0;n<r.length;n++){var i=r[n];t+=i*i}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),i=0;i<e;i++)for(var o=r[i],a=0;a<t;a++)n[a]+=o[a];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 i=new Array(r.length),o=0;o<r.length;o++)i[o]=r[o]/n;return i},r.rankBySimilarity=function(r,t){for(var i=new Array(t.length),o=0;o<t.length;o++)i[o]=n({},t[o],{similarityScore:e(r,t[o].embedding)});return i.sort(function(r,e){return e.similarityScore-r.similarityScore}),i}});
//# sourceMappingURL=index.umd.js.map