paprflare-sdk 0.0.25 → 0.0.27

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 CHANGED
@@ -1123,8 +1123,6 @@ interface SarvamConfig extends ProviderConfig {
1123
1123
  * Sarvam AI provider - Indian multilingual LLM
1124
1124
  * Supports 10+ Indian languages
1125
1125
  * Using official Sarvam AI SDK
1126
- *
1127
- * Installation: npm install @sarvam-ai/sdk
1128
1126
  */
1129
1127
  declare class SarvamProvider {
1130
1128
  private client;
@@ -1139,9 +1137,13 @@ declare class SarvamProvider {
1139
1137
  */
1140
1138
  private streamChat;
1141
1139
  /**
1142
- * Handle streaming response
1140
+ * Handle async iterator stream response
1143
1141
  */
1144
1142
  private handleStreamResponse;
1143
+ /**
1144
+ * Handle ReadableStream response (SSE format)
1145
+ */
1146
+ private handleReadableStreamResponse;
1145
1147
  /**
1146
1148
  * Handle non-streaming response
1147
1149
  */
@@ -1150,6 +1152,11 @@ declare class SarvamProvider {
1150
1152
  * Format messages for Sarvam AI SDK
1151
1153
  */
1152
1154
  private formatMessages;
1155
+ /**
1156
+ * Format tools for Sarvam AI SDK
1157
+ * Pass Zod schemas directly - SDK handles conversion
1158
+ */
1159
+ private formatTools;
1153
1160
  /**
1154
1161
  * Format tool choice for Sarvam AI API
1155
1162
  */
package/dist/index.d.ts CHANGED
@@ -1123,8 +1123,6 @@ interface SarvamConfig extends ProviderConfig {
1123
1123
  * Sarvam AI provider - Indian multilingual LLM
1124
1124
  * Supports 10+ Indian languages
1125
1125
  * Using official Sarvam AI SDK
1126
- *
1127
- * Installation: npm install @sarvam-ai/sdk
1128
1126
  */
1129
1127
  declare class SarvamProvider {
1130
1128
  private client;
@@ -1139,9 +1137,13 @@ declare class SarvamProvider {
1139
1137
  */
1140
1138
  private streamChat;
1141
1139
  /**
1142
- * Handle streaming response
1140
+ * Handle async iterator stream response
1143
1141
  */
1144
1142
  private handleStreamResponse;
1143
+ /**
1144
+ * Handle ReadableStream response (SSE format)
1145
+ */
1146
+ private handleReadableStreamResponse;
1145
1147
  /**
1146
1148
  * Handle non-streaming response
1147
1149
  */
@@ -1150,6 +1152,11 @@ declare class SarvamProvider {
1150
1152
  * Format messages for Sarvam AI SDK
1151
1153
  */
1152
1154
  private formatMessages;
1155
+ /**
1156
+ * Format tools for Sarvam AI SDK
1157
+ * Pass Zod schemas directly - SDK handles conversion
1158
+ */
1159
+ private formatTools;
1153
1160
  /**
1154
1161
  * Format tool choice for Sarvam AI API
1155
1162
  */
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- 'use strict';var ue=require('ioredis'),lruCache=require('lru-cache'),nanoid=require('nanoid'),le=require('fast-json-stable-stringify'),pe=require('eventemitter3'),eventsourceParser=require('eventsource-parser');require('zod');var ge=require('p-queue'),asyncMutex=require('async-mutex'),drizzleOrm=require('drizzle-orm'),ne=require('@anthropic-ai/sdk'),generativeAi=require('@google/generative-ai'),oe=require('openai'),sarvamai=require('sarvamai');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ue__default=/*#__PURE__*/_interopDefault(ue);var le__default=/*#__PURE__*/_interopDefault(le);var pe__default=/*#__PURE__*/_interopDefault(pe);var ge__default=/*#__PURE__*/_interopDefault(ge);var ne__default=/*#__PURE__*/_interopDefault(ne);var oe__default=/*#__PURE__*/_interopDefault(oe);function w(o){let t=nanoid.nanoid();return o?`${o}_${t}`:t}function L(o){return le__default.default(o)}function Z(o){return o.map(t=>({...t,id:t.id||w("msg"),timestamp:t.timestamp||Date.now()}))}async function $(o,t){let e,s=t.initialDelay;for(let a=1;a<=t.maxAttempts;a++)try{return await o()}catch(r){if(e=r,a===t.maxAttempts)throw e;t.onRetry&&t.onRetry(a,e),await ce(Math.min(s,t.maxDelay)),s*=t.backoffMultiplier;}throw e}function ce(o){return new Promise(t=>setTimeout(t,o))}function Te(o,t){let e=[];for(let s=0;s<o.length;s+=t)e.push(o.slice(s,s+t));return e}function be(o,t){let e;return (...s)=>{clearTimeout(e),e=setTimeout(()=>o(...s),t);}}function Me(o,t){let e;return (...s)=>{e||(o(...s),e=true,setTimeout(()=>e=false,t));}}function xe(o){try{return JSON.parse(o)}catch{return null}}function k(o){return typeof o=="object"&&o!==null&&o.constructor===Object}function j(o,...t){if(!t.length)return o;let e=t.shift();if(k(o)&&k(e))for(let s in e)k(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 Se(o){let t=[];for await(let e of o)t.push(e);return t}async function Pe(o){let t=performance.now(),e=await o(),s=performance.now()-t;return {result:e,duration:s}}var f=class extends pe.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 a={text:t,index:this.chunkIndex++,timestamp:e,deltaTime:s};this.events.push({type:"text-delta",delta:t}),this.emit("chunk",a),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 a=this.activeTools.get(e);a&&(a.status="running",this.emit("toolUse",a));},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,a){let r=this.activeTools.get(t);if(!r)return;let n=Date.now()-r.timestamp;r.status=s?"completed":"failed",this.emit("toolUse",r),this.emit("toolResult",{toolId:t,content:e,success:s,error:a,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 Re(){return new f}async function*De(o){let t=o.getReader(),e=new TextDecoder,s="",a=eventsourceParser.createParser({onEvent:r=>{s=r.data;},onRetry:r=>{}});try{for(;;){let{done:r,value:n}=await t.read();if(r)break;let l=e.decode(n,{stream:!0});if(a.feed(l),s)try{let i=JSON.parse(s);i.type&&(yield i),s="";}catch{continue}}a.reset({consume:!0});}finally{t.releaseLock();}}function A(o){let t=new TextEncoder;return new ReadableStream({async start(e){try{for await(let s of o){let a=`data: ${JSON.stringify(s)}
1
+ 'use strict';var ue=require('ioredis'),lruCache=require('lru-cache'),nanoid=require('nanoid'),le=require('fast-json-stable-stringify'),pe=require('eventemitter3'),eventsourceParser=require('eventsource-parser');require('zod');var ge=require('p-queue'),asyncMutex=require('async-mutex'),drizzleOrm=require('drizzle-orm'),ne=require('@anthropic-ai/sdk'),generativeAi=require('@google/generative-ai'),oe=require('openai'),sarvamai=require('sarvamai');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ue__default=/*#__PURE__*/_interopDefault(ue);var le__default=/*#__PURE__*/_interopDefault(le);var pe__default=/*#__PURE__*/_interopDefault(pe);var ge__default=/*#__PURE__*/_interopDefault(ge);var ne__default=/*#__PURE__*/_interopDefault(ne);var oe__default=/*#__PURE__*/_interopDefault(oe);function b(l){let t=nanoid.nanoid();return l?`${l}_${t}`:t}function L(l){return le__default.default(l)}function Z(l){return l.map(t=>({...t,id:t.id||b("msg"),timestamp:t.timestamp||Date.now()}))}async function $(l,t){let e,s=t.initialDelay;for(let a=1;a<=t.maxAttempts;a++)try{return await l()}catch(r){if(e=r,a===t.maxAttempts)throw e;t.onRetry&&t.onRetry(a,e),await ce(Math.min(s,t.maxDelay)),s*=t.backoffMultiplier;}throw e}function ce(l){return new Promise(t=>setTimeout(t,l))}function Te(l,t){let e=[];for(let s=0;s<l.length;s+=t)e.push(l.slice(s,s+t));return e}function be(l,t){let e;return (...s)=>{clearTimeout(e),e=setTimeout(()=>l(...s),t);}}function Me(l,t){let e;return (...s)=>{e||(l(...s),e=true,setTimeout(()=>e=false,t));}}function xe(l){try{return JSON.parse(l)}catch{return null}}function A(l){return typeof l=="object"&&l!==null&&l.constructor===Object}function j(l,...t){if(!t.length)return l;let e=t.shift();if(A(l)&&A(e))for(let s in e)A(e[s])?(l[s]||Object.assign(l,{[s]:{}}),j(l[s],e[s])):Object.assign(l,{[s]:e[s]});return j(l,...t)}async function Se(l){let t=[];for await(let e of l)t.push(e);return t}async function ke(l){let t=performance.now(),e=await l(),s=performance.now()-t;return {result:e,duration:s}}var y=class extends pe.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 a={text:t,index:this.chunkIndex++,timestamp:e,deltaTime:s};this.events.push({type:"text-delta",delta:t}),this.emit("chunk",a),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 a=this.activeTools.get(e);a&&(a.status="running",this.emit("toolUse",a));},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,a){let r=this.activeTools.get(t);if(!r)return;let n=Date.now()-r.timestamp;r.status=s?"completed":"failed",this.emit("toolUse",r),this.emit("toolResult",{toolId:t,content:e,success:s,error:a,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 Re(){return new y}async function*De(l){let t=l.getReader(),e=new TextDecoder,s="",a=eventsourceParser.createParser({onEvent:r=>{s=r.data;},onRetry:r=>{}});try{for(;;){let{done:r,value:n}=await t.read();if(r)break;let o=e.decode(n,{stream:!0});if(a.feed(o),s)try{let i=JSON.parse(s);i.type&&(yield i),s="";}catch{continue}}a.reset({consume:!0});}finally{t.releaseLock();}}function R(l){let t=new TextEncoder;return new ReadableStream({async start(e){try{for await(let s of l){let a=`data: ${JSON.stringify(s)}
2
2
 
3
- `;e.enqueue(t.encode(a));}e.close();}catch(s){e.error(s);}}})}async function F(o,t){let e=A(o),s={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(t.node&&t.node.res){let a=t.node.res;Object.entries(s).forEach(([l,i])=>{a.setHeader(l,i);});let r=e.getReader(),n=new TextDecoder;try{for(;;){let{done:l,value:i}=await r.read();if(l)break;let c=n.decode(i,{stream:!0});a.write(c);}}finally{a.end();}}else {if(t instanceof Response||typeof t.body<"u")return;{Object.entries(s).forEach(([n,l])=>{t.setHeader(n,l);});let a=e.getReader(),r=new TextDecoder;try{for(;;){let{done:n,value:l}=await a.read();if(n)break;let i=r.decode(l,{stream:!0});t.write(i);}}finally{t.end();}}}}async function*z(...o){let t=o.map(async s=>{let a=[];for await(let r of s)a.push(r);return a}),e=await Promise.all(t);for(let s of e)for(let a of s)yield a;}async function*_e(o,t){for await(let e of o){let s=t(e);s!==null&&(yield s);}}async function*Ne(o,t){for await(let e of o)t(e)&&(yield e);}async function R(o){let t=[];for await(let e of o)t.push(e);return t}async function*Ie(o,t){let e=0;for await(let s of o){if(e>=t)break;yield s,e++;}}async function*Ue(o,t,e){let s=[],a=null,r=async()=>{if(s.length>0){let n=[...s];return s=[],n}return null};try{for await(let l of o)if(s.push(l),a&&(clearTimeout(a),a=null),s.length>=t){let i=await r();i&&(yield i);}else e&&(a=setTimeout(async()=>{let i=await r();},e));let n=await r();n&&(yield n);}finally{a&&clearTimeout(a);}}var p=class extends Error{constructor(e,s,a,r){super(e);this.code=s;this.statusCode=a;this.details=r;this.name="PaprFlareError";}},B=class extends p{constructor(e,s){super(e,"RATE_LIMIT_ERROR",429);this.retryAfter=s;}},K=class extends p{constructor(t,e){super(t,"VALIDATION_ERROR",400,e);}},y=class extends p{constructor(e,s,a){super(e,"PROVIDER_ERROR",a);this.provider=s;}};async function*b(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 a of o)switch(a.type){case "text-delta":e+=a.delta,s.content=e,yield {type:"text-delta",delta:a.delta};break;case "tool-call-start":s.toolCalls||(s.toolCalls=[]),s.toolCalls.push(a.toolCall),yield {type:"tool-call-start",toolCallId:a.toolCall.id,toolName:a.toolCall.name};break;case "tool-call-end":yield {type:"tool-call-complete",toolCallId:a.toolCall.id,arguments:a.toolCall.arguments};break;case "tool-result":s.toolResults||(s.toolResults=[]),s.toolResults.push(a.result),yield {type:"tool-result",toolCallId:a.result.toolCallId,result:a.result.result,success:!a.result.error};break;case "usage":s.metadata||(s.metadata={}),s.metadata.usage=a.usage,yield {type:"usage",tokens:{prompt:a.usage.promptTokens,completion:a.usage.completionTokens,total:a.usage.totalTokens}};break;case "metadata":s.metadata||(s.metadata={}),s.metadata={...s.metadata,...a.metadata};break;case "artifact-start":s.metadata||(s.metadata={}),s.metadata.artifacts||(s.metadata.artifacts=[]),s.metadata.artifacts.push({...a.artifact,content:""});break;case "artifact-delta":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&(n.content+=a.delta);}break;case "artifact-end":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&Object.assign(n,a.artifact);}break;case "done":s.isComplete=!0,s.content=e;let r={...s,...a.finalMessage};yield {type:"text-complete",fullText:e},yield {type:"message-complete",message:r};break;case "error":yield {type:"error",error:a.error};break}}catch(a){yield {type:"error",error:a.message||"Stream error"};}}async function V(o,t){let e=b(o),s=null;for await(let a of e)switch(a.type){case "message-start":await t.onStart?.(a.messageId);break;case "text-delta":await t.onText?.(a.delta);break;case "message-complete":s=a.message,await t.onComplete?.(a.message);break;case "error":throw await t.onError?.(a.error),new Error(a.error);case "tool-call-complete":await t.onToolCall?.(a.toolCallId,a.arguments);break;case "tool-result":await t.onToolResult?.({toolId:a.toolCallId,content:a.result,success:a.success,duration:0,timestamp:Date.now()});break;case "usage":await t.onUsage?.(a.tokens);break;case "status-change":await t.onStatusChange?.(a.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*je(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 a=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}},r=(async()=>{try{t.start(),await o.execute({writer:t,merge:a}),t.isClosed()||t.done();}catch(n){let l=o.onError?.(n)||n.message;t.error(l),t.done();}})();try{for await(let n of b(t.toGenerator()))yield n,n.type==="message-complete"&&(s=n.message);await r,o.onFinish&&s&&await o.onFinish({message:s});}catch(n){throw n}}async function H(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(`
3
+ `;e.enqueue(t.encode(a));}e.close();}catch(s){e.error(s);}}})}async function F(l,t){let e=R(l),s={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(t.node&&t.node.res){let a=t.node.res;Object.entries(s).forEach(([o,i])=>{a.setHeader(o,i);});let r=e.getReader(),n=new TextDecoder;try{for(;;){let{done:o,value:i}=await r.read();if(o)break;let c=n.decode(i,{stream:!0});a.write(c);}}finally{a.end();}}else {if(t instanceof Response||typeof t.body<"u")return;{Object.entries(s).forEach(([n,o])=>{t.setHeader(n,o);});let a=e.getReader(),r=new TextDecoder;try{for(;;){let{done:n,value:o}=await a.read();if(n)break;let i=r.decode(o,{stream:!0});t.write(i);}}finally{t.end();}}}}async function*z(...l){let t=l.map(async s=>{let a=[];for await(let r of s)a.push(r);return a}),e=await Promise.all(t);for(let s of e)for(let a of s)yield a;}async function*_e(l,t){for await(let e of l){let s=t(e);s!==null&&(yield s);}}async function*Ne(l,t){for await(let e of l)t(e)&&(yield e);}async function E(l){let t=[];for await(let e of l)t.push(e);return t}async function*Ie(l,t){let e=0;for await(let s of l){if(e>=t)break;yield s,e++;}}async function*Ue(l,t,e){let s=[],a=null,r=async()=>{if(s.length>0){let n=[...s];return s=[],n}return null};try{for await(let o of l)if(s.push(o),a&&(clearTimeout(a),a=null),s.length>=t){let i=await r();i&&(yield i);}else e&&(a=setTimeout(async()=>{let i=await r();},e));let n=await r();n&&(yield n);}finally{a&&clearTimeout(a);}}var f=class extends Error{constructor(e,s,a,r){super(e);this.code=s;this.statusCode=a;this.details=r;this.name="PaprFlareError";}},B=class extends f{constructor(e,s){super(e,"RATE_LIMIT_ERROR",429);this.retryAfter=s;}},K=class extends f{constructor(t,e){super(t,"VALIDATION_ERROR",400,e);}},w=class extends f{constructor(e,s,a){super(e,"PROVIDER_ERROR",a);this.provider=s;}};async function*x(l){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 a of l)switch(a.type){case "text-delta":e+=a.delta,s.content=e,yield {type:"text-delta",delta:a.delta};break;case "tool-call-start":s.toolCalls||(s.toolCalls=[]),s.toolCalls.push(a.toolCall),yield {type:"tool-call-start",toolCallId:a.toolCall.id,toolName:a.toolCall.name};break;case "tool-call-end":yield {type:"tool-call-complete",toolCallId:a.toolCall.id,arguments:a.toolCall.arguments};break;case "tool-result":s.toolResults||(s.toolResults=[]),s.toolResults.push(a.result),yield {type:"tool-result",toolCallId:a.result.toolCallId,result:a.result.result,success:!a.result.error};break;case "usage":s.metadata||(s.metadata={}),s.metadata.usage=a.usage,yield {type:"usage",tokens:{prompt:a.usage.promptTokens,completion:a.usage.completionTokens,total:a.usage.totalTokens}};break;case "metadata":s.metadata||(s.metadata={}),s.metadata={...s.metadata,...a.metadata};break;case "artifact-start":s.metadata||(s.metadata={}),s.metadata.artifacts||(s.metadata.artifacts=[]),s.metadata.artifacts.push({...a.artifact,content:""});break;case "artifact-delta":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&(n.content+=a.delta);}break;case "artifact-end":if(s.metadata?.artifacts){let n=s.metadata.artifacts[s.metadata.artifacts.length-1];n&&Object.assign(n,a.artifact);}break;case "done":s.isComplete=!0,s.content=e;let r={...s,...a.finalMessage};yield {type:"text-complete",fullText:e},yield {type:"message-complete",message:r};break;case "error":yield {type:"error",error:a.error};break}}catch(a){yield {type:"error",error:a.message||"Stream error"};}}async function V(l,t){let e=x(l),s=null;for await(let a of e)switch(a.type){case "message-start":await t.onStart?.(a.messageId);break;case "text-delta":await t.onText?.(a.delta);break;case "message-complete":s=a.message,await t.onComplete?.(a.message);break;case "error":throw await t.onError?.(a.error),new Error(a.error);case "tool-call-complete":await t.onToolCall?.(a.toolCallId,a.arguments);break;case "tool-result":await t.onToolResult?.({toolId:a.toolCallId,content:a.result,success:a.success,duration:0,timestamp:Date.now()});break;case "usage":await t.onUsage?.(a.tokens);break;case "status-change":await t.onStatusChange?.(a.status);break}if(!s)throw new Error("Stream completed without final message");return s}async function W(l){let t="";for await(let e of l)e.type==="text-delta"&&(t+=e.delta);return t}async function*je(l){let t=new y,s=null;l.onToolUse&&t.on("toolUse",l.onToolUse),l.onToolResult&&t.on("toolResult",l.onToolResult),l.onStatusChange&&t.on("statusChange",l.onStatusChange);let a=async n=>{for await(let o of n)switch(o.type){case "text-delta":t.write(o.delta);break;case "tool-call-start":t.startTool(o.toolCall.id,o.toolCall.name,o.toolCall.arguments);break;case "tool-call-end":t.getActiveTools().find(c=>c.id===o.toolCall.id)&&t.completeTool(o.toolCall.id,o.toolCall.arguments,true);break;case "tool-result":t.completeTool(o.result.toolCallId,o.result.result,!o.result.error,o.result.error);break;case "usage":t.usage({prompt:o.usage.promptTokens,completion:o.usage.completionTokens,total:o.usage.totalTokens});break;case "error":t.error(o.error);break;case "done":t.done(o.finalMessage);break}},r=(async()=>{try{t.start(),await l.execute({writer:t,merge:a}),t.isClosed()||t.done();}catch(n){let o=l.onError?.(n)||n.message;t.error(o),t.done();}})();try{for await(let n of x(t.toGenerator()))yield n,n.type==="message-complete"&&(s=n.message);await r,l.onFinish&&s&&await l.onFinish({message:s});}catch(n){throw n}}async function H(l){new y;for await(let e of l)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(`
7
7
  \u274C Error:`,e.error);break;case "done":console.log(`
8
8
 
9
- \u2705 Stream completed`);break}}async function Y(o,t){let e=b(o);if(!t)return new Response(new ReadableStream({async start(s){let a=new TextEncoder;try{for await(let r of e){let n=`data: ${JSON.stringify(r)}
9
+ \u2705 Stream completed`);break}}async function Y(l,t){let e=x(l);if(!t)return new Response(new ReadableStream({async start(s){let a=new TextEncoder;try{for await(let r of e){let n=`data: ${JSON.stringify(r)}
10
10
 
11
11
  `;s.enqueue(a.encode(n));}s.enqueue(a.encode(`data: [DONE]
12
12
 
@@ -14,8 +14,8 @@
14
14
 
15
15
  `;t.write(a);}t.write(`data: [DONE]
16
16
 
17
- `),t.end();}function Le(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 E=class{client;keyPrefix;defaultTTL;constructor(t){this.client=new ue__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 a=s||this.defaultTTL;await this.client.setex(this.getKey(t),a,e);}catch(a){console.error("Redis set error:",a);}}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)}},x=class{cache;enabled;constructor(t){this.enabled=true,t.type==="redis"?this.cache=new E({...t.redis,ttl:t.ttl}):this.cache=new O(t.memory);}generateCacheKey(t,e){let s={messages:t.map(a=>({role:a.role,content:a.content,toolCalls:a.toolCalls})),model:e.model,temperature:e.temperature,maxTokens:e.maxTokens,tools:e.tools?.map(a=>a.name)};return L(s)}async getCachedResponse(t,e){if(!this.enabled||e.cache?.enabled===false)return null;let s=e.cache?.key||this.generateCacheKey(t,e),a=await this.cache.get(s);if(a)try{return JSON.parse(a)}catch(r){return console.error("Cache parse error:",r),await this.cache.delete(s),null}return null}async cacheResponse(t,e,s){if(!this.enabled||e.cache?.enabled===false)return;let a=e.cache?.key||this.generateCacheKey(t,e),r=e.cache?.ttl;await this.cache.set(a,JSON.stringify(s),r);}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 ee=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 a of e)delete s[a];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 S=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 te=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)}`,a={id:s,userId:t,metadata:e||{},createdAt:new Date,updatedAt:new Date};return this.conversations.set(s,a),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(a=>a.userId===t).sort((a,r)=>r.updatedAt.getTime()-a.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(a=>a.userId===t&&a.title?.toLowerCase().includes(s))}async saveMessage(t,e){let s=this.messages.get(t)||[];s.push(e),this.messages.set(t,s);let a=this.conversations.get(t);a&&(a.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(a=>a.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(a=>a.role===e)}async updateMessage(t,e){for(let s of this.messages.values()){let a=s.findIndex(r=>r.id===t);if(a!==-1){s[a]={...s[a],...e};break}}}async deleteMessage(t){for(let[e,s]of this.messages){let a=s.findIndex(r=>r.id===t);if(a!==-1){s.splice(a,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(r=>typeof r.content=="string"&&r.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 a of e)delete s.metadata[a];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),a=this.conversations.get(s);return a.title=e.conversation.title,a.createdAt=e.conversation.createdAt,await this.saveManyMessages(s,e.messages),s}};var se=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 a of e)delete s[a];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 pe__default.default{constructor(e){super();this.client=e;}threads=new Map;async createThread(e,s,a,r){let n=w("thread"),l=Date.now(),i={id:n,userId:e,messages:[],config:s,metadata:a||{},tags:r?.tags||[],title:r?.title,createdAt:l,updatedAt:l,lastActiveAt:l,status:"active",priority:r?.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 a=this.requireThread(e),r=[...a.messages];if(s){let i=r.findIndex(c=>c.id===s);i!==-1&&(r=r.slice(0,i+1));}let n=await this.createThread(a.userId,a.config,{...a.metadata}),l=this.requireThread(n);return l.messages=r.map(i=>({...i})),l.messageCount=r.length,l.tags=[...a.tags],l.title=a.title?`Fork of ${a.title}`:void 0,this.emit("event",{type:"thread-forked",threadId:n,parentThreadId:e}),n}async mergeThread(e,s){let a=this.requireThread(e),r=this.requireThread(s),n=[...a.messages,...r.messages].sort((l,i)=>(l.timestamp||0)-(i.timestamp||0));a.messages=n,a.messageCount=n.length,a.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 a=Array.from(this.threads.values()).filter(l=>l.userId===e);a=this.sortThreads(a,s?.sort);let r=s?.offset||0,n=s?.limit??a.length;return a.slice(r,r+n)}filterThreads(e,s,a){let r=Array.from(this.threads.values()).filter(i=>i.userId===e);if(s.status){let i=Array.isArray(s.status)?s.status:[s.status];r=r.filter(c=>i.includes(c.status));}if(s.priority&&(r=r.filter(i=>i.priority===s.priority)),s.tags?.length&&(r=r.filter(i=>s.tags.every(c=>i.tags.includes(c)))),s.createdAfter!==void 0&&(r=r.filter(i=>i.createdAt>=s.createdAfter)),s.createdBefore!==void 0&&(r=r.filter(i=>i.createdAt<=s.createdBefore)),s.updatedAfter!==void 0&&(r=r.filter(i=>i.updatedAt>=s.updatedAfter)),s.search){let i=s.search.toLowerCase();r=r.filter(c=>c.title?.toLowerCase().includes(i)||c.messages.some(d=>typeof d.content=="string"&&d.content.toLowerCase().includes(i)));}r=this.sortThreads(r,a?.sort);let n=a?.offset||0,l=a?.limit??r.length;return r.slice(n,n+l)}countThreads(e,s){return this.filterThreads(e,s||{}).length}updateThreadStatus(e,s){let a=this.requireThread(e),r=a.status;a.status=s,a.updatedAt=Date.now(),this.emit("event",{type:"status-changed",threadId:e,status:s,previousStatus:r});}updateThreadPriority(e,s){let a=this.requireThread(e);a.priority=s,a.updatedAt=Date.now(),this.emit("event",{type:"priority-changed",threadId:e,priority:s});}updateThreadMetadata(e,s){let a=this.requireThread(e);a.metadata={...a.metadata,...s},a.updatedAt=Date.now(),this.emit("event",{type:"metadata-updated",threadId:e,metadata:a.metadata});}setThreadTitle(e,s){let a=this.requireThread(e);a.title=s,a.updatedAt=Date.now(),this.emit("event",{type:"title-updated",threadId:e,title:s});}updateThreadConfig(e,s){let a=this.requireThread(e);a.config={...a.config,...s},a.updatedAt=Date.now(),this.emit("event",{type:"config-updated",threadId:e,config:a.config});}addTags(e,s){let a=this.requireThread(e);a.tags=[...new Set([...a.tags,...s])],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}removeTags(e,s){let a=this.requireThread(e);a.tags=a.tags.filter(r=>!s.includes(r)),a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}setTags(e,s){let a=this.requireThread(e);a.tags=[...new Set(s)],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}async addMessage(e,s){let a=this.requireThread(e),r=Date.now(),n={...s,id:s.id||w("msg"),timestamp:s.timestamp||r};a.messages.push(n),a.messageCount=a.messages.length,a.updatedAt=r,a.lastActiveAt=r,this.emit("event",{type:"message-added",threadId:e,message:n});}async addManyMessages(e,s){for(let a of s)await this.addMessage(e,a);}getMessage(e,s){return this.requireThread(e).messages.find(r=>r.id===s)||null}getMessages(e,s){let r=[...this.requireThread(e).messages];s?.role&&(r=r.filter(i=>i.role===s.role));let n=s?.offset||0,l=s?.limit??r.length;return r.slice(n,n+l)}getLastMessage(e){let s=this.requireThread(e);return s.messages[s.messages.length-1]||null}updateMessage(e,s,a){let r=this.requireThread(e),n=r.messages.findIndex(l=>l.id===s);if(n===-1)throw new Error(`Message ${s} not found in thread ${e}`);r.messages[n]={...r.messages[n],...a},r.updatedAt=Date.now(),this.emit("event",{type:"message-updated",threadId:e,messageId:s,updates:a});}deleteMessage(e,s){let a=this.requireThread(e),r=a.messages.findIndex(n=>n.id===s);if(r===-1)throw new Error(`Message ${s} not found in thread ${e}`);a.messages.splice(r,1),a.messageCount=a.messages.length,a.updatedAt=Date.now(),this.emit("event",{type:"message-deleted",threadId:e,messageId:s});}searchMessages(e,s){let a=this.requireThread(e),r=s.toLowerCase();return a.messages.filter(n=>typeof n.content=="string"&&n.content.toLowerCase().includes(r))}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 a=this.requireThread(e);a.messages.length>s&&(a.messages=a.messages.slice(-s),a.messageCount=a.messages.length,a.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 a=this.requireThread(e);a.errorCount+=1,a.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,a]of this.threads)a.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()),a=s.reduce((i,c)=>i+c.messageCount,0),r=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:a,totalTokens:r,averageMessagesPerThread:s.length?a/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(a=>({...a})),exportedAt:Date.now(),version:"1.0"}}importThread(e,s){let a=w("thread"),r=Date.now(),n={...s.thread,id:a,userId:e,messages:s.messages.map(l=>({...l})),createdAt:r,updatedAt:r,lastActiveAt:r};return this.threads.set(a,n),this.emit("event",{type:"thread-created",threadId:a,thread:n}),a}cleanup(e=36e5){let s=Date.now(),a=[];for(let[r,n]of this.threads)n.status!=="active"&&s-n.updatedAt>e&&a.push(r);for(let r of a)this.threads.delete(r);this.emit("event",{type:"cleanup",deletedCount:a.length});}requireThread(e){let s=this.threads.get(e);if(!s)throw new Error(`Thread ${e} not found`);return s}sortThreads(e,s){let a=s?.field||"updatedAt",r=s?.direction==="asc"?1:-1;return [...e].sort((n,l)=>{let i=n[a],c=l[a];return r*(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 a=e?.sort?.field||"updatedAt",r=e?.sort?.direction==="asc"?1:-1;s.sort((i,c)=>r*(i[a]-c[a]));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((r,n)=>r+n.messageCount,0),s=t.reduce((r,n)=>r+(n.tokenCount||0),0),a=t.map(r=>r.createdAt);return {userCount:this.managers.size,total:t.length,active:t.filter(r=>r.status==="active").length,paused:t.filter(r=>r.status==="paused").length,completed:t.filter(r=>r.status==="completed").length,error:t.filter(r=>r.status==="error").length,archived:t.filter(r=>r.status==="archived").length,totalMessages:e,totalTokens:s,averageMessagesPerThread:t.length?e/t.length:0,oldestThread:a.length?Math.min(...a):void 0,newestThread:a.length?Math.max(...a):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 a of this.managers.values())for(let r of a.threads.values())(r.status==="completed"||r.status==="error")&&e-r.updatedAt>t&&(a.archiveThread(r.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 re=class o{mode;cloudConfig;providerCallback;cacheManager;databaseManager;threadManager;queue;mutex;defaultRetryConfig;constructor(t){this.mode=t.mode,this.mutex=new asyncMutex.Mutex;let e=t.rateLimit||{};if(this.queue=new ge__default.default({concurrency:e.maxConcurrent||100,interval:e.interval||1e3,intervalCap:e.intervalCap||100,timeout:3e4}),this.defaultRetryConfig={maxAttempts:t.retry?.maxAttempts||3,initialDelay:t.retry?.initialDelay||1e3,maxDelay:t.retry?.maxDelay||1e4,backoffMultiplier:t.retry?.backoffMultiplier||2},t.mode==="cloud")this.cloudConfig=t;else if(this.providerCallback=t.provider,t.cache&&(this.cacheManager=new x(t.cache)),t.database&&(this.databaseManager=new S(t.database)),t.threads?.enabled&&!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG")}async chat(t){let{messages:e,...s}=t,a=Z(e);if(this.validateConfig(s),this.cacheManager&&s.cache?.enabled!==false){let r=await this.cacheManager.getCachedResponse(a,s);if(r)return s.stream?this.createStreamingResponse(this.eventsToGenerator(r)):this.eventsToResponse(r)}return this.queue.add(async()=>this.executeChat(a,s))}async executeChat(t,e){let s={...this.defaultRetryConfig,...e.cache};return $(async()=>this.mode==="cloud"?this.executeCloudChat(t,e):this.executeSelfManagedChat(t,e),{...s,onRetry:(a,r)=>{console.warn(`[PaprFlare] Retry attempt ${a}/${s.maxAttempts}:`,r.message);}})}async executeCloudChat(t,e){let s=await fetch(`${this.cloudConfig.baseURL||"https://api.paprflare.in"}/v1/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.cloudConfig.apiKey}`},body:JSON.stringify({messages:t,...e})});if(!s.ok)throw new p(`Cloud API error: ${s.statusText}`,"CLOUD_API_ERROR",s.status);if(e.stream){let a=this.parseCloudStream(s.body);return this.createStreamingResponse(a)}else return await s.json()}async executeSelfManagedChat(t,e){if(!this.providerCallback)throw new p("Provider callback not configured","INVALID_CONFIG");if(e.output?.schema)return this.executeStructuredOutput(t,e);let s=this.providerCallback(t,e);if(e.stream){let a;if(this.cacheManager&&e.cache?.enabled!==false){let r=[],n=this.cacheStream(s,r);a=this.withFinally(n,()=>this.cacheManager.cacheResponse(t,e,r));}else a=s;return this.createStreamingResponse(a)}else {let a=await R(s);return this.cacheManager&&e.cache?.enabled!==false&&await this.cacheManager.cacheResponse(t,e,a),this.eventsToResponse(a)}}async executeStructuredOutput(t,e){let s=e.output.schema._def?.shape,a=typeof s=="function"?s():s,r=a?Object.entries(a).map(([g,v])=>{let C=v?._def?.typeName??v?.constructor?.name??"unknown";return ` - "${g}": ${C}`}).join(`
18
- `):"(schema shape unavailable)",n={id:w("msg"),role:"system",content:`You are a JSON generator. You MUST respond with ONLY valid JSON that matches this exact schema:
17
+ `),t.end();}function Le(l){let t=new y,e=false;return {value:(async function*(){l!==void 0&&(yield l);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 O=class{client;keyPrefix;defaultTTL;constructor(t){this.client=new ue__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 a=s||this.defaultTTL;await this.client.setex(this.getKey(t),a,e);}catch(a){console.error("Redis set error:",a);}}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 O({...t.redis,ttl:t.ttl}):this.cache=new D(t.memory);}generateCacheKey(t,e){let s={messages:t.map(a=>({role:a.role,content:a.content,toolCalls:a.toolCalls})),model:e.model,temperature:e.temperature,maxTokens:e.maxTokens,tools:e.tools?.map(a=>a.name)};return L(s)}async getCachedResponse(t,e){if(!this.enabled||e.cache?.enabled===false)return null;let s=e.cache?.key||this.generateCacheKey(t,e),a=await this.cache.get(s);if(a)try{return JSON.parse(a)}catch(r){return console.error("Cache parse error:",r),await this.cache.delete(s),null}return null}async cacheResponse(t,e,s){if(!this.enabled||e.cache?.enabled===false)return;let a=e.cache?.key||this.generateCacheKey(t,e),r=e.cache?.ttl;await this.cache.set(a,JSON.stringify(s),r);}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 ee=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 a of e)delete s[a];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 k=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 te=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)}`,a={id:s,userId:t,metadata:e||{},createdAt:new Date,updatedAt:new Date};return this.conversations.set(s,a),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(a=>a.userId===t).sort((a,r)=>r.updatedAt.getTime()-a.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(a=>a.userId===t&&a.title?.toLowerCase().includes(s))}async saveMessage(t,e){let s=this.messages.get(t)||[];s.push(e),this.messages.set(t,s);let a=this.conversations.get(t);a&&(a.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(a=>a.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(a=>a.role===e)}async updateMessage(t,e){for(let s of this.messages.values()){let a=s.findIndex(r=>r.id===t);if(a!==-1){s[a]={...s[a],...e};break}}}async deleteMessage(t){for(let[e,s]of this.messages){let a=s.findIndex(r=>r.id===t);if(a!==-1){s.splice(a,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(r=>typeof r.content=="string"&&r.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 a of e)delete s.metadata[a];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),a=this.conversations.get(s);return a.title=e.conversation.title,a.createdAt=e.conversation.createdAt,await this.saveManyMessages(s,e.messages),s}};var se=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 a of e)delete s[a];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 M=class extends pe__default.default{constructor(e){super();this.client=e;}threads=new Map;async createThread(e,s,a,r){let n=b("thread"),o=Date.now(),i={id:n,userId:e,messages:[],config:s,metadata:a||{},tags:r?.tags||[],title:r?.title,createdAt:o,updatedAt:o,lastActiveAt:o,status:"active",priority:r?.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 a=this.requireThread(e),r=[...a.messages];if(s){let i=r.findIndex(c=>c.id===s);i!==-1&&(r=r.slice(0,i+1));}let n=await this.createThread(a.userId,a.config,{...a.metadata}),o=this.requireThread(n);return o.messages=r.map(i=>({...i})),o.messageCount=r.length,o.tags=[...a.tags],o.title=a.title?`Fork of ${a.title}`:void 0,this.emit("event",{type:"thread-forked",threadId:n,parentThreadId:e}),n}async mergeThread(e,s){let a=this.requireThread(e),r=this.requireThread(s),n=[...a.messages,...r.messages].sort((o,i)=>(o.timestamp||0)-(i.timestamp||0));a.messages=n,a.messageCount=n.length,a.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 a=Array.from(this.threads.values()).filter(o=>o.userId===e);a=this.sortThreads(a,s?.sort);let r=s?.offset||0,n=s?.limit??a.length;return a.slice(r,r+n)}filterThreads(e,s,a){let r=Array.from(this.threads.values()).filter(i=>i.userId===e);if(s.status){let i=Array.isArray(s.status)?s.status:[s.status];r=r.filter(c=>i.includes(c.status));}if(s.priority&&(r=r.filter(i=>i.priority===s.priority)),s.tags?.length&&(r=r.filter(i=>s.tags.every(c=>i.tags.includes(c)))),s.createdAfter!==void 0&&(r=r.filter(i=>i.createdAt>=s.createdAfter)),s.createdBefore!==void 0&&(r=r.filter(i=>i.createdAt<=s.createdBefore)),s.updatedAfter!==void 0&&(r=r.filter(i=>i.updatedAt>=s.updatedAfter)),s.search){let i=s.search.toLowerCase();r=r.filter(c=>c.title?.toLowerCase().includes(i)||c.messages.some(d=>typeof d.content=="string"&&d.content.toLowerCase().includes(i)));}r=this.sortThreads(r,a?.sort);let n=a?.offset||0,o=a?.limit??r.length;return r.slice(n,n+o)}countThreads(e,s){return this.filterThreads(e,s||{}).length}updateThreadStatus(e,s){let a=this.requireThread(e),r=a.status;a.status=s,a.updatedAt=Date.now(),this.emit("event",{type:"status-changed",threadId:e,status:s,previousStatus:r});}updateThreadPriority(e,s){let a=this.requireThread(e);a.priority=s,a.updatedAt=Date.now(),this.emit("event",{type:"priority-changed",threadId:e,priority:s});}updateThreadMetadata(e,s){let a=this.requireThread(e);a.metadata={...a.metadata,...s},a.updatedAt=Date.now(),this.emit("event",{type:"metadata-updated",threadId:e,metadata:a.metadata});}setThreadTitle(e,s){let a=this.requireThread(e);a.title=s,a.updatedAt=Date.now(),this.emit("event",{type:"title-updated",threadId:e,title:s});}updateThreadConfig(e,s){let a=this.requireThread(e);a.config={...a.config,...s},a.updatedAt=Date.now(),this.emit("event",{type:"config-updated",threadId:e,config:a.config});}addTags(e,s){let a=this.requireThread(e);a.tags=[...new Set([...a.tags,...s])],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}removeTags(e,s){let a=this.requireThread(e);a.tags=a.tags.filter(r=>!s.includes(r)),a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}setTags(e,s){let a=this.requireThread(e);a.tags=[...new Set(s)],a.updatedAt=Date.now(),this.emit("event",{type:"tags-updated",threadId:e,tags:a.tags});}async addMessage(e,s){let a=this.requireThread(e),r=Date.now(),n={...s,id:s.id||b("msg"),timestamp:s.timestamp||r};a.messages.push(n),a.messageCount=a.messages.length,a.updatedAt=r,a.lastActiveAt=r,this.emit("event",{type:"message-added",threadId:e,message:n});}async addManyMessages(e,s){for(let a of s)await this.addMessage(e,a);}getMessage(e,s){return this.requireThread(e).messages.find(r=>r.id===s)||null}getMessages(e,s){let r=[...this.requireThread(e).messages];s?.role&&(r=r.filter(i=>i.role===s.role));let n=s?.offset||0,o=s?.limit??r.length;return r.slice(n,n+o)}getLastMessage(e){let s=this.requireThread(e);return s.messages[s.messages.length-1]||null}updateMessage(e,s,a){let r=this.requireThread(e),n=r.messages.findIndex(o=>o.id===s);if(n===-1)throw new Error(`Message ${s} not found in thread ${e}`);r.messages[n]={...r.messages[n],...a},r.updatedAt=Date.now(),this.emit("event",{type:"message-updated",threadId:e,messageId:s,updates:a});}deleteMessage(e,s){let a=this.requireThread(e),r=a.messages.findIndex(n=>n.id===s);if(r===-1)throw new Error(`Message ${s} not found in thread ${e}`);a.messages.splice(r,1),a.messageCount=a.messages.length,a.updatedAt=Date.now(),this.emit("event",{type:"message-deleted",threadId:e,messageId:s});}searchMessages(e,s){let a=this.requireThread(e),r=s.toLowerCase();return a.messages.filter(n=>typeof n.content=="string"&&n.content.toLowerCase().includes(r))}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 a=this.requireThread(e);a.messages.length>s&&(a.messages=a.messages.slice(-s),a.messageCount=a.messages.length,a.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 a=this.requireThread(e);a.errorCount+=1,a.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,a]of this.threads)a.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()),a=s.reduce((i,c)=>i+c.messageCount,0),r=s.reduce((i,c)=>i+(c.tokenCount||0),0),n=s.map(i=>i.createdAt),o={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:a,totalTokens:r,averageMessagesPerThread:s.length?a/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:o}),o}exportThread(e){let s=this.requireThread(e);return {thread:{...s},messages:s.messages.map(a=>({...a})),exportedAt:Date.now(),version:"1.0"}}importThread(e,s){let a=b("thread"),r=Date.now(),n={...s.thread,id:a,userId:e,messages:s.messages.map(o=>({...o})),createdAt:r,updatedAt:r,lastActiveAt:r};return this.threads.set(a,n),this.emit("event",{type:"thread-created",threadId:a,thread:n}),a}cleanup(e=36e5){let s=Date.now(),a=[];for(let[r,n]of this.threads)n.status!=="active"&&s-n.updatedAt>e&&a.push(r);for(let r of a)this.threads.delete(r);this.emit("event",{type:"cleanup",deletedCount:a.length});}requireThread(e){let s=this.threads.get(e);if(!s)throw new Error(`Thread ${e} not found`);return s}sortThreads(e,s){let a=s?.field||"updatedAt",r=s?.direction==="asc"?1:-1;return [...e].sort((n,o)=>{let i=n[a],c=o[a];return r*(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 M(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 a=e?.sort?.field||"updatedAt",r=e?.sort?.direction==="asc"?1:-1;s.sort((i,c)=>r*(i[a]-c[a]));let n=e?.offset||0,o=e?.limit??s.length;return s.slice(n,n+o)}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((r,n)=>r+n.messageCount,0),s=t.reduce((r,n)=>r+(n.tokenCount||0),0),a=t.map(r=>r.createdAt);return {userCount:this.managers.size,total:t.length,active:t.filter(r=>r.status==="active").length,paused:t.filter(r=>r.status==="paused").length,completed:t.filter(r=>r.status==="completed").length,error:t.filter(r=>r.status==="error").length,archived:t.filter(r=>r.status==="archived").length,totalMessages:e,totalTokens:s,averageMessagesPerThread:t.length?e/t.length:0,oldestThread:a.length?Math.min(...a):void 0,newestThread:a.length?Math.max(...a):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 a of this.managers.values())for(let r of a.threads.values())(r.status==="completed"||r.status==="error")&&e-r.updatedAt>t&&(a.archiveThread(r.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 re=class l{mode;cloudConfig;providerCallback;cacheManager;databaseManager;threadManager;queue;mutex;defaultRetryConfig;constructor(t){this.mode=t.mode,this.mutex=new asyncMutex.Mutex;let e=t.rateLimit||{};if(this.queue=new ge__default.default({concurrency:e.maxConcurrent||100,interval:e.interval||1e3,intervalCap:e.intervalCap||100,timeout:3e4}),this.defaultRetryConfig={maxAttempts:t.retry?.maxAttempts||3,initialDelay:t.retry?.initialDelay||1e3,maxDelay:t.retry?.maxDelay||1e4,backoffMultiplier:t.retry?.backoffMultiplier||2},t.mode==="cloud")this.cloudConfig=t;else if(this.providerCallback=t.provider,t.cache&&(this.cacheManager=new S(t.cache)),t.database&&(this.databaseManager=new k(t.database)),t.threads?.enabled&&!this.providerCallback)throw new f("Provider callback required for thread management","INVALID_CONFIG")}async chat(t){let{messages:e,...s}=t,a=Z(e);if(this.validateConfig(s),this.cacheManager&&s.cache?.enabled!==false){let r=await this.cacheManager.getCachedResponse(a,s);if(r)return s.stream?this.createStreamingResponse(this.eventsToGenerator(r)):this.eventsToResponse(r)}return this.queue.add(async()=>this.executeChat(a,s))}async executeChat(t,e){let s={...this.defaultRetryConfig,...e.cache};return $(async()=>this.mode==="cloud"?this.executeCloudChat(t,e):this.executeSelfManagedChat(t,e),{...s,onRetry:(a,r)=>{console.warn(`[PaprFlare] Retry attempt ${a}/${s.maxAttempts}:`,r.message);}})}async executeCloudChat(t,e){let s=await fetch(`${this.cloudConfig.baseURL||"https://api.paprflare.in"}/v1/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.cloudConfig.apiKey}`},body:JSON.stringify({messages:t,...e})});if(!s.ok)throw new f(`Cloud API error: ${s.statusText}`,"CLOUD_API_ERROR",s.status);if(e.stream){let a=this.parseCloudStream(s.body);return this.createStreamingResponse(a)}else return await s.json()}async executeSelfManagedChat(t,e){if(!this.providerCallback)throw new f("Provider callback not configured","INVALID_CONFIG");if(e.output?.schema)return this.executeStructuredOutput(t,e);let s=this.providerCallback(t,e);if(e.stream){let a;if(this.cacheManager&&e.cache?.enabled!==false){let r=[],n=this.cacheStream(s,r);a=this.withFinally(n,()=>this.cacheManager.cacheResponse(t,e,r));}else a=s;return this.createStreamingResponse(a)}else {let a=await E(s);return this.cacheManager&&e.cache?.enabled!==false&&await this.cacheManager.cacheResponse(t,e,a),this.eventsToResponse(a)}}async executeStructuredOutput(t,e){let s=e.output.schema._def?.shape,a=typeof s=="function"?s():s,r=a?Object.entries(a).map(([p,C])=>{let g=C?._def?.typeName??C?.constructor?.name??"unknown";return ` - "${p}": ${g}`}).join(`
18
+ `):"(schema shape unavailable)",n={id:b("msg"),role:"system",content:`You are a JSON generator. You MUST respond with ONLY valid JSON that matches this exact schema:
19
19
  ${r}
20
20
 
21
21
  Rules:
@@ -24,20 +24,19 @@ Rules:
24
24
  3. NO markdown code blocks or formatting
25
25
  4. NO comments in the JSON
26
26
  5. Return ONLY the raw JSON object
27
- 6. The JSON must be parseable and valid`,timestamp:Date.now()},l=t[t.length-1],i=[n,...t.slice(0,-1),{...l,content:`${l?.content}
27
+ 6. The JSON must be parseable and valid`,timestamp:Date.now()},o=t[t.length-1],i=[n,...t.slice(0,-1),{...o,content:`${o?.content}
28
28
 
29
- CRITICAL: Your response must be ONLY valid JSON containing ALL of these fields: ${a?Object.keys(a).join(", "):"all required fields"}. Start directly with { and end with }. No other text.`}],c=this.providerCallback(i,{...e,stream:false,temperature:.1}),d=await R(c),u=d.filter(g=>g.type==="text-delta").map(g=>g.type==="text-delta"?g.delta:"").join(""),h=this.extractJSON(u);try{let g=JSON.parse(h),v=typeof a?.parse=="function"?a.parse(g):g,C=d.find(M=>M.type==="done");return {message:C&&C.type==="done"?{...C.finalMessage,content:JSON.stringify(v,null,2)}:{id:w("msg"),role:"assistant",content:JSON.stringify(v,null,2),timestamp:Date.now()},usage:d.find(M=>M.type==="usage"&&"usage"in M)?.usage}}catch(g){throw console.error(`
30
- [Structured Output Error]`),console.error("Raw response:",u),console.error("Extracted JSON attempt:",h.substring(0,500)),console.error("Parse error:",g.message),new p(`Failed to parse structured output. The model returned: "${u.substring(0,100)}..."
29
+ CRITICAL: Your response must be ONLY valid JSON containing ALL of these fields: ${a?Object.keys(a).join(", "):"all required fields"}. Start directly with { and end with }. No other text.`}],c=this.providerCallback(i,{...e,stream:false,temperature:.1}),d=await E(c),m=d.filter(p=>p.type==="text-delta").map(p=>p.type==="text-delta"?p.delta:"").join(""),h=this.extractJSON(m);try{let p=JSON.parse(h),C=typeof a?.parse=="function"?a.parse(p):p,g=d.find(v=>v.type==="done");return {message:g&&g.type==="done"?{...g.finalMessage,content:JSON.stringify(C,null,2)}:{id:b("msg"),role:"assistant",content:JSON.stringify(C,null,2),timestamp:Date.now()},usage:d.find(v=>v.type==="usage"&&"usage"in v)?.usage}}catch(p){throw console.error(`
30
+ [Structured Output Error]`),console.error("Raw response:",m),console.error("Extracted JSON attempt:",h.substring(0,500)),console.error("Parse error:",p.message),new f(`Failed to parse structured output. The model returned: "${m.substring(0,100)}..."
31
31
 
32
32
  Please ensure:
33
33
  1. The model supports JSON output
34
34
  2. Try using a model like GPT-4 or Claude
35
35
  3. For list output, wrap in object: { items: [...] }
36
36
 
37
- Parse error: ${g.message}`,"VALIDATION_ERROR",400,g)}}extractJSON(t){let e=t.replace(/```json\s*/gi,"").replace(/```\s*/g,""),s=e.match(/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/),a=e.match(/\[(?:[^\[\]]|\[(?:[^\[\]]|\[[^\[\]]*\])*\])*\]/);if(s)return s[0].trim();if(a)return a[0].trim();let r=e.split(`
38
- `),n=[],l=false,i=0;for(let c of r){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:()=>A(t),pipeToResponse:async e=>{await F(t,e);},mergeStreams:(...e)=>z(t,...e),toUIStream:()=>b(t),process:e=>V(t,e),toText:()=>W(t),toConsole:()=>H(t),toResponse:e=>Y(t,e)}}async*withFinally(t,e){try{yield*t;}finally{await e();}}async*parseCloudStream(t){let e=t.getReader(),s=new TextDecoder;try{for(;;){let{done:a,value:r}=await e.read();if(a)break;let l=s.decode(r,{stream:!0}).split(`
40
- `);for(let i of l)if(i.startsWith("data: ")){let c=i.slice(6);if(c==="[DONE]")break;try{yield JSON.parse(c);}catch(d){console.error("Failed to parse event:",d);}}}}finally{e.releaseLock();}}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(a=>a.type==="done"),s=t.find(a=>a.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(){if(this.mode==="cloud")throw new p("Database is not available in cloud mode","INVALID_MODE");return this.databaseManager}get threads(){if(this.mode==="cloud")throw new p("Threads are not available in cloud mode","INVALID_MODE");if(!this.threadManager){if(!this.providerCallback)throw new p("Provider callback required for thread management","INVALID_CONFIG");let t=new o({mode:"self-managed",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 It(o){return {schema:o,mode:"json"}}var I=class{client;defaultModel;constructor(t){this.client=new ne__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 a=t.find(d=>d.role==="system"),r=t.filter(d=>d.role!=="system"),n=this.client.messages.stream({model:e.model||this.defaultModel,messages:this.formatMessages(r),max_tokens:e.maxTokens||4096,temperature:e.temperature,top_p:e.topP,stop_sequences:e.stop,...a&&{system:a.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 u=JSON.parse(l.input?JSON.stringify(l.input):i||"{}");s.endToolCall(u);}catch(u){console.error("Failed to parse tool arguments:",u),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(a){throw a instanceof ne__default.default.APIError?new y(a.message,"anthropic",a.status):new y(`Anthropic provider error: ${a.message}`,"anthropic")}}formatMessages(t){return t.map(e=>{let s=[];if(e.content&&s.push({type:"text",text:e.content}),e.toolCalls)for(let a of e.toolCalls)s.push({type:"tool_use",id:a.id,name:a.name,input:a.arguments});if(e.toolResults)for(let a of e.toolResults)s.push({type:"tool_result",tool_use_id:a.toolCallId,content:JSON.stringify(a.result),...a.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 a={},r=[],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))a[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||r.push(c);return {type:"object",properties:a,...r.length>0&&{required:r},...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 Lt(o){return new I(o).createCallback()}var U=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 a=t.find(h=>h.role==="system"),r=this.client.getGenerativeModel({model:e.model||this.defaultModel,...a&&{systemInstruction:a.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 r.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 v=h.functionCalls();if(v)for(let C of v){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 u=await d.response;u.usageMetadata&&s.writeUsage({promptTokens:u.usageMetadata.promptTokenCount??0,completionTokens:u.usageMetadata.candidatesTokenCount??(u.usageMetadata.totalTokenCount??0)-(u.usageMetadata.promptTokenCount??0),totalTokens:u.usageMetadata.totalTokenCount??0}),s.done(),yield*s.flush();}catch(a){throw new y(`Google provider error: ${a.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 a of e.toolCalls)s.push({functionCall:{name:a.name,args:a.arguments}});if(e.toolResults&&e.toolResults.length>0)for(let a of e.toolResults){let r=t.flatMap(n=>n.toolCalls||[]).find(n=>n.id===a.toolCallId);s.push({functionResponse:{name:r?.name||"unknown",response:{result:a.result,...a.error&&{error:a.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 a=e.parameters._def;if(a&&a.typeName==="ZodObject"&&a.shape){let r=a.shape();s.properties=Object.entries(r).reduce((n,[l,i])=>(n[l]=this.zodToJsonSchema(i),i.isOptional?.()||s.required.push(l),n),{});}}catch(a){console.warn(`Failed to convert Zod schema for tool ${e.name}:`,a);}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 a={},r=[],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))a[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||r.push(c);return {type:"object",properties:a,...r.length>0&&{required:r},...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 Kt(o){return new U(o).createCallback()}var q=class{client;defaultModel;constructor(t){this.client=new oe__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 a=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)}}),r=new Map,n=[];for await(let i of a){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 u=d.index;r.has(u)||r.set(u,{id:"",name:"",arguments:""});let h=r.get(u);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,u]of r.entries())try{let h=JSON.parse(u.arguments||"{}");s.endToolCall(h);}catch(h){console.error(`Failed to parse tool call arguments for ${u.name}:`,h),s.endToolCall({});}r.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(a){throw a instanceof oe__default.default.APIError?new y(a.message,"openai",a.status):new y(`OpenAI provider error: ${a.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(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.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 a={},r=[],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))a[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||r.push(c);return {type:"object",properties:a,...r.length>0&&{required:r},...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 Xt(o){return new q(o).createCallback()}var G=class{client;defaultModel;constructor(t){this.defaultModel=t.model||"sarvam-m";try{this.client=new sarvamai.SarvamAIClient({apiSubscriptionKey:t.apiKey});}catch(e){throw new Error(`Sarvam AI SDK not found. Please install it:
41
- npm install @sarvam-ai/sdk
42
- Error: ${e.message}`)}}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new f;try{let a={messages:this.formatMessages(t)};e.temperature!==void 0&&(a.temperature=e.temperature),e.maxTokens&&(a.max_tokens=e.maxTokens),e.topP!==void 0&&(a.top_p=e.topP),(e.model||this.defaultModel)&&(a.model=e.model||this.defaultModel),e.tools&&e.tools.length>0&&(a.tools=e.tools.map(n=>({type:"function",function:{name:n.name,description:n.description,parameters:n.parameters}})),e.toolChoice&&e.toolChoice!=="auto"&&(a.tool_choice=this.formatToolChoice(e.toolChoice)));let r;try{if(a.stream=!0,r=await this.client.chat.completions(a),r&&Symbol.asyncIterator in r){yield*this.handleStreamResponse(r,s);return}}catch{console.warn("Streaming not supported, falling back to non-streaming mode");}a.stream=!1,r=await this.client.chat.completions(a),yield*this.handleNonStreamResponse(r,s);}catch(a){throw new y(`Sarvam provider error: ${a.message||a}`,"sarvam")}}async*handleStreamResponse(t,e){let s=new Map;for await(let a of t){let r=a.choices?.[0];if(!r)continue;let n=r.delta;if(n?.content&&e.writeText(n.content),n?.tool_calls)for(let l of n.tool_calls){let i=l.index??0;s.has(i)||s.set(i,{id:l.id||`call_${Date.now()}_${i}`,name:"",arguments:""});let c=s.get(i);l.id&&(c.id=l.id),l.function?.name&&(c.name=l.function.name,e.startToolCall(c.name,c.id)),l.function?.arguments&&(c.arguments+=l.function.arguments,e.writeToolCallDelta(l.function.arguments));}if(r.finish_reason==="tool_calls"){for(let[l,i]of s.entries())try{let c=i.arguments?JSON.parse(i.arguments):{};e.endToolCall(c);}catch(c){console.error("Failed to parse tool call arguments:",c),e.endToolCall({});}s.clear();}a.usage&&e.writeUsage({promptTokens:a.usage.prompt_tokens||0,completionTokens:a.usage.completion_tokens||0,totalTokens:a.usage.total_tokens||0}),yield*e.flush();}e.done(),yield*e.flush();}async*handleNonStreamResponse(t,e){let s=t.choices?.[0];if(!s){e.done(),yield*e.flush();return}let a=s.message;if(a?.content&&e.writeText(a.content),a?.tool_calls)for(let r of a.tool_calls){e.startToolCall(r.function.name,r.id);try{let n=typeof r.function.arguments=="string"?JSON.parse(r.function.arguments):r.function.arguments;e.endToolCall(n);}catch(n){console.error("Failed to parse tool call arguments:",n),e.endToolCall({});}}t.usage&&e.writeUsage({promptTokens:t.usage.prompt_tokens||0,completionTokens:t.usage.completion_tokens||0,totalTokens:t.usage.total_tokens||0}),e.done(),yield*e.flush();}formatMessages(t){return t.map(e=>{let s={role:e.role,content:e.content||""};return e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:typeof a.arguments=="string"?a.arguments:JSON.stringify(a.arguments)}}))),e.role==="tool"&&e.toolResults&&e.toolResults.length>0&&(s.tool_call_id=e.toolResults[0]?.toolCallId,s.content=typeof e.toolResults[0]?.result=="string"?e.toolResults[0].result:JSON.stringify(e.toolResults[0]?.result)),s})}formatToolChoice(t){return t==="none"?"none":t==="required"?"required":typeof t=="object"&&"name"in t?{type:"function",function:{name:t.name}}:"auto"}};function ns(o){return new G(o).createCallback()}exports.AnthropicProvider=I;exports.CacheManager=x;exports.DatabaseManager=S;exports.DrizzleAdapter=ee;exports.GoogleProvider=U;exports.MemoryAdapter=te;exports.MemoryCache=O;exports.OpenAIProvider=q;exports.PaprFlare=re;exports.PaprFlareError=p;exports.PrismaAdapter=se;exports.ProviderError=y;exports.RateLimitError=B;exports.RedisCache=E;exports.SarvamProvider=G;exports.StreamWriter=f;exports.ThreadManager=T;exports.ThreadPool=ae;exports.ValidationError=K;exports.batchStream=Ue;exports.chunk=Te;exports.collectStream=R;exports.collectText=W;exports.createAnthropicProvider=Lt;exports.createCacheKey=L;exports.createGoogleProvider=Kt;exports.createOpenAIProvider=Xt;exports.createSarvamProvider=ns;exports.createStreamWriter=Re;exports.createStreamableValue=Le;exports.createUIMessageStream=je;exports.debounce=be;exports.deepMerge=j;exports.filterStream=Ne;exports.formatMessages=Z;exports.generateId=w;exports.isPlainObject=k;exports.measureTime=Pe;exports.mergeStreams=z;exports.parseSSEStream=De;exports.pipeToResponse=F;exports.processStream=V;exports.retry=$;exports.safeJsonParse=xe;exports.sleep=ce;exports.streamToArray=Se;exports.streamToConsole=H;exports.structuredOutput=It;exports.takeStream=Ie;exports.throttle=Me;exports.toHTTPResponse=Y;exports.toReadableStream=A;exports.toUIStream=b;exports.transformStream=_e;//# sourceMappingURL=index.js.map
37
+ Parse error: ${p.message}`,"VALIDATION_ERROR",400,p)}}extractJSON(t){let e=t.replace(/```json\s*/gi,"").replace(/```\s*/g,""),s=e.match(/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/),a=e.match(/\[(?:[^\[\]]|\[(?:[^\[\]]|\[[^\[\]]*\])*\])*\]/);if(s)return s[0].trim();if(a)return a[0].trim();let r=e.split(`
38
+ `),n=[],o=false,i=0;for(let c of r){let d=c.trim();if(d.startsWith("{")||d.startsWith("[")){if(o=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(o&&(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)=>z(t,...e),toUIStream:()=>x(t),process:e=>V(t,e),toText:()=>W(t),toConsole:()=>H(t),toResponse:e=>Y(t,e)}}async*withFinally(t,e){try{yield*t;}finally{await e();}}async*parseCloudStream(t){let e=t.getReader(),s=new TextDecoder;try{for(;;){let{done:a,value:r}=await e.read();if(a)break;let o=s.decode(r,{stream:!0}).split(`
40
+ `);for(let i of o)if(i.startsWith("data: ")){let c=i.slice(6);if(c==="[DONE]")break;try{yield JSON.parse(c);}catch(d){console.error("Failed to parse event:",d);}}}}finally{e.releaseLock();}}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(a=>a.type==="done"),s=t.find(a=>a.type==="usage");if(!e||e.type!=="done")throw new f("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 f("Temperature must be between 0 and 2","VALIDATION_ERROR",400);if(t.maxTokens!==void 0&&t.maxTokens<1)throw new f("Max tokens must be greater than 0","VALIDATION_ERROR",400);if(t.output?.schema&&t.stream)throw new f("Structured output requires stream: false","VALIDATION_ERROR",400)}get database(){if(this.mode==="cloud")throw new f("Database is not available in cloud mode","INVALID_MODE");return this.databaseManager}get threads(){if(this.mode==="cloud")throw new f("Threads are not available in cloud mode","INVALID_MODE");if(!this.threadManager){if(!this.providerCallback)throw new f("Provider callback required for thread management","INVALID_CONFIG");let t=new l({mode:"self-managed",provider:this.providerCallback});this.threadManager=new M(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 It(l){return {schema:l,mode:"json"}}var U=class{client;defaultModel;constructor(t){this.client=new ne__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 y;try{let a=t.find(d=>d.role==="system"),r=t.filter(d=>d.role!=="system"),n=this.client.messages.stream({model:e.model||this.defaultModel,messages:this.formatMessages(r),max_tokens:e.maxTokens||4096,temperature:e.temperature,top_p:e.topP,stop_sequences:e.stop,...a&&{system:a.content},...e.tools&&e.tools.length>0&&{tools:this.formatTools(e.tools)},...e.toolChoice&&e.toolChoice!=="auto"&&{tool_choice:this.formatToolChoice(e.toolChoice)}}),o=null,i="";for await(let d of n){if(d.type==="content_block_start"&&d.content_block?.type==="tool_use"&&(o=d.content_block,i="",s.startToolCall(o.name,o.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"&&o){try{let m=JSON.parse(o.input?JSON.stringify(o.input):i||"{}");s.endToolCall(m);}catch(m){console.error("Failed to parse tool arguments:",m),s.endToolCall({});}o=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(a){throw a instanceof ne__default.default.APIError?new w(a.message,"anthropic",a.status):new w(`Anthropic provider error: ${a.message}`,"anthropic")}}formatMessages(t){return t.map(e=>{let s=[];if(e.content&&s.push({type:"text",text:e.content}),e.toolCalls)for(let a of e.toolCalls)s.push({type:"tool_use",id:a.id,name:a.name,input:a.arguments});if(e.toolResults)for(let a of e.toolResults)s.push({type:"tool_result",tool_use_id:a.toolCallId,content:JSON.stringify(a.result),...a.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 a={},r=[],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))a[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||r.push(c);return {type:"object",properties:a,...r.length>0&&{required:r},...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 Lt(l){return new U(l).createCallback()}var q=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 y;try{let a=t.find(h=>h.role==="system"),r=this.client.getGenerativeModel({model:e.model||this.defaultModel,...a&&{systemInstruction:a.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 w("No messages to send","google");let o=n[n.length-1],i=n.slice(0,-1),d=await r.startChat({history:i}).sendMessageStream(o.parts);for await(let h of d.stream){let p=h.text();p&&(s.writeText(p),yield*s.flush());let C=h.functionCalls();if(C)for(let g of C){let T=`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;s.startToolCall(g.name,T),s.endToolCall(g.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(a){throw new w(`Google provider error: ${a.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 a of e.toolCalls)s.push({functionCall:{name:a.name,args:a.arguments}});if(e.toolResults&&e.toolResults.length>0)for(let a of e.toolResults){let r=t.flatMap(n=>n.toolCalls||[]).find(n=>n.id===a.toolCallId);s.push({functionResponse:{name:r?.name||"unknown",response:{result:a.result,...a.error&&{error:a.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 a=e.parameters._def;if(a&&a.typeName==="ZodObject"&&a.shape){let r=a.shape();s.properties=Object.entries(r).reduce((n,[o,i])=>(n[o]=this.zodToJsonSchema(i),i.isOptional?.()||s.required.push(o),n),{});}}catch(a){console.warn(`Failed to convert Zod schema for tool ${e.name}:`,a);}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 a={},r=[],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))a[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||r.push(c);return {type:"object",properties:a,...r.length>0&&{required:r},...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 Kt(l){return new q(l).createCallback()}var G=class{client;defaultModel;constructor(t){this.client=new oe__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 y;try{let a=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)}}),r=new Map,n=[];for await(let i of a){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;r.has(m)||r.set(m,{id:"",name:"",arguments:""});let h=r.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 r.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({});}r.clear();}yield*s.flush();}}let o=await this.getFinalChatCompletion(n);o?.usage&&s.writeUsage({promptTokens:o.usage.prompt_tokens,completionTokens:o.usage.completion_tokens,totalTokens:o.usage.total_tokens}),s.done(),yield*s.flush();}catch(a){throw a instanceof oe__default.default.APIError?new w(a.message,"openai",a.status):new w(`OpenAI provider error: ${a.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(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.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 a={},r=[],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))a[c]=this.zodToJsonSchema(d),d&&typeof d=="object"&&d._def?.typeName==="ZodOptional"||r.push(c);return {type:"object",properties:a,...r.length>0&&{required:r},...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 Xt(l){return new G(l).createCallback()}var J=class{client;defaultModel;constructor(t){this.client=new sarvamai.SarvamAIClient({apiSubscriptionKey:t.apiKey,maxRetries:t.maxRetries||3}),this.defaultModel=t.model||"sarvam-2b";}createCallback(){return (t,e)=>this.streamChat(t,e)}async*streamChat(t,e){let s=new y;try{let a={messages:this.formatMessages(t),temperature:e.temperature,max_tokens:e.maxTokens,top_p:e.topP};e.tools&&e.tools.length>0&&(a.tools=this.formatTools(e.tools),e.toolChoice&&e.toolChoice!=="auto"&&(a.tool_choice=this.formatToolChoice(e.toolChoice)));try{a.stream=!0;let n=await this.client.chat.completions(a),o=n.stream||n;if(o&&typeof o[Symbol.asyncIterator]=="function"){yield*this.handleStreamResponse(o,s);return}if(o&&typeof o.getReader=="function"){yield*this.handleReadableStreamResponse(o,s);return}if(n&&typeof n=="object"&&"choices"in n){yield*this.handleNonStreamResponse(n,s);return}}catch(n){console.warn("Streaming failed, falling back to non-streaming:",n);}a.stream=!1;let r=await this.client.chat.completions(a);yield*this.handleNonStreamResponse(r,s);}catch(a){throw new w(`Sarvam provider error: ${a.message||a}`,"sarvam")}}async*handleStreamResponse(t,e){let s=new Map;for await(let a of t){let r=a.choices?.[0];if(!r)continue;let n=r.delta;if(n?.content&&e.writeText(n.content),n?.tool_calls)for(let o of n.tool_calls){let i=o.index??0;s.has(i)||s.set(i,{id:o.id||`call_${Date.now()}_${i}`,name:"",arguments:""});let c=s.get(i);o.id&&(c.id=o.id),o.function?.name&&(c.name=o.function.name,e.startToolCall(c.name,c.id)),o.function?.arguments&&(c.arguments+=o.function.arguments,e.writeToolCallDelta(o.function.arguments));}if(r.finish_reason==="tool_calls"){for(let[o,i]of s.entries())try{let c=i.arguments?JSON.parse(i.arguments):{};e.endToolCall(c);}catch(c){console.error("Failed to parse tool call arguments:",c),e.endToolCall({});}s.clear();}a.usage&&e.writeUsage({promptTokens:a.usage.prompt_tokens||0,completionTokens:a.usage.completion_tokens||0,totalTokens:a.usage.total_tokens||0}),yield*e.flush();}e.done(),yield*e.flush();}async*handleReadableStreamResponse(t,e){let s=t.getReader(),a=new TextDecoder,r="",n=new Map;try{for(;;){let{done:o,value:i}=await s.read();if(o)break;r+=a.decode(i,{stream:!0});let c=r.split(`
41
+ `);r=c.pop()||"";for(let d of c){if(!d.trim()||!d.startsWith("data: "))continue;let m=d.slice(6);if(m==="[DONE]"){e.done(),yield*e.flush();return}try{let h=JSON.parse(m),p=h.choices?.[0];if(!p)continue;let C=p.delta;if(C?.content&&e.writeText(C.content),C?.tool_calls)for(let g of C.tool_calls){let T=g.index??0;n.has(T)||n.set(T,{id:g.id||`call_${Date.now()}_${T}`,name:"",arguments:""});let v=n.get(T);g.id&&(v.id=g.id),g.function?.name&&(v.name=g.function.name,e.startToolCall(v.name,v.id)),g.function?.arguments&&(v.arguments+=g.function.arguments,e.writeToolCallDelta(g.function.arguments));}if(p.finish_reason==="tool_calls"){for(let[g,T]of n.entries())try{let v=T.arguments?JSON.parse(T.arguments):{};e.endToolCall(v);}catch(v){console.error("Failed to parse tool call arguments:",v),e.endToolCall({});}n.clear();}h.usage&&e.writeUsage({promptTokens:h.usage.prompt_tokens||0,completionTokens:h.usage.completion_tokens||0,totalTokens:h.usage.total_tokens||0}),yield*e.flush();}catch(h){console.error("Failed to parse SSE chunk:",h);}}}}finally{s.releaseLock();}e.done(),yield*e.flush();}async*handleNonStreamResponse(t,e){let s=t.choices?.[0];if(!s){e.done(),yield*e.flush();return}let a=s.message;if(a?.content&&e.writeText(a.content),a?.tool_calls)for(let r of a.tool_calls){e.startToolCall(r.function.name,r.id);try{let n=typeof r.function.arguments=="string"?JSON.parse(r.function.arguments):r.function.arguments;e.endToolCall(n);}catch(n){console.error("Failed to parse tool call arguments:",n),e.endToolCall({});}}t.usage&&e.writeUsage({promptTokens:t.usage.prompt_tokens||0,completionTokens:t.usage.completion_tokens||0,totalTokens:t.usage.total_tokens||0}),e.done(),yield*e.flush();}formatMessages(t){return t.map(e=>{let s={role:e.role,content:e.content||""};return e.toolCalls&&e.toolCalls.length>0&&(s.tool_calls=e.toolCalls.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:typeof a.arguments=="string"?a.arguments:JSON.stringify(a.arguments)}}))),e.role==="tool"&&e.toolResults&&e.toolResults.length>0&&(s.tool_call_id=e.toolResults[0]?.toolCallId,s.content=typeof e.toolResults[0]?.result=="string"?e.toolResults[0].result:JSON.stringify(e.toolResults[0]?.result)),s})}formatTools(t){return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.parameters}}))}formatToolChoice(t){return t==="none"?"none":t==="required"?"required":typeof t=="object"&&"name"in t?{type:"function",function:{name:t.name}}:"auto"}};function ns(l){return new J(l).createCallback()}exports.AnthropicProvider=U;exports.CacheManager=S;exports.DatabaseManager=k;exports.DrizzleAdapter=ee;exports.GoogleProvider=q;exports.MemoryAdapter=te;exports.MemoryCache=D;exports.OpenAIProvider=G;exports.PaprFlare=re;exports.PaprFlareError=f;exports.PrismaAdapter=se;exports.ProviderError=w;exports.RateLimitError=B;exports.RedisCache=O;exports.SarvamProvider=J;exports.StreamWriter=y;exports.ThreadManager=M;exports.ThreadPool=ae;exports.ValidationError=K;exports.batchStream=Ue;exports.chunk=Te;exports.collectStream=E;exports.collectText=W;exports.createAnthropicProvider=Lt;exports.createCacheKey=L;exports.createGoogleProvider=Kt;exports.createOpenAIProvider=Xt;exports.createSarvamProvider=ns;exports.createStreamWriter=Re;exports.createStreamableValue=Le;exports.createUIMessageStream=je;exports.debounce=be;exports.deepMerge=j;exports.filterStream=Ne;exports.formatMessages=Z;exports.generateId=b;exports.isPlainObject=A;exports.measureTime=ke;exports.mergeStreams=z;exports.parseSSEStream=De;exports.pipeToResponse=F;exports.processStream=V;exports.retry=$;exports.safeJsonParse=xe;exports.sleep=ce;exports.streamToArray=Se;exports.streamToConsole=H;exports.structuredOutput=It;exports.takeStream=Ie;exports.throttle=Me;exports.toHTTPResponse=Y;exports.toReadableStream=R;exports.toUIStream=x;exports.transformStream=_e;//# sourceMappingURL=index.js.map
43
42
  //# sourceMappingURL=index.js.map