UNPKG

@autobe/agent

Version:

AI backend server code generator

160 lines 7.79 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalEmbeddingProvider = void 0; const node_crypto_1 = require("node:crypto"); const typia_1 = __importDefault(require("typia")); class LocalEmbeddingProvider { constructor(options) { this.options = options; this.cache = new Map(); this.extractorPromise = this.init(); } embed(texts) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c; if (texts.length === 0) return []; const extractor = yield this.extractorPromise; const batchSize = (_a = this.options.batchSize) !== null && _a !== void 0 ? _a : 32; const useCache = (_b = this.options.enableCache) !== null && _b !== void 0 ? _b : true; const out = new Array(texts.length); const misses = []; for (let i = 0; i < texts.length; i++) { const t = (_c = texts[i]) !== null && _c !== void 0 ? _c : ""; const key = hashText(t); const hit = useCache ? this.cache.get(key) : undefined; if (hit) out[i] = hit; else misses.push({ idx: i, text: t, key }); } for (let i = 0; i < misses.length; i += batchSize) { const chunk = misses.slice(i, i + batchSize); const chunkTexts = chunk.map((c) => c.text); const result = yield extractor(chunkTexts, { pooling: "mean", normalize: true, }); const vecs = toVectors(result); if (vecs.length !== chunk.length) { throw new Error(`[LocalEmbeddingProvider] batch mismatch: in=${chunk.length}, out=${vecs.length}`); } if (!this.dim && vecs[0]) this.dim = vecs[0].length; for (let j = 0; j < chunk.length; j++) { const v = vecs[j]; const { idx, key } = chunk[j]; out[idx] = v; if (useCache) this.cache.set(key, v); } } for (let i = 0; i < out.length; i++) { if (!out[i]) throw new Error(`[LocalEmbeddingProvider] missing vector at i=${i}`); } return out; }); } init() { return __awaiter(this, void 0, void 0, function* () { const t = yield Promise.resolve().then(() => __importStar(require("@huggingface/transformers"))); const env = t.env; if (env && this.options.cacheDir) env.cacheDir = this.options.cacheDir; const pipeline = yield t.pipeline("feature-extraction", this.options.modelIdOrPath, { dtype: this.options.quantized === false ? "fp32" : "q8", }); return pipeline; }); } } exports.LocalEmbeddingProvider = LocalEmbeddingProvider; function hashText(text) { return (0, node_crypto_1.createHash)("sha256").update(text).digest("hex"); } function toVectors(result) { var _a, _b, _c; if ((() => { return input => Array.isArray(input) && input.every(elem => Array.isArray(elem) && elem.every(elem => "number" === typeof elem)); })()(result)) { return result; } if ((() => { return input => Array.isArray(input) && input.every(elem => "number" === typeof elem); })()(result)) { return [result]; } if ((() => { const _io0 = input => (undefined === input.tolist || true) && (undefined === input.data || "object" === typeof input.data && null !== input.data && _io1(input.data)) && (undefined === input.dims || Array.isArray(input.dims) && input.dims.every(elem => "number" === typeof elem)) && (undefined === input.shape || Array.isArray(input.shape) && input.shape.every(elem => "number" === typeof elem)); const _io1 = input => "number" === typeof input.length && Object.keys(input).every(key => { if (["length"].some(prop => key === prop)) return true; const value = input[key]; if (undefined === value) return true; if ("number" === typeof Number(key)) return "number" === typeof value; return true; }); return input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input); })()(result)) { if (typeof result.tolist === "function") { const arr = result.tolist(); if ((() => { return input => Array.isArray(input) && input.every(elem => Array.isArray(elem) && elem.every(elem => "number" === typeof elem)); })()(arr)) return arr; if ((() => { return input => Array.isArray(input) && input.every(elem => "number" === typeof elem); })()(arr)) return [arr]; } const data = Array.from((_a = result.data) !== null && _a !== void 0 ? _a : []); const dims = Array.from((_c = (_b = result.dims) !== null && _b !== void 0 ? _b : result.shape) !== null && _c !== void 0 ? _c : []); if (dims.length === 2) { const [B, D] = dims; const out = []; for (let b = 0; b < B; b++) out.push(data.slice(b * D, (b + 1) * D)); return out; } if (dims.length === 1) return [data]; } throw new Error("[LocalEmbeddingProvider] unsupported embedding output"); } //# sourceMappingURL=LocalEmbeddingProvider.js.map