UNPKG

@allemandi/embed-utils

Version:

Fast, type-safe utilities for comparing and searching vector embeddings.

3 lines (2 loc) 2.26 kB
function r(r,t){for(var e=0,n=0,o=0,i=0;i<r.length;i++){var a=r[i],l=t[i];e+=a*l,n+=a*a,o+=l*l}var u=Math.sqrt(n)*Math.sqrt(o);return 0===u?0:e/u}function t(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 e(){return e=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},e.apply(null,arguments)}exports.computeCosineSimilarity=r,exports.findNearestNeighbors=function(n,o,i){void 0===i&&(i={});for(var a,l=i.topK,u=void 0===l?1:l,s=i.threshold,c=void 0===s?0:s,f=[],v=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.")}(o);!(a=v()).done;){var y=a.value,h=r(n,y.embedding);h>=c&&f.push(e({},y,{similarityScore:h}))}return f.sort(function(r,t){return t.similarityScore-r.similarityScore}),f.slice(0,u)},exports.isNormalized=function(r,t){void 0===t&&(t=1e-6);for(var e=0,n=0;n<r.length;n++){var o=r[n];e+=o*o}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),o=0;o<t;o++)for(var i=r[o],a=0;a<e;a++)n[a]+=i[a];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 o=new Array(r.length),i=0;i<r.length;i++)o[i]=r[i]/n;return o},exports.rankBySimilarity=function(t,n){for(var o=new Array(n.length),i=0;i<n.length;i++)o[i]=e({},n[i],{similarityScore:r(t,n[i].embedding)});return o.sort(function(r,t){return t.similarityScore-r.similarityScore}),o}; //# sourceMappingURL=index.cjs.map