@localmode/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,114 @@
1
+ var oe={storage:"indexeddb",indexOptions:{m:16,efConstruction:200,efSearch:50,distanceFunction:"cosine"},sync:{enableLocking:true,enableBroadcast:true,enableWAL:false},encryption:{enabled:false,iterations:1e5}},Xo="default";function $r(r,e){if(r.length!==e.length)throw new Error(`Vector dimension mismatch: ${r.length} vs ${e.length}`);let t=0,n=0,o=0;for(let i=0;i<r.length;i++)t+=r[i]*e[i],n+=r[i]*r[i],o+=e[i]*e[i];let s=Math.sqrt(n)*Math.sqrt(o);return s===0?0:t/s}function nt(r,e){return 1-$r(r,e)}function Wr(r,e){if(r.length!==e.length)throw new Error(`Vector dimension mismatch: ${r.length} vs ${e.length}`);let t=0;for(let n=0;n<r.length;n++){let o=r[n]-e[n];t+=o*o;}return Math.sqrt(t)}function _r(r,e){if(r.length!==e.length)throw new Error(`Vector dimension mismatch: ${r.length} vs ${e.length}`);let t=0;for(let n=0;n<r.length;n++)t+=r[n]*e[n];return t}function Yo(r){let e=0;for(let n=0;n<r.length;n++)e+=r[n]*r[n];if(e=Math.sqrt(e),e===0)return r;let t=new Float32Array(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]/e;return t}function Vr(r){switch(r){case "cosine":return nt;case "euclidean":return Wr;case "dot":return (e,t)=>-_r(e,t);default:return nt}}function Ur(r,e){switch(e){case "cosine":return 1-r;case "euclidean":return 1/(1+r);case "dot":return -r;default:return 1-r}}var ot=class{heap=[];get size(){return this.heap.length}push(e){this.heap.push(e),this.bubbleUp(this.heap.length-1);}pop(){if(this.heap.length===0)return;let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&(this.heap[0]=t,this.bubbleDown(0)),e}peek(){return this.heap[0]}bubbleUp(e){for(;e>0;){let t=Math.floor((e-1)/2);if(this.heap[t].distance<=this.heap[e].distance)break;[this.heap[t],this.heap[e]]=[this.heap[e],this.heap[t]],e=t;}}bubbleDown(e){let t=this.heap.length;for(;;){let n=2*e+1,o=2*e+2,s=e;if(n<t&&this.heap[n].distance<this.heap[s].distance&&(s=n),o<t&&this.heap[o].distance<this.heap[s].distance&&(s=o),s===e)break;[this.heap[s],this.heap[e]]=[this.heap[e],this.heap[s]],e=s;}}},st=class{heap=[];get size(){return this.heap.length}push(e){this.heap.push(e),this.bubbleUp(this.heap.length-1);}pop(){if(this.heap.length===0)return;let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&(this.heap[0]=t,this.bubbleDown(0)),e}peek(){return this.heap[0]}toArray(){return [...this.heap].sort((e,t)=>e.distance-t.distance)}bubbleUp(e){for(;e>0;){let t=Math.floor((e-1)/2);if(this.heap[t].distance>=this.heap[e].distance)break;[this.heap[t],this.heap[e]]=[this.heap[e],this.heap[t]],e=t;}}bubbleDown(e){let t=this.heap.length;for(;;){let n=2*e+1,o=2*e+2,s=e;if(n<t&&this.heap[n].distance>this.heap[s].distance&&(s=n),o<t&&this.heap[o].distance>this.heap[s].distance&&(s=o),s===e)break;[this.heap[s],this.heap[e]]=[this.heap[e],this.heap[s]],e=s;}}},L=class r{constructor(e,t={}){this.dimensions=e;this.m=t.m??16,this.mMax=this.m*2,this.efConstruction=t.efConstruction??200,this.efSearch=t.efSearch??50,this.distanceType=t.distanceFunction??"cosine",this.distanceFn=Vr(this.distanceType);}nodes=new Map;vectors=new Map;entryPointId=null;maxLevel=0;m;mMax;efConstruction;efSearch;distanceType;distanceFn;get size(){return this.nodes.size}setEfSearch(e){this.efSearch=e;}randomLevel(){let e=0;for(;Math.random()<1/this.m&&e<32;)e++;return e}add(e,t){if(t.length!==this.dimensions)throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${t.length}`);if(this.nodes.has(e)){this.vectors.set(e,t);return}let n=this.randomLevel(),o={id:e,level:n,connections:new Map};for(let i=0;i<=n;i++)o.connections.set(i,new Set);if(this.nodes.set(e,o),this.vectors.set(e,t),this.entryPointId===null){this.entryPointId=e,this.maxLevel=n;return}let s=this.entryPointId;for(let i=this.maxLevel;i>n;i--)s=this.searchLayer(t,s,1,i)[0]?.id??s;for(let i=Math.min(n,this.maxLevel);i>=0;i--){let c=this.searchLayer(t,s,this.efConstruction,i),a=this.selectNeighbors(t,c,i===0?this.mMax:this.m),l=o.connections.get(i);for(let u of a){l.add(u.id);let d=this.nodes.get(u.id),m=d.connections.get(i);m||(m=new Set,d.connections.set(i,m)),m.add(e);let p=i===0?this.mMax:this.m;m.size>p&&this.pruneConnections(u.id,i,p);}c.length>0&&(s=c[0].id);}n>this.maxLevel&&(this.entryPointId=e,this.maxLevel=n);}search(e,t){if(e.length!==this.dimensions)throw new Error(`Query dimension mismatch: expected ${this.dimensions}, got ${e.length}`);if(this.entryPointId===null)return [];let n=this.entryPointId;for(let s=this.maxLevel;s>0;s--){let i=this.searchLayer(e,n,1,s);i.length>0&&(n=i[0].id);}return this.searchLayer(e,n,Math.max(t,this.efSearch),0).slice(0,t).map(s=>({id:s.id,score:Ur(s.distance,this.distanceType)}))}delete(e){let t=this.nodes.get(e);if(!t)return false;this.vectors.delete(e),this.nodes.delete(e);for(let[n,o]of t.connections)for(let s of o){let i=this.nodes.get(s);i&&i.connections.get(n)?.delete(e);}return this.entryPointId===e&&(this.entryPointId=this.nodes.size>0?this.nodes.keys().next().value??null:null,this.entryPointId?this.maxLevel=this.nodes.get(this.entryPointId).level:this.maxLevel=0),true}has(e){return this.nodes.has(e)}getVector(e){return this.vectors.get(e)}searchLayer(e,t,n,o){let s=new Set([t]),i=this.vectors.get(t);if(!i)return [];let c=this.distanceFn(e,i),a=new ot,l=new st;for(a.push({id:t,distance:c}),l.push({id:t,distance:c});a.size>0;){let u=a.pop();if(l.size>=n&&u.distance>l.peek().distance)break;let d=this.nodes.get(u.id);if(!d)continue;let m=d.connections.get(o);if(m)for(let p of m){if(s.has(p))continue;s.add(p);let g=this.vectors.get(p);if(!g)continue;let f=this.distanceFn(e,g);(l.size<n||f<l.peek().distance)&&(a.push({id:p,distance:f}),l.push({id:p,distance:f}),l.size>n&&l.pop());}}return l.toArray()}selectNeighbors(e,t,n){return t.slice(0,n)}pruneConnections(e,t,n){let o=this.nodes.get(e);if(!o)return;let s=o.connections.get(t);if(!s||s.size<=n)return;let i=this.vectors.get(e);if(!i)return;let c=[];for(let l of s){let u=this.vectors.get(l);u&&c.push({id:l,distance:this.distanceFn(i,u)});}c.sort((l,u)=>l.distance-u.distance);let a=new Set;for(let l=0;l<Math.min(n,c.length);l++)a.add(c[l].id);o.connections.set(t,a);}serialize(){let e=[];for(let[t,n]of this.nodes){let o=[];for(let[s,i]of n.connections)o.push([s,Array.from(i)]);e.push({id:t,level:n.level,connections:o});}return {version:1,dimensions:this.dimensions,m:this.m,efConstruction:this.efConstruction,entryPointId:this.entryPointId,maxLevel:this.maxLevel,nodes:e}}static deserialize(e,t,n){let o=new r(e.dimensions,{m:e.m,efConstruction:e.efConstruction,...n});o.entryPointId=e.entryPointId,o.maxLevel=e.maxLevel,o.vectors=t;for(let s of e.nodes){let i={id:s.id,level:s.level,connections:new Map};for(let[c,a]of s.connections)i.connections.set(c,new Set(a));o.nodes.set(s.id,i);}return o}clear(){this.nodes.clear(),this.vectors.clear(),this.entryPointId=null,this.maxLevel=0;}};var h={DOCUMENTS:"documents",VECTORS:"vectors",INDEXES:"indexes",COLLECTIONS:"collections",META:"meta"};var it="wal";function Gr(r){if(!r.objectStoreNames.contains("wal")){let e=r.createObjectStore("wal",{keyPath:"id"});e.createIndex("sequence","sequence",{unique:true}),e.createIndex("status","status",{unique:false}),e.createIndex("transactionId","transactionId",{unique:false});}}function qr(){return `${Date.now()}-${Math.random().toString(36).substring(2,11)}`}var se=class{db;sequence=0;currentTransactionId=null;constructor(e){this.db=e;}async initialize(){let e=await this.getMaxSequence();return this.sequence=e,await this.getPendingCount()}async getMaxSequence(){return new Promise((e,t)=>{let i=this.db.transaction("wal","readonly").objectStore("wal").index("sequence").openCursor(null,"prev");i.onerror=()=>t(i.error),i.onsuccess=()=>{let c=i.result;if(c){let a=c.value;e(a.sequence);}else e(0);};})}async getPendingCount(){return new Promise((e,t)=>{let i=this.db.transaction("wal","readonly").objectStore("wal").index("status").count("pending");i.onerror=()=>t(i.error),i.onsuccess=()=>e(i.result);})}beginTransaction(){return this.currentTransactionId=qr(),this.currentTransactionId}endTransaction(){this.currentTransactionId=null;}async log(e,t){let n={id:qr(),sequence:++this.sequence,type:e,data:t,timestamp:Date.now(),status:"pending",transactionId:this.currentTransactionId??void 0};return new Promise((o,s)=>{let i=this.db.transaction("wal","readwrite"),a=i.objectStore("wal").add(n);a.onerror=()=>s(a.error),i.oncomplete=()=>o(n.id);})}async commit(e){return this.updateStatus(e,"committed")}async rollback(e){return this.updateStatus(e,"rolled_back")}async updateStatus(e,t){return new Promise((n,o)=>{let s=this.db.transaction("wal","readwrite"),i=s.objectStore("wal"),c=i.get(e);c.onerror=()=>o(c.error),c.onsuccess=()=>{let a=c.result;if(!a){o(new Error(`WAL entry not found: ${e}`));return}a.status=t;let l=i.put(a);l.onerror=()=>o(l.error);},s.oncomplete=()=>n();})}async commitTransaction(e){let t=await this.getTransactionEntries(e);return new Promise((n,o)=>{let s=this.db.transaction("wal","readwrite"),i=s.objectStore("wal");for(let c of t)c.status="committed",i.put(c);s.onerror=()=>o(s.error),s.oncomplete=()=>n();})}async rollbackTransaction(e){let t=await this.getTransactionEntries(e);return new Promise((n,o)=>{let s=this.db.transaction("wal","readwrite"),i=s.objectStore("wal");for(let c of t)c.status="rolled_back",i.put(c);s.onerror=()=>o(s.error),s.oncomplete=()=>n();})}async getTransactionEntries(e){return new Promise((t,n)=>{let c=this.db.transaction("wal","readonly").objectStore("wal").index("transactionId").getAll(e);c.onerror=()=>n(c.error),c.onsuccess=()=>t(c.result);})}async getPendingOperations(){return new Promise((e,t)=>{let i=this.db.transaction("wal","readonly").objectStore("wal").index("status").getAll("pending");i.onerror=()=>t(i.error),i.onsuccess=()=>{let c=i.result;c.sort((a,l)=>a.sequence-l.sequence),e(c);};})}async replay(e,t={}){let n=await this.getPendingOperations();if(n.length===0)return 0;let o=0;for(let s of n)try{await e(s),await this.commit(s.id),o++,t.onProgress?.(o,n.length);}catch(i){console.error(`Failed to replay WAL entry ${s.id}:`,i),await this.rollback(s.id);}return o}async cleanup(e=1440*60*1e3){let t=Date.now()-e;return new Promise((n,o)=>{let s=this.db.transaction("wal","readwrite"),c=s.objectStore("wal").openCursor(),a=0;c.onerror=()=>o(c.error),c.onsuccess=()=>{let l=c.result;if(l){let u=l.value;u.status!=="pending"&&u.timestamp<t&&(l.delete(),a++),l.continue();}},s.oncomplete=()=>n(a);})}async clear(){return new Promise((e,t)=>{let n=this.db.transaction("wal","readwrite"),s=n.objectStore("wal").clear();s.onerror=()=>t(s.error),n.oncomplete=()=>{this.sequence=0,e();};})}};async function es(r,e,t,n){let o=await r.log(e,t);try{let s=await n();return await r.commit(o),s}catch(s){throw await r.rollback(o),s}}function Qr(r){return async e=>{switch(e.type){case "add_document":case "update_document":await r.addDocument(e.data.document);break;case "delete_document":await r.deleteDocument(e.data.id);break;case "add_vector":await r.addVector(e.data.vector);break;case "delete_vector":await r.deleteVector(e.data.id);break;case "save_index":await r.saveIndex(e.data.collectionId,e.data.index);break;case "create_collection":await r.createCollection(e.data.collection);break;case "delete_collection":await r.deleteCollection(e.data.id);break;case "clear_collection":await r.clearCollection(e.data.collectionId);break;case "clear_database":await r.clear();break;default:console.warn(`Unknown WAL operation type: ${e.type}`);}}}var ie=[{version:1,description:"Initial schema with documents, vectors, indexes, collections, and meta stores",migrate:r=>{if(!r.objectStoreNames.contains(h.DOCUMENTS)){let e=r.createObjectStore(h.DOCUMENTS,{keyPath:"id"});e.createIndex("collectionId","collectionId",{unique:false}),e.createIndex("collectionId_createdAt",["collectionId","createdAt"],{unique:false});}r.objectStoreNames.contains(h.VECTORS)||r.createObjectStore(h.VECTORS,{keyPath:"id"}).createIndex("collectionId","collectionId",{unique:false}),r.objectStoreNames.contains(h.INDEXES)||r.createObjectStore(h.INDEXES,{keyPath:"collectionId"}),r.objectStoreNames.contains(h.COLLECTIONS)||r.createObjectStore(h.COLLECTIONS,{keyPath:"id"}).createIndex("name","name",{unique:true}),r.objectStoreNames.contains(h.META)||r.createObjectStore(h.META,{keyPath:"key"});}},{version:2,description:"Add WAL store for crash recovery",migrate:r=>{Gr(r);}},{version:3,description:"Add encryption metadata to documents and vectors",migrate:r=>{r.objectStoreNames.contains("encryption")||r.createObjectStore("encryption",{keyPath:"key"});}}];function ae(){return ie.length>0?Math.max(...ie.map(r=>r.version)):0}function ts(r,e){return ie.filter(t=>t.version>r&&t.version<=e).sort((t,n)=>t.version-n.version)}function ct(r,e,t,n){let o=ts(t,n);for(let s of o){console.log(`Running migration v${s.version}: ${s.description}`);try{s.migrate(r,e)instanceof Promise&&console.warn(`Migration v${s.version} is async, which may not work correctly in onupgradeneeded`);}catch(i){throw console.error(`Migration v${s.version} failed:`,i),i}}}var at=class{db=null;dbName;constructor(e){this.dbName=e;}async getStoredVersion(){if(!this.db)throw new Error("Database not open");return new Promise((e,t)=>{let s=this.db.transaction(h.META,"readonly").objectStore(h.META).get("schema_version");s.onerror=()=>t(s.error),s.onsuccess=()=>{let i=s.result;e(i?.value??0);};})}async setStoredVersion(e){if(!this.db)throw new Error("Database not open");return new Promise((t,n)=>{let o=this.db.transaction(h.META,"readwrite"),i=o.objectStore(h.META).put({key:"schema_version",value:e});i.onerror=()=>n(i.error),o.oncomplete=()=>t();})}async needsMigration(){let e=await this.getStoredVersion(),t=ae();return e<t}async open(){let e=ae();return new Promise((t,n)=>{let o=indexedDB.open(this.dbName,e);o.onerror=()=>{n(new Error(`Failed to open database: ${o.error?.message}`));},o.onsuccess=()=>{this.db=o.result,t(this.db);},o.onupgradeneeded=s=>{let i=o.result,c=o.transaction,a=s.oldVersion,l=s.newVersion??e;ct(i,c,a,l);},o.onblocked=()=>{console.warn("Database upgrade blocked. Please close other tabs.");};})}close(){this.db&&(this.db.close(),this.db=null);}getMigrationHistory(){return ie.map(e=>({version:e.version,description:e.description}))}};var ce=class{db=null;dbName;wal=null;walEnabled;constructor(e,t={}){this.dbName=`vectordb_${e}`,this.walEnabled=t.enableWAL??false;}async open(){if(this.db)return;let e=ae();return new Promise((t,n)=>{let o=indexedDB.open(this.dbName,e);o.onerror=()=>{n(new Error(`Failed to open database: ${o.error?.message}`));},o.onsuccess=async()=>{if(this.db=o.result,this.walEnabled&&this.db.objectStoreNames.contains("wal")){this.wal=new se(this.db);let s=await this.wal.initialize();if(s>0){console.log(`Replaying ${s} pending WAL operations...`);let i=Qr(this),c=await this.wal.replay(i);console.log(`Replayed ${c} WAL operations`);}}t();},o.onupgradeneeded=s=>{let i=s.target.result,c=s.target.transaction,a=s.oldVersion,l=s.newVersion??e;ct(i,c,a,l);},o.onblocked=()=>{console.warn("Database upgrade blocked. Close other tabs using this database.");};})}getWAL(){return this.wal}async close(){this.db&&(this.db.close(),this.db=null);}ensureOpen(){if(!this.db)throw new Error("Database not open. Call open() first.");return this.db}async addDocument(e){let t=this.ensureOpen(),n={id:e.id,collectionId:e.collectionId,metadata:e.metadata,createdAt:e.createdAt,updatedAt:e.updatedAt};return new Promise((o,s)=>{let i=t.transaction(h.DOCUMENTS,"readwrite"),a=i.objectStore(h.DOCUMENTS).put(n);a.onerror=()=>s(a.error),i.oncomplete=()=>o();})}async getDocument(e){let t=this.ensureOpen();return new Promise((n,o)=>{let c=t.transaction(h.DOCUMENTS,"readonly").objectStore(h.DOCUMENTS).get(e);c.onerror=()=>o(c.error),c.onsuccess=()=>{let a=c.result;if(!a){n(null);return}n({id:a.id,collectionId:a.collectionId,metadata:a.metadata,createdAt:a.createdAt,updatedAt:a.updatedAt});};})}async deleteDocument(e){let t=this.ensureOpen();return new Promise((n,o)=>{let s=t.transaction(h.DOCUMENTS,"readwrite"),c=s.objectStore(h.DOCUMENTS).delete(e);c.onerror=()=>o(c.error),s.oncomplete=()=>n();})}async getAllDocuments(e){let t=this.ensureOpen();return new Promise((n,o)=>{let a=t.transaction(h.DOCUMENTS,"readonly").objectStore(h.DOCUMENTS).index("collectionId").getAll(e);a.onerror=()=>o(a.error),a.onsuccess=()=>{let l=a.result;n(l.map(u=>({id:u.id,collectionId:u.collectionId,metadata:u.metadata,createdAt:u.createdAt,updatedAt:u.updatedAt})));};})}async countDocuments(e){let t=this.ensureOpen();return new Promise((n,o)=>{let a=t.transaction(h.DOCUMENTS,"readonly").objectStore(h.DOCUMENTS).index("collectionId").count(e);a.onerror=()=>o(a.error),a.onsuccess=()=>n(a.result);})}async addVector(e){let t=this.ensureOpen(),n={id:e.id,collectionId:e.collectionId,vector:e.vector};return new Promise((o,s)=>{let i=t.transaction(h.VECTORS,"readwrite"),a=i.objectStore(h.VECTORS).put(n);a.onerror=()=>s(a.error),i.oncomplete=()=>o();})}async getVector(e){let t=this.ensureOpen();return new Promise((n,o)=>{let c=t.transaction(h.VECTORS,"readonly").objectStore(h.VECTORS).get(e);c.onerror=()=>o(c.error),c.onsuccess=()=>{let a=c.result;n(a?.vector??null);};})}async deleteVector(e){let t=this.ensureOpen();return new Promise((n,o)=>{let s=t.transaction(h.VECTORS,"readwrite"),c=s.objectStore(h.VECTORS).delete(e);c.onerror=()=>o(c.error),s.oncomplete=()=>n();})}async getAllVectors(e){let t=this.ensureOpen();return new Promise((n,o)=>{let a=t.transaction(h.VECTORS,"readonly").objectStore(h.VECTORS).index("collectionId").getAll(e);a.onerror=()=>o(a.error),a.onsuccess=()=>{let l=a.result,u=new Map;for(let d of l)u.set(d.id,d.vector);n(u);};})}async saveIndex(e,t){let n=this.ensureOpen(),o={collectionId:e,data:JSON.stringify(t),updatedAt:Date.now()};return new Promise((s,i)=>{let c=n.transaction(h.INDEXES,"readwrite"),l=c.objectStore(h.INDEXES).put(o);l.onerror=()=>i(l.error),c.oncomplete=()=>s();})}async loadIndex(e){let t=this.ensureOpen();return new Promise((n,o)=>{let c=t.transaction(h.INDEXES,"readonly").objectStore(h.INDEXES).get(e);c.onerror=()=>o(c.error),c.onsuccess=()=>{let a=c.result;if(!a){n(null);return}try{n(JSON.parse(a.data));}catch{n(null);}};})}async deleteIndex(e){let t=this.ensureOpen();return new Promise((n,o)=>{let s=t.transaction(h.INDEXES,"readwrite"),c=s.objectStore(h.INDEXES).delete(e);c.onerror=()=>o(c.error),s.oncomplete=()=>n();})}async createCollection(e){let t=this.ensureOpen(),n={id:e.id,name:e.name,dimensions:e.dimensions,createdAt:e.createdAt};return new Promise((o,s)=>{let i=t.transaction(h.COLLECTIONS,"readwrite"),a=i.objectStore(h.COLLECTIONS).put(n);a.onerror=()=>s(a.error),i.oncomplete=()=>o();})}async getCollection(e){let t=this.ensureOpen();return new Promise((n,o)=>{let c=t.transaction(h.COLLECTIONS,"readonly").objectStore(h.COLLECTIONS).get(e);c.onerror=()=>o(c.error),c.onsuccess=()=>{let a=c.result;if(!a){n(null);return}n({id:a.id,name:a.name,dimensions:a.dimensions,createdAt:a.createdAt});};})}async getCollectionByName(e){let t=this.ensureOpen();return new Promise((n,o)=>{let a=t.transaction(h.COLLECTIONS,"readonly").objectStore(h.COLLECTIONS).index("name").get(e);a.onerror=()=>o(a.error),a.onsuccess=()=>{let l=a.result;if(!l){n(null);return}n({id:l.id,name:l.name,dimensions:l.dimensions,createdAt:l.createdAt});};})}async getAllCollections(){let e=this.ensureOpen();return new Promise((t,n)=>{let i=e.transaction(h.COLLECTIONS,"readonly").objectStore(h.COLLECTIONS).getAll();i.onerror=()=>n(i.error),i.onsuccess=()=>{let c=i.result;t(c.map(a=>({id:a.id,name:a.name,dimensions:a.dimensions,createdAt:a.createdAt})));};})}async deleteCollection(e){let t=this.ensureOpen();return new Promise((n,o)=>{let s=t.transaction(h.COLLECTIONS,"readwrite"),c=s.objectStore(h.COLLECTIONS).delete(e);c.onerror=()=>o(c.error),s.oncomplete=()=>n();})}async clear(){let e=this.ensureOpen(),t=[h.DOCUMENTS,h.VECTORS,h.INDEXES,h.COLLECTIONS];return new Promise((n,o)=>{let s=e.transaction(t,"readwrite");for(let i of t)s.objectStore(i).clear();s.onerror=()=>o(s.error),s.oncomplete=()=>n();})}async clearCollection(e){let t=this.ensureOpen(),o=(await this.getAllDocuments(e)).map(a=>a.id),s=t.transaction([h.DOCUMENTS,h.VECTORS],"readwrite"),i=s.objectStore(h.DOCUMENTS),c=s.objectStore(h.VECTORS);for(let a of o)i.delete(a),c.delete(a);await new Promise((a,l)=>{s.onerror=()=>l(s.error),s.oncomplete=()=>a();}),await this.deleteIndex(e);}async estimateSize(){return navigator.storage&&navigator.storage.estimate?(await navigator.storage.estimate()).usage??0:0}};var le=class{documents=new Map;vectors=new Map;indexes=new Map;collections=new Map;async open(){}async close(){}async addDocument(e){this.documents.set(e.id,{...e});}async getDocument(e){let t=this.documents.get(e);return t?{...t}:null}async deleteDocument(e){this.documents.delete(e);}async getAllDocuments(e){let t=[];for(let n of this.documents.values())n.collectionId===e&&t.push({...n});return t}async countDocuments(e){let t=0;for(let n of this.documents.values())n.collectionId===e&&t++;return t}async addVector(e){this.vectors.set(e.id,{id:e.id,collectionId:e.collectionId,vector:new Float32Array(e.vector)});}async getVector(e){let t=this.vectors.get(e);return t?new Float32Array(t.vector):null}async deleteVector(e){this.vectors.delete(e);}async getAllVectors(e){let t=new Map;for(let n of this.vectors.values())n.collectionId===e&&t.set(n.id,new Float32Array(n.vector));return t}async saveIndex(e,t){this.indexes.set(e,JSON.parse(JSON.stringify(t)));}async loadIndex(e){let t=this.indexes.get(e);return t?JSON.parse(JSON.stringify(t)):null}async deleteIndex(e){this.indexes.delete(e);}async createCollection(e){this.collections.set(e.id,{...e});}async getCollection(e){let t=this.collections.get(e);return t?{...t}:null}async getCollectionByName(e){for(let t of this.collections.values())if(t.name===e)return {...t};return null}async getAllCollections(){return Array.from(this.collections.values()).map(e=>({...e}))}async deleteCollection(e){this.collections.delete(e);}async clear(){this.documents.clear(),this.vectors.clear(),this.indexes.clear(),this.collections.clear();}async clearCollection(e){for(let[t,n]of this.documents)n.collectionId===e&&this.documents.delete(t);for(let[t,n]of this.vectors)n.collectionId===e&&this.vectors.delete(t);this.indexes.delete(e);}async estimateSize(){let e=0;for(let t of this.vectors.values())e+=t.vector.byteLength;return e}};function lt(r,e){return r==="memory"?new le:new ce(e)}function de(r,e){if(!e||Object.keys(e).length===0)return true;if(!r)return false;for(let[t,n]of Object.entries(e)){let o=r[t];if(!rs(o,n))return false}return true}function rs(r,e){if(e===null)return r===null;if(typeof e=="object"&&e!==null){let t=e;if("$in"in t)return t.$in.includes(r);if("$nin"in t)return !t.$nin.includes(r);if("$gt"in t)return typeof r=="number"&&r>t.$gt;if("$gte"in t)return typeof r=="number"&&r>=t.$gte;if("$lt"in t)return typeof r=="number"&&r<t.$lt;if("$lte"in t)return typeof r=="number"&&r<=t.$lte;if("$ne"in t)return r!==t.$ne;if("$exists"in t){let n=t.$exists,o=r!==void 0;return n?o:!o}return JSON.stringify(r)===JSON.stringify(e)}return r===e}function ns(r,e){return !e||Object.keys(e).length===0?r:r.filter(t=>de(t.metadata,e))}var $=class r{dbName;lockPrefix;constructor(e){this.dbName=e,this.lockPrefix=`vectordb_${e}_`;}static isSupported(){return typeof navigator<"u"&&"locks"in navigator}getLockName(e){return `${this.lockPrefix}${e}`}async withLock(e,t,n={}){if(!r.isSupported())return t();let o=this.getLockName(e),i={mode:n.mode??"exclusive",ifAvailable:n.ifAvailable,signal:n.signal};return new Promise((c,a)=>{let l=null,u=null;n.timeout&&n.timeout>0&&(u=new AbortController,i.signal=i.signal?os(i.signal,u.signal):u.signal,l=setTimeout(()=>{u?.abort(),a(new Error(`Lock timeout: ${e}`));},n.timeout)),navigator.locks.request(o,i,async()=>{try{let d=await t();c(d);}catch(d){a(d);}finally{l&&clearTimeout(l);}}).catch(d=>{l&&clearTimeout(l),d.name==="AbortError"?n.ifAvailable?a(new Error(`Lock not available: ${e}`)):a(new Error(`Lock aborted: ${e}`)):a(d);});})}async withReadLock(e,t){return this.withLock(e,t,{mode:"shared"})}async withWriteLock(e,t){return this.withLock(e,t,{mode:"exclusive"})}async tryLock(e,t,n="exclusive"){if(!r.isSupported())return t();let o=this.getLockName(e);return new Promise((s,i)=>{navigator.locks.request(o,{mode:n,ifAvailable:true},async c=>{if(!c){s(null);return}try{let a=await t();s(a);}catch(a){i(a);}}).catch(i);})}async getLockState(){if(!r.isSupported())return {held:[],pending:[]};let e=await navigator.locks.query(),t=this.lockPrefix;return {held:(e.held??[]).filter(n=>n.name?.startsWith(t)).map(n=>(n.name??"").replace(t,"")),pending:(e.pending??[]).filter(n=>n.name?.startsWith(t)).map(n=>(n.name??"").replace(t,""))}}};function os(...r){let e=new AbortController;for(let t of r){if(t.aborted){e.abort();break}t.addEventListener("abort",()=>e.abort(),{once:true});}return e.signal}var Ce=null;function Re(r){return (!Ce||Ce.dbName!==r)&&(Ce=new $(r)),Ce}function ss(){return `${Date.now()}-${Math.random().toString(36).substring(2,9)}`}var W=class r{channel=null;dbName;tabId;listeners=new Map;isLeader=false;leaderHeartbeatInterval=null;constructor(e){this.dbName=e,this.tabId=ss(),typeof BroadcastChannel<"u"&&(this.channel=new BroadcastChannel(`vectordb_${e}`),this.channel.onmessage=this.handleMessage.bind(this));}static isSupported(){return typeof BroadcastChannel<"u"}getTabId(){return this.tabId}getIsLeader(){return this.isLeader}handleMessage(e){let t=e.data;if(t.tabId===this.tabId)return;let n=this.listeners.get(t.type);if(n)for(let s of n)try{s(t);}catch(i){console.error("Broadcast listener error:",i);}let o=this.listeners.get("*");if(o)for(let s of o)try{s(t);}catch(i){console.error("Broadcast listener error:",i);}}send(e,t={}){if(!this.channel)return;let n={type:e,dbName:this.dbName,timestamp:Date.now(),tabId:this.tabId,...t};this.channel.postMessage(n);}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{this.listeners.get(e)?.delete(t);}}onAny(e){return this.on("*",e)}notifyDocumentAdded(e,t){this.send("document_added",{collectionId:e,documentId:t});}notifyDocumentUpdated(e,t){this.send("document_updated",{collectionId:e,documentId:t});}notifyDocumentDeleted(e,t){this.send("document_deleted",{collectionId:e,documentId:t});}notifyDocumentsDeleted(e,t){this.send("documents_deleted",{collectionId:e,documentIds:t});}notifyCollectionCleared(e){this.send("collection_cleared",{collectionId:e});}notifyDatabaseCleared(){this.send("database_cleared");}notifyIndexUpdated(e){this.send("index_updated",{collectionId:e});}async electLeader(){if(!r.isSupported())return this.isLeader=true,true;let e=`vectordb_${this.dbName}_leader`;try{let t=localStorage.getItem(e),n=Date.now();if(!t)localStorage.setItem(e,JSON.stringify({tabId:this.tabId,timestamp:n})),this.isLeader=!0;else {let{tabId:o,timestamp:s}=JSON.parse(t);n-s>1e4?(localStorage.setItem(e,JSON.stringify({tabId:this.tabId,timestamp:n})),this.isLeader=!0):o===this.tabId&&(this.isLeader=!0);}return this.isLeader&&(this.startLeaderHeartbeat(),this.send("leader_elected")),this.isLeader}catch{return this.isLeader=true,true}}startLeaderHeartbeat(){if(this.leaderHeartbeatInterval)return;let e=`vectordb_${this.dbName}_leader`;this.leaderHeartbeatInterval=setInterval(()=>{if(this.isLeader)try{localStorage.setItem(e,JSON.stringify({tabId:this.tabId,timestamp:Date.now()})),this.send("leader_ping");}catch{}},5e3);}resignLeadership(){if(!this.isLeader)return;this.isLeader=false,this.leaderHeartbeatInterval&&(clearInterval(this.leaderHeartbeatInterval),this.leaderHeartbeatInterval=null);let e=`vectordb_${this.dbName}_leader`;try{let t=localStorage.getItem(e);if(t){let{tabId:n}=JSON.parse(t);n===this.tabId&&localStorage.removeItem(e);}}catch{}}close(){this.resignLeadership(),this.channel&&(this.channel.close(),this.channel=null),this.listeners.clear();}};function Hr(r){return new W(r)}var dt=class r{storage;index=null;collectionId;collectionName;dimensions;config;initialized=false;lockManager=null;broadcaster=null;constructor(e,t="default",n){this.config=e,this.dimensions=e.dimensions,this.collectionName=t,this.collectionId=t,this.storage=n??lt(e.storage??"indexeddb",e.name);let o={...oe.sync,...e.sync};o.enableLocking&&e.storage!=="memory"&&(this.lockManager=new $(e.name)),o.enableBroadcast&&e.storage!=="memory"&&(this.broadcaster=new W(e.name));}async initialize(){if(this.initialized)return;await this.storage.open();let e=await this.storage.getCollectionByName(this.collectionName);if(!e)e={id:this.collectionId,name:this.collectionName,dimensions:this.dimensions,createdAt:Date.now()},await this.storage.createCollection(e);else if(this.collectionId=e.id,e.dimensions!==this.dimensions)throw new Error(`Dimension mismatch: expected ${this.dimensions}, stored collection has ${e.dimensions}`);let t=await this.storage.loadIndex(this.collectionId),n=await this.storage.getAllVectors(this.collectionId);if(t)this.index=L.deserialize(t,n,this.config.indexOptions);else {this.index=new L(this.dimensions,this.config.indexOptions);for(let[o,s]of n)this.index.add(o,s);}this.initialized=true;}ensureInitialized(){if(!this.initialized)throw new Error("Database not initialized. Call initialize() or use createVectorDB().")}async saveIndex(){if(!this.index)return;let e=this.index.serialize();await this.storage.saveIndex(this.collectionId,e);}async add(e){if(this.ensureInitialized(),!e.id)throw new Error("Document must have an id");if(!e.vector||!(e.vector instanceof Float32Array))throw new Error("Document must have a Float32Array vector");if(e.vector.length!==this.dimensions)throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${e.vector.length}`);let t=async()=>{let n=Date.now(),o={id:e.id,collectionId:this.collectionId,metadata:e.metadata,createdAt:n,updatedAt:n};await this.storage.addDocument(o),await this.storage.addVector({id:e.id,collectionId:this.collectionId,vector:e.vector}),this.index.add(e.id,e.vector),await this.saveIndex(),this.broadcaster?.notifyDocumentAdded(this.collectionId,e.id);};this.lockManager?await this.lockManager.withWriteLock(this.collectionId,t):await t();}async addMany(e,t){this.ensureInitialized();let n=t?.batchSize??100,o=e.length,s=0;for(let i=0;i<e.length;i+=n){let c=e.slice(i,i+n);for(let a of c){if(!a.id)throw new Error("All documents must have an id");if(!a.vector||!(a.vector instanceof Float32Array))throw new Error("All documents must have a Float32Array vector");if(a.vector.length!==this.dimensions)throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${a.vector.length}`);let l=Date.now();await this.storage.addDocument({id:a.id,collectionId:this.collectionId,metadata:a.metadata,createdAt:l,updatedAt:l}),await this.storage.addVector({id:a.id,collectionId:this.collectionId,vector:a.vector}),this.index.add(a.id,a.vector);}s+=c.length,t?.onProgress?.(s,o);}await this.saveIndex();}async search(e,t){if(this.ensureInitialized(),e.length!==this.dimensions)throw new Error(`Query vector dimension mismatch: expected ${this.dimensions}, got ${e.length}`);let n=t?.k??10,o=t?.threshold,s=t?.filter,i=t?.includeVectors??false,c=s?n*10:n,a=this.index.search(e,c),l=[];for(let u of a){if(o!==void 0&&u.score<o)continue;let d=await this.storage.getDocument(u.id);if(!d||s&&!de(d.metadata,s))continue;let m={id:u.id,score:u.score,metadata:d.metadata};if(i&&(m.vector=await this.storage.getVector(u.id)??void 0),l.push(m),l.length>=n)break}return l}async get(e){this.ensureInitialized();let t=await this.storage.getDocument(e);if(!t||t.collectionId!==this.collectionId)return null;let n=await this.storage.getVector(e);return n?{id:t.id,vector:n,metadata:t.metadata}:null}async update(e,t){this.ensureInitialized();let n=async()=>{let o=await this.storage.getDocument(e);if(!o||o.collectionId!==this.collectionId)throw new Error(`Document not found: ${e}`);let s=Date.now();if(t.metadata!==void 0&&await this.storage.addDocument({...o,metadata:t.metadata,updatedAt:s}),t.vector!==void 0){if(t.vector.length!==this.dimensions)throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${t.vector.length}`);await this.storage.addVector({id:e,collectionId:this.collectionId,vector:t.vector}),this.index.add(e,t.vector),await this.saveIndex();}this.broadcaster?.notifyDocumentUpdated(this.collectionId,e);};this.lockManager?await this.lockManager.withWriteLock(this.collectionId,n):await n();}async delete(e){this.ensureInitialized();let t=async()=>{await this.storage.deleteDocument(e),await this.storage.deleteVector(e),this.index.delete(e),await this.saveIndex(),this.broadcaster?.notifyDocumentDeleted(this.collectionId,e);};this.lockManager?await this.lockManager.withWriteLock(this.collectionId,t):await t();}async deleteMany(e){this.ensureInitialized();for(let t of e)await this.storage.deleteDocument(t),await this.storage.deleteVector(t),this.index.delete(t);await this.saveIndex();}async deleteWhere(e){this.ensureInitialized();let t=await this.storage.getAllDocuments(this.collectionId),n=0;for(let o of t)de(o.metadata,e)&&(await this.storage.deleteDocument(o.id),await this.storage.deleteVector(o.id),this.index.delete(o.id),n++);return n>0&&await this.saveIndex(),n}collection(e){let t=new r(this.config,e,this.storage);return new Proxy(t,{get:(n,o)=>{let i=n[o];return typeof i=="function"&&o!=="collection"?async(...c)=>(await t.initialize(),i.apply(n,c)):i}})}async stats(){this.ensureInitialized();let e=await this.storage.getAllCollections(),t=0;for(let o of e)t+=await this.storage.countDocuments(o.id);let n=await this.storage.estimateSize();return {count:t,collections:e.map(o=>o.name),sizeBytes:n,version:1}}async clear(){this.ensureInitialized();let e=async()=>{await this.storage.clearCollection(this.collectionId),this.index=new L(this.dimensions,this.config.indexOptions),this.broadcaster?.notifyCollectionCleared(this.collectionId);};this.lockManager?await this.lockManager.withWriteLock(this.collectionId,e):await e();}async close(){this.index&&await this.saveIndex(),await this.storage.close(),this.broadcaster?.close(),this.broadcaster=null,this.initialized=false;}getLockManager(){return this.lockManager}getBroadcaster(){return this.broadcaster}async export(e){this.ensureInitialized();let t=e?.format??"json",n=e?.collections,o=e?.includeVectors??true,s={version:1,collections:[]},i=await this.storage.getAllCollections(),c=n?i.filter(a=>n.includes(a.name)):i;for(let a of c){let l=await this.storage.getAllDocuments(a.id),u={name:a.name,dimensions:a.dimensions,documents:[]};for(let d of l){let m={id:d.id,metadata:d.metadata};if(o){let p=await this.storage.getVector(d.id);p&&(m.vector=Array.from(p));}u.documents.push(m);}s.collections.push(u);}return t==="json"?new Blob([JSON.stringify(s,null,2)],{type:"application/json"}):new Blob([JSON.stringify(s)],{type:"application/octet-stream"})}async import(e,t){this.ensureInitialized();let n=t?.mode??"merge",o=await e.text(),s=JSON.parse(o);n==="replace"&&(await this.storage.clear(),this.index=new L(this.dimensions,this.config.indexOptions));let i=0,c=0;for(let a of s.collections)c+=a.documents.length;for(let a of s.collections){let l=await this.storage.getCollectionByName(a.name);l||(l={id:a.name,name:a.name,dimensions:a.dimensions,createdAt:Date.now()},await this.storage.createCollection(l));for(let u of a.documents){if(u.vector){let d=new Float32Array(u.vector),m=Date.now();await this.storage.addDocument({id:u.id,collectionId:l.id,metadata:u.metadata,createdAt:m,updatedAt:m}),await this.storage.addVector({id:u.id,collectionId:l.id,vector:d}),l.id===this.collectionId&&this.index.add(u.id,d);}i++,t?.onProgress?.(i,c);}}await this.saveIndex();}};async function is(r){let e=new dt({...r,storage:r.storage??oe.storage,indexOptions:{...oe.indexOptions,...r.indexOptions}});return await e.initialize(),e}var Oe=class r{worker;messageId=0;pendingRequests=new Map;collectionId;constructor(e,t){this.worker=e,this.collectionId=t,this.worker.onmessage=n=>{let o=n.data;if("type"in o&&o.type==="progress"){let c=this.pendingRequests.get(o.id);c?.onProgress&&c.onProgress(o.payload.completed,o.payload.total);return}let s=o,i=this.pendingRequests.get(s.id);i&&(this.pendingRequests.delete(s.id),s.success?i.resolve(s.result):i.reject(new Error(s.error??"Unknown error")));},this.worker.onerror=n=>{console.error("Worker error:",n);};}async send(e,t,n){let o=++this.messageId;return new Promise((s,i)=>{this.pendingRequests.set(o,{resolve:s,reject:i,onProgress:n});let c={id:o,type:e,payload:t,collectionId:this.collectionId};this.worker.postMessage(c);})}async initialize(e){await this.send("init",e);}async add(e){await this.send("add",{id:e.id,vector:Array.from(e.vector),metadata:e.metadata});}async addMany(e,t){await this.send("addMany",{documents:e.map(n=>({id:n.id,vector:Array.from(n.vector),metadata:n.metadata})),options:t?{batchSize:t.batchSize}:void 0},t?.onProgress);}async search(e,t){return this.send("search",{vector:Array.from(e),options:t})}async get(e){let t=await this.send("get",e);return t?{id:t.id,vector:new Float32Array(t.vector),metadata:t.metadata}:null}async update(e,t){await this.send("update",{docId:e,updates:{vector:t.vector?Array.from(t.vector):void 0,metadata:t.metadata}});}async delete(e){await this.send("delete",e);}async deleteMany(e){await this.send("deleteMany",e);}async deleteWhere(e){return this.send("deleteWhere",e)}collection(e){return new r(this.worker,e)}async stats(){return this.send("stats",null)}async clear(){await this.send("clear",null);}async close(){await this.send("close",null),this.worker.terminate();}async export(e){let t=await this.send("export",e);return new Blob([t.buffer],{type:t.type})}async import(e,t){let n=await e.arrayBuffer();await this.send("import",{buffer:n,type:e.type,options:t});}getLockManager(){return null}getBroadcaster(){return null}};async function as(r,e){let t=new Worker(e,{type:"module"}),n=new Oe(t);return await n.initialize(r),n}var ut=null;function Kr(r,e){let t=e?.separator??":";ut={resolve(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.embedding(i)}};}function pt(r){if(typeof r!="string")return r;if(!ut)throw new Error("No global provider configured. Call setGlobalEmbeddingProvider() first, or pass a model object instead of a string.");return ut.resolve(r)}async function Ae(r){let{model:e,value:t,abortSignal:n,maxRetries:o=2,headers:s,providerOptions:i}=r,c=pt(e);n?.throwIfAborted();let a;for(let l=0;l<=o;l++){n?.throwIfAborted();try{let u=await c.doEmbed({values:[t],abortSignal:n,headers:s,providerOptions:i});return {embedding:u.embeddings[0],usage:u.usage,response:u.response}}catch(u){if(a=u,n?.aborted)throw new Error("Embedding was cancelled",{cause:a});if(l===o)break}}throw new Error(`Embedding failed after ${o+1} attempts`,{cause:a})}async function Zr(r){let{model:e,values:t,abortSignal:n,maxRetries:o=2,headers:s,providerOptions:i}=r,c=pt(e);if(n?.throwIfAborted(),!c.maxEmbeddingsPerCall||t.length<=c.maxEmbeddingsPerCall){let m=await mt(c,t,{abortSignal:n,maxRetries:o,headers:s,providerOptions:i});return {embeddings:m.embeddings,usage:m.usage,response:m.response}}let a=[],l=0,u={modelId:c.modelId,timestamp:new Date},d=c.maxEmbeddingsPerCall;for(let m=0;m<t.length;m+=d){n?.throwIfAborted();let p=t.slice(m,m+d),g=await mt(c,p,{abortSignal:n,maxRetries:o,headers:s,providerOptions:i});a.push(...g.embeddings),l+=g.usage.tokens,u=g.response;}return {embeddings:a,usage:{tokens:l},response:u}}async function*Jr(r){let{model:e,values:t,batchSize:n=32,abortSignal:o,maxRetries:s=2,headers:i,providerOptions:c,onBatch:a}=r,l=pt(e);o?.throwIfAborted();let u=t.length;for(let d=0;d<t.length;d+=n){o?.throwIfAborted();let m=t.slice(d,d+n),p=await mt(l,m,{abortSignal:o,maxRetries:s,headers:i,providerOptions:c});for(let g=0;g<p.embeddings.length;g++)yield {embedding:p.embeddings[g],index:d+g};a?.({index:d,count:p.embeddings.length,total:u,usage:p.usage});}}async function mt(r,e,t){let{abortSignal:n,maxRetries:o,headers:s,providerOptions:i}=t,c;for(let a=0;a<=o;a++){n?.throwIfAborted();try{return await r.doEmbed({values:e,abortSignal:n,headers:s,providerOptions:i})}catch(l){if(c=l,n?.aborted)throw new Error("Embedding was cancelled",{cause:c});if(a===o)break}}throw new Error(`Embedding failed after ${o+1} attempts`,{cause:c})}async function gt(r){let{db:e,model:t,query:n,k:o=10,filter:s,threshold:i,abortSignal:c,headers:a,providerOptions:l}=r;c?.throwIfAborted();let u=performance.now(),{embedding:d,usage:m}=await Ae({model:t,value:n,abortSignal:c,headers:a,providerOptions:l}),p=performance.now()-u,g=performance.now(),f=await e.search(d,{k:o,filter:s,threshold:i}),b=performance.now()-g;return {results:f.map(y=>({id:y.id,score:y.score,text:cs(y.metadata),metadata:y.metadata})),usage:{embeddingTokens:m.tokens,embedDurationMs:p,searchDurationMs:b}}}function cs(r){if(!r)return;let e=["text","content","body","__text","pageContent"];for(let t of e){let n=r[t];if(typeof n=="string")return n}}async function*Xr(r){let{results:e}=await gt(r);for(let t of e)yield t;}function Yr(r){let{model:e,middleware:t}=r;return {modelId:e.modelId,provider:e.provider,dimensions:e.dimensions,maxEmbeddingsPerCall:e.maxEmbeddingsPerCall,supportsParallelCalls:e.supportsParallelCalls,async doEmbed(n){let{values:o}=n,{abortSignal:s,headers:i,providerOptions:c}=n;t.transformParams&&(o=(await t.transformParams({values:o})).values);let a=()=>e.doEmbed({values:o,abortSignal:s,headers:i,providerOptions:c});return t.wrapEmbed?t.wrapEmbed({doEmbed:a,values:o,model:e}):a()}}}function en(r){return r.length===0?{}:r.length===1?r[0]:{transformParams:async e=>{let t=e;for(let n of r)n.transformParams&&(t=await n.transformParams(t));return t},wrapEmbed:async({doEmbed:e,values:t,model:n})=>{let o=e,s=[...r].reverse();for(let i of s)if(i.wrapEmbed){let c=o;o=()=>i.wrapEmbed({doEmbed:c,values:t,model:n});}return o()}}}var ue=null;function tn(r,e){let t=e?.separator??":";ue={resolveClassifier(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.classifier(i)},resolveZeroShot(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.zeroShot(i)}};}function rn(r){if(typeof r!="string")return r;if(!ue)throw new Error("No global provider configured. Call setGlobalClassificationProvider() first, or pass a model object instead of a string.");return ue.resolveClassifier(r)}function ls(r){if(typeof r!="string")return r;if(!ue)throw new Error("No global provider configured. Call setGlobalClassificationProvider() first, or pass a model object instead of a string.");return ue.resolveZeroShot(r)}async function nn(r){let{model:e,text:t,abortSignal:n,maxRetries:o=2,headers:s,providerOptions:i}=r,c=rn(e);n?.throwIfAborted();let a;for(let l=0;l<=o;l++){n?.throwIfAborted();try{let u=await c.doClassify({texts:[t],abortSignal:n,headers:s,providerOptions:i}),d=u.results[0];return {label:d.label,score:d.score,allScores:d.allScores,usage:u.usage,response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,n?.aborted)throw new Error("Classification was cancelled",{cause:a});if(l===o)break}}throw new Error(`Classification failed after ${o+1} attempts`,{cause:a})}async function on(r){let{model:e,texts:t,abortSignal:n,maxRetries:o=2,headers:s,providerOptions:i}=r,c=rn(e);n?.throwIfAborted();let a=await ds(c,t,{abortSignal:n,maxRetries:o,headers:s,providerOptions:i});return {results:a.results,usage:a.usage,response:{modelId:c.modelId,timestamp:new Date}}}async function sn(r){let{model:e,text:t,candidateLabels:n,multiLabel:o,abortSignal:s,maxRetries:i=2,headers:c,providerOptions:a}=r,l=ls(e);s?.throwIfAborted();let u;for(let d=0;d<=i;d++){s?.throwIfAborted();try{let m=await l.doClassifyZeroShot({texts:[t],candidateLabels:n,multiLabel:o,abortSignal:s,headers:c,providerOptions:a}),p=m.results[0];return {labels:p.labels,scores:p.scores,usage:m.usage,response:{modelId:l.modelId,timestamp:new Date}}}catch(m){if(u=m,s?.aborted)throw new Error("Zero-shot classification was cancelled",{cause:u});if(d===i)break}}throw new Error(`Zero-shot classification failed after ${i+1} attempts`,{cause:u})}async function ds(r,e,t){let{abortSignal:n,maxRetries:o,headers:s,providerOptions:i}=t,c;for(let a=0;a<=o;a++){n?.throwIfAborted();try{return await r.doClassify({texts:e,abortSignal:n,headers:s,providerOptions:i})}catch(l){if(c=l,n?.aborted)throw new Error("Classification was cancelled",{cause:c});if(a===o)break}}throw new Error(`Classification failed after ${o+1} attempts`,{cause:c})}var ft=null;function an(r,e){let t=e?.separator??":";ft={resolve(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.ner(i)}};}function cn(r){if(typeof r!="string")return r;if(!ft)throw new Error("No global provider configured. Call setGlobalNERProvider() first, or pass a model object instead of a string.");return ft.resolve(r)}async function ln(r){let{model:e,text:t,abortSignal:n,maxRetries:o=2,headers:s,providerOptions:i}=r,c=cn(e);n?.throwIfAborted();let a;for(let l=0;l<=o;l++){n?.throwIfAborted();try{let u=await c.doExtract({texts:[t],abortSignal:n,headers:s,providerOptions:i});return {entities:u.results[0].entities,usage:u.usage,response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,n?.aborted)throw new Error("Entity extraction was cancelled",{cause:a});if(l===o)break}}throw new Error(`Entity extraction failed after ${o+1} attempts`,{cause:a})}async function dn(r){let{model:e,texts:t,abortSignal:n,maxRetries:o=2,headers:s,providerOptions:i}=r,c=cn(e);n?.throwIfAborted();let a=await us(c,t,{abortSignal:n,maxRetries:o,headers:s,providerOptions:i});return {results:a.results,usage:a.usage,response:{modelId:c.modelId,timestamp:new Date}}}async function us(r,e,t){let{abortSignal:n,maxRetries:o,headers:s,providerOptions:i}=t,c;for(let a=0;a<=o;a++){n?.throwIfAborted();try{return await r.doExtract({texts:e,abortSignal:n,headers:s,providerOptions:i})}catch(l){if(c=l,n?.aborted)throw new Error("Entity extraction was cancelled",{cause:c});if(a===o)break}}throw new Error(`Entity extraction failed after ${o+1} attempts`,{cause:c})}var ht=null;function un(r,e){let t=e?.separator??":";ht={resolve(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.reranker(i)}};}function ms(r){if(typeof r!="string")return r;if(!ht)throw new Error("No global provider configured. Call setGlobalRerankerProvider() first, or pass a model object instead of a string.");return ht.resolve(r)}async function mn(r){let{model:e,query:t,documents:n,topK:o,abortSignal:s,maxRetries:i=2,headers:c,providerOptions:a}=r,l=ms(e);s?.throwIfAborted();let u;for(let d=0;d<=i;d++){s?.throwIfAborted();try{let m=await l.doRerank({query:t,documents:n,topK:o,abortSignal:s,headers:c,providerOptions:a});return {results:m.results,usage:m.usage,response:{modelId:l.modelId,timestamp:new Date}}}catch(m){if(u=m,s?.aborted)throw new Error("Reranking was cancelled",{cause:u});if(d===i)break}}throw new Error(`Reranking failed after ${i+1} attempts`,{cause:u})}var me=null;function pn(r,e){let t=e?.separator??":";me={resolveClassifier(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.imageClassifier(i)},resolveZeroShot(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.zeroShotImageClassifier(i)}};}function ps(r){if(typeof r!="string")return r;if(!me)throw new Error("No global provider configured. Call setGlobalImageClassificationProvider() first, or pass a model object instead of a string.");return me.resolveClassifier(r)}function gs(r){if(typeof r!="string")return r;if(!me)throw new Error("No global provider configured. Call setGlobalImageClassificationProvider() first, or pass a model object instead of a string.");return me.resolveZeroShot(r)}async function gn(r){let{model:e,image:t,topK:n=5,abortSignal:o,maxRetries:s=2,providerOptions:i}=r,c=ps(e);o?.throwIfAborted();let a;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=await c.doClassify({images:[t],topK:n,abortSignal:o,providerOptions:i});return {predictions:u.results[0],usage:u.usage,response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted)throw new Error("Image classification was cancelled",{cause:a});if(l===s)break}}throw new Error(`Image classification failed after ${s+1} attempts`,{cause:a})}async function fn(r){let{model:e,image:t,candidateLabels:n,abortSignal:o,maxRetries:s=2,providerOptions:i}=r,c=gs(e);o?.throwIfAborted();let a;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=await c.doClassifyZeroShot({images:[t],candidateLabels:n,abortSignal:o,providerOptions:i}),d=u.results[0];return {labels:d.labels,scores:d.scores,usage:u.usage,response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted)throw new Error("Zero-shot image classification was cancelled",{cause:a});if(l===s)break}}throw new Error(`Zero-shot image classification failed after ${s+1} attempts`,{cause:a})}var yt=null;function hn(r,e){let t=e?.separator??":";yt={resolve(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.captioner(i)}};}function fs(r){if(typeof r!="string")return r;if(!yt)throw new Error("No global provider configured. Call setGlobalImageCaptionProvider() first, or pass a model object instead of a string.");return yt.resolve(r)}async function yn(r){let{model:e,image:t,maxLength:n,abortSignal:o,maxRetries:s=2,providerOptions:i}=r,c=fs(e);o?.throwIfAborted();let a;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=await c.doCaption({images:[t],maxLength:n,abortSignal:o,providerOptions:i});return {caption:u.captions[0],usage:u.usage,response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted)throw new Error("Image captioning was cancelled",{cause:a});if(l===s)break}}throw new Error(`Image captioning failed after ${s+1} attempts`,{cause:a})}var bt=null;function bn(r){bt=r;}function hs(r){if(typeof r!="string")return r;if(!bt)throw new Error("No global segmentation provider configured. Either pass a SegmentationModel object or call setGlobalSegmentationProvider() first.");return bt(r)}async function wn(r){let{model:e,image:t,abortSignal:n,maxRetries:o=2,providerOptions:s}=r;n?.throwIfAborted();let i=hs(e),c=null;for(let a=0;a<=o;a++){n?.throwIfAborted();try{let l=performance.now(),u=await i.doSegment({images:[t],abortSignal:n,providerOptions:s}),d=performance.now()-l;return {masks:u.results[0].masks,usage:{...u.usage,durationMs:d},response:{modelId:i.modelId,timestamp:new Date}}}catch(l){if(c=l,n?.aborted||a===o)throw l;let u=Math.min(1e3*Math.pow(2,a),1e4);await new Promise(d=>setTimeout(d,u));}}throw c||new Error("Image segmentation failed")}var wt=null;function xn(r){wt=r;}function ys(r){if(typeof r!="string")return r;if(!wt)throw new Error("No global object detection provider configured. Either pass an ObjectDetectionModel object or call setGlobalObjectDetectionProvider() first.");return wt(r)}async function Mn(r){let{model:e,image:t,threshold:n=.5,abortSignal:o,maxRetries:s=2,providerOptions:i}=r;o?.throwIfAborted();let c=ys(e),a=null;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=performance.now(),d=await c.doDetect({images:[t],threshold:n,abortSignal:o,providerOptions:i}),m=performance.now()-u;return {objects:d.results[0].objects,usage:{...d.usage,durationMs:m},response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted||l===s)throw u;let d=Math.min(1e3*Math.pow(2,l),1e4);await new Promise(m=>setTimeout(m,d));}}throw a||new Error("Object detection failed")}var xt=null;function vn(r){xt=r;}function bs(r){if(typeof r!="string")return r;if(!xt)throw new Error("No global image feature provider configured. Either pass an ImageFeatureModel object or call setGlobalImageFeatureProvider() first.");return xt(r)}async function Sn(r){let{model:e,image:t,abortSignal:n,maxRetries:o=2,providerOptions:s}=r;n?.throwIfAborted();let i=bs(e),c=null;for(let a=0;a<=o;a++){n?.throwIfAborted();try{let l=performance.now(),u=await i.doExtract({images:[t],abortSignal:n,providerOptions:s}),d=performance.now()-l;return {features:u.features[0],usage:{...u.usage,durationMs:d},response:{modelId:i.modelId,timestamp:new Date}}}catch(l){if(c=l,n?.aborted||a===o)throw l;let u=Math.min(1e3*Math.pow(2,a),1e4);await new Promise(d=>setTimeout(d,u));}}throw c||new Error("Image feature extraction failed")}var Mt=null;function kn(r){Mt=r;}function ws(r){if(typeof r!="string")return r;if(!Mt)throw new Error("No global image-to-image provider configured. Either pass an ImageToImageModel object or call setGlobalImageToImageProvider() first.");return Mt(r)}async function En(r){let{model:e,image:t,scale:n=2,abortSignal:o,maxRetries:s=2,providerOptions:i}=r;o?.throwIfAborted();let c=ws(e),a=null;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=performance.now(),d=await c.doTransform({images:[t],scale:n,abortSignal:o,providerOptions:i}),m=performance.now()-u;return {image:d.images[0],usage:{...d.usage,durationMs:m},response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted||l===s)throw u;let d=Math.min(1e3*Math.pow(2,l),1e4);await new Promise(m=>setTimeout(m,d));}}throw a||new Error("Image upscaling failed")}var In=En;var vt=null;function Cn(r,e){let t=e?.separator??":";vt={resolve(n){let o=n.indexOf(t);if(o===-1)throw new Error(`Invalid model ID format: "${n}". Expected "provider${t}modelId" format.`);let s=n.slice(0,o),i=n.slice(o+1),c=r[s];if(!c)throw new Error(`Unknown provider: "${s}". Available providers: ${Object.keys(r).join(", ")}`);return c.speechToText(i)}};}function xs(r){if(typeof r!="string")return r;if(!vt)throw new Error("No global provider configured. Call setGlobalSTTProvider() first, or pass a model object instead of a string.");return vt.resolve(r)}async function Rn(r){let{model:e,audio:t,language:n,task:o,returnTimestamps:s,abortSignal:i,maxRetries:c=2,headers:a,providerOptions:l}=r,u=xs(e);i?.throwIfAborted();let d;for(let m=0;m<=c;m++){i?.throwIfAborted();try{let p=await u.doTranscribe({audio:t,language:n,task:o,returnTimestamps:s,abortSignal:i,headers:a,providerOptions:l});return {text:p.text,segments:p.segments,language:p.language,usage:p.usage,response:{modelId:u.modelId,timestamp:new Date}}}catch(p){if(d=p,i?.aborted)throw new Error("Transcription was cancelled",{cause:d});if(m===c)break}}throw new Error(`Transcription failed after ${c+1} attempts`,{cause:d})}var St=null;function On(r){St=r;}function Ms(r){if(typeof r!="string")return r;if(!St)throw new Error("No global TTS provider configured. Either pass a TextToSpeechModel object or call setGlobalTTSProvider() first.");return St(r)}async function An(r){let{model:e,text:t,voice:n,speed:o,pitch:s,abortSignal:i,maxRetries:c=2,providerOptions:a}=r;i?.throwIfAborted();let l=Ms(e),u=null;for(let d=0;d<=c;d++){i?.throwIfAborted();try{let m=performance.now(),p=await l.doSynthesize({text:t,voice:n,speed:o,pitch:s,abortSignal:i,providerOptions:a}),g=performance.now()-m;return {audio:p.audio,sampleRate:p.sampleRate,usage:{characterCount:p.usage.characterCount,durationMs:g},response:{modelId:l.modelId,timestamp:new Date}}}catch(m){if(u=m,i?.aborted||d===c)throw m;let p=Math.min(1e3*Math.pow(2,d),1e4);await new Promise(g=>setTimeout(g,p));}}throw u||new Error("Speech synthesis failed")}var kt=null;function Tn(r){kt=r;}function vs(r){if(typeof r!="string")return r;if(!kt)throw new Error("No global language model provider configured. Either pass a LanguageModel object or call setGlobalLanguageModelProvider() first.");return kt(r)}async function Dn(r){let{model:e,prompt:t,systemPrompt:n,messages:o,maxTokens:s=256,temperature:i=.7,topP:c=1,stopSequences:a,abortSignal:l,maxRetries:u=2,providerOptions:d}=r;l?.throwIfAborted();let m=vs(e),p=null;for(let g=0;g<=u;g++){l?.throwIfAborted();try{let f=performance.now(),b=await m.doGenerate({prompt:t,systemPrompt:n,messages:o,maxTokens:s,temperature:i,topP:c,stopSequences:a,abortSignal:l,providerOptions:d}),S=performance.now()-f;return {text:b.text,finishReason:b.finishReason,usage:{...b.usage,durationMs:S},response:{modelId:m.modelId,timestamp:new Date}}}catch(f){if(p=f,l?.aborted||g===u)throw f;let b=Math.min(1e3*Math.pow(2,g),1e4);await new Promise(S=>setTimeout(S,b));}}throw p||new Error("Generation failed")}function Ss(r){if(typeof r!="string")return r;throw new Error("No global language model provider configured. Either pass a LanguageModel object or call setGlobalLanguageModelProvider() first.");}async function Ln(r){let{model:e,prompt:t,systemPrompt:n,messages:o,maxTokens:s=256,temperature:i=.7,topP:c=1,stopSequences:a,abortSignal:l,providerOptions:u,onChunk:d}=r;l?.throwIfAborted();let m=Ss(e);if(!m.doStream)throw new Error(`Model ${m.modelId} does not support streaming. Use generateText() instead.`);let p={prompt:t,systemPrompt:n,messages:o,maxTokens:s,temperature:i,topP:c,stopSequences:a,abortSignal:l,providerOptions:u},g=m.doStream(p),f="",b=null,S,y,w,x,v=new Promise((E,I)=>{S=E,y=I;}),R=new Promise((E,I)=>{w=E,x=I;});async function*Ie(){try{let E=performance.now();for await(let I of g)if(l?.throwIfAborted(),f+=I.text,d&&d(I),I.done&&I.usage&&(b={...I.usage,durationMs:performance.now()-E}),yield I,I.done)break;S(f),w(b||{inputTokens:Math.ceil(t.length/4),outputTokens:Math.ceil(f.length/4),totalTokens:Math.ceil((t.length+f.length)/4),durationMs:performance.now()-E});}catch(E){throw y(E),x(E),E}}return {stream:Ie(),text:v,usage:R,response:{modelId:m.modelId,timestamp:new Date}}}var Et=null;function Fn(r){Et=r;}function ks(r){if(typeof r!="string")return r;if(!Et)throw new Error("No global translation provider configured. Either pass a TranslationModel object or call setGlobalTranslationProvider() first.");return Et(r)}async function Bn(r){let{model:e,text:t,sourceLanguage:n,targetLanguage:o,abortSignal:s,maxRetries:i=2,providerOptions:c}=r;s?.throwIfAborted();let a=ks(e),l=null;for(let u=0;u<=i;u++){s?.throwIfAborted();try{let d=performance.now(),m=await a.doTranslate({texts:[t],sourceLanguage:n,targetLanguage:o,abortSignal:s,providerOptions:c}),p=performance.now()-d;return {translation:m.translations[0],detectedLanguage:m.detectedLanguage,usage:{...m.usage,durationMs:p},response:{modelId:a.modelId,timestamp:new Date}}}catch(d){if(l=d,s?.aborted||u===i)throw d;let m=Math.min(1e3*Math.pow(2,u),1e4);await new Promise(p=>setTimeout(p,m));}}throw l||new Error("Translation failed")}var It=null;function Nn(r){It=r;}function Es(r){if(typeof r!="string")return r;if(!It)throw new Error("No global summarization provider configured. Either pass a SummarizationModel object or call setGlobalSummarizationProvider() first.");return It(r)}async function jn(r){let{model:e,text:t,maxLength:n=150,minLength:o=30,mode:s,abortSignal:i,maxRetries:c=2,providerOptions:a}=r;i?.throwIfAborted();let l=Es(e),u=null;for(let d=0;d<=c;d++){i?.throwIfAborted();try{let m=performance.now(),p=await l.doSummarize({texts:[t],maxLength:n,minLength:o,mode:s,abortSignal:i,providerOptions:a}),g=performance.now()-m;return {summary:p.summaries[0],usage:{...p.usage,durationMs:g},response:{modelId:l.modelId,timestamp:new Date}}}catch(m){if(u=m,i?.aborted||d===c)throw m;let p=Math.min(1e3*Math.pow(2,d),1e4);await new Promise(g=>setTimeout(g,p));}}throw u||new Error("Summarization failed")}var Ct=null;function zn(r){Ct=r;}function Is(r){if(typeof r!="string")return r;if(!Ct)throw new Error("No global fill-mask provider configured. Either pass a FillMaskModel object or call setGlobalFillMaskProvider() first.");return Ct(r)}async function $n(r){let{model:e,text:t,topK:n=5,abortSignal:o,maxRetries:s=2,providerOptions:i}=r;o?.throwIfAborted();let c=Is(e),a=null;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=performance.now(),d=await c.doFillMask({texts:[t],topK:n,abortSignal:o,providerOptions:i}),m=performance.now()-u;return {predictions:d.results[0],usage:{...d.usage,durationMs:m},response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted||l===s)throw u;let d=Math.min(1e3*Math.pow(2,l),1e4);await new Promise(m=>setTimeout(m,d));}}throw a||new Error("Fill-mask failed")}var Rt=null;function Wn(r){Rt=r;}function Cs(r){if(typeof r!="string")return r;if(!Rt)throw new Error("No global question answering provider configured. Either pass a QuestionAnsweringModel object or call setGlobalQuestionAnsweringProvider() first.");return Rt(r)}async function _n(r){let{model:e,question:t,context:n,topK:o=1,abortSignal:s,maxRetries:i=2,providerOptions:c}=r;s?.throwIfAborted();let a=Cs(e),l=null;for(let u=0;u<=i;u++){s?.throwIfAborted();try{let d=performance.now(),m=await a.doAnswer({questions:[{question:t,context:n}],topK:o,abortSignal:s,providerOptions:c}),p=performance.now()-d,g=m.results[0][0];return {answer:g.answer,score:g.score,start:g.start,end:g.end,allAnswers:o>1?m.results[0]:void 0,usage:{...m.usage,durationMs:p},response:{modelId:a.modelId,timestamp:new Date}}}catch(d){if(l=d,s?.aborted||u===i)throw d;let m=Math.min(1e3*Math.pow(2,u),1e4);await new Promise(p=>setTimeout(p,m));}}throw l||new Error("Question answering failed")}var Ot=null;function Vn(r){Ot=r;}function Rs(r){if(typeof r!="string")return r;if(!Ot)throw new Error("No global OCR provider configured. Either pass an OCRModel object or call setGlobalOCRProvider() first.");return Ot(r)}async function Un(r){let{model:e,image:t,languages:n,detectRegions:o=false,abortSignal:s,maxRetries:i=2,providerOptions:c}=r;s?.throwIfAborted();let a=Rs(e),l=null;for(let u=0;u<=i;u++){s?.throwIfAborted();try{let d=performance.now(),m=await a.doOCR({images:[t],languages:n,detectRegions:o,abortSignal:s,providerOptions:c}),p=performance.now()-d;return {text:m.texts[0],regions:m.regions?.[0],usage:{...m.usage,durationMs:p},response:{modelId:a.modelId,timestamp:new Date}}}catch(d){if(l=d,s?.aborted||u===i)throw d;let m=Math.min(1e3*Math.pow(2,u),1e4);await new Promise(p=>setTimeout(p,m));}}throw l||new Error("OCR failed")}var At=null;function qn(r){At=r;}function Os(r){if(typeof r!="string")return r;if(!At)throw new Error("No global document QA provider configured. Either pass a DocumentQAModel object or call setGlobalDocumentQAProvider() first.");return At(r)}async function Gn(r){let{model:e,document:t,question:n,abortSignal:o,maxRetries:s=2,providerOptions:i}=r;o?.throwIfAborted();let c=Os(e),a=null;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=performance.now(),d=await c.doAskDocument({document:t,questions:[n],abortSignal:o,providerOptions:i}),m=performance.now()-u,p=d.answers[0];return {answer:p.answer,score:p.score,usage:{...d.usage,durationMs:m},response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted||l===s)throw u;let d=Math.min(1e3*Math.pow(2,l),1e4);await new Promise(m=>setTimeout(m,d));}}throw a||new Error("Document QA failed")}function As(r){if(typeof r!="string")return r;throw new Error("No global table QA provider configured. Either pass a TableQAModel object or call setGlobalTableQAProvider() first.");}async function Hn(r){let{model:e,table:t,question:n,abortSignal:o,maxRetries:s=2,providerOptions:i}=r;o?.throwIfAborted();let c=As(e),a=null;for(let l=0;l<=s;l++){o?.throwIfAborted();try{let u=performance.now(),d=await c.doAskTable({table:t,questions:[n],abortSignal:o,providerOptions:i}),m=performance.now()-u,p=d.answers[0];return {answer:p.answer,cells:p.cells,aggregator:p.aggregator,score:p.score,usage:{...d.usage,durationMs:m},response:{modelId:c.modelId,timestamp:new Date}}}catch(u){if(a=u,o?.aborted||l===s)throw u;let d=Math.min(1e3*Math.pow(2,l),1e4);await new Promise(m=>setTimeout(m,d));}}throw a||new Error("Table QA failed")}var k={size:500,overlap:50,minSize:50,trim:true,keepSeparators:false},Tt=[`
2
+
3
+
4
+ `,`
5
+
6
+ `,`
7
+ `,". ","? ","! ","; ",", "," ",""],Q={k1:1.2,b:.75,minTokenLength:2,stemming:false},Dt=new Set(["a","an","and","are","as","at","be","by","for","from","has","he","in","is","it","its","of","on","or","that","the","to","was","were","will","with","the","this","but","they","have","had","what","when","where","who","which","why","how","all","each","every","both","few","more","most","other","some","such","no","nor","not","only","own","same","so","than","too","very","can","just","should","now","i","you","your","we","our","my","me","him","her"]),O={k:10,vectorWeight:.7,keywordWeight:.3,normalizeScores:true,threshold:0,includeVectors:false,fetchK:30},H={batchSize:100,idPrefix:"chunk",generateEmbeddings:false,buildBM25Index:false};function K(r,e={}){let{size:t=k.size,overlap:n=k.overlap,minSize:o=k.minSize,trim:s=k.trim,keepSeparators:i=k.keepSeparators,separators:c=Tt}=e;if(!r||r.length===0)return [];let a=s?r.trim():r;if(a.length===0)return [];if(a.length<=t)return [{text:a,start:0,end:r.length,index:0}];let l=Pt(a,c,t,i),u=Ls(l,t,n,o,s),d=Ns(a,u,s);return d.length===0&&a.length>0?Ts(a,t,n):d}function Ts(r,e,t){let n=[],o=Math.max(e-t,1);for(let s=0;s<r.length;s+=o){let i=r.slice(s,s+e).trim();if(i.length>0&&n.push({text:i,start:s,end:Math.min(s+e,r.length),index:n.length}),o===0)break}return n}function Pt(r,e,t,n,o=0){if(r.length<=t||e.length===0)return [{text:r,start:o}];let s=e[0],i=e.slice(1);if(s==="")return Ps(r,t,o);let c=Ds(r,s,n);if(c.length<=1)return Pt(r,i,t,n,o);let a=[],l=o;for(let u of c){if(u.length<=t)a.push({text:u,start:l});else {let d=Pt(u,i,t,n,l);a.push(...d);}l+=u.length+(n?0:s.length);}return a}function Ds(r,e,t){if(t){let n=[],o=r,s=0;for(;;){let i=o.indexOf(e,s);if(i===-1){s<o.length&&n.push(o.slice(s));break}n.push(o.slice(s,i+e.length)),s=i+e.length;}return n}return r.split(e)}function Ps(r,e,t){let n=[],o=0;for(;o<r.length;){let s=Math.min(o+e,r.length);n.push({text:r.slice(o,s),start:t+o}),o=s;}return n}function Ls(r,e,t,n,o){if(r.length===0)return [];let s=[],i="";for(let c of r){let a=o?c.text.trim():c.text;if(a)if(i.length+a.length+1>e&&i.length>0)if(s.push(i),t>0){let l=Fs(i,t);i=l+(l?" ":"")+a;}else i=a;else i+=(i?" ":"")+a;}if(i){let c=o?i.trim():i;c.length>0&&(c.length<n&&s.length>0?s[s.length-1]+=" "+c:s.push(c));}return s}function Fs(r,e){if(r.length<=e)return r;let t=r.length-e,n=r.indexOf(" ",t);return n!==-1&&n<r.length?r.slice(n+1):r.slice(t)}function Bs(r){return r.replace(/\s+/g," ").trim()}function Ns(r,e,t){let n=[],o=0;for(let s=0;s<e.length;s++){let i=t?Bs(e[s]):e[s],c=Kn(r,i,o);if(c===-1){let l=i.slice(0,Math.min(50,i.length));c=Kn(r,l,o);}c===-1&&(c=o);let a=Math.min(c+i.length,r.length);n.push({text:i,start:c,end:a,index:s}),o=Math.max(c+1,a-i.length/2);}return n}function Kn(r,e,t){let n=r.indexOf(e,t);if(n!==-1)return n;let o=e.replace(/\s+/g," ").trim();return n=r.slice(t).replace(/\s+/g," ").indexOf(o),n!==-1?t+n:-1}function Lt(r={}){return (e,t={})=>K(e,{...r,...t})}function Z(r,e={}){let{size:t=k.size,overlap:n=k.overlap,minSize:o=k.minSize,trim:s=k.trim,includeHeaders:i=true,maxHeaderLevel:c=3,preserveCodeBlocks:a=true,preserveTables:l=true}=e;if(!r||r.length===0)return [];let u=js(r);return zs(u,{size:t,minSize:o,trim:s,includeHeaders:i,maxHeaderLevel:c,preserveCodeBlocks:a,preserveTables:l})}function js(r){let e=[],t=r.split(`
8
+ `),n=0,o=0,s=[];for(;o<t.length;){let i=t[o],c=n;if(i.startsWith("```")||i.startsWith("~~~")){let d=i.slice(0,3),m=i.slice(3).trim(),p=n,g=i+`
9
+ `;for(n+=i.length+1,o++;o<t.length&&!t[o].startsWith(d);)g+=t[o]+`
10
+ `,n+=t[o].length+1,o++;o<t.length&&(g+=t[o],n+=t[o].length+1,o++),e.push({type:"code_block",content:g,start:p,end:n,language:m,headerPath:[...s]});continue}let a=i.match(/^(#{1,6})\s+(.+)$/);if(a){let d=a[1].length,m=a[2];for(;s.length>=d;)s.pop();s.push(`${"#".repeat(d)} ${m}`),e.push({type:"header",content:i,start:c,end:n+i.length,level:d,headerPath:[...s]}),n+=i.length+1,o++;continue}if(i.includes("|")&&o+1<t.length&&t[o+1].match(/^\|?[\s\-:|]+\|/)){let d=n,m=i+`
11
+ `;for(n+=i.length+1,o++;o<t.length&&(t[o].includes("|")||t[o].match(/^\|?[\s\-:|]+\|/));)m+=t[o]+`
12
+ `,n+=t[o].length+1,o++;e.push({type:"table",content:m.trimEnd(),start:d,end:n,headerPath:[...s]});continue}if(i.match(/^[-*_]{3,}\s*$/)){e.push({type:"horizontal_rule",content:i,start:c,end:n+i.length,headerPath:[...s]}),n+=i.length+1,o++;continue}if(i.startsWith(">")){let d=n,m=i+`
13
+ `;for(n+=i.length+1,o++;o<t.length&&(t[o].startsWith(">")||t[o].trim()&&!t[o].match(/^#+\s/))&&!(!t[o].startsWith(">")&&t[o].trim());)m+=t[o]+`
14
+ `,n+=t[o].length+1,o++;e.push({type:"blockquote",content:m.trimEnd(),start:d,end:n,headerPath:[...s]});continue}if(i.match(/^[\s]*[-*+]\s/)||i.match(/^[\s]*\d+\.\s/)){let d=n,m=i+`
15
+ `;for(n+=i.length+1,o++;o<t.length;){let p=t[o];if(p.match(/^[\s]*[-*+]\s/)||p.match(/^[\s]*\d+\.\s/)||p.startsWith(" ")&&m.endsWith(`
16
+ `))m+=p+`
17
+ `,n+=p.length+1,o++;else if(p.trim()==="")if(o+1<t.length&&(t[o+1].match(/^[\s]*[-*+]\s/)||t[o+1].match(/^[\s]*\d+\.\s/)))m+=p+`
18
+ `,n+=p.length+1,o++;else break;else break}e.push({type:"list",content:m.trimEnd(),start:d,end:n,headerPath:[...s]});continue}if(i.trim()===""){e.push({type:"blank",content:i,start:c,end:n+i.length,headerPath:[...s]}),n+=i.length+1,o++;continue}let l=n,u=i+`
19
+ `;for(n+=i.length+1,o++;o<t.length;){let d=t[o];if(d.trim()===""||d.match(/^#{1,6}\s/)||d.startsWith("```")||d.startsWith("~~~")||d.match(/^[-*_]{3,}\s*$/)||d.startsWith(">")||d.match(/^[\s]*[-*+]\s/)||d.match(/^[\s]*\d+\.\s/)||d.includes("|")&&o+1<t.length&&t[o+1]?.match(/^\|?[\s\-:|]+\|/))break;u+=d+`
20
+ `,n+=d.length+1,o++;}e.push({type:"paragraph",content:u.trimEnd(),start:l,end:n,headerPath:[...s]});}return e}function zs(r,e){let t=[],n="",o=-1,s=[],i=0,c=()=>{if(n.length>=e.minSize){let a=e.trim?n.trim():n;if(a.length>=e.minSize){let l={};s.length>0&&(l.headerPath=s.join(" > "),l.headerLevels=s.map(u=>{let d=u.match(/^(#+)/);return d?d[1].length:0})),t.push({text:a,start:o,end:o+n.length,index:i++,metadata:Object.keys(l).length>0?l:void 0});}}n="",o=-1;};for(let a of r){if(a.type==="blank")continue;if(a.headerPath&&a.headerPath.length>0&&(s=a.headerPath.filter(d=>(d.match(/^(#+)/)||["",""])[1].length<=e.maxHeaderLevel)),a.type==="code_block"&&e.preserveCodeBlocks||a.type==="table"&&e.preserveTables){n&&c();let d={headerPath:s.length>0?s.join(" > "):void 0,isCodeBlock:a.type==="code_block",isTable:a.type==="table"};a.type==="code_block"&&a.language&&(d.language=a.language),t.push({text:e.trim?a.content.trim():a.content,start:a.start,end:a.end,index:i++,metadata:d});continue}if(a.type==="header"&&e.includeHeaders){n&&c(),n=a.content,o=a.start;continue}let l=a.content;n.length+(n?2:0)+l.length>e.size&&n.length>0?(c(),e.includeHeaders&&s.length>0?n=s.join(`
21
+
22
+ `)+`
23
+
24
+ `+l:n=l,o=a.start):n?n+=`
25
+
26
+ `+l:(n=l,o=a.start);}if(n&&c(),t.length===0&&r.length>0){let a=r.filter(l=>l.type!=="blank").map(l=>l.content).join(`
27
+
28
+ `);if(a.trim().length>0){let l=r.find(d=>d.headerPath&&d.headerPath.length>0)?.headerPath,u={};l&&l.length>0&&(u.headerPath=l.join(" > ")),t.push({text:e.trim?a.trim():a,start:0,end:a.length,index:0,metadata:Object.keys(u).length>0?u:void 0});}}return t}function Ft(r={}){return (e,t={})=>Z(e,{...r,...t})}var $s={javascript:{functionPattern:/^[\s]*(async\s+)?function\s+\w+|^[\s]*(const|let|var)\s+\w+\s*=\s*(async\s+)?\(|^[\s]*(const|let|var)\s+\w+\s*=\s*(async\s+)?function/,classPattern:/^[\s]*class\s+\w+/,importPattern:/^[\s]*(import|export)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},typescript:{functionPattern:/^[\s]*(async\s+)?function\s+\w+|^[\s]*(const|let|var)\s+\w+\s*[:=]\s*(async\s+)?\(|^[\s]*(const|let|var)\s+\w+\s*=\s*(async\s+)?function|^[\s]*(public|private|protected)?\s*(async\s+)?\w+\s*\(/,classPattern:/^[\s]*(abstract\s+)?class\s+\w+|^[\s]*interface\s+\w+|^[\s]*type\s+\w+\s*=/,importPattern:/^[\s]*(import|export)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},python:{functionPattern:/^[\s]*(async\s+)?def\s+\w+/,classPattern:/^[\s]*class\s+\w+/,importPattern:/^[\s]*(import|from)\s+/,singleLineComment:"#",multiLineCommentStart:'"""',multiLineCommentEnd:'"""',blockStart:":",blockEnd:""},java:{functionPattern:/^[\s]*(public|private|protected)?\s*(static)?\s*\w+\s+\w+\s*\(/,classPattern:/^[\s]*(public|private|protected)?\s*(abstract|final)?\s*class\s+\w+/,importPattern:/^[\s]*(import|package)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},csharp:{functionPattern:/^[\s]*(public|private|protected|internal)?\s*(static|async|virtual|override)?\s*\w+\s+\w+\s*\(/,classPattern:/^[\s]*(public|private|protected|internal)?\s*(abstract|sealed|partial)?\s*class\s+\w+/,importPattern:/^[\s]*using\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},cpp:{functionPattern:/^[\s]*(\w+\s+)+\w+\s*\([^)]*\)\s*(const)?\s*\{?/,classPattern:/^[\s]*(class|struct)\s+\w+/,importPattern:/^[\s]*#include\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},go:{functionPattern:/^[\s]*func\s+(\(\w+\s+\*?\w+\)\s+)?\w+\s*\(/,classPattern:/^[\s]*type\s+\w+\s+(struct|interface)/,importPattern:/^[\s]*(import|package)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},rust:{functionPattern:/^[\s]*(pub\s+)?(async\s+)?fn\s+\w+/,classPattern:/^[\s]*(pub\s+)?(struct|enum|trait|impl)\s+\w+/,importPattern:/^[\s]*(use|mod)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},ruby:{functionPattern:/^[\s]*def\s+\w+/,classPattern:/^[\s]*(class|module)\s+\w+/,importPattern:/^[\s]*require\s+/,singleLineComment:"#",multiLineCommentStart:"=begin",multiLineCommentEnd:"=end",blockStart:"",blockEnd:"end"},php:{functionPattern:/^[\s]*(public|private|protected)?\s*(static)?\s*function\s+\w+/,classPattern:/^[\s]*(abstract|final)?\s*class\s+\w+/,importPattern:/^[\s]*(use|require|include|require_once|include_once)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},swift:{functionPattern:/^[\s]*(public|private|internal|fileprivate|open)?\s*(static|class)?\s*func\s+\w+/,classPattern:/^[\s]*(public|private|internal|fileprivate|open)?\s*(final)?\s*(class|struct|enum|protocol)\s+\w+/,importPattern:/^[\s]*import\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},kotlin:{functionPattern:/^[\s]*(public|private|protected|internal)?\s*(suspend)?\s*fun\s+\w+/,classPattern:/^[\s]*(public|private|protected|internal)?\s*(abstract|open|data|sealed)?\s*(class|interface|object)\s+\w+/,importPattern:/^[\s]*(import|package)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"},generic:{functionPattern:/^[\s]*(function|func|def|fn)\s+\w+/,classPattern:/^[\s]*(class|struct|type|interface)\s+\w+/,importPattern:/^[\s]*(import|include|require|use)\s+/,singleLineComment:"//",multiLineCommentStart:"/*",multiLineCommentEnd:"*/",blockStart:"{",blockEnd:"}"}};function X(r,e={}){let{size:t=k.size,overlap:n=k.overlap,minSize:o=k.minSize,trim:s=k.trim,language:i=Ws(r),preserveBlocks:c=true,includeImports:a=true,maxLines:l}=e;if(!r||r.length===0)return [];let u=$s[i],d=_s(r,u),p=(a?d.filter(f=>f.type==="import").map(f=>f.content):[]).join(`
29
+ `);return Us(d,{size:t,minSize:o,trim:s,preserveBlocks:c,importBlock:a?p:"",maxLines:l,language:i})}function Ws(r){let t=r.split(`
30
+ `).slice(0,50).join(`
31
+ `).toLowerCase();return t.includes("import react")||t.includes('from "react"')?r.includes(": ")&&(r.includes("interface ")||r.includes(": React."))?"typescript":"javascript":t.includes("package main")||t.includes("func main()")?"go":t.includes("fn main()")||t.includes("impl ")?"rust":t.includes("def __init__")||t.includes("import numpy")?"python":t.includes("public static void main")||t.includes("package ")?t.includes("fun ")||t.includes("val ")?"kotlin":"java":t.includes("namespace ")||t.includes("using System")?"csharp":t.includes("#include <")?"cpp":t.includes("<?php")?"php":t.includes("import Foundation")||t.includes("import UIKit")?"swift":t.includes("require ")&&t.includes("end")?"ruby":r.includes("interface ")||r.includes(": ")?"typescript":r.includes("function ")||r.includes("=>")?"javascript":r.includes("def ")||r.includes("class ")?"python":"generic"}function _s(r,e){let t=[],n=r.split(`
32
+ `),o=0,s=0;for(;s<n.length;){let i=n[s],c=o;if(e.importPattern.test(i)){let a=i,l=o+i.length;if(i.includes("{")&&!i.includes("}")){for(o+=i.length+1,s++;s<n.length&&!n[s].includes("}");)a+=`
33
+ `+n[s],l=o+n[s].length,o+=n[s].length+1,s++;s<n.length&&(a+=`
34
+ `+n[s],l=o+n[s].length);}t.push({type:"import",content:a,start:c,end:l}),o+=i.length+1,s++;continue}if(e.classPattern.test(i)){let a=J(i,"class")||J(i,"struct")||J(i,"interface")||J(i,"type")||J(i,"trait")||J(i,"impl"),l=c,u=i+`
35
+ `;o+=i.length+1,s++;let d=F(i,"{")-F(i,"}"),m=Te(i);for(;s<n.length;){let p=n[s];if(u+=p+`
36
+ `,d+=F(p,"{")-F(p,"}"),o+=p.length+1,s++,e.blockEnd==="}"&&d<=0&&p.includes("}")||e.blockEnd==="end"&&p.trim()==="end")break;if(e.blockStart===":"&&Te(p)<=m&&p.trim()!==""){o-=p.length+1,u=u.slice(0,u.length-p.length-1),s--;break}}t.push({type:"class",content:u.trimEnd(),start:l,end:o,name:a,scopeType:"class"});continue}if(e.functionPattern.test(i)){let a=Vs(i),l=c,u=i+`
37
+ `;o+=i.length+1,s++;let d=F(i,"{")-F(i,"}"),m=Te(i);for(;s<n.length;){let p=n[s];if(u+=p+`
38
+ `,d+=F(p,"{")-F(p,"}"),o+=p.length+1,s++,e.blockEnd==="}"&&d<=0&&u.includes("{")||e.blockEnd==="end"&&p.trim()==="end")break;if(e.blockStart===":"&&Te(p)<=m&&p.trim()!==""){o-=p.length+1,u=u.slice(0,u.length-p.length-1),s--;break}}t.push({type:"function",content:u.trimEnd(),start:l,end:o,name:a,scopeType:"function"});continue}if(i.includes(e.multiLineCommentStart)&&!i.includes(e.multiLineCommentEnd)){let a=c,l=i+`
39
+ `;for(o+=i.length+1,s++;s<n.length&&!n[s].includes(e.multiLineCommentEnd);)l+=n[s]+`
40
+ `,o+=n[s].length+1,s++;s<n.length&&(l+=n[s],o+=n[s].length+1,s++),t.push({type:"comment",content:l.trimEnd(),start:a,end:o});continue}t.push({type:"code",content:i,start:c,end:o+i.length}),o+=i.length+1,s++;}return t}function J(r,e){let t=new RegExp(`${e}\\s+(\\w+)`);return r.match(t)?.[1]}function Vs(r){let e=r.match(/function\s+(\w+)/);if(e||(e=r.match(/def\s+(\w+)/),e)||(e=r.match(/fn\s+(\w+)/),e)||(e=r.match(/func\s+(?:\([^)]+\)\s+)?(\w+)/),e)||(e=r.match(/(?:const|let|var)\s+(\w+)\s*=/),e))return e[1]}function F(r,e){let t=0;for(let n of r)n===e&&t++;return t}function Te(r){let e=r.match(/^(\s*)/);return e?e[1].length:0}function Us(r,e){let t=[],n="",o=-1,s={},i=0,c=l=>{if(n.length>=e.minSize){let u=e.trim?n.trim():n;if(u.length>=e.minSize){let d={language:e.language};s.name&&(d.scopeName=s.name),s.type&&(d.scopeType=s.type),t.push({text:u,start:o,end:o+n.length,index:i++,metadata:d});}}n="",o=-1,s={};},a=r.filter(l=>l.type!=="import");for(let l of a){if(e.preserveBlocks&&(l.type==="class"||l.type==="function")){n&&c();let d=l.content;if(e.importBlock&&l.type==="function"&&(d=e.importBlock+`
41
+
42
+ `+d),d.length<=e.size||!e.maxLines)t.push({text:e.trim?d.trim():d,start:l.start,end:l.end,index:i++,metadata:{language:e.language,scopeName:l.name,scopeType:l.scopeType}});else {let m=d.split(`
43
+ `),p="",g=l.start,f=0;for(let b of m)e.maxLines&&f>=e.maxLines||p.length+b.length>e.size?(p.length>=e.minSize&&t.push({text:e.trim?p.trim():p,start:g,end:g+p.length,index:i++,metadata:{language:e.language,scopeName:l.name,scopeType:l.scopeType}}),p=b+`
44
+ `,g=l.start+d.indexOf(b),f=1):(p+=b+`
45
+ `,f++);p.length>=e.minSize&&t.push({text:e.trim?p.trim():p,start:g,end:l.end,index:i++,metadata:{language:e.language,scopeName:l.name,scopeType:l.scopeType}});}continue}n.length+l.content.length+1>e.size&&n.length>0?(c(),n=l.content,o=l.start):n?n+=`
46
+ `+l.content:(n=l.content,o=l.start);}return n&&c(),t}function Bt(r={}){return (e,t={})=>X(e,{...r,...t})}function _(r,e={strategy:"recursive"}){let{strategy:t="recursive"}=e;switch(t){case "markdown":return Z(r,e);case "code":return X(r,e);default:return K(r,e)}}function Zn(r){return (e,t={})=>_(e,{...r,...t})}function Jn(r,e={strategy:"recursive"}){if(!r||r.length===0)return 0;let{size:t=500,overlap:n=50}=e,o=t-n;return o<=0?1:Math.ceil(r.length/o)}function Xn(r){if(r.length===0)return {count:0,totalSize:0,averageSize:0,minSize:0,maxSize:0,sizes:[]};let e=r.map(n=>n.text.length),t=e.reduce((n,o)=>n+o,0);return {count:r.length,totalSize:t,averageSize:Math.round(t/r.length),minSize:Math.min(...e),maxSize:Math.max(...e),sizes:e}}function qs(r){let e=r.toLowerCase(),t=["ingly","edly","ness","ment","tion","sion","ious","eous","able","ible","less","ful","ing","ied","ies","ily","ers","est","ed","er","ly","s"];for(let n of t)if(e.length>n.length+2&&e.endsWith(n)){e=e.slice(0,-n.length);break}return e}function Gs(r,e={}){let{stemming:t=false,minLength:n=2}=e,o=r.toLowerCase().split(/[^a-z0-9]+/).filter(s=>s.length>=n);return t?o.map(qs):o}var A=class{k1;b;minTokenLength;stopWords;tokenize;stemming;documents=new Map;docFreqs=new Map;avgDocLength=0;totalDocLength=0;constructor(e={}){this.k1=e.k1??Q.k1,this.b=e.b??Q.b,this.minTokenLength=e.minTokenLength??Q.minTokenLength,this.stemming=e.stemming??Q.stemming,e.stopWords?this.stopWords=e.stopWords instanceof Set?e.stopWords:new Set(e.stopWords):this.stopWords=Dt,e.tokenize?this.tokenize=e.tokenize:this.tokenize=t=>Gs(t,{stemming:this.stemming,minLength:this.minTokenLength}).filter(n=>!this.stopWords.has(n));}add(e,t){this.documents.has(e)&&this.remove(e);let n=this.tokenize(t),o=new Map;for(let s of n)o.set(s,(o.get(s)||0)+1);for(let s of o.keys())this.docFreqs.set(s,(this.docFreqs.get(s)||0)+1);this.documents.set(e,{id:e,tokens:n,termFreqs:o,length:n.length,text:t}),this.totalDocLength+=n.length,this.avgDocLength=this.totalDocLength/this.documents.size;}addMany(e){for(let t of e)this.add(t.id,t.text);}search(e,t=10){let n=this.tokenize(e);if(n.length===0||this.documents.size===0)return [];let o=[],s=this.documents.size;for(let i of this.documents.values()){let c=0;for(let a of n){let l=i.termFreqs.get(a)||0;if(l===0)continue;let u=this.docFreqs.get(a)||0,d=Math.log((s-u+.5)/(u+.5)+1),m=l*(this.k1+1),p=l+this.k1*(1-this.b+this.b*(i.length/this.avgDocLength));c+=d*(m/p);}c>0&&o.push({id:i.id,score:c,text:i.text});}return o.sort((i,c)=>c.score-i.score).slice(0,t)}remove(e){let t=this.documents.get(e);if(t){for(let n of t.termFreqs.keys()){let o=this.docFreqs.get(n)||1;o<=1?this.docFreqs.delete(n):this.docFreqs.set(n,o-1);}this.totalDocLength-=t.length,this.documents.delete(e),this.avgDocLength=this.documents.size>0?this.totalDocLength/this.documents.size:0;}}clear(){this.documents.clear(),this.docFreqs.clear(),this.avgDocLength=0,this.totalDocLength=0;}stats(){return {docCount:this.documents.size,avgDocLength:this.avgDocLength,vocabularySize:this.docFreqs.size}}toJSON(){let e=[];for(let t of this.documents.values())e.push({id:t.id,tokens:t.tokens,length:t.length,text:t.text});return {docCount:this.documents.size,avgDocLength:this.avgDocLength,docFreqs:Object.fromEntries(this.docFreqs),documents:e}}fromJSON(e){this.clear(),this.avgDocLength=e.avgDocLength,this.docFreqs=new Map(Object.entries(e.docFreqs));for(let t of e.documents){let n=new Map;for(let o of t.tokens)n.set(o,(n.get(o)||0)+1);this.documents.set(t.id,{id:t.id,tokens:t.tokens,termFreqs:n,length:t.length,text:t.text}),this.totalDocLength+=t.length;}}has(e){return this.documents.has(e)}get size(){return this.documents.size}};function Yn(r={}){return new A(r)}function eo(r,e={}){let t=new A(e);return t.addMany(r),t}var pe=class{db;bm25;textStore=new Map;constructor(e,t={}){this.db=e,this.bm25=new A(t);}async add(e,t,n,o){await this.db.add({id:e,vector:n,metadata:{...o,_text:t}}),this.bm25.add(e,t),this.textStore.set(e,t);}async addMany(e){await this.db.addMany(e.map(t=>({id:t.id,vector:t.vector,metadata:{...t.metadata,_text:t.text}})));for(let t of e)this.bm25.add(t.id,t.text),this.textStore.set(t.id,t.text);}async search(e,t,n={}){let{k:o=O.k,vectorWeight:s=O.vectorWeight,keywordWeight:i=O.keywordWeight,normalizeScores:c=O.normalizeScores,threshold:a=O.threshold,filter:l,includeVectors:u=O.includeVectors,fetchK:d=o*3}=n,[m,p]=await Promise.all([this.db.search(e,{k:d,filter:l,includeVectors:u}),Promise.resolve(this.bm25.search(t,d))]);return ro(m,p,{vectorWeight:s,keywordWeight:i,normalizeScores:c}).filter(b=>b.score>=a).slice(0,o).map(b=>({...b,text:this.textStore.get(b.id)}))}async remove(e){await this.db.delete(e),this.bm25.remove(e),this.textStore.delete(e);}async clear(){await this.db.clear(),this.bm25.clear(),this.textStore.clear();}getBM25Index(){return this.bm25}getVectorDB(){return this.db}exportBM25State(){return this.bm25.toJSON()}importBM25State(e){this.bm25.fromJSON(e);for(let t of e.documents)t.text&&this.textStore.set(t.id,t.text);}};function ro(r,e,t){let{vectorWeight:n,keywordWeight:o,normalizeScores:s}=t,i=new Map,c=new Map,a=new Map,l=new Map;for(let g of r)i.set(g.id,g.score),a.set(g.id,g.metadata),l.set(g.id,g.vector);for(let g of e)c.set(g.id,g.score);let u=new Set([...i.keys(),...c.keys()]),d=i,m=c;s&&(d=to(i),m=to(c));let p=[];for(let g of u){let f=d.get(g)||0,b=m.get(g)||0,S=f*n+b*o;p.push({id:g,score:S,vectorScore:i.get(g),keywordScore:c.get(g),metadata:a.get(g),vector:l.get(g)});}return p.sort((g,f)=>f.score-g.score)}function to(r){if(r.size===0)return r;let e=Array.from(r.values()),t=Math.min(...e),o=Math.max(...e)-t;return o===0?new Map(Array.from(r.entries()).map(([s])=>[s,1])):new Map(Array.from(r.entries()).map(([s,i])=>[s,(i-t)/o]))}function Nt(r,e,t=60){let n=new Map,o=new Map,s=new Map,i=new Map;for(let a=0;a<r.length;a++){let l=r[a],u=a+1;n.set(l.id,(n.get(l.id)||0)+1/(t+u)),o.set(l.id,l.metadata),s.set(l.id,l.score);}for(let a=0;a<e.length;a++){let l=e[a],u=a+1;n.set(l.id,(n.get(l.id)||0)+1/(t+u)),i.set(l.id,l.score);}return Array.from(n.entries()).map(([a,l])=>({id:a,score:l,vectorScore:s.get(a),keywordScore:i.get(a),metadata:o.get(a)})).sort((a,l)=>l.score-a.score)}function no(r,e={}){return new pe(r,e)}function oo(r,e,t={}){let{vectorWeight:n=O.vectorWeight,keywordWeight:o=O.keywordWeight,normalizeScores:s=O.normalizeScores,useRRF:i=false,rrfK:c=60}=t;return i?Nt(r,e,c):ro(r,e,{vectorWeight:n,keywordWeight:o,normalizeScores:s})}function so(r,e,t){return `${t}_${r}_${e}`}function io(){return `doc_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}async function jt(r,e,t={}){let n=Date.now(),{chunking:o={strategy:"recursive"},batchSize:s=H.batchSize,onProgress:i,idPrefix:c=H.idPrefix,generateEmbeddings:a=H.generateEmbeddings,embedder:l,buildBM25Index:u=H.buildBM25Index,bm25Options:d}=t;if(a&&!l)throw new Error("embedder function is required when generateEmbeddings is true");let m={phase:"chunking",documentsProcessed:0,totalDocuments:e.length,chunksProcessed:0,totalChunks:0,currentBatch:0,totalBatches:0},p=()=>{i&&i({...m});};p();let g=[];for(let y of e){let w=y.id||io(),x=_(y.text,o);for(let v=0;v<x.length;v++){let R=x[v];g.push({id:so(w,v,c),text:R.text,metadata:{...y.metadata,sourceDocId:w,chunkIndex:v,chunkStart:R.start,chunkEnd:R.end,...R.metadata},sourceDocId:w,chunkIndex:v});}m.documentsProcessed++,p();}m.totalChunks=g.length,m.totalBatches=Math.ceil(g.length/s);let f=[];if(a&&l){m.phase="embedding",p();for(let y=0;y<g.length;y+=s){let x=g.slice(y,y+s).map(R=>R.text),v=await l(x);f.push(...v),m.chunksProcessed=Math.min(y+s,g.length),m.currentBatch=Math.floor(y/s)+1,p();}}m.phase="indexing",m.chunksProcessed=0,m.currentBatch=0,p();let b=[],S;if(u){S=new A(d);for(let y of g)S.add(y.id,y.text);}if(f.length>0){let y=g.map((w,x)=>({id:w.id,vector:f[x],metadata:{...w.metadata,_text:w.text}}));for(let w=0;w<y.length;w+=s){let x=y.slice(w,w+s);await r.addMany(x),b.push(...x.map(v=>v.id)),m.chunksProcessed=Math.min(w+s,y.length),m.currentBatch=Math.floor(w/s)+1,p();}}else {for(let y of g)b.push(y.id);m.chunksProcessed=g.length,m.currentBatch=m.totalBatches,p();}return m.phase="complete",p(),{documentsProcessed:e.length,chunksCreated:g.length,chunkIds:b,bm25Index:S,duration:Date.now()-n}}function ao(r,e={}){let{chunking:t={strategy:"recursive"},idPrefix:n="chunk"}=e,o=[];for(let s of r){let i=s.id||io(),c=_(s.text,t);for(let a=0;a<c.length;a++){let l=c[a];o.push({id:so(i,a,n),text:l.text,sourceDocId:i,chunkIndex:a,start:l.start,end:l.end,metadata:{...s.metadata,...l.metadata}});}}return o}async function co(r,e,t={}){let n=Date.now(),{batchSize:o=100,onProgress:s,buildBM25Index:i=false,bm25Options:c}=t,a=[],l;if(i){l=new A(c);for(let d of e)l.add(d.id,d.text);}let u=e.map(d=>({id:d.id,vector:d.vector,metadata:{...d.metadata,_text:d.text}}));for(let d=0;d<u.length;d+=o){let m=u.slice(d,d+o);await r.addMany(m),a.push(...m.map(p=>p.id)),s&&s(Math.min(d+o,u.length),u.length);}return {chunksCreated:e.length,chunkIds:a,bm25Index:l,duration:Date.now()-n}}function lo(r,e={}){return async(t,n={})=>jt(r,t,{...e,...n})}function uo(r,e={}){let{chunking:t={strategy:"recursive"}}=e,n=0,o=0;for(let s of r){let i=_(s.text,t);n+=i.length,o+=i.reduce((c,a)=>c+a.text.length,0);}return {totalDocuments:r.length,estimatedChunks:n,totalCharacters:o,avgChunkSize:n>0?Math.round(o/n):0}}function Y(){return typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof crypto.getRandomValues=="function"}function mo(r){let e=new Uint8Array(r);return crypto.getRandomValues(e),e}function De(r){let e=new Uint8Array(r),t="";for(let n=0;n<e.byteLength;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function zt(r){let e=atob(r),t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return t.buffer}async function po(r,e,t){let n=new TextEncoder,o=await crypto.subtle.importKey("raw",n.encode(r),{name:"PBKDF2"},false,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",salt:e.buffer,iterations:t,hash:"SHA-256"},o,{name:"AES-GCM",length:256},false,["encrypt","decrypt"])}async function Pe(r,e,t=1e5){if(!Y())throw new Error("Web Crypto API not supported");let n=mo(16),o=mo(12),s=await po(e,n,t),i;typeof r=="string"?i=new TextEncoder().encode(r).buffer:i=r;let c=await crypto.subtle.encrypt({name:"AES-GCM",iv:o.buffer},s,i);return {ciphertext:De(c),iv:De(o.buffer),salt:De(n.buffer),algorithm:"AES-GCM",version:1}}async function Le(r,e,t=1e5){if(!Y())throw new Error("Web Crypto API not supported");if(r.algorithm!=="AES-GCM")throw new Error(`Unsupported algorithm: ${r.algorithm}`);let n=new Uint8Array(zt(r.salt)),o=new Uint8Array(zt(r.iv)),s=zt(r.ciphertext),i=await po(e,n,t);try{return await crypto.subtle.decrypt({name:"AES-GCM",iv:o.buffer},i,s)}catch{throw new Error("Decryption failed: invalid passphrase or corrupted data")}}async function $t(r,e,t=1e5){let n=await Le(r,e,t);return new TextDecoder().decode(n)}async function go(r,e,t=1e5){return Pe(r.buffer,e,t)}async function fo(r,e,t=1e5){let n=await Le(r,e,t);return new Float32Array(n)}async function ho(r,e,t=1e5){let n=JSON.stringify(r);return Pe(n,e,t)}async function yo(r,e,t=1e5){let n=await $t(r,e,t);return JSON.parse(n)}async function ge(r){let t=new TextEncoder().encode(r),n=await crypto.subtle.digest("SHA-256",t);return De(n)}async function Wt(r,e){let t=await ge(r);if(t.length!==e.length)return false;let n=0;for(let o=0;o<t.length;o++)n|=t.charCodeAt(o)^e.charCodeAt(o);return n===0}var Qs="vectordb_keystore",Hs=1,C="keys";async function ee(){return new Promise((r,e)=>{let t=indexedDB.open(Qs,Hs);t.onerror=()=>e(new Error(`Failed to open keystore: ${t.error?.message}`)),t.onsuccess=()=>r(t.result),t.onupgradeneeded=()=>{let n=t.result;n.objectStoreNames.contains(C)||n.createObjectStore(C,{keyPath:"dbName"});};})}var fe=class r{passphrase=null;iterations=1e5;static isSupported(){return Y()}async initialize(e,t,n=1e5){if(!r.isSupported())throw new Error("Web Crypto API not supported");let o=await ee();try{let s=await ge(t),i={dbName:e,passphraseHash:s,createdAt:Date.now(),lastUsedAt:Date.now(),iterations:n,enabled:!0};await new Promise((c,a)=>{let l=o.transaction(C,"readwrite"),d=l.objectStore(C).put(i);d.onerror=()=>a(d.error),l.oncomplete=()=>c();}),this.passphrase=t,this.iterations=n;}finally{o.close();}}async unlock(e,t){if(!r.isSupported())throw new Error("Web Crypto API not supported");let n=await this.getMetadata(e);if(!n)throw new Error(`No encryption configured for database: ${e}`);let o=await Wt(t,n.passphraseHash);return o&&(this.passphrase=t,this.iterations=n.iterations,await this.updateLastUsed(e)),o}lock(){this.passphrase=null;}isUnlocked(){return this.passphrase!==null}getPassphrase(){if(!this.passphrase)throw new Error("Encryption is locked. Call unlock() first.");return this.passphrase}getIterations(){return this.iterations}async getMetadata(e){let t=await ee();try{return await new Promise((n,o)=>{let c=t.transaction(C,"readonly").objectStore(C).get(e);c.onerror=()=>o(c.error),c.onsuccess=()=>n(c.result??null);})}finally{t.close();}}async hasEncryption(e){return (await this.getMetadata(e))?.enabled??false}async updateLastUsed(e){let t=await ee();try{await new Promise((n,o)=>{let s=t.transaction(C,"readwrite"),i=s.objectStore(C),c=i.get(e);c.onerror=()=>o(c.error),c.onsuccess=()=>{let a=c.result;a&&(a.lastUsedAt=Date.now(),i.put(a));},s.oncomplete=()=>n();});}finally{t.close();}}async changePassphrase(e,t,n){if(!await this.unlock(e,t))return false;let s=await ee();try{let i=await ge(n);return await new Promise((c,a)=>{let l=s.transaction(C,"readwrite"),u=l.objectStore(C),d=u.get(e);d.onerror=()=>a(d.error),d.onsuccess=()=>{let m=d.result;m&&(m.passphraseHash=i,m.lastUsedAt=Date.now(),u.put(m));},l.oncomplete=()=>c();}),this.passphrase=n,!0}finally{s.close();}}async disable(e,t){if(!await this.unlock(e,t))return false;let o=await ee();try{return await new Promise((s,i)=>{let c=o.transaction(C,"readwrite"),a=c.objectStore(C),l=a.get(e);l.onerror=()=>i(l.error),l.onsuccess=()=>{let u=l.result;u&&(u.enabled=!1,u.lastUsedAt=Date.now(),a.put(u));},c.oncomplete=()=>s();}),this.lock(),!0}finally{o.close();}}async delete(e){let t=await ee();try{await new Promise((n,o)=>{let s=t.transaction(C,"readwrite"),c=s.objectStore(C).delete(e);c.onerror=()=>o(c.error),s.oncomplete=()=>n();}),this.lock();}finally{t.close();}}};function bo(){return new fe}var V={email:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,phone:/\b(?:\+1[-.\s]?)?(?:\(?[0-9]{3}\)?[-.\s]?)?[0-9]{3}[-.\s]?[0-9]{4}\b/g,ssn:/\b\d{3}-\d{2}-\d{4}\b/g,creditCard:/\b(?:\d{4}[-\s]?){3}\d{4}\b/g,ipAddress:/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,date:/\b(?:\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}|\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}|(?:January|February|March|April|May|June|July|August|September|October|November|December)\s+\d{1,2},?\s+\d{4})\b/gi},Fe={email:"[EMAIL_REDACTED]",phone:"[PHONE_REDACTED]",ssn:"[SSN_REDACTED]",creditCard:"[CARD_REDACTED]",ipAddress:"[IP_REDACTED]",date:"[DATE_REDACTED]",custom:"[REDACTED]"};function _t(r,e={}){let{emails:t=true,phones:n=true,ssn:o=true,creditCards:s=true,ipAddresses:i=false,dates:c=false,customPatterns:a=[],replacement:l,replacements:u={}}=e,d=r,m=p=>l||(p in u?u[p]??Fe[p]:Fe[p]??Fe.custom);t&&(d=d.replace(V.email,m("email"))),n&&(d=d.replace(V.phone,m("phone"))),o&&(d=d.replace(V.ssn,m("ssn"))),s&&(d=d.replace(V.creditCard,m("creditCard"))),i&&(d=d.replace(V.ipAddress,m("ipAddress"))),c&&(d=d.replace(V.date,m("date")));for(let{pattern:p,replacement:g}of a)d=d.replace(p,g);return d}function wo(r={}){return {transformParams:({values:e})=>({values:e.map(t=>typeof t=="string"?_t(t,r):t)})}}function vo(r){let{key:e,encryptVectors:t=true,encryptMetadata:n=true,encryptText:o=true,excludeFields:s=[]}=r,i=new Map;return {beforeAdd:async c=>{let a={id:c.id,vector:c.vector,metadata:c.metadata?{...c.metadata}:void 0};if(t&&a.vector){let l=await Zs(a.vector,e);a.vector=l,i.set(c.id,l);}if(n&&a.metadata){let l={};for(let[u,d]of Object.entries(a.metadata))s.includes(u)?l[u]=d:typeof d=="string"&&o?l[u]=await Vt(d,e):d!==null&&typeof d=="object"?l[u]=await Ks(d,e):l[u]=await Vt(JSON.stringify(d),e);a.metadata=l;}return a},afterGet:async c=>{if(!c)return;let a={id:c.id,vector:c.vector,metadata:c.metadata?{...c.metadata}:void 0};if(t&&a.vector)try{a.vector=await Js(a.vector,e);}catch{}if(n&&a.metadata){let l={};for(let[u,d]of Object.entries(a.metadata))if(s.includes(u))l[u]=d;else if(xo(d))try{let m=await Mo(d,e);try{l[u]=JSON.parse(m);}catch{l[u]=m;}}catch{l[u]=d;}else l[u]=d;a.metadata=l;}return a},afterSearch:async c=>n?Promise.all(c.map(async a=>{if(!a.metadata)return a;let l={};for(let[u,d]of Object.entries(a.metadata))if(s.includes(u))l[u]=d;else if(xo(d))try{let m=await Mo(d,e);try{l[u]=JSON.parse(m);}catch{l[u]=m;}}catch{l[u]=d;}else l[u]=d;return {...a,metadata:l}})):c}}function xo(r){return typeof r=="object"&&r!==null&&"__encrypted"in r&&r.__encrypted===true}async function Vt(r,e){let n=new TextEncoder().encode(r),o=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:o},e,n);return {__encrypted:true,ciphertext:Ut(s),iv:Ut(o.buffer)}}async function Mo(r,e){let t=qt(r.ciphertext),n=qt(r.iv),o=await crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(n)},e,t);return new TextDecoder().decode(o)}async function Ks(r,e){return Vt(JSON.stringify(r),e)}async function Zs(r,e){let t=crypto.getRandomValues(new Uint8Array(12)),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:t},e,r.buffer),o=new Uint8Array(t.length+n.byteLength);o.set(t,0),o.set(new Uint8Array(n),t.length);let s=Math.ceil(o.length/4)*4,i=new Uint8Array(s);return i.set(o),new Float32Array(i.buffer)}async function Js(r,e){let t=new Uint8Array(r.buffer),n=t.slice(0,12),o=t.slice(12),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},e,o);return new Float32Array(s)}function Ut(r){let e=new Uint8Array(r),t="";for(let n=0;n<e.byteLength;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function qt(r){let e=atob(r),t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return t.buffer}async function Gt(r,e,t=1e5){let n=new TextEncoder,o;e?e instanceof Uint8Array?o=e:o=new Uint8Array(qt(e)):o=crypto.getRandomValues(new Uint8Array(16));let s=await crypto.subtle.importKey("raw",n.encode(r),{name:"PBKDF2"},false,["deriveKey"]);return {key:await crypto.subtle.deriveKey({name:"PBKDF2",salt:o,iterations:t,hash:"SHA-256"},s,{name:"AES-GCM",length:256},false,["encrypt","decrypt"]),salt:Ut(o.buffer)}}var So=Gt;function ko(){return `doc_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}var D=class{supports=[".txt",".text","text/plain"];canLoad(e){return typeof e=="string"?true:e instanceof File?e.name.endsWith(".txt")||e.name.endsWith(".text")||e.type==="text/plain":e instanceof Blob?e.type==="text/plain"||e.type==="":false}async load(e,t={}){let{generateId:n,separator:o,trim:s=true,abortSignal:i}=t;i?.throwIfAborted();let c=await this.getText(e,t);if(s&&(c=c.trim()),!c)return [];if(o){let u=c.split(o),d=[];for(let m=0;m<u.length;m++){let p=s?u[m].trim():u[m];if(!p)continue;let g=n?n(e,m):ko(),f={source:this.getSourceName(e),mimeType:"text/plain",partIndex:m,totalParts:u.length};d.push({id:g,text:p,metadata:f});}return d}let a=n?n(e,0):ko(),l={source:this.getSourceName(e),mimeType:"text/plain",length:c.length};return [{id:a,text:c,metadata:l}]}async getText(e,t){let{encoding:n="utf-8",maxSize:o,abortSignal:s}=t;if(typeof e=="string"){if(o&&e.length>o)throw new Error(`Text exceeds maximum size: ${e.length} > ${o}`);return e}if(e instanceof Blob||e instanceof File){if(o&&e.size>o)throw new Error(`File exceeds maximum size: ${e.size} > ${o}`);return e.text()}if(e instanceof ArrayBuffer){if(o&&e.byteLength>o)throw new Error(`Buffer exceeds maximum size: ${e.byteLength} > ${o}`);return new TextDecoder(n).decode(e)}if(typeof e=="object"&&"type"in e&&e.type==="url"){let i=await fetch(e.url,{signal:s});if(!i.ok)throw new Error(`Failed to fetch URL: ${i.status} ${i.statusText}`);return i.text()}throw new Error("Unsupported source type for TextLoader")}getSourceName(e){return typeof e=="string"?"text-string":e instanceof File?e.name:e instanceof Blob?"text-blob":typeof e=="object"&&"type"in e&&e.type==="url"?e.url:"text"}};function Eo(r){return new D}function Xs(){return `doc_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}function Qt(r,e){let t=e.split("."),n=r;for(let o of t){if(n==null)return;if(typeof n=="object"&&!Array.isArray(n))n=n[o];else if(Array.isArray(n)){let s=parseInt(o,10);if(!isNaN(s)&&s>=0&&s<n.length)n=n[s];else return}else return}return n}function Ys(r,e=10){let t=[];function n(o,s){if(!(s>e)){if(typeof o=="string"){let i=o.trim();i&&i.length>0&&t.push(i);}else if(Array.isArray(o))for(let i of o)n(i,s+1);else if(o!==null&&typeof o=="object")for(let i of Object.keys(o))n(o[i],s+1);}}return n(r,0),t}var B=class{supports=[".json","application/json","text/json"];canLoad(e){if(typeof e=="string"){let t=e.trim();return t.startsWith("{")||t.startsWith("[")}return e instanceof File?e.name.endsWith(".json")||e.type==="application/json":e instanceof Blob?e.type==="application/json"||e.type==="text/json":false}async load(e,t={}){let{generateId:n,textFields:o,extractAllStrings:s=false,fieldSeparator:i=`
47
+ `,recordsPath:c,abortSignal:a}=t;a?.throwIfAborted();let l=await this.getText(e,t),u;try{u=JSON.parse(l);}catch(p){throw new Error(`Invalid JSON: ${p instanceof Error?p.message:String(p)}`)}let d;if(c){let p=Qt(u,c);Array.isArray(p)?d=p:p!==void 0?d=[p]:d=[];}else Array.isArray(u)?d=u:d=[u];let m=[];for(let p=0;p<d.length;p++){let g=d[p],f;if(s)f=Ys(g).join(i);else if(o&&o.length>0){let y=[];for(let w of o){let x=Qt(g,w);typeof x=="string"?y.push(x.trim()):x!=null&&y.push(String(x));}f=y.filter(Boolean).join(i);}else {let y=["text","content","body","description","message","title"],w=[];for(let x of y){let v=Qt(g,x);if(typeof v=="string"&&v.trim()){w.push(v.trim());break}}w.length===0?f=JSON.stringify(g,null,2):f=w.join(i);}if(!f.trim())continue;let b;if(n)b=n(e,p);else {let y=typeof g=="object"&&g!==null?g.id??g._id:void 0;typeof y=="string"||typeof y=="number"?b=String(y):b=Xs();}let S={source:this.getSourceName(e),mimeType:"application/json",recordIndex:p};if(typeof g=="object"&&g!==null)for(let[y,w]of Object.entries(g))!o?.includes(y)&&y!=="text"&&y!=="content"&&y!=="body"&&(typeof w!="string"||w.length<200)&&(typeof w!="object"||w===null)&&(S[y]=w);m.push({id:b,text:f.trim(),metadata:S});}return m}async getText(e,t){let{encoding:n="utf-8",maxSize:o,abortSignal:s}=t;if(typeof e=="string"){if(o&&e.length>o)throw new Error(`JSON exceeds maximum size: ${e.length} > ${o}`);return e}if(e instanceof Blob||e instanceof File){if(o&&e.size>o)throw new Error(`File exceeds maximum size: ${e.size} > ${o}`);return e.text()}if(e instanceof ArrayBuffer){if(o&&e.byteLength>o)throw new Error(`Buffer exceeds maximum size: ${e.byteLength} > ${o}`);return new TextDecoder(n).decode(e)}if(typeof e=="object"&&"type"in e&&e.type==="url"){let i=await fetch(e.url,{signal:s});if(!i.ok)throw new Error(`Failed to fetch URL: ${i.status} ${i.statusText}`);return i.text()}throw new Error("Unsupported source type for JSONLoader")}getSourceName(e){return typeof e=="string"?"json-string":e instanceof File?e.name:e instanceof Blob?"json-blob":typeof e=="object"&&"type"in e&&e.type==="url"?e.url:"json"}};function Io(r){return new B}function ei(){return `doc_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}function ti(r,e=",",t=`
48
+ `){let n=[],o=[],s="",i=false;for(let c=0;c<r.length;c++){let a=r[c],l=r[c+1];i?a==='"'?l==='"'?(s+='"',c++):i=false:s+=a:a==='"'?i=true:a===e?(o.push(s),s=""):a==="\r"&&l===`
49
+ `?(o.push(s),n.push(o),o=[],s="",c++):a===t||a==="\r"&&t===`
50
+ `?(o.push(s),n.push(o),o=[],s=""):s+=a;}return (s||o.length>0)&&(o.push(s),n.push(o)),n}var N=class{supports=[".csv","text/csv","application/csv"];canLoad(e){return typeof e=="string"?e.includes(",")&&e.includes(`
51
+ `):e instanceof File?e.name.endsWith(".csv"):e instanceof Blob?e.type==="text/csv"||e.type==="application/csv":false}async load(e,t={}){let{generateId:n,abortSignal:o,textColumn:s,textColumns:i,columnSeparator:c=" ",idColumn:a,columnDelimiter:l=",",rowDelimiter:u=`
52
+ `,hasHeader:d=true,skipEmpty:m=true}=t;o?.throwIfAborted();let p=await this.getText(e,t),g=ti(p,l,u);if(g.length===0)return [];let f,b;d?(f=g[0],b=g.slice(1)):b=g;let S=this.getColumnIndices(s,i,f),y=this.getColumnIndex(a,f),w=[];for(let x=0;x<b.length;x++){let v=b[x],R=[];for(let T of S)if(T>=0&&T<v.length){let ne=v[T]?.trim();ne&&R.push(ne);}let Ie=R.join(c);if(m&&!Ie.trim())continue;let E;n?E=n(e,x):y!==void 0&&y>=0&&v[y]?E=v[y].trim():E=ei();let I={source:this.getSourceName(e),mimeType:"text/csv",rowIndex:d?x+1:x};if(f)for(let T=0;T<f.length;T++){let ne=f[T]?.trim();ne&&v[T]!==void 0&&(I[ne]=v[T].trim());}w.push({id:E,text:Ie.trim(),metadata:I});}return w}async getText(e,t){let{encoding:n="utf-8",maxSize:o,abortSignal:s}=t;if(typeof e=="string"){if(o&&e.length>o)throw new Error(`CSV exceeds maximum size: ${e.length} > ${o}`);return e}if(e instanceof Blob||e instanceof File){if(o&&e.size>o)throw new Error(`File exceeds maximum size: ${e.size} > ${o}`);return e.text()}if(e instanceof ArrayBuffer){if(o&&e.byteLength>o)throw new Error(`Buffer exceeds maximum size: ${e.byteLength} > ${o}`);return new TextDecoder(n).decode(e)}if(typeof e=="object"&&"type"in e&&e.type==="url"){let i=await fetch(e.url,{signal:s});if(!i.ok)throw new Error(`Failed to fetch URL: ${i.status} ${i.statusText}`);return i.text()}throw new Error("Unsupported source type for CSVLoader")}getColumnIndices(e,t,n){if(t&&t.length>0)return t.map(o=>this.getColumnIndex(o,n)??-1).filter(o=>o>=0);if(e!==void 0){let o=this.getColumnIndex(e,n);if(o!==void 0)return [o]}if(n){let o=["text","content","body","description","message"];for(let s of o){let i=n.findIndex(c=>c.toLowerCase().trim()===s);if(i>=0)return [i]}}return [0]}getColumnIndex(e,t){if(e!==void 0){if(typeof e=="number")return e;if(t)return t.findIndex(n=>n.toLowerCase().trim()===e.toLowerCase())}}getSourceName(e){return typeof e=="string"?"csv-string":e instanceof File?e.name:e instanceof Blob?"csv-blob":typeof e=="object"&&"type"in e&&e.type==="url"?e.url:"csv"}};function Co(r){return new N}function ri(){return `doc_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}var Ro=["script","style","noscript","iframe","svg","canvas","video","audio","object","embed","applet","head","meta","link","template"];function ni(r,e){let t=e.ignoreTags??Ro,n=r.match(/<title[^>]*>([\s\S]*?)<\/title>/i),o=n?n[1].trim():void 0,s={},i=/<meta\s+(?:[^>]*?\s+)?(?:name|property)=["']([^"']+)["'][^>]*?content=["']([^"']+)["'][^>]*>/gi,c;for(;(c=i.exec(r))!==null;)s[c[1]]=c[2];let a=r;if(e.selector){let l=oi(e.selector);if(l){let u=r.match(l);u&&(a=u[0]);}}for(let l of t){let u=new RegExp(`<${l}[^>]*>[\\s\\S]*?<\\/${l}>`,"gi");a=a.replace(u,""),a=a.replace(new RegExp(`<${l}[^>]*\\/>`,"gi"),"");}return a=a.replace(/<!--[\s\S]*?-->/g,""),e.preserveFormatting&&(a=a.replace(/<\/(p|div|h[1-6]|li|tr|br|hr)[^>]*>/gi,`
53
+ `),a=a.replace(/<br\s*\/?>/gi,`
54
+ `),a=a.replace(/<hr\s*\/?>/gi,`
55
+ ---
56
+ `),a=a.replace(/<li[^>]*>/gi,`
57
+ \u2022 `)),a=a.replace(/<[^>]+>/g," "),a=si(a),e.preserveFormatting?a=a.split(`
58
+ `).map(l=>l.replace(/\s+/g," ").trim()).filter(l=>l).join(`
59
+ `):a=a.replace(/\s+/g," ").trim(),{text:a,title:o,metadata:s}}function oi(r){if(r.startsWith("#")){let e=r.slice(1);return new RegExp(`<[^>]+\\s+id=["']${e}["'][^>]*>[\\s\\S]*?<\\/[^>]+>`,"i")}if(r.startsWith(".")){let e=r.slice(1);return new RegExp(`<[^>]+\\s+class=["'][^"']*\\b${e}\\b[^"']*["'][^>]*>[\\s\\S]*?<\\/[^>]+>`,"i")}return new RegExp(`<${r}[^>]*>[\\s\\S]*?<\\/${r}>`,"i")}function si(r){let e={"&nbsp;":" ","&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&apos;":"'","&ndash;":"\u2013","&mdash;":"\u2014","&lsquo;":"\u2018","&rsquo;":"\u2019","&ldquo;":"\u201C","&rdquo;":"\u201D","&hellip;":"\u2026","&copy;":"\xA9","&reg;":"\xAE","&trade;":"\u2122","&euro;":"\u20AC","&pound;":"\xA3","&yen;":"\xA5","&cent;":"\xA2"},t=r;for(let[n,o]of Object.entries(e))t=t.replace(new RegExp(n,"gi"),o);return t=t.replace(/&#(\d+);/g,(n,o)=>String.fromCharCode(parseInt(o,10))),t=t.replace(/&#x([a-fA-F0-9]+);/g,(n,o)=>String.fromCharCode(parseInt(o,16))),t}function ii(r,e){if(typeof DOMParser<"u")try{return ai(r,e)}catch{}return ni(r,e)}function ai(r,e){let n=new DOMParser().parseFromString(r,"text/html"),o=n.querySelector("title")?.textContent?.trim(),s={};n.querySelectorAll("meta[name], meta[property]").forEach(l=>{let u=l.getAttribute("name")||l.getAttribute("property"),d=l.getAttribute("content");u&&d&&(s[u]=d);});let c=e.ignoreTags??Ro;for(let l of c)n.querySelectorAll(l).forEach(d=>d.remove());let a;if(e.selector)a=n.querySelector(e.selector)?.textContent??"";else if(e.selectors&&e.selectors.length>0){let l=[];for(let u of e.selectors){let d=n.querySelector(u);d?.textContent&&l.push(d.textContent);}a=l.join(`
60
+
61
+ `);}else a=n.body?.textContent??"";return e.preserveFormatting?a=a.split(`
62
+ `).map(l=>l.replace(/\s+/g," ").trim()).filter(l=>l).join(`
63
+ `):a=a.replace(/\s+/g," ").trim(),{text:a,title:o,metadata:s}}var j=class{supports=[".html",".htm","text/html","application/xhtml+xml"];canLoad(e){return typeof e=="string"?/<html|<!doctype|<head|<body/i.test(e):e instanceof File?e.name.endsWith(".html")||e.name.endsWith(".htm"):e instanceof Blob?e.type==="text/html"||e.type==="application/xhtml+xml":false}async load(e,t={}){let{generateId:n,abortSignal:o,extractMetadata:s=true}=t;o?.throwIfAborted();let i=await this.getText(e,t),{text:c,title:a,metadata:l}=ii(i,t);if(!c.trim())return [];let u;n?u=n(e,0):a?u=a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,50):u=ri();let d={source:this.getSourceName(e),mimeType:"text/html"};return a&&(d.title=a),s&&(l.description&&(d.description=l.description),l["og:title"]&&(d.ogTitle=l["og:title"]),l["og:description"]&&(d.ogDescription=l["og:description"]),l["og:image"]&&(d.ogImage=l["og:image"]),l.author&&(d.author=l.author),l.keywords&&(d.keywords=l.keywords)),[{id:u,text:c,metadata:d}]}async getText(e,t){let{encoding:n="utf-8",maxSize:o,abortSignal:s}=t;if(typeof e=="string"){if(o&&e.length>o)throw new Error(`HTML exceeds maximum size: ${e.length} > ${o}`);return e}if(e instanceof Blob||e instanceof File){if(o&&e.size>o)throw new Error(`File exceeds maximum size: ${e.size} > ${o}`);return e.text()}if(e instanceof ArrayBuffer){if(o&&e.byteLength>o)throw new Error(`Buffer exceeds maximum size: ${e.byteLength} > ${o}`);return new TextDecoder(n).decode(e)}if(typeof e=="object"&&"type"in e&&e.type==="url"){let i=await fetch(e.url,{signal:s});if(!i.ok)throw new Error(`Failed to fetch URL: ${i.status} ${i.statusText}`);return i.text()}throw new Error("Unsupported source type for HTMLLoader")}getSourceName(e){return typeof e=="string"?"html-string":e instanceof File?e.name:e instanceof Blob?"html-blob":typeof e=="object"&&"type"in e&&e.type==="url"?e.url:"html"}};function Oo(r){return new j}var ci=[new D,new B,new N,new j];async function Ao(r,e){let{loader:t,...n}=e??{};if(t)return di(t).load(r,n);for(let o of ci)if(o.canLoad?.(r))return o.load(r,n);return new D().load(r,n)}async function li(r,e){return (await Promise.all(r.map(n=>Ao(n,e)))).flat()}function di(r){switch(r){case "text":return new D;case "json":return new B;case "csv":return new N;case "html":return new j;default:throw new Error(`Unknown loader type: ${r}`)}}function ui(r){return {loaders:r,getLoader(e){return r.find(t=>t.canLoad?.(e))},async load(e,t){let n=this.getLoader(e);if(!n)throw new Error("No loader found for source");return n.load(e,t)},async loadMany(e,t){return (await Promise.all(e.map(o=>this.load(o,t)))).flat()}}}function Ht(r){return {beforeAdd:async e=>{let t=e;for(let n of r)n.beforeAdd&&(t=await n.beforeAdd(t));return t},afterAdd:async e=>{for(let t of r)t.afterAdd&&await t.afterAdd(e);},afterGet:async e=>{let t=e;for(let n of r)n.afterGet&&(t=await n.afterGet(t));return t},beforeDelete:async e=>{for(let t of r)if(t.beforeDelete&&!await t.beforeDelete(e))return false;return true},afterDelete:async e=>{for(let t of r)t.afterDelete&&await t.afterDelete(e);},beforeSearch:async(e,t)=>{let n=e,o=t;for(let s of r)if(s.beforeSearch){let i=await s.beforeSearch(n,o);n=i.query,o=i.options;}return {query:n,options:o}},afterSearch:async e=>{let t=e;for(let n of r)n.afterSearch&&(t=await n.afterSearch(t));return t},beforeClear:async()=>{for(let e of r)if(e.beforeClear&&!await e.beforeClear())return false;return true},afterClear:async()=>{for(let e of r)e.afterClear&&await e.afterClear();},onError:async(e,t)=>{for(let n of r)if(n.onError&&await n.onError(e,t))return true;return false}}}function To(r){let{db:e}=r,t=Array.isArray(r.middleware)?Ht(r.middleware):r.middleware,n=async(s,i)=>{throw t.onError&&await t.onError(s,i),s};return {async add(s){try{let i=s;t.beforeAdd&&(i=await t.beforeAdd(i)),await e.add(i),t.afterAdd&&await t.afterAdd(i);}catch(i){await n(i,"add");}},async addMany(s,i){try{let c=s;if(t.beforeAdd){c=[];for(let a of s)c.push(await t.beforeAdd(a));}if(await e.addMany(c,i),t.afterAdd)for(let a of c)await t.afterAdd(a);}catch(c){await n(c,"addMany");}},async get(s){try{let i=await e.get(s);return t.afterGet&&i?await t.afterGet(i)??null:i}catch(i){return n(i,"get")}},async update(s,i){try{await e.update(s,i);}catch(c){await n(c,"update");}},async delete(s){try{if(t.beforeDelete&&!await t.beforeDelete(s))return;await e.delete(s),t.afterDelete&&await t.afterDelete(s);}catch(i){await n(i,"delete");}},async deleteMany(s){try{if(t.beforeDelete){for(let i of s)if(!await t.beforeDelete(i))return}if(await e.deleteMany(s),t.afterDelete)for(let i of s)await t.afterDelete(i);}catch(i){await n(i,"deleteMany");}},async deleteWhere(s){return e.deleteWhere(s)},async search(s,i){try{let c=s,a=i??{};if(t.beforeSearch){let u=await t.beforeSearch(c,a);c=u.query,a=u.options;}let l=await e.search(c,a);return t.afterSearch&&(l=await t.afterSearch(l)),l}catch(c){return n(c,"search")}},collection(s){return e.collection(s)},async stats(){return e.stats()},async clear(){try{if(t.beforeClear&&!await t.beforeClear())return;await e.clear(),t.afterClear&&await t.afterClear();}catch(s){await n(s,"clear");}},async close(){return e.close()},async export(s){return e.export(s)},async import(s,i){return e.import(s,i)},getLockManager(){return e.getLockManager()},getBroadcaster(){return e.getBroadcaster()}}}var Be=class{cache=new Map;maxSize;ttlMs;constructor(e,t){this.maxSize=e,this.ttlMs=t;}get(e){let t=this.cache.get(e);if(t){if(Date.now()>t.expiry){this.cache.delete(e);return}return this.cache.delete(e),this.cache.set(e,t),t.value}}set(e,t){if(this.cache.delete(e),this.cache.size>=this.maxSize){let n=this.cache.keys().next().value;n!==void 0&&this.cache.delete(n);}this.cache.set(e,{value:t,expiry:Date.now()+this.ttlMs});}delete(e){this.cache.delete(e);}clear(){this.cache.clear();}has(e){let t=this.cache.get(e);return t?Date.now()>t.expiry?(this.cache.delete(e),false):true:false}};function mi(r,e){let t=Array.from(r.slice(0,8)).map(s=>s.toFixed(4)).join(","),n=e.k??10,o=e.filter?JSON.stringify(e.filter):"";return `search:${t}:${n}:${o}`}function Kt(r={}){let{maxSearchResults:e=100,ttlMs:t=6e4,cacheSearchResults:n=true,cacheDocuments:o=true}=r,s=new Be(e,t),i=new Be(e,t);return {afterGet:async c=>(o&&c&&i.set(c.id,c),c),afterAdd:async c=>{s.clear(),o&&i.set(c.id,c);},afterDelete:async c=>{s.clear(),i.delete(c);},beforeSearch:async(c,a)=>{if(!n)return {query:c,options:a};let l=mi(c,a),u=s.get(l);return u&&(a.__cacheHit=true,a.__cachedResults=u),{query:c,options:a}},afterSearch:async c=>c,afterClear:async()=>{s.clear(),i.clear();}}}var Do=Kt;function Zt(r={}){let{logger:e=console.log,level:t="info",timing:n=true,operations:o=["add","get","delete","search","clear"],formatter:s}=r,i=d=>o.includes(d),c=(d,m)=>{if(s)e(s(d,m));else {let p=`[VectorDB:${t.toUpperCase()}]`;e(p,d,m);}},a=new Map,l=d=>{n&&a.set(d,performance.now());},u=d=>{let m=a.get(d);if(a.delete(d),m!==void 0)return performance.now()-m};return {beforeAdd:async d=>(i("add")&&(l(`add:${d.id}`),c("add:start",{id:d.id,hasVector:!!d.vector,hasMetadata:!!d.metadata})),d),afterAdd:async d=>{if(i("add")){let m=u(`add:${d.id}`);c("add:complete",{id:d.id,durationMs:m});}},afterGet:async d=>(i("get")&&c("get",{id:d?.id,found:!!d}),d),beforeDelete:async d=>(i("delete")&&(l(`delete:${d}`),c("delete:start",{id:d})),true),afterDelete:async d=>{if(i("delete")){let m=u(`delete:${d}`);c("delete:complete",{id:d,durationMs:m});}},beforeSearch:async(d,m)=>{if(i("search")){let p=`search:${Date.now()}`;l(p),m.__searchId=p,c("search:start",{k:m.k??10,hasFilter:!!m.filter,dimensions:d.length});}return {query:d,options:m}},afterSearch:async d=>(i("search")&&c("search:complete",{resultCount:d.length,topScore:d[0]?.score}),d),beforeClear:async()=>(i("clear")&&(l("clear"),c("clear:start",{})),true),afterClear:async()=>{if(i("clear")){let d=u("clear");c("clear:complete",{durationMs:d});}},onError:async(d,m)=>(c("error",{operation:m,message:d.message,name:d.name}),false)}}var Po=Zt;function Jt(r={}){let{dimensions:e,validateValues:t=true,validateMetadata:n=true,maxMetadataSize:o=1024*1024,maxTextLength:s=100*1024,customValidator:i}=r,c=a=>{if(!a.id||typeof a.id!="string")throw new Error("Document must have a valid string ID");if(e!==void 0&&a.vector&&a.vector.length!==e)throw new Error(`Vector dimension mismatch: expected ${e}, got ${a.vector.length}`);if(t&&a.vector)for(let u=0;u<a.vector.length;u++){let d=a.vector[u];if(!Number.isFinite(d))throw new Error(`Invalid vector value at index ${u}: ${d}`)}let l=a.metadata?.__text;if(typeof l=="string"&&l.length>s)throw new Error(`Text content exceeds maximum length: ${l.length} > ${s}`);if(n&&a.metadata){let u=new Blob([JSON.stringify(a.metadata)]).size;if(u>o)throw new Error(`Metadata exceeds maximum size: ${u} > ${o}`)}if(i){let u=i(a);if(typeof u=="string")throw new Error(`Custom validation failed: ${u}`);if(u===false)throw new Error("Custom validation failed")}};return {beforeAdd:async a=>(c(a),a)}}var Lo=Jt;var Fo={maxRetries:3,initialDelayMs:100,maxDelayMs:5e3,backoffMultiplier:2,jitter:true,shouldRetry:()=>true};function Xt(r={}){let e={...Fo,...r};return {wrapEmbed:async({doEmbed:t})=>{let n;for(let o=0;o<=e.maxRetries;o++)try{return await t()}catch(s){if(n=s instanceof Error?s:new Error(String(s)),o===e.maxRetries||!e.shouldRetry(n,o+1))throw n;let i=e.initialDelayMs*Math.pow(e.backoffMultiplier,o);if(i=Math.min(i,e.maxDelayMs),e.jitter){let c=i*.25;i=i-c+Math.random()*c*2;}await pi(i);}throw n??new Error("Retry failed")}}}function Bo(r={}){return Xt(r)}function pi(r){return new Promise(e=>setTimeout(e,r))}var jo={maxRequests:100,windowMs:1e3,queue:false,maxQueueSize:1e3};function Yt(r={}){let e={...jo,...r},t=[],n=[],o=false,s=()=>{let c=Date.now();for(;t.length>0&&t[0]<c-e.windowMs;)t.shift();return t.length<e.maxRequests?0:t[0]+e.windowMs-c},i=async()=>{if(!(o||n.length===0)){for(o=true;n.length>0;){let c=s();c>0&&await No(c);let a=n.shift();a&&(t.push(Date.now()),a.resolve());}o=false;}};return {wrapEmbed:async({doEmbed:c})=>{let a=s();if(a>0)if(e.queue){if(n.length>=e.maxQueueSize)throw new Error("Rate limit queue full");r.onRateLimit?.(a),await new Promise((l,u)=>{n.push({resolve:l,reject:u}),i();});}else r.onRateLimit?.(a),await No(a);return t.push(Date.now()),c()}}}function zo(r={}){return Yt(r)}function No(r){return new Promise(e=>setTimeout(e,r))}async function Ne(){if(typeof navigator>"u"||!navigator.storage?.estimate)return null;try{let r=await navigator.storage.estimate(),e=await navigator.storage.persisted?.()??!1,t=r.usage??0,n=r.quota??0;return {usedBytes:t,quotaBytes:n,percentUsed:n>0?t/n*100:0,isPersisted:e,availableBytes:Math.max(0,n-t)}}catch{return null}}async function gi(){if(typeof navigator>"u"||!navigator.storage?.persist)return false;try{return await navigator.storage.persist()}catch{return false}}async function fi(){if(typeof navigator>"u"||!navigator.storage?.persisted)return false;try{return await navigator.storage.persisted()}catch{return false}}async function hi(r={}){let{warnAt:e=80,criticalAt:t=95,onWarning:n,onCritical:o}=r,s=await Ne();return s?s.percentUsed>=t?(o?.(s),"critical"):s.percentUsed>=e?(n?.(s),"warning"):"ok":"ok"}async function yi(r){let e=await Ne();return !e||r<=0?0:Math.floor(e.availableBytes/r)}function bi(r){if(r===0)return "0 B";let e=["B","KB","MB","GB","TB"],t=1024,n=Math.floor(Math.log(Math.abs(r))/Math.log(t));return `${(r/Math.pow(t,n)).toFixed(1)} ${e[n]}`}function wi(r={}){let{intervalMs:e=6e4,warnAt:t=80,criticalAt:n=95,onStatusChange:o}=r,s="ok",i=null,c=async()=>{let a=await Ne();if(!a)return;let l="ok";a.percentUsed>=n?l="critical":a.percentUsed>=t&&(l="warning"),l!==s&&(s=l,o?.(l,a));};return c(),i=setInterval(c,e),()=>{i&&(clearInterval(i),i=null);}}function $o(r){let e=r.match(/^(\d+(?:\.\d+)?)\s*(s|m|h|d|w|M|y)$/);if(!e)throw new Error(`Invalid duration format: "${r}". Expected format like '30d', '24h', '1w', etc.`);let t=parseFloat(e[1]),n=e[2],s={s:1e3,m:60*1e3,h:3600*1e3,d:1440*60*1e3,w:10080*60*1e3,M:720*60*60*1e3,y:365*24*60*60*1e3}[n];if(s===void 0)throw new Error(`Unknown duration unit: "${n}"`);return t*s}function xi(r){return r<1e3?`${r}ms`:r<6e4?`${(r/1e3).toFixed(1)}s`:r<36e5?`${(r/6e4).toFixed(1)}m`:r<864e5?`${(r/36e5).toFixed(1)}h`:`${(r/864e5).toFixed(1)}d`}async function Wo(r,e={}){let t=performance.now(),{maxAge:n,keepMinCount:o=0,targetUsagePercent:s,batchSize:i=100,dryRun:c=false,onProgress:a}=e;a?.({phase:"analyzing",current:0,total:0,deletedCount:0,freedBytes:0});let l=await r.getDocumentsWithTimestamps(),u=l.length;l.sort((f,b)=>f.createdAt-b.createdAt);let d=[];if(n){let f=$o(n),b=Date.now()-f;d=l.filter(S=>S.createdAt<b);}else if(s!==void 0){let f=Math.max(0,100-s),b=Math.floor(u*(f/100));d=l.slice(0,b);}let m=Math.max(0,u-o);d.length>m&&(d=d.slice(0,m));let p=d.reduce((f,b)=>f+(b.sizeBytes??1024),0);if(c)return {deletedCount:d.length,freedBytes:p,deletedIds:d.map(f=>f.id),durationMs:performance.now()-t};let g=0;for(let f=0;f<d.length;f+=i){let b=d.slice(f,f+i),S=b.map(y=>y.id);await r.deleteMany(S),g+=b.length,a?.({phase:"deleting",current:g,total:d.length,deletedCount:g,freedBytes:b.reduce((y,w)=>y+(w.sizeBytes??1024),0)});}return a?.({phase:"complete",current:g,total:g,deletedCount:g,freedBytes:p}),{deletedCount:g,freedBytes:p,durationMs:performance.now()-t}}async function Mi(r,e){let t=await Wo(r,{...e,dryRun:true}),n=await r.count();return {documentCount:t.deletedCount,estimatedBytes:t.freedBytes,percentageOfTotal:n>0?t.deletedCount/n*100:0}}var vi={monthly:{maxAge:"30d"},weekly:{maxAge:"7d"},daily:{maxAge:"24h"},conservative:{targetUsagePercent:80,keepMinCount:100},aggressive:{targetUsagePercent:50,keepMinCount:50}};function je(){if(typeof navigator>"u")return {isOnline:true};let r=navigator.connection;return {isOnline:navigator.onLine,connectionType:r?.type,effectiveType:r?.effectiveType,downlink:r?.downlink,rtt:r?.rtt,saveData:r?.saveData}}function Si(){return typeof navigator>"u"?false:!navigator.onLine}function _o(){return typeof navigator>"u"?true:navigator.onLine}function Vo(r){if(typeof window>"u")return ()=>{};let e=()=>r(je());window.addEventListener("online",e),window.addEventListener("offline",e);let t=navigator.connection;return t&&t.addEventListener("change",e),()=>{window.removeEventListener("online",e),window.removeEventListener("offline",e),t&&t.removeEventListener("change",e);}}function ki(r){return new Promise((e,t)=>{if(_o()){e();return}let n,o,s=()=>{n&&clearTimeout(n),o&&o();};o=Vo(i=>{i.isOnline&&(s(),e());}),r&&(n=setTimeout(()=>{s(),t(new Error("Timeout waiting for network"));},r));})}function Ei(){let r=je();return !(!r.isOnline||r.saveData||r.effectiveType==="slow-2g"||r.effectiveType==="2g")}function Ii(){let r=je();return r.isOnline?r.saveData?{useLargeModels:false,preloadAssets:false,downloadInBackground:false}:r.effectiveType==="slow-2g"||r.effectiveType==="2g"?{useLargeModels:false,preloadAssets:false,downloadInBackground:false}:r.effectiveType==="3g"?{useLargeModels:false,preloadAssets:true,downloadInBackground:true}:{useLargeModels:true,preloadAssets:true,downloadInBackground:true}:{useLargeModels:false,preloadAssets:false,downloadInBackground:false}}var ze=class{listeners=new Map;on(e,t){let n=this.listeners.get(e);return n||(n=new Set,this.listeners.set(e,n)),n.add(t),()=>{n?.delete(t),n?.size===0&&this.listeners.delete(e);}}once(e,t){let n=s=>{o(),t(s);},o=this.on(e,n);return o}emit(e,t){let n=this.listeners.get(e);if(n)for(let o of n)try{o(t);}catch(s){console.error(`Error in event handler for "${String(e)}":`,s);}}async emitAsync(e,t){let n=this.listeners.get(e);if(n){let o=[];for(let s of n)try{let i=s(t);i instanceof Promise&&o.push(i);}catch(i){console.error(`Error in event handler for "${String(e)}":`,i);}await Promise.all(o);}}off(e){e!==void 0?this.listeners.delete(e):this.listeners.clear();}listenerCount(e){return this.listeners.get(e)?.size??0}hasListeners(e){return this.listenerCount(e)>0}eventNames(){return Array.from(this.listeners.keys())}};function Uo(){return new ze}var Ci=Uo();function Ri(r){return {afterAdd:e=>{r.emit("add",{id:e.id,collection:e.metadata?.collection});},afterDelete:e=>{r.emit("delete",{id:e});},afterClear:()=>{r.emit("clear",{documentCount:0});}}}async function $e(){if(typeof navigator>"u"||!("gpu"in navigator))return false;try{return !!await navigator.gpu?.requestAdapter()}catch{return false}}function We(){return typeof navigator>"u"?false:"ml"in navigator}function _e(){try{if(typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function"){let r=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(r instanceof WebAssembly.Module)return new WebAssembly.Instance(r)instanceof WebAssembly.Instance}}catch{}return false}function er(){try{let r=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,0,0,11]);return new WebAssembly.Module(r),!0}catch{return false}}function tr(){try{if(typeof SharedArrayBuffer>"u"||typeof Atomics>"u")return !1;let r=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]);return new WebAssembly.Module(r),!0}catch{return false}}function Ve(){try{return typeof indexedDB<"u"}catch{return false}}function rr(){return typeof Worker<"u"}function Ue(){return typeof SharedArrayBuffer<"u"}function qe(){return typeof crossOriginIsolated<"u"&&crossOriginIsolated}function Ge(){return typeof navigator<"u"&&"storage"in navigator}function nr(){return typeof BroadcastChannel<"u"}function or(){return typeof navigator<"u"&&"locks"in navigator}function sr(){return typeof navigator<"u"&&"serviceWorker"in navigator}function Oi(){return typeof navigator>"u"?{userAgent:"",platform:"node",hardwareConcurrency:1,maxTouchPoints:0}:{userAgent:navigator.userAgent,platform:navigator.platform,hardwareConcurrency:navigator.hardwareConcurrency||1,deviceMemory:navigator.deviceMemory,maxTouchPoints:navigator.maxTouchPoints||0}}function Ai(){let r={};if(typeof navigator<"u"&&(r.deviceMemory=navigator.deviceMemory),typeof performance<"u"&&performance.memory){let e=performance.memory;r.totalJSHeapSize=e.totalJSHeapSize,r.usedJSHeapSize=e.usedJSHeapSize,r.jsHeapSizeLimit=e.jsHeapSizeLimit;}return r}function ir(){return typeof navigator<"u"&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:1}async function ar(){if(typeof navigator>"u"||!navigator.storage)return null;try{let[r,e]=await Promise.all([navigator.storage.estimate(),navigator.storage.persisted()]);return {quota:r.quota??0,usage:r.usage??0,persisted:e}}catch{return null}}function cr(){if(typeof navigator>"u")return {name:"unknown",version:"0",engine:"unknown"};let r=navigator.userAgent;return r.includes("Chrome/")&&!r.includes("Edg/")?{name:"Chrome",version:r.match(/Chrome\/(\d+(?:\.\d+)*)/)?.[1]??"unknown",engine:"Blink"}:r.includes("Edg/")?{name:"Edge",version:r.match(/Edg\/(\d+(?:\.\d+)*)/)?.[1]??"unknown",engine:"Blink"}:r.includes("Firefox/")?{name:"Firefox",version:r.match(/Firefox\/(\d+(?:\.\d+)*)/)?.[1]??"unknown",engine:"Gecko"}:r.includes("Safari/")&&!r.includes("Chrome")?{name:"Safari",version:r.match(/Version\/(\d+(?:\.\d+)*)/)?.[1]??"unknown",engine:"WebKit"}:{name:"unknown",version:"0",engine:"unknown"}}function lr(){if(typeof navigator>"u")return typeof process<"u"?{name:process.platform,version:process.version}:{name:"unknown",version:"0"};let r=navigator.userAgent;if(r.includes("Windows")){let t=r.match(/Windows NT (\d+(?:\.\d+)*)/)?.[1]??"10";return {name:"Windows",version:t==="10.0"?"10/11":t}}return r.includes("Mac OS X")?{name:"macOS",version:r.match(/Mac OS X (\d+[._]\d+(?:[._]\d+)?)/)?.[1]?.replace(/_/g,".")??"unknown"}:r.includes("iPhone")||r.includes("iPad")?{name:"iOS",version:r.match(/OS (\d+[._]\d+(?:[._]\d+)?)/)?.[1]?.replace(/_/g,".")??"unknown"}:r.includes("Android")?{name:"Android",version:r.match(/Android (\d+(?:\.\d+)*)/)?.[1]??"unknown"}:r.includes("Linux")?{name:"Linux",version:"unknown"}:{name:"unknown",version:"0"}}function dr(){if(typeof navigator>"u")return "unknown";let r=navigator.userAgent;return r.includes("iPad")||r.includes("Android")&&!r.includes("Mobile")?"tablet":r.includes("iPhone")||r.includes("iPod")||r.includes("Android")&&r.includes("Mobile")||r.includes("webOS")||r.includes("BlackBerry")||r.includes("IEMobile")||r.includes("Opera Mini")?"mobile":navigator.maxTouchPoints>0&&typeof screen<"u"&&screen.width<1024?"tablet":"desktop"}function ur(){if(typeof document>"u")return null;try{let r=document.createElement("canvas"),e=r.getContext("webgl2")||r.getContext("webgl")||r.getContext("experimental-webgl");if(!e)return null;let t=e.getExtension("WEBGL_debug_renderer_info");return t?{vendor:e.getParameter(t.UNMASKED_VENDOR_WEBGL)??"unknown",renderer:e.getParameter(t.UNMASKED_RENDERER_WEBGL)??"unknown"}:null}catch{return null}}async function He(){let r=cr(),e=lr(),t=dr(),n=ur(),o=await ar(),s=await $e();return {browser:r,device:{type:t,os:e.name,osVersion:e.version},hardware:{cores:ir(),memory:typeof navigator<"u"?navigator.deviceMemory:void 0,gpu:n?.renderer},features:{webgpu:s,webnn:We(),wasm:_e(),simd:er(),threads:tr(),indexeddb:Ve(),opfs:Ge(),webworkers:rr(),sharedarraybuffer:Ue(),crossOriginisolated:qe(),serviceworker:sr(),broadcastchannel:nr(),weblocks:or()},storage:{quotaBytes:o?.quota??0,usedBytes:o?.usage??0,availableBytes:(o?.quota??0)-(o?.usage??0),isPersisted:o?.persisted??false}}}async function qo(r){let t={webgpu:$e,webnn:We,wasm:_e,simd:er,threads:tr,indexeddb:Ve,sharedarraybuffer:Ue,opfs:Ge,serviceworker:sr}[r];return t?await t()?{supported:true}:Go(r):{supported:false,reason:`Unknown feature: ${r}`}}function Go(r){return {webgpu:{supported:false,reason:"WebGPU is not available in this browser",fallbacks:[{feature:"webgpu",alternative:"wasm",reason:"WebAssembly is widely supported",tradeoffs:["2-5x slower inference","Higher CPU usage"]}],browserRecommendations:[{browser:"Chrome",minVersion:"113",features:["WebGPU"]},{browser:"Edge",minVersion:"113",features:["WebGPU"]},{browser:"Firefox",minVersion:"118",features:["WebGPU"],note:"Behind flag in about:config"},{browser:"Safari",minVersion:"18",features:["WebGPU"],note:"macOS 15+ / iOS 18+"}]},webnn:{supported:false,reason:"WebNN is not available in this browser",fallbacks:[{feature:"webnn",alternative:"webgpu",reason:"WebGPU provides GPU acceleration",tradeoffs:["May have higher overhead"]},{feature:"webnn",alternative:"wasm",reason:"WebAssembly is widely supported",tradeoffs:["No hardware acceleration"]}],browserRecommendations:[{browser:"Chrome",minVersion:"119",features:["WebNN"],note:"Behind flag, limited support"}]},sharedarraybuffer:{supported:false,reason:qe()?"SharedArrayBuffer not available":"Cross-origin isolation headers not set",fallbacks:[{feature:"sharedarraybuffer",alternative:"single-threaded",reason:"Run without multi-threading",tradeoffs:["Slower processing","May block UI during heavy operations"]}],browserRecommendations:[{browser:"All",minVersion:"N/A",features:["SharedArrayBuffer"],note:"Requires headers: Cross-Origin-Opener-Policy: same-origin, Cross-Origin-Embedder-Policy: require-corp"}]},indexeddb:{supported:false,reason:"IndexedDB is not available (possibly private browsing mode)",fallbacks:[{feature:"indexeddb",alternative:"memory",reason:"In-memory storage for session",tradeoffs:["Data not persisted","Lost on page refresh"]}]},wasm:{supported:false,reason:"WebAssembly is not supported in this browser",browserRecommendations:[{browser:"Chrome",minVersion:"57",features:["WebAssembly"]},{browser:"Firefox",minVersion:"52",features:["WebAssembly"]},{browser:"Safari",minVersion:"11",features:["WebAssembly"]},{browser:"Edge",minVersion:"16",features:["WebAssembly"]}]},simd:{supported:false,reason:"WebAssembly SIMD is not supported",fallbacks:[{feature:"simd",alternative:"scalar",reason:"Fall back to scalar operations",tradeoffs:["2-4x slower for vector operations"]}],browserRecommendations:[{browser:"Chrome",minVersion:"91",features:["WASM SIMD"]},{browser:"Firefox",minVersion:"89",features:["WASM SIMD"]},{browser:"Safari",minVersion:"16.4",features:["WASM SIMD"]}]},threads:{supported:false,reason:"WebAssembly threads are not supported",fallbacks:[{feature:"threads",alternative:"single-threaded",reason:"Run without multi-threading",tradeoffs:["Cannot utilize multiple CPU cores"]}]},opfs:{supported:false,reason:"Origin Private File System is not available",fallbacks:[{feature:"opfs",alternative:"indexeddb",reason:"Use IndexedDB for storage",tradeoffs:["Slower for large files","Less efficient binary storage"]}]},serviceworker:{supported:false,reason:"Service Workers are not available",fallbacks:[{feature:"serviceworker",alternative:"none",reason:"Operate without offline caching",tradeoffs:["No offline support","Models must be re-downloaded"]}]}}[r]??{supported:false,reason:`Feature not supported: ${r}`}}async function Ti(r){let e=await He(),t=e.storage.availableBytes;if(r.estimatedStorage>t)return {supported:false,reason:`Insufficient storage. Required: ${Qe(r.estimatedStorage)}, Available: ${Qe(t)}`,memoryRequired:r.estimatedMemory,storageRequired:r.estimatedStorage,storageAvailable:t,recommendedDevice:"wasm",fallbackModels:mr(r.modelId)};let n=e.hardware.memory?e.hardware.memory*1024*1024*1024:void 0;if(n&&r.estimatedMemory>n*.7)return {supported:false,reason:`Insufficient memory. Required: ${Qe(r.estimatedMemory)}, Available: ~${Qe(n)}`,memoryRequired:r.estimatedMemory,memoryAvailable:n,storageRequired:r.estimatedStorage,storageAvailable:t,recommendedDevice:"wasm",fallbackModels:mr(r.modelId)};if(r.minCores&&e.hardware.cores<r.minCores)return {supported:false,reason:`Insufficient CPU cores. Required: ${r.minCores}, Available: ${e.hardware.cores}`,memoryRequired:r.estimatedMemory,memoryAvailable:n,storageRequired:r.estimatedStorage,storageAvailable:t,recommendedDevice:"wasm",fallbackModels:mr(r.modelId)};let o="wasm";return r.prefersWebGPU!==false&&e.features.webgpu?o="webgpu":e.features.wasm?o="wasm":o="cpu",{supported:true,memoryRequired:r.estimatedMemory,memoryAvailable:n,storageRequired:r.estimatedStorage,storageAvailable:t,recommendedDevice:o}}var Di={"Xenova/whisper-large-v3":[{modelId:"Xenova/whisper-medium",memoryRequired:1500,reason:"Better accuracy than small"},{modelId:"Xenova/whisper-small",memoryRequired:500,reason:"Good balance of speed and accuracy"},{modelId:"Xenova/whisper-tiny",memoryRequired:150,reason:"Fastest, suitable for real-time"}],"Xenova/whisper-medium":[{modelId:"Xenova/whisper-small",memoryRequired:500,reason:"Smaller with good accuracy"},{modelId:"Xenova/whisper-tiny",memoryRequired:150,reason:"Fastest option"}],"Xenova/all-mpnet-base-v2":[{modelId:"Xenova/all-MiniLM-L6-v2",memoryRequired:90,reason:"Smaller with good quality"},{modelId:"Xenova/paraphrase-MiniLM-L3-v2",memoryRequired:60,reason:"Fastest embedding model"}],"Llama-3.2-3B-Instruct-q4f16":[{modelId:"Llama-3.2-1B-Instruct-q4f16",memoryRequired:800,reason:"Smaller but capable"},{modelId:"SmolLM2-360M-Instruct-q4f16",memoryRequired:300,reason:"Very small, basic tasks"}]};function mr(r){return Di[r]??[]}function Pi(r){let e=[];for(let t of r){let n=Go(t);n.fallbacks&&e.push(...n.fallbacks);}return e}async function Li(r){let e=[];for(let n of r.features){let o=await qo(n);o.browserRecommendations&&e.push(...o.browserRecommendations);}let t=new Map;for(let n of e){let o=t.get(n.browser);if(o){let s=new Set([...o.features,...n.features]);o.features=Array.from(s),n.minVersion>o.minVersion&&(o.minVersion=n.minVersion),n.note&&!o.note?.includes(n.note)&&(o.note=o.note?`${o.note}; ${n.note}`:n.note);}else t.set(n.browser,{...n});}return Array.from(t.values())}function Qe(r){if(r===0)return "0 Bytes";let e=1024,t=["Bytes","KB","MB","GB","TB"],n=Math.floor(Math.log(r)/Math.log(e));return parseFloat((r/Math.pow(e,n)).toFixed(2))+" "+t[n]}async function Fi(){let r=await He(),e=Bi(r),t=Ni(r),n=ji(r);return {timestamp:new Date,capabilities:r,scores:e,recommendations:t,issues:n}}function Bi(r){let e=0;r.features.wasm&&(e+=20),r.features.simd&&(e+=15),r.features.threads&&(e+=10),r.features.webgpu&&(e+=30),r.features.webnn&&(e+=10),r.hardware.cores>=4&&(e+=10),r.hardware.memory&&r.hardware.memory>=4&&(e+=5);let t=0,n=r.storage.quotaBytes/(1024*1024*1024),o=r.storage.usedBytes/r.storage.quotaBytes*100;n>=10?t+=40:n>=5?t+=30:n>=1?t+=20:t+=10,o<50?t+=30:o<80?t+=20:t+=10,r.storage.isPersisted&&(t+=20),r.features.opfs&&(t+=10);let s=0;return r.features.webgpu?s+=40:r.features.wasm&&(s+=20),r.features.simd&&(s+=20),r.features.threads&&r.hardware.cores>=4&&(s+=20),r.hardware.cores>=8?s+=10:r.hardware.cores>=4&&(s+=5),r.hardware.gpu?.toLowerCase().includes("nvidia")?s+=10:(r.hardware.gpu?.toLowerCase().includes("amd")||r.hardware.gpu?.toLowerCase().includes("apple"))&&(s+=8),{mlReadiness:Math.min(100,e),storageCapacity:Math.min(100,t),performancePotential:Math.min(100,s)}}function Ni(r){let e=[];return !r.features.webgpu&&r.browser.name==="Firefox"&&e.push("Enable WebGPU in Firefox: about:config \u2192 dom.webgpu.enabled = true"),!r.features.webgpu&&r.browser.name!=="Chrome"&&r.browser.name!=="Edge"&&e.push("For best performance, use Chrome 113+ or Edge 113+ for WebGPU support"),!r.features.crossOriginisolated&&r.features.sharedarraybuffer===false&&e.push("Enable cross-origin isolation for multi-threading: Add COOP and COEP headers"),r.storage.isPersisted||e.push("Request persistent storage to prevent data loss: navigator.storage.persist()"),r.storage.usedBytes/r.storage.quotaBytes>.8&&e.push("Storage is over 80% full. Consider cleaning up old data."),r.hardware.memory&&r.hardware.memory<4&&e.push("Low device memory detected. Use smaller models (e.g., whisper-tiny instead of whisper-large)"),r.features.simd||e.push("WASM SIMD not available. Vector operations will be slower."),e}function ji(r){let e=[];return r.features.wasm||e.push({severity:"error",message:"WebAssembly is not supported",suggestion:"Use a modern browser (Chrome 57+, Firefox 52+, Safari 11+)"}),r.features.indexeddb||e.push({severity:"error",message:"IndexedDB is not available",suggestion:"Disable private browsing mode or use a different browser"}),r.features.webworkers||e.push({severity:"warning",message:"Web Workers not available",suggestion:"Heavy operations will block the UI"}),!r.features.webgpu&&!r.features.webnn&&e.push({severity:"warning",message:"No GPU acceleration available",suggestion:"ML inference will use CPU only, which is slower"}),r.hardware.cores<2&&e.push({severity:"warning",message:"Single-core device detected",suggestion:"Performance may be limited for ML workloads"}),r.device.type==="mobile"&&e.push({severity:"info",message:"Mobile device detected",suggestion:"Use smaller models for better performance and battery life"}),r.features.opfs||e.push({severity:"info",message:"Origin Private File System not available",suggestion:"Large file storage will use IndexedDB instead"}),e}function zi(r){let e=[],{capabilities:t,scores:n,recommendations:o,issues:s}=r;e.push("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),e.push(" CAPABILITY REPORT "),e.push("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),e.push(""),e.push(`Generated: ${r.timestamp.toISOString()}`),e.push(""),e.push("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),e.push("\u2502 BROWSER & DEVICE \u2502"),e.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),e.push(` Browser: ${t.browser.name} ${t.browser.version} (${t.browser.engine})`),e.push(` Device: ${t.device.type} - ${t.device.os} ${t.device.osVersion}`),e.push(` Cores: ${t.hardware.cores}`),e.push(` Memory: ${t.hardware.memory?`${t.hardware.memory} GB`:"unknown"}`),e.push(` GPU: ${t.hardware.gpu??"unknown"}`),e.push(""),e.push("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),e.push("\u2502 FEATURES \u2502"),e.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518");let i=[["WebGPU",t.features.webgpu],["WebNN",t.features.webnn],["WebAssembly",t.features.wasm],["WASM SIMD",t.features.simd],["WASM Threads",t.features.threads],["IndexedDB",t.features.indexeddb],["OPFS",t.features.opfs],["Web Workers",t.features.webworkers],["SharedArrayBuffer",t.features.sharedarraybuffer],["Cross-Origin Isolated",t.features.crossOriginisolated],["Service Worker",t.features.serviceworker],["BroadcastChannel",t.features.broadcastchannel],["Web Locks",t.features.weblocks]];for(let[c,a]of i){let l=a?"\u2713":"\u2717",u=a?"supported":"not available";e.push(` ${l} ${c.padEnd(22)} ${u}`);}if(e.push(""),e.push("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),e.push("\u2502 STORAGE \u2502"),e.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),e.push(` Quota: ${pr(t.storage.quotaBytes)}`),e.push(` Used: ${pr(t.storage.usedBytes)}`),e.push(` Available: ${pr(t.storage.availableBytes)}`),e.push(` Persisted: ${t.storage.isPersisted?"yes":"no"}`),e.push(""),e.push("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),e.push("\u2502 SCORES \u2502"),e.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),e.push(` ML Readiness: ${gr(n.mlReadiness)}`),e.push(` Storage Capacity: ${gr(n.storageCapacity)}`),e.push(` Performance Potential: ${gr(n.performancePotential)}`),e.push(""),s.length>0){e.push("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),e.push("\u2502 ISSUES \u2502"),e.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518");for(let c of s){let a=c.severity==="error"?"\u274C":c.severity==="warning"?"\u26A0\uFE0F":"\u2139\uFE0F";e.push(` ${a} [${c.severity.toUpperCase()}] ${c.message}`),c.suggestion&&e.push(` \u2192 ${c.suggestion}`);}e.push("");}if(o.length>0){e.push("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),e.push("\u2502 RECOMMENDATIONS \u2502"),e.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518");for(let c of o)e.push(` \u2022 ${c}`);e.push("");}return e.push("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),e.join(`
64
+ `)}function pr(r){if(r===0)return "0 Bytes";let e=1024,t=["Bytes","KB","MB","GB","TB"],n=Math.floor(Math.log(r)/Math.log(e));return parseFloat((r/Math.pow(e,n)).toFixed(2))+" "+t[n]}function gr(r){return `${"\u2588".repeat(Math.floor(r/10))+"\u2591".repeat(10-Math.floor(r/10))} ${r}%`}var ye=class{logs=[];listeners=new Set;config;constructor(e={}){this.config={maxEntries:e.maxEntries??1e3,persistLogs:e.persistLogs??false,logHeaders:e.logHeaders??false,logBody:e.logBody??false,categories:e.categories??[],minLevel:e.minLevel??"info",filter:e.filter??(()=>true)};}log(e){let t={id:qi(),timestamp:new Date,...e};return !this.config.filter(t)||this.config.categories.length>0&&!this.config.categories.includes(e.category)||(this.logs.push(t),this.logs.length>this.config.maxEntries&&(this.logs=this.logs.slice(-this.config.maxEntries)),this.notifyListeners(t)),t}update(e,t){let n=this.logs.findIndex(s=>s.id===e);if(n===-1)return null;let o={...this.logs[n],...t};return this.logs[n]=o,this.notifyListeners(o),o}getLogs(e={}){let t=[...this.logs];if(e.category&&(t=t.filter(n=>n.category===e.category)),e.state&&(t=t.filter(n=>n.state===e.state)),e.urlPattern){let n=typeof e.urlPattern=="string"?new RegExp(e.urlPattern):e.urlPattern;t=t.filter(o=>n.test(o.url));}return e.since&&(t=t.filter(n=>n.timestamp>=e.since)),e.until&&(t=t.filter(n=>n.timestamp<=e.until)),t.sort((n,o)=>(e.order==="asc"?1:-1)*(n.timestamp.getTime()-o.timestamp.getTime())),e.limit&&(t=t.slice(0,e.limit)),t}getStats(){let e=this.logs.filter(d=>d.state==="completed"),t=this.logs.filter(d=>d.state==="failed"),n=e.reduce((d,m)=>d+(m.responseSize??0),0),o=e.reduce((d,m)=>d+(m.requestSize??0),0),s=e.reduce((d,m)=>d+(m.duration??0),0),i={};for(let d of this.logs)i[d.category]||(i[d.category]={requests:0,downloadBytes:0,uploadBytes:0}),i[d.category].requests++,i[d.category].downloadBytes+=d.responseSize??0,i[d.category].uploadBytes+=d.requestSize??0;let c={};for(let d of e)d.status&&(c[d.status]=(c[d.status]??0)+1);let l=Date.now()-6e4,u=this.logs.filter(d=>d.timestamp.getTime()>=l);return {totalRequests:this.logs.length,completedRequests:e.length,failedRequests:t.length,totalDownloadBytes:n,totalUploadBytes:o,totalDuration:s,averageSpeed:s>0?n/s*1e3:0,byCategory:i,byStatus:c,requestsPerMinute:u.length}}clear(e){if(!e?.olderThan){this.logs=[];return}let t;typeof e.olderThan=="string"?t=new Date(Date.now()-Gi(e.olderThan)):t=e.olderThan,this.logs=this.logs.filter(n=>n.timestamp>=t);}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notifyListeners(e){for(let t of this.listeners)try{t(e);}catch(n){console.error("Error in network logger listener:",n);}}},he=null;function $i(r){let e=new ye(r);return he||(he=e),e}function U(){return he||(he=new ye),he}function Wi(r){return U().getLogs(r)}function _i(r){U().clear(r);}function Vi(r){return U().subscribe(r)}function Ui(){return U().getStats()}function qi(){return `${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function Gi(r){let e=r.match(/^(\d+(?:\.\d+)?)\s*(s|m|h|d|w)$/);if(!e)return 0;let t=parseFloat(e[1]),n=e[2],o={s:1e3,m:60*1e3,h:3600*1e3,d:1440*60*1e3,w:10080*60*1e3};return t*(o[n]??0)}function Qo(r={}){let{category:e="other",onProgress:t,logHeaders:n=false,categoryResolver:o}=r;return async(s,i)=>{let c=typeof s=="string"?s:s instanceof URL?s.href:s.url,a=(i?.method??"GET").toUpperCase(),l=o?o(c):e,u=U(),d=performance.now(),m=u.log({type:a==="GET"||a==="HEAD"?"download":"upload",url:c,method:a,state:"pending",category:l,requestHeaders:n&&i?.headers?Object.fromEntries(new Headers(i.headers).entries()):void 0,requestSize:i?.body?typeof i.body=="string"?i.body.length:0:void 0});try{u.update(m.id,{state:"in-progress"});let p=await fetch(s,i),g=p.headers.get("content-length"),f=g?parseInt(g,10):void 0;if(t&&f){let S=p.body;if(S){let y=Qi(p,S,f,(x,v)=>{u.update(m.id,{progress:Math.round(x/v*100)}),t(x,v,c);}),w=performance.now()-d;return u.update(m.id,{state:"completed",status:p.status,statusText:p.statusText,responseSize:f,duration:w,progress:100,responseHeaders:n?Object.fromEntries(p.headers.entries()):void 0}),y}}let b=performance.now()-d;return u.update(m.id,{state:"completed",status:p.status,statusText:p.statusText,responseSize:f,duration:b,progress:100,responseHeaders:n?Object.fromEntries(p.headers.entries()):void 0}),p}catch(p){let g=performance.now()-d;throw u.update(m.id,{state:"failed",error:p instanceof Error?p.message:String(p),duration:g}),p}}}function Qi(r,e,t,n){let o=0,s=e.getReader(),i=new ReadableStream({async start(c){for(;;){let{done:a,value:l}=await s.read();if(a){c.close();break}o+=l.length,n(o,t),c.enqueue(l);}}});return new Response(i,{headers:r.headers,status:r.status,statusText:r.statusText})}var te=null;function Hi(r={}){if(typeof globalThis.fetch>"u"||te)return;te=globalThis.fetch;let e=r.categories?n=>{for(let[o,s]of Object.entries(r.categories))if(n.includes(o))return s;return "other"}:void 0,t=Qo({category:"other",categoryResolver:e,onProgress:r.onProgress,logHeaders:r.logHeaders});globalThis.fetch=t;}function Ki(){te&&(globalThis.fetch=te,te=null);}function Zi(){return te!==null}function be(r){if(r instanceof xe)return {title:"Model Not Found",message:`The embedding model "${r.modelId}" could not be found.`,hint:"Check the model ID and ensure it exists on Hugging Face.",isRetryable:false,code:r.code,severity:"error",originalError:r};if(r instanceof Me)return {title:"Model Loading Failed",message:`Could not load the model "${r.modelId}".`,hint:r.hint??"Check your network connection and try again.",isRetryable:true,code:r.code,severity:"error",originalError:r};if(r instanceof ve)return {title:"Storage Full",message:"Your browser storage is full.",hint:"Clear old data or use a different browser profile.",isRetryable:false,code:r.code,severity:"error",originalError:r};if(r instanceof Se)return {title:"Storage Blocked",message:"Cannot access browser storage.",hint:"You may be in private browsing mode. Try using a regular browser window.",isRetryable:false,code:r.code,severity:"error",originalError:r};if(r instanceof we)return {title:"Dimension Mismatch",message:`Vector dimension mismatch: expected ${r.expected}, got ${r.received}.`,hint:"Ensure you are using the same embedding model for all operations.",isRetryable:false,code:"DIMENSION_MISMATCH",severity:"error",originalError:r};if(r instanceof ke)return {title:"Offline",message:"This operation requires an internet connection.",hint:"Check your network connection and try again.",isRetryable:true,code:r.code,severity:"warning",originalError:r};if(r instanceof re)return {title:"Network Error",message:r.message,hint:r.hint??"Check your network connection and try again.",isRetryable:true,code:r.code,severity:"error",originalError:r};if(r instanceof Ee)return {title:"Feature Not Supported",message:`${r.feature} is not available in this browser.`,hint:r.hint,isRetryable:false,code:r.code,severity:"warning",originalError:r};if(r instanceof z)return {title:"Embedding Error",message:r.message,hint:r.hint,isRetryable:true,code:r.code,severity:"error",originalError:r};if(r instanceof q)return {title:"Validation Error",message:r.message,hint:r.hint,isRetryable:false,code:r.code,severity:"error",originalError:r};if(r instanceof P)return {title:"Storage Error",message:r.message,hint:r.hint,isRetryable:true,code:r.code,severity:"error",originalError:r};if(r instanceof M)return {title:"Error",message:r.message,hint:r.hint,isRetryable:true,code:r.code,severity:"error",originalError:r};if(r instanceof Error){let e=r.message.toLowerCase();return e.includes("network")||e.includes("fetch")?{title:"Network Error",message:"A network error occurred.",hint:"Check your internet connection and try again.",isRetryable:true,severity:"error",originalError:r}:e.includes("timeout")?{title:"Timeout",message:"The operation timed out.",hint:"The server may be slow. Try again later.",isRetryable:true,severity:"warning",originalError:r}:e.includes("abort")||e.includes("cancel")?{title:"Cancelled",message:"The operation was cancelled.",isRetryable:true,severity:"info",originalError:r}:{title:"Error",message:r.message,isRetryable:true,severity:"error",originalError:r}}return {title:"Unexpected Error",message:"Something went wrong.",hint:"Please try again. If the problem persists, contact support.",isRetryable:true,severity:"error"}}function Ho(r){let e=be(r),t=[],n="\x1B[31m",o="\x1B[33m",s="\x1B[36m",i="\x1B[0m",c=e.severity==="error"?n:e.severity==="warning"?o:s;return t.push(`${c}[${e.code??"ERROR"}] ${e.title}${i}`),t.push(` ${e.message}`),e.hint&&t.push(` \u{1F4A1} ${e.hint}`),e.originalError?.stack&&(t.push(""),t.push(" Stack trace:"),t.push(` ${e.originalError.stack.split(`
65
+ `).slice(1).join(`
66
+ `)}`)),t.join(`
67
+ `)}function Ko(r){let e=be(r),t=e.severity==="error"?"#fee2e2":e.severity==="warning"?"#fef3c7":"#dbeafe",n=e.severity==="error"?"#fca5a5":e.severity==="warning"?"#fcd34d":"#93c5fd",o=e.severity==="error"?"#b91c1c":e.severity==="warning"?"#92400e":"#1e40af",s=`
68
+ <div style="
69
+ background: ${t};
70
+ border: 1px solid ${n};
71
+ border-radius: 8px;
72
+ padding: 16px;
73
+ font-family: system-ui, -apple-system, sans-serif;
74
+ ">
75
+ <h3 style="margin: 0 0 8px; color: ${o}; font-size: 16px;">
76
+ ${fr(e.title)}
77
+ </h3>
78
+ <p style="margin: 0 0 8px; color: #374151;">
79
+ ${fr(e.message)}
80
+ </p>
81
+ `;return e.hint&&(s+=`
82
+ <p style="margin: 0; color: #6b7280; font-size: 14px;">
83
+ \u{1F4A1} ${fr(e.hint)}
84
+ </p>
85
+ `),e.isRetryable&&(s+=`
86
+ <p style="margin: 8px 0 0; color: #059669; font-size: 14px;">
87
+ \u21BB This operation can be retried
88
+ </p>
89
+ `),s+="</div>",s}function fr(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function Zo(r,e){let t=be(r),n=t.severity==="error"?console.error:t.severity==="warning"?console.warn:console.info;n(`[${t.code??"ERROR"}] ${t.title}`),n(` ${t.message}`),t.hint&&n(` \u{1F4A1} ${t.hint}`),e&&n(" Context:",e),t.originalError?.stack&&n(t.originalError.stack);}var M=class extends Error{code;hint;context;cause;constructor(e,t,n){super(e,{cause:n?.cause}),this.name="LocalModeError",this.code=t,this.hint=n?.hint,this.context=n?.context,this.cause=n?.cause;}toString(){let e=`[${this.code}] ${this.message}`;return this.hint&&(e+=`
90
+
91
+ \u{1F4A1} Hint: ${this.hint}`),e}toJSON(){return {name:this.name,code:this.code,message:this.message,hint:this.hint,context:this.context,cause:this.cause?.message}}},hr=class extends M{constructor(e,t){super(e,"CONFIG_ERROR",{hint:t}),this.name="ConfigError";}},q=class extends M{constructor(e,t){super(e,"VALIDATION_ERROR",{hint:t}),this.name="ValidationError";}},we=class extends q{expected;received;constructor(e,t){super(`Vector dimension mismatch: expected ${e}, got ${t}`,`Ensure all vectors have ${e} dimensions. Check that you're using the same embedding model.`),this.name="DimensionMismatchError",this.expected=e,this.received=t;}},yr=class extends q{option;constructor(e,t,n){super(`Invalid option '${e}': expected ${n}, got ${typeof t}`,"Check the API documentation for correct option types."),this.name="InvalidOptionsError",this.option=e;}},z=class extends M{constructor(e,t){super(e,"EMBEDDING_ERROR",t),this.name="EmbeddingError";}},xe=class extends z{modelId;constructor(e){super(`Embedding model not found: ${e}`,{hint:`Check that the model ID is correct. Popular models include:
92
+ \u2022 Xenova/all-MiniLM-L6-v2 (384 dimensions)
93
+ \u2022 Xenova/bge-small-en-v1.5 (384 dimensions)
94
+ \u2022 Xenova/all-mpnet-base-v2 (768 dimensions)
95
+
96
+ See https://huggingface.co/models?library=transformers.js for available models.`}),this.name="ModelNotFoundError",this.modelId=e;}},Me=class extends z{modelId;constructor(e,t){super(`Failed to load embedding model: ${e}`,{hint:`Model loading failed. Try:
97
+ 1. Check your network connection (first load downloads the model)
98
+ 2. Ensure sufficient storage space for model cache
99
+ 3. Try a smaller model: Xenova/all-MiniLM-L6-v2
100
+ 4. Check browser console for detailed error messages`,cause:t}),this.name="ModelLoadError",this.modelId=e;}},br=class extends z{expected;received;constructor(e,t,n){super(`Embedding dimension mismatch: expected ${e}, got ${t}`,{hint:n?`Model '${n}' produces ${t}-dimensional embeddings, but database expects ${e}. Either use a different model or create a new database with the correct dimensions.`:`Ensure your embedding model outputs ${e}-dimensional vectors.`}),this.name="EmbeddingDimensionError",this.expected=e,this.received=t;}},Ke=class extends M{modelId;constructor(e,t){super(e,"MODEL_ERROR",t),this.name="ModelError",this.modelId=t?.modelId;}},wr=class extends Ke{constructor(e,t){super(e,{...t,hint:t?.hint??"Check input data and model compatibility."}),this.name="InferenceError";}},P=class extends M{constructor(e,t){super(e,"STORAGE_ERROR",t),this.name="StorageError";}},ve=class extends P{usedBytes;quotaBytes;constructor(e){super("Storage quota exceeded",{hint:`Your browser storage is full. Try:
101
+ 1. Clear old data: await db.cleanup({ maxAge: '30d' })
102
+ 2. Request persistent storage: await navigator.storage.persist()
103
+ 3. Export and delete old collections
104
+ 4. Use smaller models to reduce cache size`}),this.name="QuotaExceededError",this.usedBytes=e?.usedBytes,this.quotaBytes=e?.quotaBytes;}},Se=class extends P{constructor(){super("IndexedDB access is blocked",{hint:`IndexedDB may be blocked because:
105
+ \u2022 You're in Safari/Firefox Private Browsing mode
106
+ \u2022 IndexedDB is disabled in browser settings
107
+ \u2022 Another tab has an outdated version open (refresh all tabs)
108
+
109
+ Solution: Use in-memory storage for private browsing:
110
+ createVectorDB({ storage: new MemoryStorage() })`}),this.name="IndexedDBBlockedError";}},xr=class extends P{documentId;constructor(e){super(`Document not found: ${e}`,{hint:"Check that the document ID is correct and the document exists in the database."}),this.name="DocumentNotFoundError",this.documentId=e;}},Mr=class extends P{fromVersion;toVersion;constructor(e,t,n){super(`Migration failed from version ${e} to ${t}`,{hint:"Database migration failed. You may need to export data and recreate the database.",cause:n}),this.name="MigrationError",this.fromVersion=e,this.toVersion=t;}},vr=class extends M{middlewareName;constructor(e,t){super(e,"MIDDLEWARE_ERROR",t),this.name="MiddlewareError",this.middlewareName=t?.middlewareName;}},Sr=class extends M{source;constructor(e,t){super(e,"LOADER_ERROR",t),this.name="LoaderError",this.source=t?.source;}},kr=class extends M{operator;constructor(e,t){super(e,"FILTER_ERROR",t),this.name="FilterError",this.operator=t?.operator;}},Ze=class extends M{constructor(e,t){super(e,"SYNC_ERROR",t),this.name="SyncError";}},Er=class extends Ze{lockName;constructor(e){super(`Failed to acquire lock: ${e}`,{hint:"Another tab or process may be holding this lock. Try again later."}),this.name="LockError",this.lockName=e;}},Je=class extends M{constructor(e,t){super(e,"AUDIO_ERROR",t),this.name="AudioError";}},G=class extends M{constructor(e,t){super(e,"VISION_ERROR",t),this.name="VisionError";}},Xe=class extends M{constructor(e,t){super(e,"GENERATION_ERROR",t),this.name="GenerationError";}},Ir=class extends Xe{maxLength;actualLength;constructor(e,t){super(`Context length exceeded: ${t} tokens (max: ${e})`,{hint:`Your prompt is too long. Try:
111
+ 1. Shorten your prompt or system prompt
112
+ 2. Use a model with longer context (e.g., Llama-3.2)
113
+ 3. Summarize or chunk your input text`}),this.name="ContextLengthExceededError",this.maxLength=e,this.actualLength=t;}},Ye=class extends M{constructor(e,t){super(e,"TRANSLATION_ERROR",t),this.name="TranslationError";}},Cr=class extends Ye{language;supportedLanguages;constructor(e,t){let n=t?`Supported languages: ${t.slice(0,10).join(", ")}${t.length>10?"...":""}`:"Check the model documentation for supported language pairs.";super(`Language not supported: ${e}`,{hint:n}),this.name="UnsupportedLanguageError",this.language=e,this.supportedLanguages=t;}},Rr=class extends M{constructor(e,t){super(e,"SUMMARIZATION_ERROR",t),this.name="SummarizationError";}},et=class extends M{constructor(e,t){super(e,"FILL_MASK_ERROR",t),this.name="FillMaskError";}},Or=class extends et{expectedToken;constructor(e){super(`No mask token found in input. Expected: ${e}`,{hint:`Add the mask token to your text where you want predictions. Example: "The capital of France is ${e}."`}),this.name="MissingMaskTokenError",this.expectedToken=e;}},Ar=class extends M{constructor(e,t){super(e,"QUESTION_ANSWERING_ERROR",t),this.name="QuestionAnsweringError";}},Tr=class extends M{constructor(e,t){super(e,"OCR_ERROR",t),this.name="OCRError";}},Dr=class extends G{format;constructor(e){super(`Unsupported image format${e?`: ${e}`:""}`,{hint:"Supported formats: JPEG, PNG, WebP, GIF. Ensure the image is not corrupted."}),this.name="ImageFormatError",this.format=e;}},Pr=class extends M{constructor(e,t){super(e,"DOCUMENT_QA_ERROR",t),this.name="DocumentQAError";}},tt=class extends M{constructor(e,t){super(e,"TABLE_QA_ERROR",t),this.name="TableQAError";}},Lr=class extends tt{constructor(e){super(`Invalid table format: ${e}`,{hint:'Table must have headers and rows arrays. Example: { headers: ["Name", "Age"], rows: [["John", "30"]] }'}),this.name="InvalidTableFormatError";}},Fr=class extends G{constructor(e,t){super(e,t),this.name="SegmentationError";}},Br=class extends G{constructor(e,t){super(e,t),this.name="ObjectDetectionError";}},Nr=class extends G{constructor(e,t){super(e,t),this.name="ImageUpscaleError";}},jr=class extends Je{constructor(e,t){super(e,t),this.name="SpeechSynthesisError";}},re=class extends M{url;status;constructor(e,t){super(e,"NETWORK_ERROR",t),this.name="NetworkError",this.url=t?.url,this.status=t?.status;}},ke=class extends re{constructor(e){super(`Cannot ${e}: offline`,{hint:"This operation requires network access. Check your connection and try again."}),this.name="OfflineError";}},Ee=class extends M{feature;constructor(e,t){super(`Feature not supported: ${e}`,"FEATURE_NOT_SUPPORTED",{hint:t??`This browser does not support ${e}. Try using a modern browser like Chrome or Firefox.`}),this.name="FeatureNotSupportedError",this.feature=e;}},zr=class extends M{constructor(e,t){super(e,"ENVIRONMENT_ERROR",{hint:t}),this.name="EnvironmentError";}};function Jo(r){let e=r;return function(){let n=e+=1831565813;return n=Math.imul(n^n>>>15,n|1),n^=n+Math.imul(n^n>>>7,n|61),((n^n>>>14)>>>0)/4294967296}}function rt(r,e=42,t=true){let n=Jo(e),o=new Float32Array(r);for(let s=0;s<r;s++)o[s]=n()*2-1;if(t){let s=0;for(let i=0;i<r;i++)s+=o[i]*o[i];if(s=Math.sqrt(s),s>0)for(let i=0;i<r;i++)o[i]/=s;}return o}function Ji(r,e,t=0){let n=[];for(let o=0;o<r;o++)n.push(rt(e,t+o));return n}function Xi(r={}){let{dimensions:e=384,delay:t=0,failCount:n=0,failError:o=new Error("Mock embedding failed"),modelId:s="mock:test-model",seed:i=42,onEmbed:c}=r,a=0,l=0;return {modelId:s,provider:"mock",dimensions:e,maxEmbeddingsPerCall:100,supportsParallelCalls:true,async doEmbed(u){if(l++,c&&c(u),u.abortSignal?.throwIfAborted?.(),t>0&&(await new Promise(m=>setTimeout(m,t)),u.abortSignal?.throwIfAborted?.()),a<n)throw a++,o;return {embeddings:u.values.map((m,p)=>{let g=i+Yi(m)+p;return rt(e,g)}),usage:{tokens:u.values.reduce((m,p)=>m+p.split(/\s+/).length,0)},response:{id:`mock-${l}`,modelId:s,timestamp:new Date}}},get callCount(){return l},resetCallCount(){l=0,a=0;}}}function Yi(r){let e=0;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);e=(e<<5)-e+n,e=e&e;}return Math.abs(e)}function ea(r={}){let{labels:e=["positive","negative","neutral"],delay:t=0,defaultLabel:n,defaultScore:o=.9}=r;return {modelId:"mock:classifier",provider:"mock",labels:e,async doClassify({texts:s,abortSignal:i}){i?.throwIfAborted?.(),t>0&&(await new Promise(l=>setTimeout(l,t)),i?.throwIfAborted?.());let c=performance.now();return {results:s.map(l=>{let u=l.toLowerCase(),d=n,m=o;d||(u.includes("great")||u.includes("good")||u.includes("love")?(d="positive",m=.95):u.includes("bad")||u.includes("terrible")||u.includes("hate")?(d="negative",m=.92):(d="neutral",m=.88));let p={};return e.forEach(g=>{p[g]=g===d?m:(1-m)/(e.length-1);}),{label:d,score:m,allScores:p}}),usage:{inputTokens:s.reduce((l,u)=>l+u.split(/\s+/).length,0),durationMs:performance.now()-c}}}}}function ta(r={}){let{entityTypes:e=["PERSON","ORG","LOC","DATE"],delay:t=0}=r,n={PERSON:/\b(John|Jane|Bob|Alice|Mike|Sarah)\b/gi,ORG:/\b(Microsoft|Google|Apple|Amazon|OpenAI|Meta)\b/gi,LOC:/\b(Seattle|New York|London|Paris|Tokyo|Berlin)\b/gi,DATE:/\b(\d{4}|\d{1,2}\/\d{1,2}\/\d{2,4}|January|February|March|April|May|June|July|August|September|October|November|December)\b/gi};return {modelId:"mock:ner",provider:"mock",entityTypes:e,async doExtract({texts:o,abortSignal:s}){s?.throwIfAborted?.(),t>0&&(await new Promise(a=>setTimeout(a,t)),s?.throwIfAborted?.());let i=performance.now();return {results:o.map(a=>{let l=[];for(let u of e){let d=n[u];if(!d)continue;let m;for(d.lastIndex=0;(m=d.exec(a))!==null;)l.push({text:m[0],type:u,start:m.index,end:m.index+m[0].length,score:.95});}return l.sort((u,d)=>u.start-d.start),{entities:l}}),usage:{inputTokens:o.reduce((a,l)=>a+l.split(/\s+/).length,0),durationMs:performance.now()-i}}}}}function ra(r={}){let{languages:e=["en"],delay:t=0,mockText:n="This is a test transcription."}=r;return {modelId:"mock:whisper",provider:"mock",languages:e,async doTranscribe({audio:o,language:s="en",returnTimestamps:i=false,abortSignal:c}){c?.throwIfAborted?.(),t>0&&(await new Promise(m=>setTimeout(m,t)),c?.throwIfAborted?.());let a=performance.now(),l=0;o instanceof Blob?l=o.size:(o instanceof ArrayBuffer||o instanceof Float32Array)&&(l=o.byteLength);let u=Math.max(1,l/32e3),d={text:n,language:s,usage:{audioDurationSec:u,durationMs:performance.now()-a}};if(i){let m=n.split(" "),p=u/m.length;d.segments=m.map((g,f)=>({start:f*p,end:(f+1)*p,text:g}));}return d}}}function na(){let r=new Map;return {async get(e){return r.get(e)},async set(e,t){r.set(e,t);},async delete(e){r.delete(e);},async keys(){return Array.from(r.keys())},async clear(){r.clear();},async close(){r.clear();},get size(){return r.size},getData(){return new Map(r)}}}function oa(r={}){let{name:e="mock-db",dimensions:t=384,delay:n=0}=r,o=new Map;async function s(){n>0&&await new Promise(i=>setTimeout(i,n));}return {name:e,dimensions:t,documents:o,async add(i){await s(),o.set(i.id,{...i});},async addMany(i){await s();for(let c of i)o.set(c.id,{...c});},async get(i){return await s(),o.get(i)??null},async getMany(i){return await s(),i.map(c=>o.get(c)??null)},async update(i,c){await s();let a=o.get(i);a&&o.set(i,{...a,...c});},async delete(i){await s(),o.delete(i);},async deleteMany(i){await s();for(let c of i)o.delete(c);},async search(i,c={}){await s();let{k:a=10,threshold:l=0}=c,u=[];for(let d of o.values()){if(c.filter&&!ia(d,c.filter))continue;let m=sa(i,d.vector);m>=l&&u.push({id:d.id,score:m,vector:d.vector,metadata:d.metadata});}return u.sort((d,m)=>m.score-d.score),u.slice(0,a)},async count(){return o.size},async clear(){await s(),o.clear();},async close(){o.clear();}}}function sa(r,e){let t=0,n=0,o=0;for(let i=0;i<r.length;i++)t+=r[i]*e[i],n+=r[i]*r[i],o+=e[i]*e[i];let s=Math.sqrt(n)*Math.sqrt(o);return s===0?0:t/s}function ia(r,e){for(let[t,n]of Object.entries(e)){let o=r.metadata?.[t];if(typeof n=="object"&&n!==null)for(let[s,i]of Object.entries(n))switch(s){case "$eq":if(o!==i)return false;break;case "$ne":if(o===i)return false;break;case "$gt":if(!(o>i))return false;break;case "$gte":if(!(o>=i))return false;break;case "$lt":if(!(o<i))return false;break;case "$lte":if(!(o<=i))return false;break;case "$in":if(!Array.isArray(i)||!i.includes(o))return false;break;case "$nin":if(!Array.isArray(i)||i.includes(o))return false;break;}else if(o!==n)return false}return true}function aa(r={}){let{delay:e=0,mockCaption:t="A photo showing test content."}=r;return {modelId:"mock:image-caption",provider:"mock",async doCaption({images:n,abortSignal:o}){o?.throwIfAborted?.(),e>0&&(await new Promise(i=>setTimeout(i,e)),o?.throwIfAborted?.());let s=performance.now();return {captions:n.map(()=>t),usage:{durationMs:performance.now()-s}}}}}function ca(r={}){let{delay:e=0}=r;return {modelId:"mock:segmentation",provider:"mock",segmentationType:"semantic",async doSegment({images:t,abortSignal:n}){n?.throwIfAborted?.(),e>0&&(await new Promise(s=>setTimeout(s,e)),n?.throwIfAborted?.());let o=performance.now();return {results:t.map(()=>({masks:[{label:"background",mask:new Uint8Array(100),score:.98},{label:"object",mask:new Uint8Array(100),score:.95}]})),usage:{durationMs:performance.now()-o}}}}}function la(r={}){let{delay:e=0}=r;return {modelId:"mock:object-detection",provider:"mock",async doDetect({images:t,abortSignal:n}){n?.throwIfAborted?.(),e>0&&(await new Promise(s=>setTimeout(s,e)),n?.throwIfAborted?.());let o=performance.now();return {results:t.map(()=>({objects:[{label:"person",score:.95,box:{x:10,y:20,width:100,height:200}},{label:"dog",score:.88,box:{x:150,y:100,width:80,height:60}}]})),usage:{imageCount:t.length,durationMs:performance.now()-o}}}}}function da(r={}){let{dimensions:e=512,delay:t=0,seed:n=42}=r;return {modelId:"mock:image-feature",provider:"mock",dimensions:e,async doExtract({images:o,abortSignal:s}){s?.throwIfAborted?.(),t>0&&(await new Promise(c=>setTimeout(c,t)),s?.throwIfAborted?.());let i=performance.now();return {features:o.map((c,a)=>rt(e,n+a)),usage:{imageCount:o.length,durationMs:performance.now()-i}}}}}function ua(r={}){let{delay:e=0,taskType:t="upscale"}=r;return {modelId:"mock:image-to-image",provider:"mock",taskType:t,async doTransform({images:n,abortSignal:o}){o?.throwIfAborted?.(),e>0&&(await new Promise(i=>setTimeout(i,e)),o?.throwIfAborted?.());let s=performance.now();return {images:n.map(()=>new Blob(["mock image data"],{type:"image/png"})),usage:{imageCount:n.length,durationMs:performance.now()-s}}}}}function ma(r={}){let{delay:e=0,sampleRate:t=16e3}=r;return {modelId:"mock:tts",provider:"mock",sampleRate:t,async doSynthesize({text:n,abortSignal:o}){o?.throwIfAborted?.(),e>0&&(await new Promise(u=>setTimeout(u,e)),o?.throwIfAborted?.());let s=performance.now(),i=Math.max(.5,n.length/10),c=Math.floor(t*i),a=new Float32Array(c);return {audio:new Blob([a.buffer],{type:"audio/wav"}),sampleRate:t,usage:{characterCount:n.length,durationMs:performance.now()-s}}}}}function pa(r={}){let{delay:e=0,mockResponse:t="This is a mock response.",contextLength:n=4096}=r;return {modelId:"mock:llm",provider:"mock",contextLength:n,async doGenerate({prompt:o,abortSignal:s}){s?.throwIfAborted?.(),e>0&&(await new Promise(l=>setTimeout(l,e)),s?.throwIfAborted?.());let i=performance.now(),c=o.split(/\s+/).length,a=t.split(/\s+/).length;return {text:t,finishReason:"stop",usage:{inputTokens:c,outputTokens:a,totalTokens:c+a,durationMs:performance.now()-i}}},async*doStream({prompt:o,abortSignal:s}){s?.throwIfAborted?.(),e>0&&await new Promise(l=>setTimeout(l,e));let i=performance.now(),c=o.split(/\s+/).length,a=t.split(" ");for(let l=0;l<a.length;l++){s?.throwIfAborted?.();let u=(l>0?" ":"")+a[l],d=l===a.length-1;yield {text:u,done:d,finishReason:d?"stop":void 0,usage:d?{inputTokens:c,outputTokens:a.length,totalTokens:c+a.length,durationMs:performance.now()-i}:void 0};}}}}function ga(r={}){let{delay:e=0,translationPrefix:t="[translated]"}=r;return {modelId:"mock:translation",provider:"mock",async doTranslate({texts:n,abortSignal:o}){o?.throwIfAborted?.(),e>0&&(await new Promise(l=>setTimeout(l,e)),o?.throwIfAborted?.());let s=performance.now(),i=n.map(l=>`${t} ${l}`),c=n.join(" ").split(/\s+/).length,a=i.join(" ").split(/\s+/).length;return {translations:i,usage:{inputTokens:c,outputTokens:a,durationMs:performance.now()-s}}}}}function fa(r={}){let{delay:e=0,mockSummary:t}=r;return {modelId:"mock:summarization",provider:"mock",async doSummarize({texts:n,maxLength:o,abortSignal:s}){s?.throwIfAborted?.(),e>0&&(await new Promise(u=>setTimeout(u,e)),s?.throwIfAborted?.());let i=performance.now(),c=[],a=0,l=0;for(let u of n){let d=t;if(!d){let m=u.split(/[.!?]/)[0]+".";d=o&&m.length>o?m.substring(0,o)+"...":m;}c.push(d),a+=u.split(/\s+/).length,l+=d.split(/\s+/).length;}return {summaries:c,usage:{inputTokens:a,outputTokens:l,durationMs:performance.now()-i}}}}}function ha(r={}){let{delay:e=0,mockPredictions:t=[{token:"great",score:.85},{token:"wonderful",score:.1},{token:"fantastic",score:.05}]}=r;return {modelId:"mock:fill-mask",provider:"mock",async doFillMask({texts:n,topK:o=5,abortSignal:s}){s?.throwIfAborted?.(),e>0&&(await new Promise(l=>setTimeout(l,e)),s?.throwIfAborted?.());let i=performance.now(),c=n.join(" ").split(/\s+/).length,a=t.slice(0,o).map(l=>({...l,sequence:n[0]?.replace("[MASK]",l.token)||l.token}));return {results:n.map(()=>a),usage:{inputTokens:c,durationMs:performance.now()-i}}}}}function ya(r={}){let{delay:e=0}=r;return {modelId:"mock:qa",provider:"mock",maxContextLength:512,async doAnswer({questions:t,topK:n=1,abortSignal:o}){o?.throwIfAborted?.(),e>0&&(await new Promise(a=>setTimeout(a,e)),o?.throwIfAborted?.());let s=performance.now(),i=[],c=0;for(let{question:a,context:l}of t){let u=l.split(/\s+/),d=u.slice(0,Math.min(10,u.length)).join(" "),m=0,p=d.length;c+=a.split(/\s+/).length+l.split(/\s+/).length,i.push([{answer:d,score:.92,start:m,end:p}].slice(0,n));}return {results:i,usage:{inputTokens:c,durationMs:performance.now()-s}}}}}function ba(r={}){let{delay:e=0,mockText:t="Sample extracted text from image."}=r;return {modelId:"mock:ocr",provider:"mock",supportedLanguages:["en","es","fr","de"],async doOCR({images:n,detectRegions:o,abortSignal:s}){s?.throwIfAborted?.(),e>0&&(await new Promise(l=>setTimeout(l,e)),s?.throwIfAborted?.());let i=performance.now(),c=n.map(()=>t),a=o?n.map(()=>[{text:t,confidence:.95,bbox:{x:10,y:10,width:200,height:30}}]):void 0;return {texts:c,regions:a,usage:{durationMs:performance.now()-i}}}}}function wa(r={}){let{delay:e=0}=r;return {modelId:"mock:document-qa",provider:"mock",async doAskDocument({questions:t,abortSignal:n}){n?.throwIfAborted?.(),e>0&&(await new Promise(s=>setTimeout(s,e)),n?.throwIfAborted?.());let o=performance.now();return {answers:t.map(()=>({answer:"Mock answer from document.",score:.88})),usage:{durationMs:performance.now()-o}}},async doAskTable({questions:t,abortSignal:n}){n?.throwIfAborted?.(),e>0&&(await new Promise(s=>setTimeout(s,e)),n?.throwIfAborted?.());let o=performance.now();return {answers:t.map(()=>({answer:"Mock answer from table.",score:.9,cells:["10"],aggregator:"SUM"})),usage:{durationMs:performance.now()-o}}}}}async function xa(r,e=5e3,t=50){let n=Date.now();for(;Date.now()-n<e;){if(await r())return;await new Promise(o=>setTimeout(o,t));}throw new Error(`waitFor timed out after ${e}ms`)}function Ma(){let r,e;return {promise:new Promise((n,o)=>{r=n,e=o;}),resolve:r,reject:e}}function va(){let r=[],e=((...t)=>{r.push(t);});return Object.defineProperty(e,"calls",{get:()=>r}),Object.defineProperty(e,"callCount",{get:()=>r.length}),e.reset=()=>{r.length=0;},e}export{Je as AudioError,A as BM25,W as Broadcaster,N as CSVLoader,vi as CleanupStrategies,hr as ConfigError,Ir as ContextLengthExceededError,Q as DEFAULT_BM25_OPTIONS,k as DEFAULT_CHUNK_OPTIONS,Xo as DEFAULT_COLLECTION,oe as DEFAULT_CONFIG,O as DEFAULT_HYBRID_OPTIONS,H as DEFAULT_INGEST_OPTIONS,Tt as DEFAULT_RECURSIVE_SEPARATORS,we as DimensionMismatchError,xr as DocumentNotFoundError,Pr as DocumentQAError,Dt as ENGLISH_STOP_WORDS,br as EmbeddingDimensionError,z as EmbeddingError,zr as EnvironmentError,ze as EventEmitter,Ee as FeatureNotSupportedError,et as FillMaskError,kr as FilterError,Xe as GenerationError,L as HNSWIndex,j as HTMLLoader,pe as HybridSearch,Dr as ImageFormatError,Nr as ImageUpscaleError,Se as IndexedDBBlockedError,ce as IndexedDBStorage,wr as InferenceError,yr as InvalidOptionsError,Lr as InvalidTableFormatError,B as JSONLoader,fe as Keystore,Sr as LoaderError,M as LocalModeError,Er as LockError,$ as LockManager,ie as MIGRATIONS,le as MemoryStorage,vr as MiddlewareError,Mr as MigrationError,at as MigrationManager,Or as MissingMaskTokenError,Ke as ModelError,Me as ModelLoadError,xe as ModelNotFoundError,re as NetworkError,ye as NetworkLogger,Tr as OCRError,Br as ObjectDetectionError,ke as OfflineError,Ar as QuestionAnsweringError,ve as QuotaExceededError,Fr as SegmentationError,jr as SpeechSynthesisError,P as StorageError,Rr as SummarizationError,Ze as SyncError,tt as TableQAError,D as TextLoader,Ye as TranslationError,Cr as UnsupportedLanguageError,q as ValidationError,Oe as VectorDBWorkerProxy,G as VisionError,se as WAL,it as WAL_STORE_NAME,_n as answerQuestion,ns as applyFilter,Gn as askDocument,Hn as askTable,Kt as cachingMiddleware,yn as captionImage,qo as checkFeatureSupport,Ti as checkModelSupport,hi as checkQuotaWithWarnings,_ as chunk,ao as chunkDocuments,nn as classify,gn as classifyImage,fn as classifyImageZeroShot,on as classifyMany,sn as classifyZeroShot,Wo as cleanup,_i as clearNetworkLogs,X as codeChunk,en as composeEmbeddingMiddleware,Ht as composeVectorDBMiddleware,nt as cosineDistance,$r as cosineSimilarity,Yn as createBM25,eo as createBM25FromDocuments,Hr as createBroadcaster,Co as createCSVLoader,Do as createCachingMiddleware,Fi as createCapabilityReport,Zn as createChunker,Bt as createCodeChunker,Ma as createDeferred,Uo as createEventEmitter,Oo as createHTMLLoader,no as createHybridSearch,lo as createIngestPipeline,Io as createJSONLoader,bo as createKeystore,ui as createLoaderRegistry,Re as createLockManager,Qo as createLoggingFetch,Po as createLoggingMiddleware,Ft as createMarkdownChunker,ea as createMockClassificationModel,wa as createMockDocumentQAModel,Xi as createMockEmbeddingModel,ha as createMockFillMaskModel,aa as createMockImageCaptionModel,da as createMockImageFeatureModel,ua as createMockImageToImageModel,pa as createMockLanguageModel,ta as createMockNERModel,ba as createMockOCRModel,la as createMockObjectDetectionModel,ya as createMockQuestionAnsweringModel,ca as createMockSegmentationModel,ra as createMockSpeechToTextModel,na as createMockStorage,fa as createMockSummarizationModel,ma as createMockTextToSpeechModel,ga as createMockTranslationModel,oa as createMockVectorDB,$i as createNetworkLogger,zo as createRateLimitMiddleware,Lt as createRecursiveChunker,Bo as createRetryMiddleware,Jo as createSeededRandom,va as createSpy,lt as createStorage,rt as createTestVector,Ji as createTestVectors,Eo as createTextLoader,Lo as createValidationMiddleware,is as createVectorDB,as as createVectorDBWithWorker,Le as decrypt,yo as decryptJSON,$t as decryptString,fo as decryptVector,Gt as deriveEncryptionKey,So as deriveKey,cr as detectBrowser,He as detectCapabilities,dr as detectDeviceType,ur as detectGPU,lr as detectOS,Mn as detectObjects,_r as dotProduct,Ae as embed,Zr as embedMany,Pe as encrypt,ho as encryptJSON,go as encryptVector,vo as encryptionMiddleware,Jn as estimateChunkCount,Mi as estimateCleanupSize,uo as estimateIngestion,yi as estimateRemainingCapacity,Wr as euclideanDistance,Ri as eventMiddleware,ln as extractEntities,dn as extractEntitiesMany,Sn as extractImageFeatures,Un as extractText,$n as fillMask,bi as formatBytes,zi as formatCapabilityReport,xi as formatDuration,Ko as formatErrorAsHTML,Ho as formatErrorForConsole,be as formatErrorForUser,Dn as generateText,Li as getBrowserRecommendations,Xn as getChunkStats,Ii as getConnectionRecommendation,ae as getCurrentVersion,Oi as getDeviceInfo,U as getGlobalLogger,ir as getHardwareConcurrency,Re as getLockManager,Ai as getMemoryInfo,Wi as getNetworkLogs,Ui as getNetworkStats,je as getNetworkStatus,Pi as getRecommendedFallbacks,ar as getStorageEstimate,Ne as getStorageQuota,Ci as globalEventBus,oo as hybridFuse,In as imageToImage,jt as ingest,co as ingestChunks,nr as isBroadcastChannelSupported,Ei as isConnectionSuitable,qe as isCrossOriginIsolated,Y as isCryptoSupported,Zi as isFetchWrapped,Ve as isIndexedDBSupported,Ge as isOPFSSupported,Si as isOffline,_o as isOnline,Ue as isSharedArrayBufferSupported,fi as isStoragePersisted,_e as isWASMSupported,$e as isWebGPUSupported,or as isWebLocksSupported,We as isWebNNSupported,rr as isWebWorkersSupported,Ao as loadDocument,li as loadDocuments,Zo as logError,Zt as loggingMiddleware,Z as markdownChunk,de as matchesFilter,Yo as normalize,Vo as onNetworkChange,Vi as onNetworkRequest,$o as parseAge,wo as piiRedactionMiddleware,Yt as rateLimitMiddleware,Nt as reciprocalRankFusion,K as recursiveChunk,_t as redactPII,gi as requestPersistence,mn as rerank,Xt as retryMiddleware,wn as segmentImage,gt as semanticSearch,tn as setGlobalClassificationProvider,qn as setGlobalDocumentQAProvider,Kr as setGlobalEmbeddingProvider,zn as setGlobalFillMaskProvider,hn as setGlobalImageCaptionProvider,pn as setGlobalImageClassificationProvider,vn as setGlobalImageFeatureProvider,kn as setGlobalImageToImageProvider,Tn as setGlobalLanguageModelProvider,an as setGlobalNERProvider,Vn as setGlobalOCRProvider,xn as setGlobalObjectDetectionProvider,Wn as setGlobalQuestionAnsweringProvider,un as setGlobalRerankerProvider,Cn as setGlobalSTTProvider,bn as setGlobalSegmentationProvider,Nn as setGlobalSummarizationProvider,On as setGlobalTTSProvider,Fn as setGlobalTranslationProvider,wi as startStorageMonitor,Jr as streamEmbedMany,Xr as streamSemanticSearch,Ln as streamText,jn as summarize,An as synthesizeSpeech,Rn as transcribe,Bn as translate,Ki as unwrapFetch,Jt as validationMiddleware,xa as waitFor,ki as waitForOnline,es as withWAL,Yr as wrapEmbeddingModel,Hi as wrapFetchWithLogging,To as wrapVectorDB};//# sourceMappingURL=index.js.map
114
+ //# sourceMappingURL=index.js.map