UNPKG

@prexo/ai-chat-sdk

Version:

AI Chat SDK for building AI chat applications with Context and History

3 lines 9.04 kB
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var vector=require('@upstash/vector'),nanoid=require('nanoid'),M=require('@mendable/firecrawl-js'),redis=require('@upstash/redis');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var M__default=/*#__PURE__*/_interopDefault(M);var A=Object.defineProperty;var H=(r,e,n)=>e in r?A(r,e,{enumerable:true,configurable:true,writable:true,value:n}):r[e]=n;var s=(r,e,n)=>H(r,typeof e!="symbol"?e+"":e,n);var f="1.0.1-beta.1",R="@prexo/ai-chat-sdk";var w={};function V(){try{return typeof process<"u"&&process.env?.PREXO_SDK_VERSION?process.env.PREXO_SDK_VERSION:typeof window<"u"&&window.__PREXO_SDK_VERSION__?window.__PREXO_SDK_VERSION__:typeof globalThis<"u"&&globalThis.__PREXO_SDK_VERSION__?globalThis.__PREXO_SDK_VERSION__:f}catch{return f}}function L(r,e){return `${r}::${e}`}var y=class{constructor(e){s(this,"enabled");s(this,"endpoint");s(this,"ingestionKey");s(this,"sdkVersion");s(this,"ingestionKeyPromise");let n=typeof process<"u"&&process.env?.DISABLE_TELEMETRY==="1";this.enabled=e.enabled??!n,this.endpoint=(typeof process<"u"&&process.env,"https://api.prexoai.xyz/v1/telementry"),this.sdkVersion=V(),e.ingestionKey&&(this.ingestionKey=e.ingestionKey);}async fetchIngestionKeyCached(){let e="";typeof window<"u"&&window.location&&window.location.origin&&(typeof process<"u"&&process.env,e=window.location.origin);let n=L(this.endpoint,e);return w[n]||(w[n]=this.fetchIngestionKey(e)),w[n]}async fetchIngestionKey(e){let n=this.endpoint?this.endpoint.replace(/\/?$/,"/key"):"https://api.prexoai.xyz/v1/telementry/key";try{let t=await fetch(n,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:e})});if(!t.ok)throw new Error("Failed to fetch ingestion key");return (await t.json()).key||"prexoai-ingest-key"}catch{return "prexoai-ingest-key"}}detectBrowser(){if(typeof window<"u"&&typeof navigator<"u"){let e=navigator.userAgent||"unknown",n=navigator.appVersion||"unknown",t=navigator.vendor||"unknown",o=navigator.language||"unknown",i=navigator.platform||"unknown",c=navigator.cookieEnabled!==void 0?String(navigator.cookieEnabled):"unknown",h=navigator.hardwareConcurrency!==void 0?String(navigator.hardwareConcurrency):"unknown",d=navigator.deviceMemory!==void 0?String(navigator.deviceMemory):"unknown";return [`UserAgent: ${e}`,`AppVersion: ${n}`,`Vendor: ${t}`,`Language: ${o}`,`Platform: ${i}`,`CookieEnabled: ${c}`,`HardwareConcurrency: ${h}`,`DeviceMemory: ${d}`].join("; ")}return "not-browser"}detectPlatform(){return typeof navigator<"u"&&typeof navigator.platform=="string"?navigator.platform||"unknown":typeof process<"u"&&typeof process.platform=="string"?process.platform:"unknown"}async send(e,n){if(!this.enabled)return;let t=this.ingestionKey;t||(this.ingestionKeyPromise||(this.ingestionKeyPromise=this.fetchIngestionKeyCached()),t=await this.ingestionKeyPromise,this.ingestionKey=t);let o={event:e,properties:{...n,sdkVersion:this.sdkVersion,browser:this.detectBrowser(),platform:this.detectPlatform(),timestamp:new Date().toISOString()}};try{await fetch(this.endpoint,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","x-ingest-key":t},body:JSON.stringify(o)});}catch{}}};var x=r=>`prexo-chat-session/${r||"default"}`,T=50,S=86400,N=`msg-${Date.now().toString()}`,E=.5,_=5;var D;function b(){try{if(typeof process<"u"&&process.env&&process.env.FIRECRAWL_API_KEY)return process.env.FIRECRAWL_API_KEY}catch{}}function F(){let r=b();if(r)return D||(D=new M__default.default({apiKey:r})),D}async function k(r){let e=F();if(!e)throw new Error("Firecrawl is not configured. Set FIRECRAWL_API_KEY on the server to enable scraping.");return await e.scrape(r,{formats:["markdown","summary"]})}function U(r,e=500,n=50){let t=[];for(let o=0;o<r.length;o+=e-n)t.push(r.slice(o,o+e));return t}var p=class{constructor(e){s(this,"index");this.index=e;}async reset(e){await this.index.reset({namespace:e?.namespace});}async delete({ids:e,namespace:n}){await this.index.delete(e,{namespace:n});}async retrieve({question:e,similarityThreshold:n=E,topK:t=_,namespace:o,contextFilter:i,queryMode:c}){let d=await this.index.query({...typeof e=="string"?{data:e}:{vector:e},topK:t,includeData:true,includeMetadata:true,...typeof i=="string"&&{filter:i},queryMode:c},{namespace:o});return console.log("Vector Retrive: ",d),d.every(a=>a.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:{}}]):d.filter(a=>a.score>=n).map(a=>({data:a.data??"",id:a.id.toString(),metadata:a.metadata}))}async save(e){let{namespace:n}=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:n}),{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:n}),{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 k(t);if(!o?.markdown&&!o?.summary)throw new Error("Failed to extract data from the provided source");let i="config"in e?e.config:{},c=i&&i.chunkSize||500,h=i&&i.overlap||100,d=o.markdown??o?.output?.markdown??o?.output?.txt??"",C=o.summary??o?.output?.summary,O=U(d,c,h),a=[];for(let K of O){let P=nanoid.nanoid();await this.index.upsert({data:K,id:P,metadata:{...e.options?.metadata??{},...C?{summary:C}:{}}},{namespace:n}),a.push(P);}return {success:!0,ids:a}}catch(t){return console.error(t),{success:false,error:JSON.stringify(t,Object.getOwnPropertyNames(t))}}}};var l=class{constructor(e,n){s(this,"vectorDB");s(this,"namespace");let t=new vector.Index({url:e.url,token:e.token});this.vectorDB=new p(t),this.namespace=n;}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 g=r=>{let e=r?.vector?.url,n=r?.vector?.token,t=r?.vector?.namespace;if(e&&n&&t)return new l({url:e,token:n},t)};var m=class{constructor(e){s(this,"client");let{config:n,client:t}=e;if(t)this.client=t;else if(n)this.client=new redis.Redis(n);else throw new Error("Redis message stores require either a config object or a pre-configured client.")}async addMessage(e){let{message:n,sessionId:t,sessionTTL:o}=e,i=86400;o&&(i=o);let c=x(t);await this.client.lpush(c,JSON.stringify(n)),o&&await this.client.expire(c,i);}async deleteMessages({sessionId:e}){await this.client.del(e);}async getMessages({sessionId:e,amount:n=50,startIndex:t=0}){let o=x(e),i=t+n-1;return (await this.client.lrange(o,t,i)).reverse()}};var u=r=>{let e=r?.redis?.url,n=r?.redis?.token;if(e&&n)return new m({config:{url:e,token:n}})};var v=class{constructor(e){s(this,"telemetry");s(this,"contextClient");s(this,"historyClient");e?.telemetry&&(this.telemetry=new y(e.telemetry)),e?.context&&(this.contextClient=g(e.context)),e?.history&&(this.historyClient=u(e.history));}getTelemetry(){return this.telemetry}getContextClient(){return this.contextClient}getHistoryClient(){return this.historyClient}async trackEvent(e,n){this.telemetry&&await this.telemetry.send(e,n);}isConfigured(){return !!(this.contextClient||this.historyClient)}getConfigurationStatus(){return {telemetry:!!this.telemetry,context:!!this.contextClient,history:!!this.historyClient}}getVersionInfo(){return {version:f,name:R}}reset(){this.telemetry=void 0,this.contextClient=void 0,this.historyClient=void 0;}updateConfig(e){this.reset(),e.telemetry&&(this.telemetry=new y(e.telemetry)),e.context&&(this.contextClient=g(e.context)),e.history&&(this.historyClient=u(e.history));}};function Oe(r){return new v(r)}function Pe(r){return new y(r)}function Re(r){return g(r)}function ke(r){return u(r)}var Ke=v; exports.AIChatSDK=v;exports.DEFAULT_CHAT_SESSION_ID=x;exports.DEFAULT_HISTORY_LENGTH=T;exports.DEFAULT_HISTORY_TTL=S;exports.DEFAULT_MSG_ID=N;exports.DEFAULT_SIMILARITY_THRESHOLD=E;exports.DEFAULT_TOP_K=_;exports.ExtVector=l;exports.InRedisHistory=m;exports.SDK_NAME=R;exports.SDK_VERSION=f;exports.Telementry=y;exports.VectorDB=p;exports.createAIChatSDK=Oe;exports.createContextClient=Re;exports.createHistoryClient=ke;exports.createTelemetry=Pe;exports.default=Ke;exports.getContextClient=g;exports.getHistoryClient=u;//# sourceMappingURL=index.cjs.map //# sourceMappingURL=index.cjs.map