@prexo/ai-chat-sdk
Version:
AI Chat SDK for building AI chat applications with Context and History
2 lines • 3.91 kB
JavaScript
;var vector=require('@upstash/vector'),nanoid=require('nanoid'),E=require('@mendable/firecrawl-js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var E__default=/*#__PURE__*/_interopDefault(E);var C=Object.defineProperty;var S=(a,e,r)=>e in a?C(a,e,{enumerable:true,configurable:true,writable:true,value:r}):a[e]=r;var c=(a,e,r)=>S(a,typeof e!="symbol"?e+"":e,r);`msg-${Date.now().toString()}`;var h=.5,v=5;var u;function P(){try{if(typeof process<"u"&&process.env&&process.env.FIRECRAWL_API_KEY)return process.env.FIRECRAWL_API_KEY}catch{}}function _(){let a=P();if(a)return u||(u=new E__default.default({apiKey:a})),u}async function w(a){let e=_();if(!e)throw new Error("Firecrawl is not configured. Set FIRECRAWL_API_KEY on the server to enable scraping.");return await e.scrape(a,{formats:["markdown","summary"]})}function A(a,e=500,r=50){let t=[];for(let o=0;o<a.length;o+=e-r)t.push(a.slice(o,o+e));return t}var d=class{constructor(e){c(this,"index");this.index=e;}async reset(e){await this.index.reset({namespace:e?.namespace});}async delete({ids:e,namespace:r}){await this.index.delete(e,{namespace:r});}async retrieve({question:e,similarityThreshold:r=h,topK:t=v,namespace:o,contextFilter:s,queryMode:p}){let i=await this.index.query({...typeof e=="string"?{data:e}:{vector:e},topK:t,includeData:true,includeMetadata:true,...typeof s=="string"&&{filter:s},queryMode:p},{namespace:o});return console.log("Vector Retrive: ",i),i.every(n=>n.data===void 0)?(console.error("There is no answer for this question in the provided context."),[{data:"There is no answer for this question in the provided context.",id:"error",metadata:{}}]):i.filter(n=>n.score>=r).map(n=>({data:n.data??"",id:n.id.toString(),metadata:n.metadata}))}async save(e){let{namespace:r}=e.options??{};if(e.type==="text")try{let t=e.id??nanoid.nanoid();return await this.index.upsert({data:e.data,id:t,metadata:e.options?.metadata},{namespace:r}),{success:!0,ids:[t.toString()]}}catch(t){return {success:false,error:JSON.stringify(t,Object.getOwnPropertyNames(t))}}else if(e.type==="embedding")try{let t=e.id??nanoid.nanoid();return await this.index.upsert({vector:e.data,data:e.text,id:t,metadata:e.options?.metadata},{namespace:r}),{success:!0,ids:[t.toString()]}}catch(t){return {success:false,error:JSON.stringify(t,Object.getOwnPropertyNames(t))}}else try{let t;if("fileSource"in e&&typeof e.fileSource=="string"?t=e.fileSource:"source"in e&&typeof e.source=="string"&&(t=e.source),!t)throw new Error("No valid file source provided for extractText");let o=await w(t);if(!o?.markdown&&!o?.summary)throw new Error("Failed to extract data from the provided source");let s="config"in e?e.config:{},p=s&&s.chunkSize||500,y=s&&s.overlap||100,i=o.markdown??o?.output?.markdown??o?.output?.txt??"",f=o.summary??o?.output?.summary,x=A(i,p,y),n=[];for(let T of x){let g=nanoid.nanoid();await this.index.upsert({data:T,id:g,metadata:{...e.options?.metadata??{},...f?{summary:f}:{}}},{namespace:r}),n.push(g);}return {success:!0,ids:n}}catch(t){return console.error(t),{success:false,error:JSON.stringify(t,Object.getOwnPropertyNames(t))}}}};var m=class{constructor(e,r){c(this,"vectorDB");c(this,"namespace");let t=new vector.Index({url:e.url,token:e.token});this.vectorDB=new d(t),this.namespace=r;}async addContext(e){return e.options||(e.options={}),e.options.namespace=this.namespace,this.vectorDB.save(e)}async removeContext(e){await this.vectorDB.delete({ids:e,namespace:this.namespace});}async getContext(e){return this.vectorDB.retrieve({...e,namespace:this.namespace})}async resetContext(){await this.vectorDB.reset({namespace:this.namespace});}};var O=a=>{let e=a?.vector?.url,r=a?.vector?.token,t=a?.vector?.namespace;if(e&&r&&t)return new m({url:e,token:r},t)};exports.ExtVector=m;exports.VectorDB=d;exports.getContextClient=O;//# sourceMappingURL=context.cjs.map
//# sourceMappingURL=context.cjs.map