paprflare-sdk 0.0.31 → 0.0.32
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.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -101,7 +101,7 @@ declare class DatabaseManager {
|
|
|
101
101
|
disconnect(): Promise<void>;
|
|
102
102
|
healthCheck(): Promise<boolean>;
|
|
103
103
|
purge(): Promise<void>;
|
|
104
|
-
create(userId: string
|
|
104
|
+
create(userId: string): Promise<string>;
|
|
105
105
|
getConversation(conversationId: string): Promise<Conversation | null>;
|
|
106
106
|
listConversations(userId: string, limit?: number, offset?: number): Promise<Conversation[]>;
|
|
107
107
|
updateConversation(conversationId: string, updates: Partial<Conversation>): Promise<void>;
|
package/dist/index.d.ts
CHANGED
|
@@ -101,7 +101,7 @@ declare class DatabaseManager {
|
|
|
101
101
|
disconnect(): Promise<void>;
|
|
102
102
|
healthCheck(): Promise<boolean>;
|
|
103
103
|
purge(): Promise<void>;
|
|
104
|
-
create(userId: string
|
|
104
|
+
create(userId: string): Promise<string>;
|
|
105
105
|
getConversation(conversationId: string): Promise<Conversation | null>;
|
|
106
106
|
listConversations(userId: string, limit?: number, offset?: number): Promise<Conversation[]>;
|
|
107
107
|
updateConversation(conversationId: string, updates: Partial<Conversation>): Promise<void>;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
'use strict';var fe=require('ioredis'),lruCache=require('lru-cache'),nanoid=require('nanoid'),ue=require('fast-json-stable-stringify'),
|
|
1
|
+
'use strict';var fe=require('ioredis'),lruCache=require('lru-cache'),nanoid=require('nanoid'),ue=require('fast-json-stable-stringify'),we=require('eventemitter3'),eventsourceParser=require('eventsource-parser');require('zod');var Ce=require('p-queue'),asyncMutex=require('async-mutex'),drizzleOrm=require('drizzle-orm'),ce=require('@anthropic-ai/sdk'),generativeAi=require('@google/generative-ai'),de=require('openai');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var fe__default=/*#__PURE__*/_interopDefault(fe);var ue__default=/*#__PURE__*/_interopDefault(ue);var we__default=/*#__PURE__*/_interopDefault(we);var Ce__default=/*#__PURE__*/_interopDefault(Ce);var ce__default=/*#__PURE__*/_interopDefault(ce);var de__default=/*#__PURE__*/_interopDefault(de);function v(o){let t=nanoid.nanoid();return o?`${o}_${t}`:t}function $(o){return ue__default.default(o)}function Z(o){return o.map(t=>({...t,id:t.id||v("msg"),timestamp:t.timestamp||Date.now()}))}async function z(o,t){let e,s=t.initialDelay;for(let r=1;r<=t.maxAttempts;r++)try{return await o()}catch(a){if(e=a,r===t.maxAttempts)throw e;t.onRetry&&t.onRetry(r,e),await he(Math.min(s,t.maxDelay)),s*=t.backoffMultiplier;}throw e}function he(o){return new Promise(t=>setTimeout(t,o))}function Se(o,t){let e=[];for(let s=0;s<o.length;s+=t)e.push(o.slice(s,s+t));return e}function Pe(o,t){let e;return (...s)=>{clearTimeout(e),e=setTimeout(()=>o(...s),t);}}function ke(o,t){let e;return (...s)=>{e||(o(...s),e=true,setTimeout(()=>e=false,t));}}function Ae(o){try{return JSON.parse(o)}catch{return null}}function A(o){return typeof o=="object"&&o!==null&&o.constructor===Object}function J(o,...t){if(!t.length)return o;let e=t.shift();if(A(o)&&A(e))for(let s in e)A(e[s])?(o[s]||Object.assign(o,{[s]:{}}),J(o[s],e[s])):Object.assign(o,{[s]:e[s]});return J(o,...t)}async function Re(o){let t=[];for await(let e of o)t.push(e);return t}async function Ee(o){let t=performance.now(),e=await o(),s=performance.now()-t;return {result:e,duration:s}}var f=class extends we.EventEmitter{events=[];closed=false;fullText="";startTime=0;lastChunkTime=0;chunkIndex=0;status="idle";activeTools=new Map;currentToolCall=null;constructor(){super();}start(){this.startTime===0&&(this.startTime=Date.now(),this.lastChunkTime=this.startTime,this.updateStatus("starting"),this.emit("start"),setTimeout(()=>this.updateStatus("streaming"),50));}writeText(t){if(this.closed)return;this.startTime===0&&this.start(),this.fullText+=t;let e=Date.now(),s=e-this.lastChunkTime;this.lastChunkTime=e;let r={text:t,index:this.chunkIndex++,timestamp:e,deltaTime:s};this.events.push({type:"text-delta",delta:t}),this.emit("chunk",r),this.emit("write",t);}write(t){this.writeText(t);}startToolCall(t,e){this.currentToolCall={id:e,name:t,argumentsBuffer:""};let s={id:e,name:t,input:{},status:"starting",timestamp:Date.now()};this.activeTools.set(e,s),this.updateStatus("tool_executing"),this.emit("toolUse",s),setTimeout(()=>{let r=this.activeTools.get(e);r&&(r.status="running",this.emit("toolUse",r));},100);}writeToolCallDelta(t){this.currentToolCall&&(this.currentToolCall.argumentsBuffer+=t);}endToolCall(t){if(!this.currentToolCall)return;let e=this.activeTools.get(this.currentToolCall.id);if(e){e.input=t,e.status="completed",this.emit("toolUse",e);let s=Date.now()-e.timestamp;this.emit("toolResult",{toolId:this.currentToolCall.id,content:t,success:true,duration:s,timestamp:Date.now()}),this.activeTools.delete(this.currentToolCall.id);}this.currentToolCall=null,this.activeTools.size===0&&this.updateStatus("streaming");}startTool(t,e,s){this.startToolCall(e,t),s&&this.endToolCall(s);}completeTool(t,e,s=true,r){let a=this.activeTools.get(t);if(!a)return;let n=Date.now()-a.timestamp;a.status=s?"completed":"failed",this.emit("toolUse",a),this.emit("toolResult",{toolId:t,content:e,success:s,error:r,duration:n,timestamp:Date.now()}),this.activeTools.delete(t),this.activeTools.size===0&&this.updateStatus("streaming");}writeUsage(t){this.closed||(this.events.push({type:"usage",usage:{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}),this.emit("usage",{prompt:t.promptTokens,completion:t.completionTokens,total:t.totalTokens}));}usage(t){this.writeUsage({promptTokens:t.prompt,completionTokens:t.completion,totalTokens:t.total});}error(t){this.closed||(this.events.push({type:"error",error:t}),this.updateStatus("error"),this.emit("error",t));}async*flush(){let t=[...this.events];this.events=[];for(let e of t)yield e;}done(t){if(this.closed)return;this.updateStatus("completing");let e=t||{id:`msg_${Date.now()}`,role:"assistant",content:this.fullText,timestamp:Date.now()};this.events.push({type:"done",finalMessage:e}),this.closed=true,this.updateStatus("done"),this.emit("done",e);}updateStatus(t){this.status=t,this.emit("statusChange",t);}getStatus(){return this.status}isClosed(){return this.closed}getText(){return this.fullText}getActiveTools(){return Array.from(this.activeTools.values())}getEvents(){return [...this.events]}async*toGenerator(){yield*this.flush();}reset(){this.events=[],this.fullText="",this.closed=false,this.status="idle",this.startTime=0,this.lastChunkTime=0,this.chunkIndex=0,this.activeTools.clear(),this.currentToolCall=null,this.removeAllListeners();}};function De(){return new f}async function*Ue(o){let t=o.getReader(),e=new TextDecoder,s="",r=eventsourceParser.createParser({onEvent:a=>{s=a.data;},onRetry:a=>{}});try{for(;;){let{done:a,value:n}=await t.read();if(a)break;let l=e.decode(n,{stream:!0});if(r.feed(l),s)try{let i=JSON.parse(s);i.type&&(yield i),s="";}catch{continue}}r.reset({consume:!0});}finally{t.releaseLock();}}function R(o){let t=new TextEncoder;return new ReadableStream({async start(e){try{for await(let s of o){let r=`data: ${JSON.stringify(s)}
|
|
2
2
|
|
|
3
|
-
`;e.enqueue(t.encode(r));}e.close();}catch(s){e.error(s);}}})}async function F(o,t){let e=R(o),s={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(t.node&&t.node.res){let r=t.node.res;Object.entries(s).forEach(([l,i])=>{r.setHeader(l,i);});let a=e.getReader(),n=new TextDecoder;try{for(;;){let{done:l,value:i}=await a.read();if(l)break;let c=n.decode(i,{stream:!0});r.write(c);}}finally{r.end();}}else {if(t instanceof Response||typeof t.body<"u")return;{Object.entries(s).forEach(([n,l])=>{t.setHeader(n,l);});let r=e.getReader(),a=new TextDecoder;try{for(;;){let{done:n,value:l}=await r.read();if(n)break;let i=a.decode(l,{stream:!0});t.write(i);}}finally{t.end();}}}}async function*B(...o){let t=o.map(async s=>{let r=[];for await(let a of s)r.push(a);return r}),e=await Promise.all(t);for(let s of e)for(let r of s)yield r;}async function*
|
|
3
|
+
`;e.enqueue(t.encode(r));}e.close();}catch(s){e.error(s);}}})}async function F(o,t){let e=R(o),s={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(t.node&&t.node.res){let r=t.node.res;Object.entries(s).forEach(([l,i])=>{r.setHeader(l,i);});let a=e.getReader(),n=new TextDecoder;try{for(;;){let{done:l,value:i}=await a.read();if(l)break;let c=n.decode(i,{stream:!0});r.write(c);}}finally{r.end();}}else {if(t instanceof Response||typeof t.body<"u")return;{Object.entries(s).forEach(([n,l])=>{t.setHeader(n,l);});let r=e.getReader(),a=new TextDecoder;try{for(;;){let{done:n,value:l}=await r.read();if(n)break;let i=a.decode(l,{stream:!0});t.write(i);}}finally{t.end();}}}}async function*B(...o){let t=o.map(async s=>{let r=[];for await(let a of s)r.push(a);return r}),e=await Promise.all(t);for(let s of e)for(let r of s)yield r;}async function*_e(o,t){for await(let e of o){let s=t(e);s!==null&&(yield s);}}async function*qe(o,t){for await(let e of o)t(e)&&(yield e);}async function E(o){let t=[];for await(let e of o)t.push(e);return t}async function*Ge(o,t){let e=0;for await(let s of o){if(e>=t)break;yield s,e++;}}async function*je(o,t,e){let s=[],r=null,a=async()=>{if(s.length>0){let n=[...s];return s=[],n}return null};try{for await(let l of o)if(s.push(l),r&&(clearTimeout(r),r=null),s.length>=t){let i=await a();i&&(yield i);}else e&&(r=setTimeout(async()=>{let i=await a();},e));let n=await a();n&&(yield n);}finally{r&&clearTimeout(r);}}var p=class extends Error{constructor(e,s,r,a){super(e);this.code=s;this.statusCode=r;this.details=a;this.name="PaprFlareError";}},K=class extends p{constructor(e,s){super(e,"RATE_LIMIT_ERROR",429);this.retryAfter=s;}},V=class extends p{constructor(t,e){super(t,"VALIDATION_ERROR",400,e);}},y=class extends p{constructor(e,s,r){super(e,"PROVIDER_ERROR",r);this.provider=s;}};async function*x(o){let t=`msg_${Date.now()}`,e="",s={id:t,role:"assistant",content:"",timestamp:Date.now(),isComplete:false};yield {type:"message-start",messageId:t};try{for await(let r of o)switch(r.type){case "text-delta":e+=r.delta,s.content=e,yield {type:"text-delta",delta:r.delta};break;case "tool-call-start":s.toolCalls||(s.toolCalls=[]),s.toolCalls.push(r.toolCall),yield {type:"tool-call-start",toolCallId:r.toolCall.id,toolName:r.toolCall.name};break;case "tool-call-end":yield {type:"tool-call-complete",toolCallId:r.toolCall.id,arguments:r.toolCall.arguments};break;case "tool-result":s.toolResults||(s.toolResults=[]),s.toolResults.push(r.result),yield {type:"tool-result",toolCallId:r.result.toolCallId,result:r.result.result,success:!r.result.error};break;case "usage":s.metadata||(s.metadata={}),s.metadata.usage=r.usage,yield {type:"usage",tokens:{prompt:r.usage.promptTokens,completion:r.usage.completionTokens,total:r.usage.totalTokens}};break;case "metadata":s.metadata||(s.metadata={}),s.metadata={...s.metadata,...r.metadata};break;case "artifact-start":s.metadata||(s.metadata={}),s.metadata.artifacts||(s.metadata.artifacts=[]),s.metadata.artifacts.push({...r.artifact,content:""});break;case "artifact-delta":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&(n.content+=r.delta);}break;case "artifact-end":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&Object.assign(n,r.artifact);}break;case "done":s.isComplete=!0,s.content=e;let a={...s,...r.finalMessage};yield {type:"text-complete",fullText:e},yield {type:"message-complete",message:a};break;case "error":yield {type:"error",error:r.error};break}}catch(r){yield {type:"error",error:r.message||"Stream error"};}}async function H(o,t){let e=x(o),s=null;for await(let r of e)switch(r.type){case "message-start":await t.onStart?.(r.messageId);break;case "text-delta":await t.onText?.(r.delta);break;case "message-complete":s=r.message,await t.onComplete?.(r.message);break;case "error":throw await t.onError?.(r.error),new Error(r.error);case "tool-call-complete":await t.onToolCall?.(r.toolCallId,r.arguments);break;case "tool-result":await t.onToolResult?.({toolId:r.toolCallId,content:r.result,success:r.success,duration:0,timestamp:Date.now()});break;case "usage":await t.onUsage?.(r.tokens);break;case "status-change":await t.onStatusChange?.(r.status);break}if(!s)throw new Error("Stream completed without final message");return s}async function W(o){let t="";for await(let e of o)e.type==="text-delta"&&(t+=e.delta);return t}async function*ze(o){let t=new f,s=null;o.onToolUse&&t.on("toolUse",o.onToolUse),o.onToolResult&&t.on("toolResult",o.onToolResult),o.onStatusChange&&t.on("statusChange",o.onStatusChange);let r=async n=>{for await(let l of n)switch(l.type){case "text-delta":t.write(l.delta);break;case "tool-call-start":t.startTool(l.toolCall.id,l.toolCall.name,l.toolCall.arguments);break;case "tool-call-end":t.getActiveTools().find(c=>c.id===l.toolCall.id)&&t.completeTool(l.toolCall.id,l.toolCall.arguments,true);break;case "tool-result":t.completeTool(l.result.toolCallId,l.result.result,!l.result.error,l.result.error);break;case "usage":t.usage({prompt:l.usage.promptTokens,completion:l.usage.completionTokens,total:l.usage.totalTokens});break;case "error":t.error(l.error);break;case "done":t.done(l.finalMessage);break}},a=(async()=>{try{t.start(),await o.execute({writer:t,merge:r}),t.isClosed()||t.done();}catch(n){let l=o.onError?.(n)||n.message;t.error(l),t.done();}})();try{for await(let n of x(t.toGenerator()))yield n,n.type==="message-complete"&&(s=n.message);await a,o.onFinish&&s&&await o.onFinish({message:s});}catch(n){throw n}}async function Y(o){new f;for await(let e of o)switch(e.type){case "text-delta":process.stdout.write(e.delta);break;case "tool-call-start":console.log(`
|
|
4
4
|
\u{1F527} Tool: ${e.toolCall.name}`);break;case "tool-result":let s=e.result.error?"\u274C":"\u2705";console.log(`${s} Tool completed`);break;case "usage":console.log(`
|
|
5
5
|
|
|
6
6
|
\u{1F4CA} Tokens: ${e.usage.promptTokens} prompt + ${e.usage.completionTokens} completion = ${e.usage.totalTokens} total`);break;case "error":console.error(`
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
`;t.write(r);}t.write(`data: [DONE]
|
|
16
16
|
|
|
17
|
-
`),t.end();}function ze(o){let t=new f,e=false;return {value:(async function*(){o!==void 0&&(yield o);for await(let s of t.toGenerator())s.type==="text-delta"?yield s.delta:s.type==="done"&&(yield s.finalMessage.content);})(),update(s){if(e)throw new Error("Stream already done");t.write(String(s));},done(s){e||(s!==void 0&&t.write(String(s)),t.done(),e=true);},error(s){t.error(s),e=true;}}}var L=class{client;keyPrefix;defaultTTL;constructor(t){this.client=new fe__default.default({host:t.host,port:t.port,password:t.password,db:t.db||0,retryStrategy:e=>Math.min(e*50,2e3),maxRetriesPerRequest:3,enableReadyCheck:true,lazyConnect:false}),this.keyPrefix=t.keyPrefix||"paprflare:",this.defaultTTL=t.ttl||3600,this.client.on("error",e=>{console.error("Redis cache error:",e);});}getKey(t){return `${this.keyPrefix}${t}`}async get(t){try{return await this.client.get(this.getKey(t))}catch(e){return console.error("Redis get error:",e),null}}async set(t,e,s){try{let r=s||this.defaultTTL;await this.client.setex(this.getKey(t),r,e);}catch(r){console.error("Redis set error:",r);}}async delete(t){try{await this.client.del(this.getKey(t));}catch(e){console.error("Redis delete error:",e);}}async clear(){try{let t=await this.client.keys(`${this.keyPrefix}*`);t.length>0&&await this.client.del(...t);}catch(t){console.error("Redis clear error:",t);}}async has(t){try{return await this.client.exists(this.getKey(t))===1}catch(e){return console.error("Redis has error:",e),false}}async disconnect(){await this.client.quit();}},D=class{cache;constructor(t){this.cache=new lruCache.LRUCache({max:t?.maxSize||1e3,ttl:t?.maxAge||36e5,updateAgeOnGet:true,updateAgeOnHas:true});}async get(t){return this.cache.get(t)||null}async set(t,e){this.cache.set(t,e);}async delete(t){this.cache.delete(t);}async clear(){this.cache.clear();}async has(t){return this.cache.has(t)}},S=class{cache;enabled;constructor(t){this.enabled=true,t.type==="redis"?this.cache=new L({...t.redis,ttl:t.ttl}):this.cache=new D(t.memory);}generateCacheKey(t,e){let s={messages:t.map(r=>({role:r.role,content:r.content,toolCalls:r.toolCalls})),model:e.model,temperature:e.temperature,maxTokens:e.maxTokens,tools:e.tools?.map(r=>r.name)};return $(s)}async getCachedResponse(t,e){if(!this.enabled||e.cache?.enabled===false)return null;let s=e.cache?.key||this.generateCacheKey(t,e),r=await this.cache.get(s);if(r)try{return JSON.parse(r)}catch(a){return console.error("Cache parse error:",a),await this.cache.delete(s),null}return null}async cacheResponse(t,e,s){if(!this.enabled||e.cache?.enabled===false)return;let r=e.cache?.key||this.generateCacheKey(t,e),a=e.cache?.ttl;await this.cache.set(r,JSON.stringify(s),a);}async invalidate(t,e){let s=this.generateCacheKey(t,e);await this.cache.delete(s);}async clearAll(){await this.cache.clear();}disable(){this.enabled=false;}enable(){this.enabled=true;}};var te=class{constructor(t,e){this.db=t;this.schema=e;}async connect(){}async disconnect(){}async healthCheck(){try{return await this.db.select(drizzleOrm.sql`1`),!0}catch{return false}}async purge(){await this.db.delete(this.schema.messages),await this.db.delete(this.schema.conversations);}async createConversation(t,e){let[s]=await this.db.insert(this.schema.conversations).values({userId:t,metadata:e||{}}).returning();return s.id}async getConversation(t){let[e]=await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return e||null}async listConversations(t,e=50,s=0){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t)).orderBy(drizzleOrm.desc(this.schema.conversations.updatedAt)).limit(e).offset(s)}async updateConversation(t,e){await this.db.update(this.schema.conversations).set({...e,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async deleteConversation(t){await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));}async deleteAllConversations(t){let e=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));for(let{id:s}of e)await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,s));await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));}async countConversations(t){let[{count:e}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));return Number(e)}async conversationExists(t){let[e]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return !!e}async searchConversations(t,e){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.and(drizzleOrm.eq(this.schema.conversations.userId,t),drizzleOrm.like(this.schema.conversations.title,`%${e}%`)))}async saveMessage(t,e){await this.db.insert(this.schema.messages).values({id:e.id,conversationId:t,role:e.role,content:e.content,toolCalls:e.toolCalls||[],toolResults:e.toolResults||[],metadata:e.metadata||{},timestamp:e.timestamp||Date.now()}),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async saveManyMessages(t,e){e.length!==0&&(await this.db.insert(this.schema.messages).values(e.map(s=>({id:s.id,conversationId:t,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t)));}async getMessage(t){let[e]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,t));return e||null}async getMessages(t,e=100,s=0){return await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t)).orderBy(drizzleOrm.asc(this.schema.messages.timestamp)).limit(e).offset(s)}async getMessagesByRole(t,e){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,t),drizzleOrm.eq(this.schema.messages.role,e))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateMessage(t,e){await this.db.update(this.schema.messages).set(e).where(drizzleOrm.eq(this.schema.messages.id,t));}async deleteMessage(t){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,t));}async deleteAllMessages(t){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t));}async countMessages(t){let[{count:e}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t));return Number(e)}async getLastMessage(t){let[e]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t)).orderBy(drizzleOrm.desc(this.schema.messages.timestamp)).limit(1);return e||null}async searchMessages(t,e){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,t),drizzleOrm.like(this.schema.messages.content,`%${e}%`))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateConversationMetadata(t,e){await this.db.update(this.schema.conversations).set({metadata:e,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async getConversationMetadata(t){let[e]=await this.db.select({metadata:this.schema.conversations.metadata}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return e?.metadata||null}async deleteConversationMetadata(t,e){let s=await this.getConversationMetadata(t);if(s){for(let r of e)delete s[r];await this.updateConversationMetadata(t,s);}}async userExists(t){let[e]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t)).limit(1);return !!e}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata);return await this.db.update(this.schema.conversations).set({title:e.conversation.title,createdAt:e.conversation.createdAt}).where(drizzleOrm.eq(this.schema.conversations.id,s)),await this.saveManyMessages(s,e.messages),s}};var P=class{constructor(t){this.adapter=t;}async connect(){await this.adapter.connect();}async disconnect(){await this.adapter.disconnect();}async healthCheck(){return await this.adapter.healthCheck()}async purge(){await this.adapter.purge();}async create(t,e){return await this.adapter.createConversation(t,{systemPrompt:e})}async getConversation(t){return await this.adapter.getConversation(t)}async listConversations(t,e,s){return await this.adapter.listConversations(t,e,s)}async updateConversation(t,e){await this.adapter.updateConversation(t,e);}async deleteConversation(t){await this.adapter.deleteConversation(t);}async deleteAllConversations(t){await this.adapter.deleteAllConversations(t);}async countConversations(t){return await this.adapter.countConversations(t)}async conversationExists(t){return await this.adapter.conversationExists(t)}async searchConversations(t,e){return await this.adapter.searchConversations(t,e)}async addMessage(t,e){await this.adapter.saveMessage(t,e);}async addManyMessages(t,e){await this.adapter.saveManyMessages(t,e);}async getMessage(t){return await this.adapter.getMessage(t)}async getConversationHistory(t,e,s){return await this.adapter.getMessages(t,e,s)}async getMessagesByRole(t,e){return await this.adapter.getMessagesByRole(t,e)}async updateMessage(t,e){await this.adapter.updateMessage(t,e);}async deleteMessage(t){await this.adapter.deleteMessage(t);}async deleteAllMessages(t){await this.adapter.deleteAllMessages(t);}async countMessages(t){return await this.adapter.countMessages(t)}async getLastMessage(t){return await this.adapter.getLastMessage(t)}async searchMessages(t,e){return await this.adapter.searchMessages(t,e)}async updateConversationMetadata(t,e){await this.adapter.updateConversationMetadata(t,e);}async getConversationMetadata(t){return await this.adapter.getConversationMetadata(t)}async deleteConversationMetadata(t,e){await this.adapter.deleteConversationMetadata(t,e);}async userExists(t){return await this.adapter.userExists(t)}async deleteUser(t){await this.adapter.deleteUser(t);}async exportConversation(t){return await this.adapter.exportConversation(t)}async importConversation(t,e){return await this.adapter.importConversation(t,e)}};var se=class{conversations=new Map;messages=new Map;async connect(){}async disconnect(){}async healthCheck(){return true}async purge(){this.conversations.clear(),this.messages.clear();}async createConversation(t,e){let s=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,r={id:s,userId:t,metadata:e||{},createdAt:new Date,updatedAt:new Date};return this.conversations.set(s,r),this.messages.set(s,[]),s}async getConversation(t){return this.conversations.get(t)||null}async listConversations(t,e=50,s=0){return Array.from(this.conversations.values()).filter(r=>r.userId===t).sort((r,a)=>a.updatedAt.getTime()-r.updatedAt.getTime()).slice(s,s+e)}async updateConversation(t,e){let s=this.conversations.get(t);s&&Object.assign(s,e,{updatedAt:new Date});}async deleteConversation(t){this.conversations.delete(t),this.messages.delete(t);}async deleteAllConversations(t){for(let[e,s]of this.conversations)s.userId===t&&(this.conversations.delete(e),this.messages.delete(e));}async countConversations(t){return Array.from(this.conversations.values()).filter(e=>e.userId===t).length}async conversationExists(t){return this.conversations.has(t)}async searchConversations(t,e){let s=e.toLowerCase();return Array.from(this.conversations.values()).filter(r=>r.userId===t&&r.title?.toLowerCase().includes(s))}async saveMessage(t,e){let s=this.messages.get(t)||[];s.push(e),this.messages.set(t,s);let r=this.conversations.get(t);r&&(r.updatedAt=new Date);}async saveManyMessages(t,e){for(let s of e)await this.saveMessage(t,s);}async getMessage(t){for(let e of this.messages.values()){let s=e.find(r=>r.id===t);if(s)return s}return null}async getMessages(t,e=100,s=0){return (this.messages.get(t)||[]).slice(s,s+e)}async getMessagesByRole(t,e){return (this.messages.get(t)||[]).filter(r=>r.role===e)}async updateMessage(t,e){for(let s of this.messages.values()){let r=s.findIndex(a=>a.id===t);if(r!==-1){s[r]={...s[r],...e};break}}}async deleteMessage(t){for(let[e,s]of this.messages){let r=s.findIndex(a=>a.id===t);if(r!==-1){s.splice(r,1),this.messages.set(e,s);break}}}async deleteAllMessages(t){this.messages.set(t,[]);}async countMessages(t){return (this.messages.get(t)||[]).length}async getLastMessage(t){let e=this.messages.get(t)||[];return e[e.length-1]||null}async searchMessages(t,e){let s=e.toLowerCase();return (this.messages.get(t)||[]).filter(a=>typeof a.content=="string"&&a.content.toLowerCase().includes(s))}async updateConversationMetadata(t,e){let s=this.conversations.get(t);s&&(s.metadata={...s.metadata,...e},s.updatedAt=new Date);}async getConversationMetadata(t){return this.conversations.get(t)?.metadata||null}async deleteConversationMetadata(t,e){let s=this.conversations.get(t);if(s?.metadata){for(let r of e)delete s.metadata[r];s.updatedAt=new Date;}}async userExists(t){return Array.from(this.conversations.values()).some(e=>e.userId===t)}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata),r=this.conversations.get(s);return r.title=e.conversation.title,r.createdAt=e.conversation.createdAt,await this.saveManyMessages(s,e.messages),s}};var re=class{constructor(t){this.prisma=t;}async connect(){await this.prisma.$connect();}async disconnect(){await this.prisma.$disconnect();}async healthCheck(){try{return await this.prisma.$queryRaw`SELECT 1`,!0}catch{return false}}async purge(){await this.prisma.message.deleteMany(),await this.prisma.conversation.deleteMany();}async createConversation(t,e){return (await this.prisma.conversation.create({data:{userId:t,metadata:e||{}}})).id}async getConversation(t){return await this.prisma.conversation.findUnique({where:{id:t}})}async listConversations(t,e=50,s=0){return await this.prisma.conversation.findMany({where:{userId:t},orderBy:{updatedAt:"desc"},take:e,skip:s})}async updateConversation(t,e){await this.prisma.conversation.update({where:{id:t},data:{...e,updatedAt:new Date}});}async deleteConversation(t){await this.prisma.conversation.delete({where:{id:t}});}async deleteAllConversations(t){let e=await this.prisma.conversation.findMany({where:{userId:t},select:{id:true}});await this.prisma.message.deleteMany({where:{conversationId:{in:e.map(s=>s.id)}}}),await this.prisma.conversation.deleteMany({where:{userId:t}});}async countConversations(t){return await this.prisma.conversation.count({where:{userId:t}})}async conversationExists(t){return await this.prisma.conversation.count({where:{id:t}})>0}async searchConversations(t,e){return await this.prisma.conversation.findMany({where:{userId:t,title:{contains:e,mode:"insensitive"}},orderBy:{updatedAt:"desc"}})}toMessage(t){return {id:t.id,role:t.role,content:t.content,toolCalls:t.toolCalls,toolResults:t.toolResults,metadata:t.metadata,timestamp:t.timestamp}}async saveMessage(t,e){await this.prisma.message.create({data:{id:e.id,conversationId:t,role:e.role,content:e.content,toolCalls:e.toolCalls||[],toolResults:e.toolResults||[],metadata:e.metadata||{},timestamp:e.timestamp||Date.now()}}),await this.prisma.conversation.update({where:{id:t},data:{updatedAt:new Date}});}async saveManyMessages(t,e){e.length!==0&&(await this.prisma.message.createMany({data:e.map(s=>({id:s.id,conversationId:t,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))}),await this.prisma.conversation.update({where:{id:t},data:{updatedAt:new Date}}));}async getMessage(t){let e=await this.prisma.message.findUnique({where:{id:t}});return e?this.toMessage(e):null}async getMessages(t,e=100,s=0){return (await this.prisma.message.findMany({where:{conversationId:t},orderBy:{timestamp:"asc"},take:e,skip:s})).map(this.toMessage)}async getMessagesByRole(t,e){return (await this.prisma.message.findMany({where:{conversationId:t,role:e},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateMessage(t,e){await this.prisma.message.update({where:{id:t},data:e});}async deleteMessage(t){await this.prisma.message.delete({where:{id:t}});}async deleteAllMessages(t){await this.prisma.message.deleteMany({where:{conversationId:t}});}async countMessages(t){return await this.prisma.message.count({where:{conversationId:t}})}async getLastMessage(t){let e=await this.prisma.message.findFirst({where:{conversationId:t},orderBy:{timestamp:"desc"}});return e?this.toMessage(e):null}async searchMessages(t,e){return (await this.prisma.message.findMany({where:{conversationId:t,content:{contains:e,mode:"insensitive"}},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateConversationMetadata(t,e){await this.prisma.conversation.update({where:{id:t},data:{metadata:e,updatedAt:new Date}});}async getConversationMetadata(t){return (await this.prisma.conversation.findUnique({where:{id:t},select:{metadata:true}}))?.metadata||null}async deleteConversationMetadata(t,e){let s=await this.getConversationMetadata(t);if(s){for(let r of e)delete s[r];await this.updateConversationMetadata(t,s);}}async userExists(t){return await this.prisma.conversation.count({where:{userId:t}})>0}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata);return await this.prisma.conversation.update({where:{id:s},data:{title:e.conversation.title,createdAt:e.conversation.createdAt}}),await this.saveManyMessages(s,e.messages),s}};var T=class extends ve__default.default{constructor(e){super();this.client=e;}threads=new Map;async createThread(e,s,r,a){let n=v("thread"),l=Date.now(),i={id:n,userId:e,messages:[],config:s,metadata:r||{},tags:a?.tags||[],title:a?.title,createdAt:l,updatedAt:l,lastActiveAt:l,status:"active",priority:a?.priority||"normal",messageCount:0,errorCount:0};return this.threads.set(n,i),this.emit("event",{type:"thread-created",threadId:n,thread:i}),n}async forkThread(e,s){let r=this.requireThread(e),a=[...r.messages];if(s){let i=a.findIndex(c=>c.id===s);i!==-1&&(a=a.slice(0,i+1));}let n=await this.createThread(r.userId,r.config,{...r.metadata}),l=this.requireThread(n);return l.messages=a.map(i=>({...i})),l.messageCount=a.length,l.tags=[...r.tags],l.title=r.title?`Fork of ${r.title}`:void 0,this.emit("event",{type:"thread-forked",threadId:n,parentThreadId:e}),n}async mergeThread(e,s){let r=this.requireThread(e),a=this.requireThread(s),n=[...r.messages,...a.messages].sort((l,i)=>(l.timestamp||0)-(i.timestamp||0));r.messages=n,r.messageCount=n.length,r.updatedAt=Date.now(),this.emit("event",{type:"thread-merged",threadId:e,sourceThreadId:s});}getThread(e){return this.threads.get(e)||null}threadExists(e){return this.threads.has(e)}getUserThreads(e,s){let r=Array.from(this.threads.values()).filter(l=>l.userId===e);r=this.sortThreads(r,s?.sort);let a=s?.offset||0,n=s?.limit??r.length;return r.slice(a,a+n)}filterThreads(e,s,r){let a=Array.from(this.threads.values()).filter(i=>i.userId===e);if(s.status){let i=Array.isArray(s.status)?s.status:[s.status];a=a.filter(c=>i.includes(c.status));}if(s.priority&&(a=a.filter(i=>i.priority===s.priority)),s.tags?.length&&(a=a.filter(i=>s.tags.every(c=>i.tags.includes(c)))),s.createdAfter!==void 0&&(a=a.filter(i=>i.createdAt>=s.createdAfter)),s.createdBefore!==void 0&&(a=a.filter(i=>i.createdAt<=s.createdBefore)),s.updatedAfter!==void 0&&(a=a.filter(i=>i.updatedAt>=s.updatedAfter)),s.search){let i=s.search.toLowerCase();a=a.filter(c=>c.title?.toLowerCase().includes(i)||c.messages.some(d=>typeof d.content=="string"&&d.content.toLowerCase().includes(i)));}a=this.sortThreads(a,r?.sort);let n=r?.offset||0,l=r?.limit??a.length;return a.slice(n,n+l)}countThreads(e,s){return this.filterThreads(e,s||{}).length}updateThreadStatus(e,s){let r=this.requireThread(e),a=r.status;r.status=s,r.updatedAt=Date.now(),this.emit("event",{type:"status-changed",threadId:e,status:s,previousStatus:a});}updateThreadPriority(e,s){let r=this.requireThread(e);r.priority=s,r.updatedAt=Date.now(),this.emit("event",{type:"priority-changed",threadId:e,priority:s});}updateThreadMetadata(e,s){let r=this.requireThread(e);r.metadata={...r.metadata,...s},r.updatedAt=Date.now(),this.emit("event",{type:"metadata-updated",threadId:e,metadata:r.metadata});}setThreadTitle(e,s){let r=this.requireThread(e);r.title=s,r.updatedAt=Date.now(),this.emit("event",{type:"title-updated",threadId:e,title:s});}updateThreadConfig(e,s){let r=this.requireThread(e);r.config={...r.config,...s},r.updatedAt=Date.now(),this.emit("event",{type:"config-updated",threadId:e,config:r.config});}addTags(e,s){let r=this.requireThread(e);r.tags=[...new Set([...r.tags,...s])],r.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:r.tags});}removeTags(e,s){let r=this.requireThread(e);r.tags=r.tags.filter(a=>!s.includes(a)),r.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:r.tags});}setTags(e,s){let r=this.requireThread(e);r.tags=[...new Set(s)],r.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:r.tags});}async addMessage(e,s){let r=this.requireThread(e),a=Date.now(),n={...s,id:s.id||v("msg"),timestamp:s.timestamp||a};r.messages.push(n),r.messageCount=r.messages.length,r.updatedAt=a,r.lastActiveAt=a,this.emit("event",{type:"message-added",threadId:e,message:n});}async addManyMessages(e,s){for(let r of s)await this.addMessage(e,r);}getMessage(e,s){return this.requireThread(e).messages.find(a=>a.id===s)||null}getMessages(e,s){let a=[...this.requireThread(e).messages];s?.role&&(a=a.filter(i=>i.role===s.role));let n=s?.offset||0,l=s?.limit??a.length;return a.slice(n,n+l)}getLastMessage(e){let s=this.requireThread(e);return s.messages[s.messages.length-1]||null}updateMessage(e,s,r){let a=this.requireThread(e),n=a.messages.findIndex(l=>l.id===s);if(n===-1)throw new Error(`Message ${s} not found in thread ${e}`);a.messages[n]={...a.messages[n],...r},a.updatedAt=Date.now(),this.emit("event",{type:"message-updated",threadId:e,messageId:s,updates:r});}deleteMessage(e,s){let r=this.requireThread(e),a=r.messages.findIndex(n=>n.id===s);if(a===-1)throw new Error(`Message ${s} not found in thread ${e}`);r.messages.splice(a,1),r.messageCount=r.messages.length,r.updatedAt=Date.now(),this.emit("event",{type:"message-deleted",threadId:e,messageId:s});}searchMessages(e,s){let r=this.requireThread(e),a=s.toLowerCase();return r.messages.filter(n=>typeof n.content=="string"&&n.content.toLowerCase().includes(a))}clearThread(e){let s=this.requireThread(e);s.messages=[],s.messageCount=0,s.updatedAt=Date.now(),this.emit("event",{type:"thread-cleared",threadId:e});}trimThread(e,s){let r=this.requireThread(e);r.messages.length>s&&(r.messages=r.messages.slice(-s),r.messageCount=r.messages.length,r.updatedAt=Date.now());}archiveThread(e){this.updateThreadStatus(e,"archived"),this.emit("event",{type:"thread-archived",threadId:e});}restoreThread(e){this.updateThreadStatus(e,"active"),this.emit("event",{type:"thread-restored",threadId:e});}pauseThread(e){this.updateThreadStatus(e,"paused");}resumeThread(e){this.updateThreadStatus(e,"active");}completeThread(e){this.updateThreadStatus(e,"completed");}markThreadError(e,s){let r=this.requireThread(e);r.errorCount+=1,r.lastError=s.message,this.updateThreadStatus(e,"error"),this.emit("event",{type:"error",threadId:e,error:s});}deleteThread(e){this.threads.delete(e),this.emit("event",{type:"thread-deleted",threadId:e});}deleteAllThreads(e){for(let[s,r]of this.threads)r.userId===e&&(this.threads.delete(s),this.emit("event",{type:"thread-deleted",threadId:s}));}getStats(e){let s=e?Array.from(this.threads.values()).filter(i=>i.userId===e):Array.from(this.threads.values()),r=s.reduce((i,c)=>i+c.messageCount,0),a=s.reduce((i,c)=>i+(c.tokenCount||0),0),n=s.map(i=>i.createdAt),l={total:s.length,active:s.filter(i=>i.status==="active").length,paused:s.filter(i=>i.status==="paused").length,completed:s.filter(i=>i.status==="completed").length,error:s.filter(i=>i.status==="error").length,archived:s.filter(i=>i.status==="archived").length,totalMessages:r,totalTokens:a,averageMessagesPerThread:s.length?r/s.length:0,oldestThread:n.length?Math.min(...n):void 0,newestThread:n.length?Math.max(...n):void 0};return this.emit("event",{type:"pool-stats",stats:l}),l}exportThread(e){let s=this.requireThread(e);return {thread:{...s},messages:s.messages.map(r=>({...r})),exportedAt:Date.now(),version:"1.0"}}importThread(e,s){let r=v("thread"),a=Date.now(),n={...s.thread,id:r,userId:e,messages:s.messages.map(l=>({...l})),createdAt:a,updatedAt:a,lastActiveAt:a};return this.threads.set(r,n),this.emit("event",{type:"thread-created",threadId:r,thread:n}),r}cleanup(e=36e5){let s=Date.now(),r=[];for(let[a,n]of this.threads)n.status!=="active"&&s-n.updatedAt>e&&r.push(a);for(let a of r)this.threads.delete(a);this.emit("event",{type:"cleanup",deletedCount:r.length});}requireThread(e){let s=this.threads.get(e);if(!s)throw new Error(`Thread ${e} not found`);return s}sortThreads(e,s){let r=s?.field||"updatedAt",a=s?.direction==="asc"?1:-1;return [...e].sort((n,l)=>{let i=n[r],c=l[r];return a*(i-c)})}};var ae=class{constructor(t){this.client=t;}managers=new Map;getManager(t){return this.managers.has(t)||this.managers.set(t,new T(this.client)),this.managers.get(t)}hasManager(t){return this.managers.has(t)}removeManager(t){let e=this.managers.get(t);e&&(e.removeAllListeners(),this.managers.delete(t));}listUsers(){return Array.from(this.managers.keys())}managerCount(){return this.managers.size}getAllThreads(){let t=[];for(let e of this.managers.values())t.push(...Array.from(e.threads.values()));return t}getAllActiveThreads(){return this.getAllThreads().filter(t=>t.status==="active")}findThreads(t,e){let s=[];for(let[i,c]of this.managers)s.push(...c.filterThreads(i,t,e));let r=e?.sort?.field||"updatedAt",a=e?.sort?.direction==="asc"?1:-1;s.sort((i,c)=>a*(i[r]-c[r]));let n=e?.offset||0,l=e?.limit??s.length;return s.slice(n,n+l)}findThread(t){for(let e of this.managers.values()){let s=e.getThread(t);if(s)return s}return null}findThreadOwner(t){for(let[e,s]of this.managers)if(s.threadExists(t))return e;return null}getGlobalStats(){let t=this.getAllThreads(),e=t.reduce((a,n)=>a+n.messageCount,0),s=t.reduce((a,n)=>a+(n.tokenCount||0),0),r=t.map(a=>a.createdAt);return {userCount:this.managers.size,total:t.length,active:t.filter(a=>a.status==="active").length,paused:t.filter(a=>a.status==="paused").length,completed:t.filter(a=>a.status==="completed").length,error:t.filter(a=>a.status==="error").length,archived:t.filter(a=>a.status==="archived").length,totalMessages:e,totalTokens:s,averageMessagesPerThread:t.length?e/t.length:0,oldestThread:r.length?Math.min(...r):void 0,newestThread:r.length?Math.max(...r):void 0}}getUserStats(){let t={};for(let[e,s]of this.managers)t[e]=s.getStats(e);return t}totalThreadCount(){let t=0;for(let e of this.managers.values())t+=e.threads.size;return t}cleanupAll(t=36e5){for(let e of this.managers.values())e.cleanup(t);for(let[e,s]of this.managers)s.threads.size===0&&(s.removeAllListeners(),this.managers.delete(e));}archiveStale(t=864e5){let e=Date.now(),s=0;for(let r of this.managers.values())for(let a of r.threads.values())(a.status==="completed"||a.status==="error")&&e-a.updatedAt>t&&(r.archiveThread(a.id),s++);return s}deleteUser(t){let e=this.managers.get(t);e&&(e.deleteAllThreads(t),e.removeAllListeners(),this.managers.delete(t));}purge(){for(let[t,e]of this.managers)e.deleteAllThreads(t),e.removeAllListeners();this.managers.clear();}exportThread(t){for(let e of this.managers.values())if(e.threadExists(t))return e.exportThread(t);return null}importThread(t,e){return this.getManager(t).importThread(t,e)}exportUserThreads(t){let e=this.managers.get(t);return e?Array.from(e.threads.keys()).map(s=>e.exportThread(s)):[]}importUserThreads(t,e){return e.map(s=>this.importThread(t,s))}};var ne={debug:0,info:1,warn:2,error:3},b=class o{config;constructor(t={}){this.config={enabled:t.enabled??true,level:t.level??"info",onLog:t.onLog??this.defaultLogHandler,context:t.context??{}};}defaultLogHandler(t){let s=`[${new Date(t.timestamp).toISOString()}] [${t.level.toUpperCase()}]`,r=t.metadata?`${s} ${t.message} ${JSON.stringify(t.metadata)}`:`${s} ${t.message}`;switch(t.level){case "debug":console.debug(r);break;case "info":console.info(r);break;case "warn":console.warn(r);break;case "error":console.error(r);break}}shouldLog(t){return this.config.enabled?ne[t]>=ne[this.config.level]:false}createEntry(t,e,s){return {timestamp:Date.now(),level:t,message:e,metadata:s?{...this.config.context,...s}:this.config.context}}debug(t,e){if(!this.shouldLog("debug"))return;let s=this.createEntry("debug",t,e);this.config.onLog(s);}info(t,e){if(!this.shouldLog("info"))return;let s=this.createEntry("info",t,e);this.config.onLog(s);}warn(t,e){if(!this.shouldLog("warn"))return;let s=this.createEntry("warn",t,e);this.config.onLog(s);}error(t,e){if(!this.shouldLog("error"))return;let s=this.createEntry("error",t,e);this.config.onLog(s);}child(t){return new o({...this.config,context:{...this.config.context,...t}})}configure(t){this.config={...this.config,...t,context:{...this.config.context,...t.context||{}}};}};function oe(o){return new b(o)}function ie(){return new b({enabled:false})}var le=class o{providerCallback;cacheManager;databaseManager;threadManager;queue;mutex;logger;defaultRetryConfig;constructor(t){this.mutex=new asyncMutex.Mutex;let e=t.rateLimit||{};if(this.queue=new we__default.default({concurrency:e.maxConcurrent||100,interval:e.interval||1e3,intervalCap:e.intervalCap||100,timeout:3e4}),t.logger?this.logger=t.logger instanceof b?t.logger:oe(t.logger):this.logger=ie(),this.logger.info("PaprFlare client initialized"),this.defaultRetryConfig={maxAttempts:t.retry?.maxAttempts||3,initialDelay:t.retry?.initialDelay||1e3,maxDelay:t.retry?.maxDelay||1e4,backoffMultiplier:t.retry?.backoffMultiplier||2,onRetry:t.retry?.onRetry},this.providerCallback=t.provider,t.cache&&(this.logger.info("Initializing Redis cache",{host:t.cache.redis?.host,port:t.cache.redis?.port}),this.cacheManager=new S(t.cache)),t.database&&(this.logger.info("Initializing database"),this.databaseManager=new P(t.database)),t.threads?.enabled){if(!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG");this.logger.info("Thread management enabled");}}async chat(t){let{messages:e,signal:s,...r}=t,a=v("req");if(this.logger.info("Chat request started",{requestId:a,messageCount:e.length,stream:r.stream,model:r.model}),s?.aborted)throw this.logger.warn("Request aborted before execution",{requestId:a}),new p("Request aborted","ABORTED");let n=Z(e);if(this.validateConfig(r),this.cacheManager&&r.cache?.enabled!==false){this.logger.debug("Checking cache",{requestId:a});let i=await this.cacheManager.getCachedResponse(n,r);if(i)return this.logger.info("Cache hit",{requestId:a}),r.stream?this.createStreamingResponse(this.eventsToGenerator(i)):this.eventsToResponse(i);this.logger.debug("Cache miss",{requestId:a});}let l=()=>{this.logger.warn("Request aborted",{requestId:a});};s?.addEventListener("abort",l);try{return this.queue.add(async()=>{if(s?.aborted)throw new p("Request aborted","ABORTED");return this.executeChat(n,r,a,s)})}finally{s&&l&&s.removeEventListener("abort",l);}}async executeChat(t,e,s,r){let a={...this.defaultRetryConfig,...e.cache};return z(async()=>{if(r?.aborted)throw new p("Request aborted","ABORTED");if(e.output?.schema)return this.executeStructuredOutput(t,e);let n=this.providerCallback(t,e);if(e.stream){let l;if(this.cacheManager&&e.cache?.enabled!==!1){let i=[],c=this.cacheStream(n,i);l=this.withFinally(c,()=>this.cacheManager.cacheResponse(t,e,i));}else l=n;return this.createStreamingResponse(l)}else {let l=await E(n);return this.cacheManager&&e.cache?.enabled!==!1&&await this.cacheManager.cacheResponse(t,e,l),this.eventsToResponse(l)}},{...a,onRetry:(n,l)=>{this.logger.warn(`Retry attempt ${n}/${a.maxAttempts}`,{requestId:s,error:l.message}),a.onRetry?.(n,l);}})}async executeStructuredOutput(t,e){let s=e.output.schema._def?.shape,r=typeof s=="function"?s():s,a=r?Object.entries(r).map(([g,w])=>{let C=w?._def?.typeName??w?.constructor?.name??"unknown";return ` - "${g}": ${C}`}).join(`
|
|
17
|
+
`),t.end();}function Fe(o){let t=new f,e=false;return {value:(async function*(){o!==void 0&&(yield o);for await(let s of t.toGenerator())s.type==="text-delta"?yield s.delta:s.type==="done"&&(yield s.finalMessage.content);})(),update(s){if(e)throw new Error("Stream already done");t.write(String(s));},done(s){e||(s!==void 0&&t.write(String(s)),t.done(),e=true);},error(s){t.error(s),e=true;}}}var L=class{client;keyPrefix;defaultTTL;constructor(t){this.client=new fe__default.default({host:t.host,port:t.port,password:t.password,db:t.db||0,retryStrategy:e=>Math.min(e*50,2e3),maxRetriesPerRequest:3,enableReadyCheck:true,lazyConnect:false}),this.keyPrefix=t.keyPrefix||"paprflare:",this.defaultTTL=t.ttl||3600,this.client.on("error",e=>{console.error("Redis cache error:",e);});}getKey(t){return `${this.keyPrefix}${t}`}async get(t){try{return await this.client.get(this.getKey(t))}catch(e){return console.error("Redis get error:",e),null}}async set(t,e,s){try{let r=s||this.defaultTTL;await this.client.setex(this.getKey(t),r,e);}catch(r){console.error("Redis set error:",r);}}async delete(t){try{await this.client.del(this.getKey(t));}catch(e){console.error("Redis delete error:",e);}}async clear(){try{let t=await this.client.keys(`${this.keyPrefix}*`);t.length>0&&await this.client.del(...t);}catch(t){console.error("Redis clear error:",t);}}async has(t){try{return await this.client.exists(this.getKey(t))===1}catch(e){return console.error("Redis has error:",e),false}}async disconnect(){await this.client.quit();}},O=class{cache;constructor(t){this.cache=new lruCache.LRUCache({max:t?.maxSize||1e3,ttl:t?.maxAge||36e5,updateAgeOnGet:true,updateAgeOnHas:true});}async get(t){return this.cache.get(t)||null}async set(t,e){this.cache.set(t,e);}async delete(t){this.cache.delete(t);}async clear(){this.cache.clear();}async has(t){return this.cache.has(t)}},S=class{cache;enabled;constructor(t){this.enabled=true,t.type==="redis"?this.cache=new L({...t.redis,ttl:t.ttl}):this.cache=new O(t.memory);}generateCacheKey(t,e){let s={messages:t.map(r=>({role:r.role,content:r.content,toolCalls:r.toolCalls})),model:e.model,temperature:e.temperature,maxTokens:e.maxTokens,tools:e.tools?.map(r=>r.name)};return $(s)}async getCachedResponse(t,e){if(!this.enabled||e.cache?.enabled===false)return null;let s=e.cache?.key||this.generateCacheKey(t,e),r=await this.cache.get(s);if(r)try{return JSON.parse(r)}catch(a){return console.error("Cache parse error:",a),await this.cache.delete(s),null}return null}async cacheResponse(t,e,s){if(!this.enabled||e.cache?.enabled===false)return;let r=e.cache?.key||this.generateCacheKey(t,e),a=e.cache?.ttl;await this.cache.set(r,JSON.stringify(s),a);}async invalidate(t,e){let s=this.generateCacheKey(t,e);await this.cache.delete(s);}async clearAll(){await this.cache.clear();}disable(){this.enabled=false;}enable(){this.enabled=true;}};var te=class{constructor(t,e){this.db=t;this.schema=e;}async connect(){}async disconnect(){}async healthCheck(){try{return await this.db.select(drizzleOrm.sql`1`),!0}catch{return false}}async purge(){await this.db.delete(this.schema.messages),await this.db.delete(this.schema.conversations);}async createConversation(t,e){let[s]=await this.db.insert(this.schema.conversations).values({userId:t,metadata:e||{}}).returning();return s.id}async getConversation(t){let[e]=await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return e||null}async listConversations(t,e=50,s=0){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t)).orderBy(drizzleOrm.desc(this.schema.conversations.updatedAt)).limit(e).offset(s)}async updateConversation(t,e){await this.db.update(this.schema.conversations).set({...e,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async deleteConversation(t){await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));}async deleteAllConversations(t){let e=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));for(let{id:s}of e)await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,s));await this.db.delete(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));}async countConversations(t){let[{count:e}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t));return Number(e)}async conversationExists(t){let[e]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return !!e}async searchConversations(t,e){return await this.db.select().from(this.schema.conversations).where(drizzleOrm.and(drizzleOrm.eq(this.schema.conversations.userId,t),drizzleOrm.like(this.schema.conversations.title,`%${e}%`)))}async saveMessage(t,e){await this.db.insert(this.schema.messages).values({id:e.id,conversationId:t,role:e.role,content:e.content,toolCalls:e.toolCalls||[],toolResults:e.toolResults||[],metadata:e.metadata||{},timestamp:e.timestamp||Date.now()}),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async saveManyMessages(t,e){e.length!==0&&(await this.db.insert(this.schema.messages).values(e.map(s=>({id:s.id,conversationId:t,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))),await this.db.update(this.schema.conversations).set({updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t)));}async getMessage(t){let[e]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,t));return e||null}async getMessages(t,e=100,s=0){return await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t)).orderBy(drizzleOrm.asc(this.schema.messages.timestamp)).limit(e).offset(s)}async getMessagesByRole(t,e){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,t),drizzleOrm.eq(this.schema.messages.role,e))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateMessage(t,e){await this.db.update(this.schema.messages).set(e).where(drizzleOrm.eq(this.schema.messages.id,t));}async deleteMessage(t){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.id,t));}async deleteAllMessages(t){await this.db.delete(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t));}async countMessages(t){let[{count:e}]=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t));return Number(e)}async getLastMessage(t){let[e]=await this.db.select().from(this.schema.messages).where(drizzleOrm.eq(this.schema.messages.conversationId,t)).orderBy(drizzleOrm.desc(this.schema.messages.timestamp)).limit(1);return e||null}async searchMessages(t,e){return await this.db.select().from(this.schema.messages).where(drizzleOrm.and(drizzleOrm.eq(this.schema.messages.conversationId,t),drizzleOrm.like(this.schema.messages.content,`%${e}%`))).orderBy(drizzleOrm.asc(this.schema.messages.timestamp))}async updateConversationMetadata(t,e){await this.db.update(this.schema.conversations).set({metadata:e,updatedAt:new Date}).where(drizzleOrm.eq(this.schema.conversations.id,t));}async getConversationMetadata(t){let[e]=await this.db.select({metadata:this.schema.conversations.metadata}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.id,t));return e?.metadata||null}async deleteConversationMetadata(t,e){let s=await this.getConversationMetadata(t);if(s){for(let r of e)delete s[r];await this.updateConversationMetadata(t,s);}}async userExists(t){let[e]=await this.db.select({id:this.schema.conversations.id}).from(this.schema.conversations).where(drizzleOrm.eq(this.schema.conversations.userId,t)).limit(1);return !!e}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata);return await this.db.update(this.schema.conversations).set({title:e.conversation.title,createdAt:e.conversation.createdAt}).where(drizzleOrm.eq(this.schema.conversations.id,s)),await this.saveManyMessages(s,e.messages),s}};var P=class{constructor(t){this.adapter=t;}async connect(){await this.adapter.connect();}async disconnect(){await this.adapter.disconnect();}async healthCheck(){return await this.adapter.healthCheck()}async purge(){await this.adapter.purge();}async create(t){return await this.adapter.createConversation(t)}async getConversation(t){return await this.adapter.getConversation(t)}async listConversations(t,e,s){return await this.adapter.listConversations(t,e,s)}async updateConversation(t,e){await this.adapter.updateConversation(t,e);}async deleteConversation(t){await this.adapter.deleteConversation(t);}async deleteAllConversations(t){await this.adapter.deleteAllConversations(t);}async countConversations(t){return await this.adapter.countConversations(t)}async conversationExists(t){return await this.adapter.conversationExists(t)}async searchConversations(t,e){return await this.adapter.searchConversations(t,e)}async addMessage(t,e){await this.adapter.saveMessage(t,e);}async addManyMessages(t,e){await this.adapter.saveManyMessages(t,e);}async getMessage(t){return await this.adapter.getMessage(t)}async getConversationHistory(t,e,s){return await this.adapter.getMessages(t,e,s)}async getMessagesByRole(t,e){return await this.adapter.getMessagesByRole(t,e)}async updateMessage(t,e){await this.adapter.updateMessage(t,e);}async deleteMessage(t){await this.adapter.deleteMessage(t);}async deleteAllMessages(t){await this.adapter.deleteAllMessages(t);}async countMessages(t){return await this.adapter.countMessages(t)}async getLastMessage(t){return await this.adapter.getLastMessage(t)}async searchMessages(t,e){return await this.adapter.searchMessages(t,e)}async updateConversationMetadata(t,e){await this.adapter.updateConversationMetadata(t,e);}async getConversationMetadata(t){return await this.adapter.getConversationMetadata(t)}async deleteConversationMetadata(t,e){await this.adapter.deleteConversationMetadata(t,e);}async userExists(t){return await this.adapter.userExists(t)}async deleteUser(t){await this.adapter.deleteUser(t);}async exportConversation(t){return await this.adapter.exportConversation(t)}async importConversation(t,e){return await this.adapter.importConversation(t,e)}};var se=class{conversations=new Map;messages=new Map;async connect(){}async disconnect(){}async healthCheck(){return true}async purge(){this.conversations.clear(),this.messages.clear();}async createConversation(t,e){let s=`conv_${nanoid.nanoid()}`,r={id:s,userId:t,metadata:e||{},createdAt:new Date,updatedAt:new Date};return this.conversations.set(s,r),this.messages.set(s,[]),s}async getConversation(t){return this.conversations.get(t)||null}async listConversations(t,e=50,s=0){return Array.from(this.conversations.values()).filter(r=>r.userId===t).sort((r,a)=>a.updatedAt.getTime()-r.updatedAt.getTime()).slice(s,s+e)}async updateConversation(t,e){let s=this.conversations.get(t);s&&Object.assign(s,e,{updatedAt:new Date});}async deleteConversation(t){this.conversations.delete(t),this.messages.delete(t);}async deleteAllConversations(t){for(let[e,s]of this.conversations)s.userId===t&&(this.conversations.delete(e),this.messages.delete(e));}async countConversations(t){return Array.from(this.conversations.values()).filter(e=>e.userId===t).length}async conversationExists(t){return this.conversations.has(t)}async searchConversations(t,e){let s=e.toLowerCase();return Array.from(this.conversations.values()).filter(r=>r.userId===t&&r.title?.toLowerCase().includes(s))}async saveMessage(t,e){let s=this.messages.get(t)||[];s.push(e),this.messages.set(t,s);let r=this.conversations.get(t);r&&(r.updatedAt=new Date);}async saveManyMessages(t,e){for(let s of e)await this.saveMessage(t,s);}async getMessage(t){for(let e of this.messages.values()){let s=e.find(r=>r.id===t);if(s)return s}return null}async getMessages(t,e=100,s=0){return (this.messages.get(t)||[]).slice(s,s+e)}async getMessagesByRole(t,e){return (this.messages.get(t)||[]).filter(r=>r.role===e)}async updateMessage(t,e){for(let s of this.messages.values()){let r=s.findIndex(a=>a.id===t);if(r!==-1){s[r]={...s[r],...e};break}}}async deleteMessage(t){for(let[e,s]of this.messages){let r=s.findIndex(a=>a.id===t);if(r!==-1){s.splice(r,1),this.messages.set(e,s);break}}}async deleteAllMessages(t){this.messages.set(t,[]);}async countMessages(t){return (this.messages.get(t)||[]).length}async getLastMessage(t){let e=this.messages.get(t)||[];return e[e.length-1]||null}async searchMessages(t,e){let s=e.toLowerCase();return (this.messages.get(t)||[]).filter(a=>typeof a.content=="string"&&a.content.toLowerCase().includes(s))}async updateConversationMetadata(t,e){let s=this.conversations.get(t);s&&(s.metadata={...s.metadata,...e},s.updatedAt=new Date);}async getConversationMetadata(t){return this.conversations.get(t)?.metadata||null}async deleteConversationMetadata(t,e){let s=this.conversations.get(t);if(s?.metadata){for(let r of e)delete s.metadata[r];s.updatedAt=new Date;}}async userExists(t){return Array.from(this.conversations.values()).some(e=>e.userId===t)}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata),r=this.conversations.get(s);return r.title=e.conversation.title,r.createdAt=e.conversation.createdAt,await this.saveManyMessages(s,e.messages),s}};var re=class{constructor(t){this.prisma=t;}async connect(){await this.prisma.$connect();}async disconnect(){await this.prisma.$disconnect();}async healthCheck(){try{return await this.prisma.$queryRaw`SELECT 1`,!0}catch{return false}}async purge(){await this.prisma.message.deleteMany(),await this.prisma.conversation.deleteMany();}async createConversation(t,e){return (await this.prisma.conversation.create({data:{userId:t,metadata:e||{}}})).id}async getConversation(t){return await this.prisma.conversation.findUnique({where:{id:t}})}async listConversations(t,e=50,s=0){return await this.prisma.conversation.findMany({where:{userId:t},orderBy:{updatedAt:"desc"},take:e,skip:s})}async updateConversation(t,e){await this.prisma.conversation.update({where:{id:t},data:{...e,updatedAt:new Date}});}async deleteConversation(t){await this.prisma.conversation.delete({where:{id:t}});}async deleteAllConversations(t){let e=await this.prisma.conversation.findMany({where:{userId:t},select:{id:true}});await this.prisma.message.deleteMany({where:{conversationId:{in:e.map(s=>s.id)}}}),await this.prisma.conversation.deleteMany({where:{userId:t}});}async countConversations(t){return await this.prisma.conversation.count({where:{userId:t}})}async conversationExists(t){return await this.prisma.conversation.count({where:{id:t}})>0}async searchConversations(t,e){return await this.prisma.conversation.findMany({where:{userId:t,title:{contains:e,mode:"insensitive"}},orderBy:{updatedAt:"desc"}})}toMessage(t){return {id:t.id,role:t.role,content:t.content,toolCalls:t.toolCalls,toolResults:t.toolResults,metadata:t.metadata,timestamp:t.timestamp}}async saveMessage(t,e){await this.prisma.message.create({data:{id:e.id,conversationId:t,role:e.role,content:e.content,toolCalls:e.toolCalls||[],toolResults:e.toolResults||[],metadata:e.metadata||{},timestamp:e.timestamp||Date.now()}}),await this.prisma.conversation.update({where:{id:t},data:{updatedAt:new Date}});}async saveManyMessages(t,e){e.length!==0&&(await this.prisma.message.createMany({data:e.map(s=>({id:s.id,conversationId:t,role:s.role,content:s.content,toolCalls:s.toolCalls||[],toolResults:s.toolResults||[],metadata:s.metadata||{},timestamp:s.timestamp||Date.now()}))}),await this.prisma.conversation.update({where:{id:t},data:{updatedAt:new Date}}));}async getMessage(t){let e=await this.prisma.message.findUnique({where:{id:t}});return e?this.toMessage(e):null}async getMessages(t,e=100,s=0){return (await this.prisma.message.findMany({where:{conversationId:t},orderBy:{timestamp:"asc"},take:e,skip:s})).map(this.toMessage)}async getMessagesByRole(t,e){return (await this.prisma.message.findMany({where:{conversationId:t,role:e},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateMessage(t,e){await this.prisma.message.update({where:{id:t},data:e});}async deleteMessage(t){await this.prisma.message.delete({where:{id:t}});}async deleteAllMessages(t){await this.prisma.message.deleteMany({where:{conversationId:t}});}async countMessages(t){return await this.prisma.message.count({where:{conversationId:t}})}async getLastMessage(t){let e=await this.prisma.message.findFirst({where:{conversationId:t},orderBy:{timestamp:"desc"}});return e?this.toMessage(e):null}async searchMessages(t,e){return (await this.prisma.message.findMany({where:{conversationId:t,content:{contains:e,mode:"insensitive"}},orderBy:{timestamp:"asc"}})).map(this.toMessage)}async updateConversationMetadata(t,e){await this.prisma.conversation.update({where:{id:t},data:{metadata:e,updatedAt:new Date}});}async getConversationMetadata(t){return (await this.prisma.conversation.findUnique({where:{id:t},select:{metadata:true}}))?.metadata||null}async deleteConversationMetadata(t,e){let s=await this.getConversationMetadata(t);if(s){for(let r of e)delete s[r];await this.updateConversationMetadata(t,s);}}async userExists(t){return await this.prisma.conversation.count({where:{userId:t}})>0}async deleteUser(t){await this.deleteAllConversations(t);}async exportConversation(t){let e=await this.getConversation(t);if(!e)throw new Error(`Conversation ${t} not found`);let s=await this.getMessages(t);return {conversation:e,messages:s,exportedAt:new Date}}async importConversation(t,e){let s=await this.createConversation(t,e.conversation.metadata);return await this.prisma.conversation.update({where:{id:s},data:{title:e.conversation.title,createdAt:e.conversation.createdAt}}),await this.saveManyMessages(s,e.messages),s}};var T=class extends we__default.default{constructor(e){super();this.client=e;}threads=new Map;async createThread(e,s,r,a){let n=v("thread"),l=Date.now(),i={id:n,userId:e,messages:[],config:s,metadata:r||{},tags:a?.tags||[],title:a?.title,createdAt:l,updatedAt:l,lastActiveAt:l,status:"active",priority:a?.priority||"normal",messageCount:0,errorCount:0};return this.threads.set(n,i),this.emit("event",{type:"thread-created",threadId:n,thread:i}),n}async forkThread(e,s){let r=this.requireThread(e),a=[...r.messages];if(s){let i=a.findIndex(c=>c.id===s);i!==-1&&(a=a.slice(0,i+1));}let n=await this.createThread(r.userId,r.config,{...r.metadata}),l=this.requireThread(n);return l.messages=a.map(i=>({...i})),l.messageCount=a.length,l.tags=[...r.tags],l.title=r.title?`Fork of ${r.title}`:void 0,this.emit("event",{type:"thread-forked",threadId:n,parentThreadId:e}),n}async mergeThread(e,s){let r=this.requireThread(e),a=this.requireThread(s),n=[...r.messages,...a.messages].sort((l,i)=>(l.timestamp||0)-(i.timestamp||0));r.messages=n,r.messageCount=n.length,r.updatedAt=Date.now(),this.emit("event",{type:"thread-merged",threadId:e,sourceThreadId:s});}getThread(e){return this.threads.get(e)||null}threadExists(e){return this.threads.has(e)}getUserThreads(e,s){let r=Array.from(this.threads.values()).filter(l=>l.userId===e);r=this.sortThreads(r,s?.sort);let a=s?.offset||0,n=s?.limit??r.length;return r.slice(a,a+n)}filterThreads(e,s,r){let a=Array.from(this.threads.values()).filter(i=>i.userId===e);if(s.status){let i=Array.isArray(s.status)?s.status:[s.status];a=a.filter(c=>i.includes(c.status));}if(s.priority&&(a=a.filter(i=>i.priority===s.priority)),s.tags?.length&&(a=a.filter(i=>s.tags.every(c=>i.tags.includes(c)))),s.createdAfter!==void 0&&(a=a.filter(i=>i.createdAt>=s.createdAfter)),s.createdBefore!==void 0&&(a=a.filter(i=>i.createdAt<=s.createdBefore)),s.updatedAfter!==void 0&&(a=a.filter(i=>i.updatedAt>=s.updatedAfter)),s.search){let i=s.search.toLowerCase();a=a.filter(c=>c.title?.toLowerCase().includes(i)||c.messages.some(d=>typeof d.content=="string"&&d.content.toLowerCase().includes(i)));}a=this.sortThreads(a,r?.sort);let n=r?.offset||0,l=r?.limit??a.length;return a.slice(n,n+l)}countThreads(e,s){return this.filterThreads(e,s||{}).length}updateThreadStatus(e,s){let r=this.requireThread(e),a=r.status;r.status=s,r.updatedAt=Date.now(),this.emit("event",{type:"status-changed",threadId:e,status:s,previousStatus:a});}updateThreadPriority(e,s){let r=this.requireThread(e);r.priority=s,r.updatedAt=Date.now(),this.emit("event",{type:"priority-changed",threadId:e,priority:s});}updateThreadMetadata(e,s){let r=this.requireThread(e);r.metadata={...r.metadata,...s},r.updatedAt=Date.now(),this.emit("event",{type:"metadata-updated",threadId:e,metadata:r.metadata});}setThreadTitle(e,s){let r=this.requireThread(e);r.title=s,r.updatedAt=Date.now(),this.emit("event",{type:"title-updated",threadId:e,title:s});}updateThreadConfig(e,s){let r=this.requireThread(e);r.config={...r.config,...s},r.updatedAt=Date.now(),this.emit("event",{type:"config-updated",threadId:e,config:r.config});}addTags(e,s){let r=this.requireThread(e);r.tags=[...new Set([...r.tags,...s])],r.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:r.tags});}removeTags(e,s){let r=this.requireThread(e);r.tags=r.tags.filter(a=>!s.includes(a)),r.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:r.tags});}setTags(e,s){let r=this.requireThread(e);r.tags=[...new Set(s)],r.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:r.tags});}async addMessage(e,s){let r=this.requireThread(e),a=Date.now(),n={...s,id:s.id||v("msg"),timestamp:s.timestamp||a};r.messages.push(n),r.messageCount=r.messages.length,r.updatedAt=a,r.lastActiveAt=a,this.emit("event",{type:"message-added",threadId:e,message:n});}async addManyMessages(e,s){for(let r of s)await this.addMessage(e,r);}getMessage(e,s){return this.requireThread(e).messages.find(a=>a.id===s)||null}getMessages(e,s){let a=[...this.requireThread(e).messages];s?.role&&(a=a.filter(i=>i.role===s.role));let n=s?.offset||0,l=s?.limit??a.length;return a.slice(n,n+l)}getLastMessage(e){let s=this.requireThread(e);return s.messages[s.messages.length-1]||null}updateMessage(e,s,r){let a=this.requireThread(e),n=a.messages.findIndex(l=>l.id===s);if(n===-1)throw new Error(`Message ${s} not found in thread ${e}`);a.messages[n]={...a.messages[n],...r},a.updatedAt=Date.now(),this.emit("event",{type:"message-updated",threadId:e,messageId:s,updates:r});}deleteMessage(e,s){let r=this.requireThread(e),a=r.messages.findIndex(n=>n.id===s);if(a===-1)throw new Error(`Message ${s} not found in thread ${e}`);r.messages.splice(a,1),r.messageCount=r.messages.length,r.updatedAt=Date.now(),this.emit("event",{type:"message-deleted",threadId:e,messageId:s});}searchMessages(e,s){let r=this.requireThread(e),a=s.toLowerCase();return r.messages.filter(n=>typeof n.content=="string"&&n.content.toLowerCase().includes(a))}clearThread(e){let s=this.requireThread(e);s.messages=[],s.messageCount=0,s.updatedAt=Date.now(),this.emit("event",{type:"thread-cleared",threadId:e});}trimThread(e,s){let r=this.requireThread(e);r.messages.length>s&&(r.messages=r.messages.slice(-s),r.messageCount=r.messages.length,r.updatedAt=Date.now());}archiveThread(e){this.updateThreadStatus(e,"archived"),this.emit("event",{type:"thread-archived",threadId:e});}restoreThread(e){this.updateThreadStatus(e,"active"),this.emit("event",{type:"thread-restored",threadId:e});}pauseThread(e){this.updateThreadStatus(e,"paused");}resumeThread(e){this.updateThreadStatus(e,"active");}completeThread(e){this.updateThreadStatus(e,"completed");}markThreadError(e,s){let r=this.requireThread(e);r.errorCount+=1,r.lastError=s.message,this.updateThreadStatus(e,"error"),this.emit("event",{type:"error",threadId:e,error:s});}deleteThread(e){this.threads.delete(e),this.emit("event",{type:"thread-deleted",threadId:e});}deleteAllThreads(e){for(let[s,r]of this.threads)r.userId===e&&(this.threads.delete(s),this.emit("event",{type:"thread-deleted",threadId:s}));}getStats(e){let s=e?Array.from(this.threads.values()).filter(i=>i.userId===e):Array.from(this.threads.values()),r=s.reduce((i,c)=>i+c.messageCount,0),a=s.reduce((i,c)=>i+(c.tokenCount||0),0),n=s.map(i=>i.createdAt),l={total:s.length,active:s.filter(i=>i.status==="active").length,paused:s.filter(i=>i.status==="paused").length,completed:s.filter(i=>i.status==="completed").length,error:s.filter(i=>i.status==="error").length,archived:s.filter(i=>i.status==="archived").length,totalMessages:r,totalTokens:a,averageMessagesPerThread:s.length?r/s.length:0,oldestThread:n.length?Math.min(...n):void 0,newestThread:n.length?Math.max(...n):void 0};return this.emit("event",{type:"pool-stats",stats:l}),l}exportThread(e){let s=this.requireThread(e);return {thread:{...s},messages:s.messages.map(r=>({...r})),exportedAt:Date.now(),version:"1.0"}}importThread(e,s){let r=v("thread"),a=Date.now(),n={...s.thread,id:r,userId:e,messages:s.messages.map(l=>({...l})),createdAt:a,updatedAt:a,lastActiveAt:a};return this.threads.set(r,n),this.emit("event",{type:"thread-created",threadId:r,thread:n}),r}cleanup(e=36e5){let s=Date.now(),r=[];for(let[a,n]of this.threads)n.status!=="active"&&s-n.updatedAt>e&&r.push(a);for(let a of r)this.threads.delete(a);this.emit("event",{type:"cleanup",deletedCount:r.length});}requireThread(e){let s=this.threads.get(e);if(!s)throw new Error(`Thread ${e} not found`);return s}sortThreads(e,s){let r=s?.field||"updatedAt",a=s?.direction==="asc"?1:-1;return [...e].sort((n,l)=>{let i=n[r],c=l[r];return a*(i-c)})}};var ae=class{constructor(t){this.client=t;}managers=new Map;getManager(t){return this.managers.has(t)||this.managers.set(t,new T(this.client)),this.managers.get(t)}hasManager(t){return this.managers.has(t)}removeManager(t){let e=this.managers.get(t);e&&(e.removeAllListeners(),this.managers.delete(t));}listUsers(){return Array.from(this.managers.keys())}managerCount(){return this.managers.size}getAllThreads(){let t=[];for(let e of this.managers.values())t.push(...Array.from(e.threads.values()));return t}getAllActiveThreads(){return this.getAllThreads().filter(t=>t.status==="active")}findThreads(t,e){let s=[];for(let[i,c]of this.managers)s.push(...c.filterThreads(i,t,e));let r=e?.sort?.field||"updatedAt",a=e?.sort?.direction==="asc"?1:-1;s.sort((i,c)=>a*(i[r]-c[r]));let n=e?.offset||0,l=e?.limit??s.length;return s.slice(n,n+l)}findThread(t){for(let e of this.managers.values()){let s=e.getThread(t);if(s)return s}return null}findThreadOwner(t){for(let[e,s]of this.managers)if(s.threadExists(t))return e;return null}getGlobalStats(){let t=this.getAllThreads(),e=t.reduce((a,n)=>a+n.messageCount,0),s=t.reduce((a,n)=>a+(n.tokenCount||0),0),r=t.map(a=>a.createdAt);return {userCount:this.managers.size,total:t.length,active:t.filter(a=>a.status==="active").length,paused:t.filter(a=>a.status==="paused").length,completed:t.filter(a=>a.status==="completed").length,error:t.filter(a=>a.status==="error").length,archived:t.filter(a=>a.status==="archived").length,totalMessages:e,totalTokens:s,averageMessagesPerThread:t.length?e/t.length:0,oldestThread:r.length?Math.min(...r):void 0,newestThread:r.length?Math.max(...r):void 0}}getUserStats(){let t={};for(let[e,s]of this.managers)t[e]=s.getStats(e);return t}totalThreadCount(){let t=0;for(let e of this.managers.values())t+=e.threads.size;return t}cleanupAll(t=36e5){for(let e of this.managers.values())e.cleanup(t);for(let[e,s]of this.managers)s.threads.size===0&&(s.removeAllListeners(),this.managers.delete(e));}archiveStale(t=864e5){let e=Date.now(),s=0;for(let r of this.managers.values())for(let a of r.threads.values())(a.status==="completed"||a.status==="error")&&e-a.updatedAt>t&&(r.archiveThread(a.id),s++);return s}deleteUser(t){let e=this.managers.get(t);e&&(e.deleteAllThreads(t),e.removeAllListeners(),this.managers.delete(t));}purge(){for(let[t,e]of this.managers)e.deleteAllThreads(t),e.removeAllListeners();this.managers.clear();}exportThread(t){for(let e of this.managers.values())if(e.threadExists(t))return e.exportThread(t);return null}importThread(t,e){return this.getManager(t).importThread(t,e)}exportUserThreads(t){let e=this.managers.get(t);return e?Array.from(e.threads.keys()).map(s=>e.exportThread(s)):[]}importUserThreads(t,e){return e.map(s=>this.importThread(t,s))}};var ne={debug:0,info:1,warn:2,error:3},b=class o{config;constructor(t={}){this.config={enabled:t.enabled??true,level:t.level??"info",onLog:t.onLog??this.defaultLogHandler,context:t.context??{}};}defaultLogHandler(t){let s=`[${new Date(t.timestamp).toISOString()}] [${t.level.toUpperCase()}]`,r=t.metadata?`${s} ${t.message} ${JSON.stringify(t.metadata)}`:`${s} ${t.message}`;switch(t.level){case "debug":console.debug(r);break;case "info":console.info(r);break;case "warn":console.warn(r);break;case "error":console.error(r);break}}shouldLog(t){return this.config.enabled?ne[t]>=ne[this.config.level]:false}createEntry(t,e,s){return {timestamp:Date.now(),level:t,message:e,metadata:s?{...this.config.context,...s}:this.config.context}}debug(t,e){if(!this.shouldLog("debug"))return;let s=this.createEntry("debug",t,e);this.config.onLog(s);}info(t,e){if(!this.shouldLog("info"))return;let s=this.createEntry("info",t,e);this.config.onLog(s);}warn(t,e){if(!this.shouldLog("warn"))return;let s=this.createEntry("warn",t,e);this.config.onLog(s);}error(t,e){if(!this.shouldLog("error"))return;let s=this.createEntry("error",t,e);this.config.onLog(s);}child(t){return new o({...this.config,context:{...this.config.context,...t}})}configure(t){this.config={...this.config,...t,context:{...this.config.context,...t.context||{}}};}};function oe(o){return new b(o)}function ie(){return new b({enabled:false})}var le=class o{providerCallback;cacheManager;databaseManager;threadManager;queue;mutex;logger;defaultRetryConfig;constructor(t){this.mutex=new asyncMutex.Mutex;let e=t.rateLimit||{};if(this.queue=new Ce__default.default({concurrency:e.maxConcurrent||100,interval:e.interval||1e3,intervalCap:e.intervalCap||100,timeout:3e4}),t.logger?this.logger=t.logger instanceof b?t.logger:oe(t.logger):this.logger=ie(),this.logger.info("PaprFlare client initialized"),this.defaultRetryConfig={maxAttempts:t.retry?.maxAttempts||3,initialDelay:t.retry?.initialDelay||1e3,maxDelay:t.retry?.maxDelay||1e4,backoffMultiplier:t.retry?.backoffMultiplier||2,onRetry:t.retry?.onRetry},this.providerCallback=t.provider,t.cache&&(this.logger.info("Initializing Redis cache",{host:t.cache.redis?.host,port:t.cache.redis?.port}),this.cacheManager=new S(t.cache)),t.database&&(this.logger.info("Initializing database"),this.databaseManager=new P(t.database)),t.threads?.enabled){if(!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG");this.logger.info("Thread management enabled");}}async chat(t){let{messages:e,signal:s,...r}=t,a=v("req");if(this.logger.info("Chat request started",{requestId:a,messageCount:e.length,stream:r.stream,model:r.model}),s?.aborted)throw this.logger.warn("Request aborted before execution",{requestId:a}),new p("Request aborted","ABORTED");let n=Z(e);if(this.validateConfig(r),this.cacheManager&&r.cache?.enabled!==false){this.logger.debug("Checking cache",{requestId:a});let i=await this.cacheManager.getCachedResponse(n,r);if(i)return this.logger.info("Cache hit",{requestId:a}),r.stream?this.createStreamingResponse(this.eventsToGenerator(i)):this.eventsToResponse(i);this.logger.debug("Cache miss",{requestId:a});}let l=()=>{this.logger.warn("Request aborted",{requestId:a});};s?.addEventListener("abort",l);try{return this.queue.add(async()=>{if(s?.aborted)throw new p("Request aborted","ABORTED");return this.executeChat(n,r,a,s)})}finally{s&&l&&s.removeEventListener("abort",l);}}async executeChat(t,e,s,r){let a={...this.defaultRetryConfig,...e.cache};return z(async()=>{if(r?.aborted)throw new p("Request aborted","ABORTED");if(e.output?.schema)return this.executeStructuredOutput(t,e);let n=this.providerCallback(t,e);if(e.stream){let l;if(this.cacheManager&&e.cache?.enabled!==!1){let i=[],c=this.cacheStream(n,i);l=this.withFinally(c,()=>this.cacheManager.cacheResponse(t,e,i));}else l=n;return this.createStreamingResponse(l)}else {let l=await E(n);return this.cacheManager&&e.cache?.enabled!==!1&&await this.cacheManager.cacheResponse(t,e,l),this.eventsToResponse(l)}},{...a,onRetry:(n,l)=>{this.logger.warn(`Retry attempt ${n}/${a.maxAttempts}`,{requestId:s,error:l.message}),a.onRetry?.(n,l);}})}async executeStructuredOutput(t,e){let s=e.output.schema._def?.shape,r=typeof s=="function"?s():s,a=r?Object.entries(r).map(([g,w])=>{let C=w?._def?.typeName??w?.constructor?.name??"unknown";return ` - "${g}": ${C}`}).join(`
|
|
18
18
|
`):"(schema shape unavailable)",n={id:v("msg"),role:"system",content:`You are a JSON generator. You MUST respond with ONLY valid JSON that matches this exact schema:
|
|
19
19
|
${a}
|
|
20
20
|
|
|
@@ -36,6 +36,6 @@ Please ensure:
|
|
|
36
36
|
|
|
37
37
|
Parse error: ${g.message}`,"VALIDATION_ERROR",400,g)}}extractJSON(t){let e=t.replace(/```json\s*/gi,"").replace(/```\s*/g,""),s=e.match(/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/),r=e.match(/\[(?:[^\[\]]|\[(?:[^\[\]]|\[[^\[\]]*\])*\])*\]/);if(s)return s[0].trim();if(r)return r[0].trim();let a=e.split(`
|
|
38
38
|
`),n=[],l=false,i=0;for(let c of a){let d=c.trim();if(d.startsWith("{")||d.startsWith("[")){if(l=true,n=[c],i=(c.match(/\{/g)||[]).length-(c.match(/\}/g)||[]).length,i+=(c.match(/\[/g)||[]).length-(c.match(/\]/g)||[]).length,i===0)return c.trim();continue}if(l&&(n.push(c),i+=(c.match(/\{/g)||[]).length-(c.match(/\}/g)||[]).length,i+=(c.match(/\[/g)||[]).length-(c.match(/\]/g)||[]).length,i===0))return n.join(`
|
|
39
|
-
`).trim()}return e.trim()}createStreamingResponse(t){return {stream:t,toReadableStream:()=>R(t),pipeToResponse:async e=>{await F(t,e);},mergeStreams:(...e)=>B(t,...e),toUIStream:()=>x(t),process:e=>H(t,e),toText:()=>W(t),toConsole:()=>Y(t),toResponse:e=>Q(t,e)}}async*withFinally(t,e){try{yield*t;}finally{await e();}}async*cacheStream(t,e){for await(let s of t)e.push(s),yield s;}async*eventsToGenerator(t){for(let e of t)yield e;}eventsToResponse(t){let e=t.find(r=>r.type==="done"),s=t.find(r=>r.type==="usage");if(!e||e.type!=="done")throw new p("No completion event found in response","INVALID_RESPONSE");return {message:e.finalMessage,usage:s&&s.type==="usage"?s.usage:void 0}}validateConfig(t){if(t.temperature!==void 0&&(t.temperature<0||t.temperature>2))throw new p("Temperature must be between 0 and 2","VALIDATION_ERROR",400);if(t.maxTokens!==void 0&&t.maxTokens<1)throw new p("Max tokens must be greater than 0","VALIDATION_ERROR",400);if(t.output?.schema&&t.stream)throw new p("Structured output requires stream: false","VALIDATION_ERROR",400)}get database(){return this.databaseManager}get threads(){if(!this.threadManager){if(!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG");let t=new o({provider:this.providerCallback});this.threadManager=new T(t);}return this.threadManager}getQueueStats(){return {size:this.queue.size,pending:this.queue.pending,concurrency:this.queue.concurrency}}async clearCache(){this.cacheManager&&await this.cacheManager.clearAll();}};function jt(o){return {schema:o,mode:"json"}}var U=class{client;defaultModel;constructor(t){this.client=new ce__default.default({apiKey:t.apiKey,baseURL:t.baseURL,timeout:t.timeout||3e4,maxRetries:t.maxRetries||3,defaultHeaders:t.headers}),this.defaultModel=t.model||"claude-3-5-sonnet-20241022";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new f;try{let r=t.find(d=>d.role==="system"),a=t.filter(d=>d.role!=="system"),n=this.client.messages.stream({model:e.model||this.defaultModel,messages:this.formatMessages(a),max_tokens:e.maxTokens||4096,temperature:e.temperature,top_p:e.topP,stop_sequences:e.stop,...r&&{system:r.content},...e.tools&&e.tools.length>0&&{tools:this.formatTools(e.tools)},...e.toolChoice&&e.toolChoice!=="auto"&&{tool_choice:this.formatToolChoice(e.toolChoice)}}),l=null,i="";for await(let d of n){if(d.type==="content_block_start"&&d.content_block?.type==="tool_use"&&(l=d.content_block,i="",s.startToolCall(l.name,l.id)),d.type==="content_block_delta"&&(d.delta?.type==="text_delta"&&s.writeText(d.delta.text),d.delta?.type==="input_json_delta"&&(i+=d.delta.partial_json,s.writeToolCallDelta(d.delta.partial_json))),d.type==="content_block_stop"&&l){try{let m=JSON.parse(l.input?JSON.stringify(l.input):i||"{}");s.endToolCall(m);}catch(m){console.error("Failed to parse tool arguments:",m),s.endToolCall({});}l=null,i="";}yield*s.flush();}let c=await n.finalMessage();c.usage&&s.writeUsage({promptTokens:c.usage.input_tokens,completionTokens:c.usage.output_tokens,totalTokens:c.usage.input_tokens+c.usage.output_tokens}),s.done(),yield*s.flush();}catch(r){throw r instanceof ce__default.default.APIError?new y(r.message,"anthropic",r.status):new y(`Anthropic provider error: ${r.message}`,"anthropic")}}formatMessages(t){return t.map(e=>{let s=[];if(e.content&&s.push({type:"text",text:e.content}),e.toolCalls)for(let r of e.toolCalls)s.push({type:"tool_use",id:r.id,name:r.name,input:r.arguments});if(e.toolResults)for(let r of e.toolResults)s.push({type:"tool_result",tool_use_id:r.toolCallId,content:JSON.stringify(r.result),...r.error&&{is_error:true}});return {role:e.role==="assistant"?"assistant":"user",content:s.length===1&&s[0].type==="text"?s[0].text:s}})}formatTools(t){return t.map(e=>({name:e.name,description:e.description,input_schema:this.zodToJsonSchema(e.parameters)}))}formatToolChoice(t){if(t!=="none")return t==="required"?{type:"any"}:typeof t=="object"&&"name"in t?{type:"tool",name:t.name}:{type:"auto"}}zodToJsonSchema(t){if(!t)return {type:"object",properties:{},required:[]};let e=t._def;if(!e)return typeof t=="object"&&t.type?t:{type:"object",properties:{},required:[]};let s=e.typeName;if(!s)return console.warn("Zod schema missing typeName, falling back to string"),{type:"string"};switch(s){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:e.type?this.zodToJsonSchema(e.type):{type:"string"},...e.description&&{description:e.description}};case "ZodObject":let r={},a=[],n={};try{n=typeof e.shape=="function"?e.shape():e.shape||{};}catch(c){console.warn("Failed to get Zod object shape:",c);}for(let[c,d]of Object.entries(n))r[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||a.push(c);return {type:"object",properties:r,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values||[],...e.description&&{description:e.description}};case "ZodOptional":return e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"};case "ZodNullable":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},default:typeof e.defaultValue=="function"?e.defaultValue():e.defaultValue};case "ZodAny":return {type:"string",description:"Any value"};case "ZodUnknown":return {type:"string",description:"Unknown value"};case "ZodRecord":return {type:"object",additionalProperties:e.valueType?this.zodToJsonSchema(e.valueType):true,...e.description&&{description:e.description}};default:return console.warn(`Unsupported Zod type: ${s}, falling back to string`),{type:"string"}}}};function Bt(o){return new U(o).createCallback()}var _=class{client;defaultModel;constructor(t){this.client=new generativeAi.GoogleGenerativeAI(t.apiKey),this.defaultModel=t.model||"gemini-2.5-flash";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new f;try{let r=t.find(h=>h.role==="system"),a=this.client.getGenerativeModel({model:e.model||this.defaultModel,...r&&{systemInstruction:r.content},generationConfig:{temperature:e.temperature,maxOutputTokens:e.maxTokens,topP:e.topP,stopSequences:e.stop},...e.tools&&e.tools.length>0&&{tools:[{functionDeclarations:this.formatTools(e.tools)}]},...e.toolChoice&&e.toolChoice!=="auto"&&{toolConfig:this.formatToolConfig(e.toolChoice)}}),n=this.formatMessages(t);if(n.length===0)throw new y("No messages to send","google");let l=n[n.length-1],i=n.slice(0,-1),d=await a.startChat({history:i}).sendMessageStream(l.parts);for await(let h of d.stream){let g=h.text();g&&(s.writeText(g),yield*s.flush());let w=h.functionCalls();if(w)for(let C of w){let j=`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;s.startToolCall(C.name,j),s.endToolCall(C.args),yield*s.flush();}}let m=await d.response;m.usageMetadata&&s.writeUsage({promptTokens:m.usageMetadata.promptTokenCount??0,completionTokens:m.usageMetadata.candidatesTokenCount??(m.usageMetadata.totalTokenCount??0)-(m.usageMetadata.promptTokenCount??0),totalTokens:m.usageMetadata.totalTokenCount??0}),s.done(),yield*s.flush();}catch(r){throw new y(`Google provider error: ${r.message}`,"google")}}formatMessages(t){return t.filter(e=>e.role!=="system").map(e=>{let s=[];if(e.content&&s.push({text:e.content}),e.toolCalls&&e.toolCalls.length>0)for(let r of e.toolCalls)s.push({functionCall:{name:r.name,args:r.arguments}});if(e.toolResults&&e.toolResults.length>0)for(let r of e.toolResults){let a=t.flatMap(n=>n.toolCalls||[]).find(n=>n.id===r.toolCallId);s.push({functionResponse:{name:a?.name||"unknown",response:{result:r.result,...r.error&&{error:r.error}}}});}return {role:e.role==="assistant"||e.role==="tool"?"model":"user",parts:s.length>0?s:[{text:e.content||""}]}})}formatTools(t){return t.map(e=>{let s={type:"object",properties:{},required:[]};if(e.parameters&&typeof e.parameters=="object")try{let r=e.parameters._def;if(r&&r.typeName==="ZodObject"&&r.shape){let a=r.shape();s.properties=Object.entries(a).reduce((n,[l,i])=>(n[l]=this.zodToJsonSchema(i),i.isOptional?.()||s.required.push(l),n),{});}}catch(r){console.warn(`Failed to convert Zod schema for tool ${e.name}:`,r);}return {name:e.name,description:e.description,parameters:s}})}zodToJsonSchema(t){if(!t)return {type:"string"};let e=t._def;if(!e)return typeof t=="object"&&t.type?t:{type:"string"};let s=e.typeName;if(!s)return console.warn("Zod schema missing typeName, falling back to string"),{type:"string"};switch(s){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:e.type?this.zodToJsonSchema(e.type):{type:"string"},...e.description&&{description:e.description}};case "ZodObject":let r={},a=[],n={};try{n=typeof e.shape=="function"?e.shape():e.shape||{};}catch(c){console.warn("Failed to get Zod object shape:",c);}for(let[c,d]of Object.entries(n))r[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||a.push(c);return {type:"object",properties:r,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values||[],...e.description&&{description:e.description}};case "ZodOptional":return e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"};case "ZodNullable":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},default:typeof e.defaultValue=="function"?e.defaultValue():e.defaultValue};case "ZodAny":return {type:"string",description:"Any value"};case "ZodUnknown":return {type:"string",description:"Unknown value"};case "ZodRecord":return {type:"object",additionalProperties:e.valueType?this.zodToJsonSchema(e.valueType):true,...e.description&&{description:e.description}};default:return {type:"string"}}}formatToolConfig(t){return t==="none"?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.NONE}}:t==="required"?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.ANY}}:typeof t=="object"&&"name"in t?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.ANY,allowedFunctionNames:[t.name]}}:{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.AUTO}}}};function Qt(o){return new _(o).createCallback()}var q=class{client;defaultModel;constructor(t){this.client=new de__default.default({apiKey:t.apiKey,baseURL:t.baseURL,organization:t.organization,timeout:t.timeout||3e4,maxRetries:t.maxRetries||3,defaultHeaders:t.headers}),this.defaultModel=t.model||"gpt-4-turbo-preview";}createCallback(){return (t,e)=>this.streamChat(t,e)}async getFinalChatCompletion(t){let e=[...t].reverse().find(s=>s.usage!=null);return e?.usage?{usage:e.usage}:null}async*streamChat(t,e){let s=new f;try{let r=await this.client.chat.completions.create({model:e.model||this.defaultModel,messages:this.formatMessages(t),temperature:e.temperature,max_tokens:e.maxTokens,top_p:e.topP,frequency_penalty:e.frequencyPenalty,presence_penalty:e.presencePenalty,stop:e.stop,stream:!0,stream_options:{include_usage:!0},...e.tools&&e.tools.length>0&&{tools:this.formatTools(e.tools),tool_choice:this.formatToolChoice(e.toolChoice)}}),a=new Map,n=[];for await(let i of r){n.push(i);let c=i.choices[0]?.delta;if(c){if(c.content&&s.writeText(c.content),c.tool_calls)for(let d of c.tool_calls){let m=d.index;a.has(m)||a.set(m,{id:"",name:"",arguments:""});let h=a.get(m);d.id&&(h.id=d.id),d.function?.name&&(h.name=d.function.name,s.startToolCall(h.name,h.id)),d.function?.arguments&&(h.arguments+=d.function.arguments,s.writeToolCallDelta(d.function.arguments));}if(i.choices[0]?.finish_reason&&i.choices[0].finish_reason==="tool_calls"){for(let[d,m]of a.entries())try{let h=JSON.parse(m.arguments||"{}");s.endToolCall(h);}catch(h){console.error(`Failed to parse tool call arguments for ${m.name}:`,h),s.endToolCall({});}a.clear();}yield*s.flush();}}let l=await this.getFinalChatCompletion(n);l?.usage&&s.writeUsage({promptTokens:l.usage.prompt_tokens,completionTokens:l.usage.completion_tokens,totalTokens:l.usage.total_tokens}),s.done(),yield*s.flush();}catch(r){throw r instanceof de__default.default.APIError?new y(r.message,"openai",r.status):new y(`OpenAI provider error: ${r.message}`,"openai")}}formatMessages(t){return t.map(e=>{let s={role:e.role,content:e.content||null};return e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(r=>({id:r.id,type:"function",function:{name:r.name,arguments:JSON.stringify(r.arguments)}}))),e.role==="tool"&&e.toolResults&&e.toolResults.length>0&&(s.tool_call_id=e.toolResults[0]?.toolCallId,s.content=JSON.stringify(e.toolResults[0]?.result)),s})}formatTools(t){return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:this.zodToJsonSchema(e.parameters)}}))}formatToolChoice(t){return !t||t==="auto"?"auto":t==="none"?"none":t==="required"?"required":typeof t=="object"&&"name"in t?{type:"function",function:{name:t.name}}:"auto"}zodToJsonSchema(t){if(!t)return {type:"object",properties:{},required:[]};let e=t._def;if(!e)return typeof t=="object"&&t.type?t:{type:"object",properties:{},required:[]};let s=e.typeName;if(!s)return console.warn("Zod schema missing typeName, falling back to string"),{type:"string"};switch(s){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:e.type?this.zodToJsonSchema(e.type):{type:"string"},...e.description&&{description:e.description}};case "ZodObject":let r={},a=[],n={};try{n=typeof e.shape=="function"?e.shape():e.shape||{};}catch(c){console.warn("Failed to get Zod object shape:",c);}for(let[c,d]of Object.entries(n))r[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||a.push(c);return {type:"object",properties:r,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values||[],...e.description&&{description:e.description}};case "ZodOptional":return e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"};case "ZodNullable":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},default:typeof e.defaultValue=="function"?e.defaultValue():e.defaultValue};case "ZodAny":return {type:"string",description:"Any value"};case "ZodUnknown":return {type:"string",description:"Unknown value"};case "ZodRecord":return {type:"object",additionalProperties:e.valueType?this.zodToJsonSchema(e.valueType):true,...e.description&&{description:e.description}};default:return console.warn(`Unsupported Zod type: ${s}, falling back to string`),{type:"string"}}}};function as(o){return new q(o).createCallback()}var G=class{config;baseURL;constructor(t){this.config=t,this.baseURL=t.baseURL||"https://api.sarvam.ai/v1";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new f;try{let r={model:e.model||this.config.model||"sarvam-m",messages:this.formatMessages(t),temperature:e.temperature,max_tokens:e.maxTokens,stream:!0};e.tools&&e.tools.length>0&&console.warn("Sarvam AI does not support tool calling. Tools will be ignored.");let a=await fetch(`${this.baseURL}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},body:JSON.stringify(r)});if(!a.ok){let n=await a.json().catch(()=>({}));throw new y(n.error?.message||"Sarvam AI API error","sarvam",a.status)}yield*this.parseStream(a.body,s);}catch(r){throw r instanceof y?r:new y(`Sarvam provider error: ${r}`,"sarvam")}}async*parseStream(t,e){let s=t.getReader(),r=new TextDecoder,a="";try{for(;;){let{done:n,value:l}=await s.read();if(n)break;a+=r.decode(l,{stream:!0});let i=a.split(`
|
|
40
|
-
`);a=i.pop()||"";for(let c of i){if(!c.trim()||!c.startsWith("data: "))continue;let d=c.slice(6);if(d==="[DONE]"){e.done(),yield*e.flush();return}try{let m=JSON.parse(d);if(m.choices?.[0]){let h=m.choices[0].delta;if(h?.content&&e.writeText(h.content),m.choices[0].finish_reason){e.done(),yield*e.flush();return}}m.usage&&e.writeUsage({promptTokens:m.usage.prompt_tokens||0,completionTokens:m.usage.completion_tokens||0,totalTokens:m.usage.total_tokens||0}),yield*e.flush();}catch(m){console.error("Failed to parse Sarvam chunk:",m);}}}}finally{s.releaseLock();}}formatMessages(t){return t.map(e=>({role:e.role,content:e.content||""}))}};function
|
|
39
|
+
`).trim()}return e.trim()}createStreamingResponse(t){return {stream:t,toReadableStream:()=>R(t),pipeToResponse:async e=>{await F(t,e);},mergeStreams:(...e)=>B(t,...e),toUIStream:()=>x(t),process:e=>H(t,e),toText:()=>W(t),toConsole:()=>Y(t),toResponse:e=>Q(t,e)}}async*withFinally(t,e){try{yield*t;}finally{await e();}}async*cacheStream(t,e){for await(let s of t)e.push(s),yield s;}async*eventsToGenerator(t){for(let e of t)yield e;}eventsToResponse(t){let e=t.find(r=>r.type==="done"),s=t.find(r=>r.type==="usage");if(!e||e.type!=="done")throw new p("No completion event found in response","INVALID_RESPONSE");return {message:e.finalMessage,usage:s&&s.type==="usage"?s.usage:void 0}}validateConfig(t){if(t.temperature!==void 0&&(t.temperature<0||t.temperature>2))throw new p("Temperature must be between 0 and 2","VALIDATION_ERROR",400);if(t.maxTokens!==void 0&&t.maxTokens<1)throw new p("Max tokens must be greater than 0","VALIDATION_ERROR",400);if(t.output?.schema&&t.stream)throw new p("Structured output requires stream: false","VALIDATION_ERROR",400)}get database(){return this.databaseManager}get threads(){if(!this.threadManager){if(!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG");let t=new o({provider:this.providerCallback});this.threadManager=new T(t);}return this.threadManager}getQueueStats(){return {size:this.queue.size,pending:this.queue.pending,concurrency:this.queue.concurrency}}async clearCache(){this.cacheManager&&await this.cacheManager.clearAll();}};function $t(o){return {schema:o,mode:"json"}}var U=class{client;defaultModel;constructor(t){this.client=new ce__default.default({apiKey:t.apiKey,baseURL:t.baseURL,timeout:t.timeout||3e4,maxRetries:t.maxRetries||3,defaultHeaders:t.headers}),this.defaultModel=t.model||"claude-3-5-sonnet-20241022";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new f;try{let r=t.find(d=>d.role==="system"),a=t.filter(d=>d.role!=="system"),n=this.client.messages.stream({model:e.model||this.defaultModel,messages:this.formatMessages(a),max_tokens:e.maxTokens||4096,temperature:e.temperature,top_p:e.topP,stop_sequences:e.stop,...r&&{system:r.content},...e.tools&&e.tools.length>0&&{tools:this.formatTools(e.tools)},...e.toolChoice&&e.toolChoice!=="auto"&&{tool_choice:this.formatToolChoice(e.toolChoice)}}),l=null,i="";for await(let d of n){if(d.type==="content_block_start"&&d.content_block?.type==="tool_use"&&(l=d.content_block,i="",s.startToolCall(l.name,l.id)),d.type==="content_block_delta"&&(d.delta?.type==="text_delta"&&s.writeText(d.delta.text),d.delta?.type==="input_json_delta"&&(i+=d.delta.partial_json,s.writeToolCallDelta(d.delta.partial_json))),d.type==="content_block_stop"&&l){try{let m=JSON.parse(l.input?JSON.stringify(l.input):i||"{}");s.endToolCall(m);}catch(m){console.error("Failed to parse tool arguments:",m),s.endToolCall({});}l=null,i="";}yield*s.flush();}let c=await n.finalMessage();c.usage&&s.writeUsage({promptTokens:c.usage.input_tokens,completionTokens:c.usage.output_tokens,totalTokens:c.usage.input_tokens+c.usage.output_tokens}),s.done(),yield*s.flush();}catch(r){throw r instanceof ce__default.default.APIError?new y(r.message,"anthropic",r.status):new y(`Anthropic provider error: ${r.message}`,"anthropic")}}formatMessages(t){return t.map(e=>{let s=[];if(e.content&&s.push({type:"text",text:e.content}),e.toolCalls)for(let r of e.toolCalls)s.push({type:"tool_use",id:r.id,name:r.name,input:r.arguments});if(e.toolResults)for(let r of e.toolResults)s.push({type:"tool_result",tool_use_id:r.toolCallId,content:JSON.stringify(r.result),...r.error&&{is_error:true}});return {role:e.role==="assistant"?"assistant":"user",content:s.length===1&&s[0].type==="text"?s[0].text:s}})}formatTools(t){return t.map(e=>({name:e.name,description:e.description,input_schema:this.zodToJsonSchema(e.parameters)}))}formatToolChoice(t){if(t!=="none")return t==="required"?{type:"any"}:typeof t=="object"&&"name"in t?{type:"tool",name:t.name}:{type:"auto"}}zodToJsonSchema(t){if(!t)return {type:"object",properties:{},required:[]};let e=t._def;if(!e)return typeof t=="object"&&t.type?t:{type:"object",properties:{},required:[]};let s=e.typeName;if(!s)return console.warn("Zod schema missing typeName, falling back to string"),{type:"string"};switch(s){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:e.type?this.zodToJsonSchema(e.type):{type:"string"},...e.description&&{description:e.description}};case "ZodObject":let r={},a=[],n={};try{n=typeof e.shape=="function"?e.shape():e.shape||{};}catch(c){console.warn("Failed to get Zod object shape:",c);}for(let[c,d]of Object.entries(n))r[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||a.push(c);return {type:"object",properties:r,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values||[],...e.description&&{description:e.description}};case "ZodOptional":return e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"};case "ZodNullable":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},default:typeof e.defaultValue=="function"?e.defaultValue():e.defaultValue};case "ZodAny":return {type:"string",description:"Any value"};case "ZodUnknown":return {type:"string",description:"Unknown value"};case "ZodRecord":return {type:"object",additionalProperties:e.valueType?this.zodToJsonSchema(e.valueType):true,...e.description&&{description:e.description}};default:return console.warn(`Unsupported Zod type: ${s}, falling back to string`),{type:"string"}}}};function Vt(o){return new U(o).createCallback()}var _=class{client;defaultModel;constructor(t){this.client=new generativeAi.GoogleGenerativeAI(t.apiKey),this.defaultModel=t.model||"gemini-2.5-flash";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new f;try{let r=t.find(h=>h.role==="system"),a=this.client.getGenerativeModel({model:e.model||this.defaultModel,...r&&{systemInstruction:r.content},generationConfig:{temperature:e.temperature,maxOutputTokens:e.maxTokens,topP:e.topP,stopSequences:e.stop},...e.tools&&e.tools.length>0&&{tools:[{functionDeclarations:this.formatTools(e.tools)}]},...e.toolChoice&&e.toolChoice!=="auto"&&{toolConfig:this.formatToolConfig(e.toolChoice)}}),n=this.formatMessages(t);if(n.length===0)throw new y("No messages to send","google");let l=n[n.length-1],i=n.slice(0,-1),d=await a.startChat({history:i}).sendMessageStream(l.parts);for await(let h of d.stream){let g=h.text();g&&(s.writeText(g),yield*s.flush());let w=h.functionCalls();if(w)for(let C of w){let j=`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;s.startToolCall(C.name,j),s.endToolCall(C.args),yield*s.flush();}}let m=await d.response;m.usageMetadata&&s.writeUsage({promptTokens:m.usageMetadata.promptTokenCount??0,completionTokens:m.usageMetadata.candidatesTokenCount??(m.usageMetadata.totalTokenCount??0)-(m.usageMetadata.promptTokenCount??0),totalTokens:m.usageMetadata.totalTokenCount??0}),s.done(),yield*s.flush();}catch(r){throw new y(`Google provider error: ${r.message}`,"google")}}formatMessages(t){return t.filter(e=>e.role!=="system").map(e=>{let s=[];if(e.content&&s.push({text:e.content}),e.toolCalls&&e.toolCalls.length>0)for(let r of e.toolCalls)s.push({functionCall:{name:r.name,args:r.arguments}});if(e.toolResults&&e.toolResults.length>0)for(let r of e.toolResults){let a=t.flatMap(n=>n.toolCalls||[]).find(n=>n.id===r.toolCallId);s.push({functionResponse:{name:a?.name||"unknown",response:{result:r.result,...r.error&&{error:r.error}}}});}return {role:e.role==="assistant"||e.role==="tool"?"model":"user",parts:s.length>0?s:[{text:e.content||""}]}})}formatTools(t){return t.map(e=>{let s={type:"object",properties:{},required:[]};if(e.parameters&&typeof e.parameters=="object")try{let r=e.parameters._def;if(r&&r.typeName==="ZodObject"&&r.shape){let a=r.shape();s.properties=Object.entries(a).reduce((n,[l,i])=>(n[l]=this.zodToJsonSchema(i),i.isOptional?.()||s.required.push(l),n),{});}}catch(r){console.warn(`Failed to convert Zod schema for tool ${e.name}:`,r);}return {name:e.name,description:e.description,parameters:s}})}zodToJsonSchema(t){if(!t)return {type:"string"};let e=t._def;if(!e)return typeof t=="object"&&t.type?t:{type:"string"};let s=e.typeName;if(!s)return console.warn("Zod schema missing typeName, falling back to string"),{type:"string"};switch(s){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:e.type?this.zodToJsonSchema(e.type):{type:"string"},...e.description&&{description:e.description}};case "ZodObject":let r={},a=[],n={};try{n=typeof e.shape=="function"?e.shape():e.shape||{};}catch(c){console.warn("Failed to get Zod object shape:",c);}for(let[c,d]of Object.entries(n))r[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||a.push(c);return {type:"object",properties:r,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values||[],...e.description&&{description:e.description}};case "ZodOptional":return e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"};case "ZodNullable":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},default:typeof e.defaultValue=="function"?e.defaultValue():e.defaultValue};case "ZodAny":return {type:"string",description:"Any value"};case "ZodUnknown":return {type:"string",description:"Unknown value"};case "ZodRecord":return {type:"object",additionalProperties:e.valueType?this.zodToJsonSchema(e.valueType):true,...e.description&&{description:e.description}};default:return {type:"string"}}}formatToolConfig(t){return t==="none"?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.NONE}}:t==="required"?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.ANY}}:typeof t=="object"&&"name"in t?{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.ANY,allowedFunctionNames:[t.name]}}:{functionCallingConfig:{mode:generativeAi.FunctionCallingMode.AUTO}}}};function es(o){return new _(o).createCallback()}var q=class{client;defaultModel;constructor(t){this.client=new de__default.default({apiKey:t.apiKey,baseURL:t.baseURL,organization:t.organization,timeout:t.timeout||3e4,maxRetries:t.maxRetries||3,defaultHeaders:t.headers}),this.defaultModel=t.model||"gpt-4-turbo-preview";}createCallback(){return (t,e)=>this.streamChat(t,e)}async getFinalChatCompletion(t){let e=[...t].reverse().find(s=>s.usage!=null);return e?.usage?{usage:e.usage}:null}async*streamChat(t,e){let s=new f;try{let r=await this.client.chat.completions.create({model:e.model||this.defaultModel,messages:this.formatMessages(t),temperature:e.temperature,max_tokens:e.maxTokens,top_p:e.topP,frequency_penalty:e.frequencyPenalty,presence_penalty:e.presencePenalty,stop:e.stop,stream:!0,stream_options:{include_usage:!0},...e.tools&&e.tools.length>0&&{tools:this.formatTools(e.tools),tool_choice:this.formatToolChoice(e.toolChoice)}}),a=new Map,n=[];for await(let i of r){n.push(i);let c=i.choices[0]?.delta;if(c){if(c.content&&s.writeText(c.content),c.tool_calls)for(let d of c.tool_calls){let m=d.index;a.has(m)||a.set(m,{id:"",name:"",arguments:""});let h=a.get(m);d.id&&(h.id=d.id),d.function?.name&&(h.name=d.function.name,s.startToolCall(h.name,h.id)),d.function?.arguments&&(h.arguments+=d.function.arguments,s.writeToolCallDelta(d.function.arguments));}if(i.choices[0]?.finish_reason&&i.choices[0].finish_reason==="tool_calls"){for(let[d,m]of a.entries())try{let h=JSON.parse(m.arguments||"{}");s.endToolCall(h);}catch(h){console.error(`Failed to parse tool call arguments for ${m.name}:`,h),s.endToolCall({});}a.clear();}yield*s.flush();}}let l=await this.getFinalChatCompletion(n);l?.usage&&s.writeUsage({promptTokens:l.usage.prompt_tokens,completionTokens:l.usage.completion_tokens,totalTokens:l.usage.total_tokens}),s.done(),yield*s.flush();}catch(r){throw r instanceof de__default.default.APIError?new y(r.message,"openai",r.status):new y(`OpenAI provider error: ${r.message}`,"openai")}}formatMessages(t){return t.map(e=>{let s={role:e.role,content:e.content||null};return e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(r=>({id:r.id,type:"function",function:{name:r.name,arguments:JSON.stringify(r.arguments)}}))),e.role==="tool"&&e.toolResults&&e.toolResults.length>0&&(s.tool_call_id=e.toolResults[0]?.toolCallId,s.content=JSON.stringify(e.toolResults[0]?.result)),s})}formatTools(t){return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:this.zodToJsonSchema(e.parameters)}}))}formatToolChoice(t){return !t||t==="auto"?"auto":t==="none"?"none":t==="required"?"required":typeof t=="object"&&"name"in t?{type:"function",function:{name:t.name}}:"auto"}zodToJsonSchema(t){if(!t)return {type:"object",properties:{},required:[]};let e=t._def;if(!e)return typeof t=="object"&&t.type?t:{type:"object",properties:{},required:[]};let s=e.typeName;if(!s)return console.warn("Zod schema missing typeName, falling back to string"),{type:"string"};switch(s){case "ZodString":return {type:"string",...e.description&&{description:e.description}};case "ZodNumber":return {type:"number",...e.description&&{description:e.description}};case "ZodBoolean":return {type:"boolean",...e.description&&{description:e.description}};case "ZodArray":return {type:"array",items:e.type?this.zodToJsonSchema(e.type):{type:"string"},...e.description&&{description:e.description}};case "ZodObject":let r={},a=[],n={};try{n=typeof e.shape=="function"?e.shape():e.shape||{};}catch(c){console.warn("Failed to get Zod object shape:",c);}for(let[c,d]of Object.entries(n))r[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||a.push(c);return {type:"object",properties:r,...a.length>0&&{required:a},...e.description&&{description:e.description}};case "ZodEnum":return {type:"string",enum:e.values||[],...e.description&&{description:e.description}};case "ZodOptional":return e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"};case "ZodNullable":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},nullable:true};case "ZodUnion":return e.options&&e.options.length>0?this.zodToJsonSchema(e.options[0]):{type:"string"};case "ZodLiteral":return {type:typeof e.value,enum:[e.value],...e.description&&{description:e.description}};case "ZodDefault":return {...e.innerType?this.zodToJsonSchema(e.innerType):{type:"string"},default:typeof e.defaultValue=="function"?e.defaultValue():e.defaultValue};case "ZodAny":return {type:"string",description:"Any value"};case "ZodUnknown":return {type:"string",description:"Unknown value"};case "ZodRecord":return {type:"object",additionalProperties:e.valueType?this.zodToJsonSchema(e.valueType):true,...e.description&&{description:e.description}};default:return console.warn(`Unsupported Zod type: ${s}, falling back to string`),{type:"string"}}}};function os(o){return new q(o).createCallback()}var G=class{config;baseURL;constructor(t){this.config=t,this.baseURL=t.baseURL||"https://api.sarvam.ai/v1";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new f;try{let r={model:e.model||this.config.model||"sarvam-m",messages:this.formatMessages(t),temperature:e.temperature,max_tokens:e.maxTokens,stream:!0};e.tools&&e.tools.length>0&&console.warn("Sarvam AI does not support tool calling. Tools will be ignored.");let a=await fetch(`${this.baseURL}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},body:JSON.stringify(r)});if(!a.ok){let n=await a.json().catch(()=>({}));throw new y(n.error?.message||"Sarvam AI API error","sarvam",a.status)}yield*this.parseStream(a.body,s);}catch(r){throw r instanceof y?r:new y(`Sarvam provider error: ${r}`,"sarvam")}}async*parseStream(t,e){let s=t.getReader(),r=new TextDecoder,a="";try{for(;;){let{done:n,value:l}=await s.read();if(n)break;a+=r.decode(l,{stream:!0});let i=a.split(`
|
|
40
|
+
`);a=i.pop()||"";for(let c of i){if(!c.trim()||!c.startsWith("data: "))continue;let d=c.slice(6);if(d==="[DONE]"){e.done(),yield*e.flush();return}try{let m=JSON.parse(d);if(m.choices?.[0]){let h=m.choices[0].delta;if(h?.content&&e.writeText(h.content),m.choices[0].finish_reason){e.done(),yield*e.flush();return}}m.usage&&e.writeUsage({promptTokens:m.usage.prompt_tokens||0,completionTokens:m.usage.completion_tokens||0,totalTokens:m.usage.total_tokens||0}),yield*e.flush();}catch(m){console.error("Failed to parse Sarvam chunk:",m);}}}}finally{s.releaseLock();}}formatMessages(t){return t.map(e=>({role:e.role,content:e.content||""}))}};function ms(o){return new G(o).createCallback()}exports.AnthropicProvider=U;exports.CacheManager=S;exports.DatabaseManager=P;exports.DrizzleAdapter=te;exports.GoogleProvider=_;exports.MemoryAdapter=se;exports.MemoryCache=O;exports.OpenAIProvider=q;exports.PaprFlare=le;exports.PaprFlareError=p;exports.PrismaAdapter=re;exports.ProviderError=y;exports.RateLimitError=K;exports.RedisCache=L;exports.SarvamProvider=G;exports.StreamWriter=f;exports.ThreadManager=T;exports.ThreadPool=ae;exports.ValidationError=V;exports.batchStream=je;exports.chunk=Se;exports.collectStream=E;exports.collectText=W;exports.createAnthropicProvider=Vt;exports.createCacheKey=$;exports.createGoogleProvider=es;exports.createOpenAIProvider=os;exports.createSarvamProvider=ms;exports.createStreamWriter=De;exports.createStreamableValue=Fe;exports.createUIMessageStream=ze;exports.debounce=Pe;exports.deepMerge=J;exports.filterStream=qe;exports.formatMessages=Z;exports.generateId=v;exports.isPlainObject=A;exports.measureTime=Ee;exports.mergeStreams=B;exports.parseSSEStream=Ue;exports.pipeToResponse=F;exports.processStream=H;exports.retry=z;exports.safeJsonParse=Ae;exports.sleep=he;exports.streamToArray=Re;exports.streamToConsole=Y;exports.structuredOutput=$t;exports.takeStream=Ge;exports.throttle=ke;exports.toHTTPResponse=Q;exports.toReadableStream=R;exports.toUIStream=x;exports.transformStream=_e;//# sourceMappingURL=index.js.map
|
|
41
41
|
//# sourceMappingURL=index.js.map
|