ctod 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,21 +1,22 @@
1
- var ie=Object.defineProperty;var Ce=(a,e,t)=>e in a?ie(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var D=(a,e)=>{for(var t in e)ie(a,t,{get:e[t],enumerable:!0})};var o=(a,e,t)=>Ce(a,typeof e!="symbol"?e+"":e,t);var ge={};D(ge,{LimiterPlugin:()=>ve,LimiterPluginGlobState:()=>Pe,PrintLogPlugin:()=>Se,RetryPlugin:()=>we,RolePlugin:()=>Ae});import{Event as xe}from"power-helper";var y=class{constructor(e){o(this,"_event",new xe);o(this,"_params");this._params=e}use(e){return{instance:this,params:e,send:t=>{this._event.emit("receive",t)},receive:t=>{this._event.on("receive",t)},__receiveData:null}}};var le=new y({name:"retry",params:a=>({retry:a.number().default(1),printWarn:a.boolean().default(!0)}),receiveData:()=>({}),onInstall({log:a,attach:e,params:t}){e("parseFailed",async({count:n,retry:r,messages:s,changeMessages:i})=>{n<=t.retry&&(t.printWarn&&a.print(`Is Failed, Retry ${n} times.`),i(s),r())})}});var ce=new y({name:"print-log",params:a=>({detail:a.boolean().default(!1)}),receiveData:()=>({}),onInstall({params:a,log:e,attach:t}){t("talkBefore",async({lastUserMessage:n,messages:r})=>{e.print("Send:",{color:"green"}),a.detail?e.print(`
1
+ var le=Object.defineProperty;var Ce=(a,e,t)=>e in a?le(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var D=(a,e)=>{for(var t in e)le(a,t,{get:e[t],enumerable:!0})};var i=(a,e,t)=>Ce(a,typeof e!="symbol"?e+"":e,t);var ue={};D(ue,{LimiterPlugin:()=>ve,LimiterPluginGlobState:()=>we,PrintLogPlugin:()=>Se,RetryPlugin:()=>Ae,RolePlugin:()=>Pe});import{Event as xe}from"power-helper";var f=class{constructor(e){i(this,"_event",new xe);i(this,"_params");this._params=e}use(e){return{instance:this,params:e,send:t=>{this._event.emit("receive",t)},receive:t=>{this._event.on("receive",t)},__receiveData:null}}};var ce=new f({name:"retry",params:a=>({retry:a.number().default(1),printWarn:a.boolean().default(!0)}),receiveData:()=>({}),onInstall({log:a,attach:e,params:t}){e("parseFailed",async({count:n,retry:r,messages:s,changeMessages:o})=>{n<=t.retry&&(t.printWarn&&a.print(`Is Failed, Retry ${n} times.`),o(s),r())})}});var ge=new f({name:"print-log",params:a=>({detail:a.boolean().default(!1)}),receiveData:()=>({}),onInstall({params:a,log:e,attach:t}){t("talkBefore",async({lastUserMessage:n,messages:r})=>{e.print("Send:",{color:"green"}),a.detail?e.print(`
2
2
  `+JSON.stringify(r,null,4)):e.print(`
3
3
  `+n)}),t("talkAfter",async({parseText:n})=>{e.print("Receive:",{color:"cyan"}),e.print(`
4
4
  `+n)}),t("succeeded",async({output:n})=>{e.print("Output:",{color:"yellow"});try{e.print(`
5
5
  `+JSON.stringify(n,null,4))}catch{e.print(`
6
- `+n)}})}});import{Event as ke,flow as be,Schedule as Te}from"power-helper";var F={limit:3,interval:6e4},m={event:new ke,schedule:null,waitTimes:[],waitQueue:[]},H={event:m.event,config:F,closeSchedule:()=>{m.schedule&&(m.schedule.close(),m.schedule=null)},plugin:new y({name:"limiter",params:()=>({}),receiveData:()=>({}),onInstall({attach:a}){m.schedule==null&&(m.schedule=new Te,m.schedule.add("calc queue",1e3,async()=>{let e=Date.now();if(m.waitTimes=m.waitTimes.filter(t=>e-t<F.interval),m.waitTimes.length!==F.limit){let t=m.waitQueue.shift();t&&(m.waitTimes.push(Date.now()),m.event.emit("run",{id:t}))}else m.waitTimes[0]&&m.event.emit("waitTimeChange",{waitTime:Math.floor(60-(e-m.waitTimes[0])/1e3)})}),m.schedule.play()),a("talkBefore",async()=>{let e=be.createUuid();return m.waitQueue.push(e),new Promise(t=>{m.event.on("run",({id:n},{off:r})=>{n===e&&(r(),t())})})})}})};var pe=new y({name:"role",params:a=>({role:a.string()}),receiveData:()=>({}),onInstall({attach:a,params:e}){a("start",async({messages:t,changeMessages:n})=>{n([{role:"user",content:`\u4F60\u73FE\u5728\u662F${e.role}\u3002`},{role:"assistant",content:`\u6C92\u554F\u984C\uFF0C\u6211\u73FE\u5728\u662F${e.role}\uFF0C\u6709\u4EC0\u9EBC\u53EF\u4EE5\u5E6B\u4F60\u7684\u55CE\uFF1F`},...t])})}});var Se=ce,we=le,ve=H.plugin,Pe=H,Ae=pe;var ue={};D(ue,{requireJsonResponse:()=>me,requireJsonResponseWithHandlebars:()=>Me,requireJsonResponseWithJsonSchema:()=>Re});import _e from"handlebars";import{record as Oe}from"power-helper";var me=(a,e)=>[...Array.isArray(a)?a:[a],"Please respond using the following JSON format and minify the JSON without including any explanation: ","{",Object.entries(e).map(([t,n])=>[`/* ${n.desc} */`,`"${t}": ${JSON.stringify(n.example)}`].join(`
6
+ `+n)}})}});import{Event as be,flow as _e,Schedule as Te}from"power-helper";var L={limit:3,interval:6e4},m={event:new be,schedule:null,waitTimes:[],waitQueue:[]},F={event:m.event,config:L,closeSchedule:()=>{m.schedule&&(m.schedule.close(),m.schedule=null)},plugin:new f({name:"limiter",params:()=>({}),receiveData:()=>({}),onInstall({attach:a}){m.schedule==null&&(m.schedule=new Te,m.schedule.add("calc queue",1e3,async()=>{let e=Date.now();if(m.waitTimes=m.waitTimes.filter(t=>e-t<L.interval),m.waitTimes.length!==L.limit){let t=m.waitQueue.shift();t&&(m.waitTimes.push(Date.now()),m.event.emit("run",{id:t}))}else m.waitTimes[0]&&m.event.emit("waitTimeChange",{waitTime:Math.floor(60-(e-m.waitTimes[0])/1e3)})}),m.schedule.play()),a("talkBefore",async()=>{let e=_e.createUuid();return m.waitQueue.push(e),new Promise(t=>{m.event.on("run",({id:n},{off:r})=>{n===e&&(r(),t())})})})}})};var pe=new f({name:"role",params:a=>({role:a.string()}),receiveData:()=>({}),onInstall({attach:a,params:e}){a("start",async({messages:t,changeMessages:n})=>{n([{role:"user",content:`\u4F60\u73FE\u5728\u662F${e.role}\u3002`},{role:"assistant",content:`\u6C92\u554F\u984C\uFF0C\u6211\u73FE\u5728\u662F${e.role}\uFF0C\u6709\u4EC0\u9EBC\u53EF\u4EE5\u5E6B\u4F60\u7684\u55CE\uFF1F`},...t])})}});var Se=ge,Ae=ce,ve=F.plugin,we=F,Pe=pe;var de={};D(de,{requireJsonResponse:()=>me,requireJsonResponseWithHandlebars:()=>Re,requireJsonResponseWithJsonSchema:()=>je});import Oe from"handlebars";import{record as Me}from"power-helper";var me=(a,e)=>[...Array.isArray(a)?a:[a],"Please respond using the following JSON format and minify the JSON without including any explanation: ","{",Object.entries(e).map(([t,n])=>[`/* ${n.desc} */`,`"${t}": ${JSON.stringify(n.example)}`].join(`
7
7
  `)).join(`,
8
8
  `),"}"].join(`
9
- `),Me=(a,e,t)=>{let n=_e.create();return n.registerHelper("DATA",function(r){return JSON.stringify(r)}),n.registerHelper("ENV",function(r){return this.__envs&&r?this.__envs[r]:""}),n.registerHelper("INPUT",function(){return JSON.stringify(Oe.omit(this,["__envs"]))}),n.registerHelper("JOIN",function(r){return Array.isArray(r)?r.join():JSON.stringify(r)}),n.compile(me(e,t))(a)},Re=(a,e)=>[...Array.isArray(a)?a:[a],"Please provide JSON data according to the following JSON Schema format:",JSON.stringify(e)].join(`
10
- `);var he={};D(he,{s2t:()=>w,t2s:()=>S});import{Converter as de}from"opencc-js";var S=a=>de({from:"tw",to:"cn"})(a),w=a=>de({from:"cn",to:"tw"})(a);import je from"json5";var O=class a{constructor(e){o(this,"params");this.params=e}static JsonMessage(){return new a({name:"JsonMessage",handler:async e=>{try{return JSON.parse(e)}catch{let n=/{(?:[^{}]|(?:{[^{}]*}))*}/,r=e.match(n)?.[0]||"";return je.parse(r)}}})}get name(){return this.params.name}async read(e){return await this.params.handler(e)}};import{Event as Ee,flow as Z,Hook as Ge,Log as Je}from"power-helper";import{z as L,toJSONSchema as Ie}from"zod";function X(a,e){return L.object(e(L)).parse(a||{})}function h(a){let e=Ie(L.object(a()));return delete e.$schema,e}var P=class{constructor(e,t){o(this,"isParserError",!0);o(this,"parserFails",[]);o(this,"error");this.error=e,this.parserFails=t}};var M=class{constructor(e){o(this,"params");this.params=e}get __schemeType(){return null}get __outputType(){return null}async compile(e,t){let n=this.params.input?X(e,this.params.input):e,r=this.params.question?await this.params.question(n,t):"";return{scheme:n,prompt:Array.isArray(r)?r.join(`
11
- `):r}}getValidate(){return{input:this.params.input,output:this.params.output}}changeOutputSchema(e){this.params.output=e}async parse(e){let t,n="",r=[];for(let s of this.params.parsers)try{t=await s.read(e),n=s.name}catch(i){t=void 0,r.push({name:s.name,error:i})}try{return{output:X(t,this.params.output),parserName:n,parserFails:r}}catch(s){throw new P(s,r)}}};import{z as fe}from"zod";var R=class{constructor(e){o(this,"__hookType");o(this,"log");o(this,"hook",new Ge);o(this,"params");o(this,"plugins",{});o(this,"installed",!1);o(this,"translator");o(this,"event",new Ee);this.log=new Je(e.name??"no name"),this.params=e,this.translator=new M({...e,parsers:[O.JsonMessage()]})}_install(){if(this.installed===!1){this.installed=!0;let e={log:this.log,attach:this.hook.attach.bind(this.hook),attachAfter:this.hook.attachAfter.bind(this.hook),translator:this.translator};if(this.params.plugins){this.plugins=typeof this.params.plugins=="function"?this.params.plugins():this.params.plugins;for(let t in this.plugins)this.plugins[t].instance._params.onInstall({...e,params:this.plugins[t].params,receive:this.plugins[t].receive})}this.params.install?.(e)}}async cancel(e){e?this.event.emit("cancel",{requestId:e}):this.event.emit("cancelAll",{})}requestWithId(e){this._install();let t=Z.createUuid(),n=null,r=!1,s=!1,i=new AbortController,l=[this.event.on("cancel",({requestId:d})=>{d===t&&p()}),this.event.on("cancelAll",()=>{p()})],c=()=>l.forEach(d=>d.off()),p=()=>{r===!1&&(s&&n&&n(),i.abort(),r=!0,c())},g=d=>{n=()=>{d()}},u=async()=>{let d=this.translator.getValidate(),v=null,se={},x=new Map,ae=await this.translator.compile(e,{schema:d}),oe=[],C=[];ae.prompt&&C.push({role:"user",content:ae.prompt});for(let f in this.plugins)se[f]={send:k=>this.plugins[f].send({id:t,data:k})};return await this.hook.notify("start",{id:t,data:e,schema:d,plugins:se,messages:C,metadata:x,setPreMessages:f=>{oe=f.map(k=>({...k,content:Array.isArray(k.content)?k.content.join(`
12
- `):k.content}))},changeMessages:f=>{C=f},changeOutputSchema:f=>{this.translator.changeOutputSchema(f),d=this.translator.getValidate()}}),C=[...oe,...C],await Z.asyncWhile(async({count:f,doBreak:k})=>{if(f>=99)return k();let j="",I="",U=!1,W=C.filter(b=>b.role==="user").slice(-1)[0]?.content||"";try{await this.hook.notify("talkBefore",{id:t,data:e,messages:C,metadata:x,lastUserMessage:W});let b=this.params.request(C,{id:t,count:f,schema:d,onCancel:g,metadata:x,abortController:i,isRetry:U});if(r)n&&n(),i.abort();else try{s=!0,j=await b,I=j}finally{s=!1}r===!1&&(await this.hook.notify("talkAfter",{id:t,data:e,response:j,messages:C,parseText:I,metadata:x,lastUserMessage:W,parseFail:_=>{throw new P(_,[])},changeParseText:_=>{I=_}}),v=(await this.translator.parse(I)).output,await this.hook.notify("succeeded",{id:t,output:v,metadata:x})),await this.hook.notify("done",{id:t,metadata:x}),k()}catch(b){if(b instanceof P){if(await this.hook.notify("parseFailed",{id:t,error:b.error,count:f,response:j,messages:C,metadata:x,lastUserMessage:W,parserFails:b.parserFails,retry:()=>{U=!0},changeMessages:_=>{C=_}}),U===!1)throw await this.hook.notify("done",{id:t,metadata:x}),b}else throw await this.hook.notify("done",{id:t,metadata:x}),b}}),v};return{id:t,request:(async()=>{try{return await u()}finally{c()}})()}}async request(e){let{request:t}=this.requestWithId(e);return await t}async getPreRequestInfo(e){this._install();let t=Z.createUuid(),n=this.translator.getValidate(),r={},s=new Map,i=await this.translator.compile(e,{schema:n}),l=[],c=[];return i.prompt&&c.push({role:"user",content:i.prompt}),await this.hook.notify("start",{id:t,data:e,schema:n,plugins:r,messages:c,metadata:s,setPreMessages:g=>{l=g.map(u=>({...u,content:Array.isArray(u.content)?u.content.join(`
13
- `):u.content}))},changeMessages:g=>{c=g},changeOutputSchema:g=>{this.translator.changeOutputSchema(g),n=this.translator.getValidate()}}),{outputSchema:n.output(fe),outputJsonSchema:h(()=>n.output(fe)),requestMessages:[...l,...c]}}};import*as Ve from"zod";var Q=class{constructor(e){o(this,"params");this.params=e}createBrokerBuilder(e){return{create:t=>new R({output:()=>({}),install:n=>{e?.install?.(n),n.attach("start",async({id:r,plugins:s,data:i,metadata:l,changeMessages:c,changeOutputSchema:p})=>{let g=await t({id:r,data:i,plugins:s,zod:Ve,setMessages:u=>{c(u.map(T=>({role:T.role,content:Array.isArray(T.content)?T.content.join(`
14
- `):T.content})))},metadata:l});p(()=>g)})},plugins:this.params.plugins?()=>this.params.plugins():void 0,request:this.params.request})}}};import qe from"axios";var E=class{constructor(e){o(this,"openai");o(this,"config",{model:"gpt-5",maxTokens:void 0,temperature:.7});this.openai=e}setConfig(e){Object.assign(this.config,e)}async view(e){let t=await this.openai._axios.post(`${this.openai._baseUrl}/v1/chat/completions`,{model:this.config.model,n:1,messages:e,max_tokens:this.config.maxTokens,temperature:this.config.temperature},{headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}}),r=(t.data.choices||[])[0]?.message||{role:"assistant",content:""};return{id:t?.data.id,text:r.content,apiResponse:t.data}}};import{json as Be}from"power-helper";var G=class{constructor(e){o(this,"openai");o(this,"config",{n:1,model:"gpt-4o",temperature:1,maxTokens:void 0});this.openai=e}setConfig(e){Object.assign(this.config,e)}async moderations(e){let t=await this.openai._axios.post(`${this.openai._baseUrl}/v1/moderations`,{input:e},{headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}});return{isSafe:t.data.results?.[0]?.flagged===!1,result:t.data}}async talk(e=[],t){let n=Be.jpjs(e),r;t?.jsonSchema&&(r={type:"json_schema",json_schema:t.jsonSchema});let s=await this.openai._axios.post(`${this.openai._baseUrl}/v1/chat/completions`,{model:this.config.model,n:this.config.n,messages:n,response_format:r,temperature:this.config.temperature},{signal:t?.abortController?.signal,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}}),i=s.data.choices||[],l=i[0]?.message||{role:"assistant",content:""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,isDone:i[0]?.finish_reason==="stop",apiResponse:s.data}}talkStream(e){let t=new AbortController;return fetch(`${this.openai._baseUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`},body:JSON.stringify({model:this.config.model,stream:!0,messages:e.messages}),signal:t.signal}).then(async n=>{let r=n.body?.pipeThrough(new TextDecoderStream).getReader();if(!r)throw new Error("Can not get reader");for(;;){let{value:s,done:i}=await r.read();if(i)break;let l=s.split(`
15
- `);for(let c of l)if(c.length!==0&&!c.startsWith(":")){if(c==="data: [DONE]"){e.onEnd();break}try{let g=JSON.parse(c.substring(6)).choices[0].delta.content;e.onMessage(g)}catch(p){e.onWarn(p)}}}}).catch(n=>{n.name==="AbortError"?e.onEnd():e.onError(n)}),{cancel:()=>t.abort()}}async keepTalk(e,t=[]){let n=await this.talk([...t,{role:"user",content:Array.isArray(e)?e.join(`
16
- `):e}]);return{result:n,nextTalk:r=>this.keepTalk(r,n.newMessages)}}};var J=class{constructor(e){o(this,"openai");o(this,"config",{model:"dall-e-2",size:"1024x1024"});this.openai=e}setConfig(e){Object.assign(this.config,e)}async create(e){return(await this.openai._axios.post(`${this.openai._baseUrl}/v1/images/generations`,{prompt:e,n:1,size:this.config.size,model:this.config.model,response_format:"b64_json"},{timeout:3e5,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}})).data}};var Y=class a{constructor(e=""){o(this,"_axios",qe.create());o(this,"_apiKey","");o(this,"_baseUrl","https://api.openai.com");this._apiKey=e}static createChatRequest(e,t={},n){return async(r,{abortController:s})=>{let i=new a(typeof e=="string"?e:await e()),l=i.createChat();n&&(n.axios&&i.setAxios(n.axios),n.baseUrl&&i.setBaseUrl(n.baseUrl)),l.setConfig(typeof t=="function"?await t():t);let{text:c}=await l.talk(r,{abortController:s});return c}}static createChatRequestWithJsonSchema(e){return async(t,{schema:n,onCancel:r})=>{let s=new a(typeof e.apiKey=="string"?e.apiKey:await e.apiKey()),i=s.createChat(),l=new AbortController;e.config&&i.setConfig(typeof e.config=="function"?await e.config():e.config),e.axios&&s.setAxios(e.axios),r(()=>l.abort());let c=h(n.output),{text:p}=await i.talk(t,{abortController:l,jsonSchema:{name:"data",strict:!0,schema:c}});return p}}setAxios(e){this._axios=e}setBaseUrl(e){this._baseUrl=e}setConfiguration(e){this._apiKey=e}createChat(){return new G(this)}createVision(){return new E(this)}createImagesGeneration(){return new J(this)}};import $e from"axios";import{flow as Ke,Once as Ne}from"power-helper";import{Template as ye}from"@huggingface/jinja";var A=class{constructor(e){o(this,"core");o(this,"streamAbortControllers",[]);this.core=e}createAbortController(){let e=new AbortController,t=Ke.createUuid();return this.streamAbortControllers.push({id:t,controller:e}),{signal:e.signal,controllerId:t}}removeAbortController(e){this.streamAbortControllers=this.streamAbortControllers.filter(t=>t.id!==e)}async stream(e){let{signal:t,controllerId:n}=this.createAbortController(),r=()=>{this.removeAbortController(n),e.onEnd()},s=async i=>{if(i.body){let l=i.body.getReader(),c=!1,p="";for(;!c;){let{value:g,done:u}=await l.read();if(g){p+=new TextDecoder("utf-8").decode(g);let T=p.split(`
9
+ `),Re=(a,e,t)=>{let n=Oe.create();return n.registerHelper("DATA",function(r){return JSON.stringify(r)}),n.registerHelper("ENV",function(r){return this.__envs&&r?this.__envs[r]:""}),n.registerHelper("INPUT",function(){return JSON.stringify(Me.omit(this,["__envs"]))}),n.registerHelper("JOIN",function(r){return Array.isArray(r)?r.join():JSON.stringify(r)}),n.compile(me(e,t))(a)},je=(a,e)=>[...Array.isArray(a)?a:[a],"Please provide JSON data according to the following JSON Schema format:",JSON.stringify(e)].join(`
10
+ `);var ye={};D(ye,{s2t:()=>S,t2s:()=>T});import{Converter as he}from"opencc-js";var T=a=>he({from:"tw",to:"cn"})(a),S=a=>he({from:"cn",to:"tw"})(a);import Ie from"json5";var O=class a{constructor(e){i(this,"params");this.params=e}static JsonMessage(){return new a({name:"JsonMessage",handler:async e=>{try{return JSON.parse(e)}catch{let n=/{(?:[^{}]|(?:{[^{}]*}))*}/,r=e.match(n)?.[0]||"";return Ie.parse(r)}}})}get name(){return this.params.name}async read(e){return await this.params.handler(e)}};import{Event as Ee,flow as Q,Hook as Be,Log as Ve}from"power-helper";import{z as X,toJSONSchema as Ge}from"zod";function Z(a,e){return X.object(e(X)).parse(a||{})}function h(a){let e=Ge(X.object(a()));return delete e.$schema,e}var v=class{constructor(e,t){i(this,"isParserError",!0);i(this,"parserFails",[]);i(this,"error");this.error=e,this.parserFails=t}};var M=class{constructor(e){i(this,"params");this.params=e}get __schemeType(){return null}get __outputType(){return null}async compile(e,t){let n=this.params.input?Z(e,this.params.input):e,r=this.params.question?await this.params.question(n,t):"";return{scheme:n,prompt:Array.isArray(r)?r.join(`
11
+ `):r}}getValidate(){return{input:this.params.input,output:this.params.output}}changeOutputSchema(e){this.params.output=e}async parse(e){let t,n="",r=[];for(let s of this.params.parsers)try{t=await s.read(e),n=s.name}catch(o){t=void 0,r.push({name:s.name,error:o})}try{return{output:Z(t,this.params.output),parserName:n,parserFails:r}}catch(s){throw new v(s,r)}}};import{z as fe}from"zod";var R=class{constructor(e){i(this,"__hookType");i(this,"log");i(this,"hook",new Be);i(this,"params");i(this,"plugins",{});i(this,"installed",!1);i(this,"translator");i(this,"event",new Ee);this.log=new Ve(e.name??"no name"),this.params=e,this.translator=new M({...e,parsers:[O.JsonMessage()]})}_install(){if(this.installed===!1){this.installed=!0;let e={log:this.log,attach:this.hook.attach.bind(this.hook),attachAfter:this.hook.attachAfter.bind(this.hook),translator:this.translator};if(this.params.plugins){this.plugins=typeof this.params.plugins=="function"?this.params.plugins():this.params.plugins;for(let t in this.plugins)this.plugins[t].instance._params.onInstall({...e,params:this.plugins[t].params,receive:this.plugins[t].receive})}this.params.install?.(e)}}async cancel(e){e?this.event.emit("cancel",{requestId:e}):this.event.emit("cancelAll",{})}requestWithId(e){this._install();let t=Q.createUuid(),n=null,r=!1,s=!1,o=new AbortController,c=[this.event.on("cancel",({requestId:d})=>{d===t&&g()}),this.event.on("cancelAll",()=>{g()})],l=()=>c.forEach(d=>d.off()),g=()=>{r===!1&&(s&&n&&n(),o.abort(),r=!0,l())},u=d=>{n=()=>{d()}},p=async()=>{let d=this.translator.getValidate(),A=null,ae={},C=new Map,oe=await this.translator.compile(e,{schema:d}),ie=[],k=[];oe.prompt&&k.push({role:"user",content:oe.prompt});for(let y in this.plugins)ae[y]={send:x=>this.plugins[y].send({id:t,data:x})};return await this.hook.notify("start",{id:t,data:e,schema:d,plugins:ae,messages:k,metadata:C,setPreMessages:y=>{ie=y.map(x=>({...x,content:Array.isArray(x.content)?x.content.join(`
12
+ `):x.content}))},changeMessages:y=>{k=y},changeOutputSchema:y=>{this.translator.changeOutputSchema(y),d=this.translator.getValidate()}}),k=[...ie,...k],await Q.asyncWhile(async({count:y,doBreak:x})=>{if(y>=99)return x();let G="",E="",H=!1,W=k.filter(b=>b.role==="user").slice(-1)[0]?.content||"";try{await this.hook.notify("talkBefore",{id:t,data:e,messages:k,metadata:C,lastUserMessage:W});let b=this.params.request(k,{id:t,count:y,schema:d,onCancel:u,metadata:C,abortController:o,isRetry:H});if(r)n&&n(),o.abort();else try{s=!0,G=await b,E=G}finally{s=!1}r===!1&&(await this.hook.notify("talkAfter",{id:t,data:e,response:G,messages:k,parseText:E,metadata:C,lastUserMessage:W,parseFail:P=>{throw new v(P,[])},changeParseText:P=>{E=P}}),A=(await this.translator.parse(E)).output,await this.hook.notify("succeeded",{id:t,output:A,metadata:C})),await this.hook.notify("done",{id:t,metadata:C}),x()}catch(b){if(b instanceof v){if(await this.hook.notify("parseFailed",{id:t,error:b.error,count:y,response:G,messages:k,metadata:C,lastUserMessage:W,parserFails:b.parserFails,retry:()=>{H=!0},changeMessages:P=>{k=P}}),H===!1)throw await this.hook.notify("done",{id:t,metadata:C}),b}else throw await this.hook.notify("done",{id:t,metadata:C}),b}}),A};return{id:t,request:(async()=>{try{return await p()}finally{l()}})()}}async request(e){let{request:t}=this.requestWithId(e);return await t}async getPreRequestInfo(e){this._install();let t=Q.createUuid(),n=this.translator.getValidate(),r={},s=new Map,o=await this.translator.compile(e,{schema:n}),c=[],l=[];return o.prompt&&l.push({role:"user",content:o.prompt}),await this.hook.notify("start",{id:t,data:e,schema:n,plugins:r,messages:l,metadata:s,setPreMessages:u=>{c=u.map(p=>({...p,content:Array.isArray(p.content)?p.content.join(`
13
+ `):p.content}))},changeMessages:u=>{l=u},changeOutputSchema:u=>{this.translator.changeOutputSchema(u),n=this.translator.getValidate()}}),{outputSchema:n.output(fe),outputJsonSchema:h(()=>n.output(fe)),requestMessages:[...c,...l]}}};import*as Je from"zod";var Y=class{constructor(e){i(this,"params");this.params=e}createBrokerBuilder(e){return{create:t=>new R({output:()=>({}),install:n=>{e?.install?.(n),n.attach("start",async({id:r,plugins:s,data:o,metadata:c,changeMessages:l,changeOutputSchema:g})=>{let u=await t({id:r,data:o,plugins:s,zod:Je,setMessages:p=>{l(p.map(_=>({role:_.role,content:Array.isArray(_.content)?_.content.join(`
14
+ `):_.content})))},metadata:c});g(()=>u)})},plugins:this.params.plugins?()=>this.params.plugins():void 0,request:this.params.request})}}};var j=a=>{let e=[],t="",n=0,r=!1,s=!1,o=!1;for(let c=0;c<a.length;c++){let l=a[c];if(s){s=!1,o&&(t+=l);continue}if(l==="\\"){s=!0,o&&(t+=l);continue}if(l==='"'){r=!r,o&&(t+=l);continue}if(r)o&&(t+=l);else if(l==="{")n===0?(o=!0,t="{"):t+=l,n++;else if(l==="}"){if(n--,t+=l,n===0&&o){let g=t.trim();if(g)try{e.push(JSON.parse(g))}catch{}t="",o=!1}}else o&&(t+=l)}return{items:e,lastChunk:o?t.trim():""}};import Ne from"axios";var B=class{constructor(e){i(this,"openai");i(this,"config",{model:"gpt-5",maxTokens:void 0,temperature:.7});this.openai=e}setConfig(e){Object.assign(this.config,e)}async view(e){let t=await this.openai._axios.post(`${this.openai._baseUrl}/v1/chat/completions`,{model:this.config.model,n:1,messages:e,max_tokens:this.config.maxTokens,temperature:this.config.temperature},{headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}}),r=(t.data.choices||[])[0]?.message||{role:"assistant",content:""};return{id:t?.data.id,text:r.content,apiResponse:t.data}}};import{json as qe}from"power-helper";var V=class{constructor(e){i(this,"openai");i(this,"config",{model:"gpt-5",temperature:1,maxTokens:void 0});this.openai=e}setConfig(e){Object.assign(this.config,e)}async moderations(e){let t=await this.openai._axios.post(`${this.openai._baseUrl}/v1/moderations`,{input:e},{headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}});return{isSafe:t.data.results?.[0]?.flagged===!1,result:t.data}}async talk(e=[],t){let n=qe.jpjs(e),r;t?.jsonSchema&&(r={type:"json_schema",schema:t.jsonSchema.schema});let s=await this.openai._axios.post(`${this.openai._baseUrl}/v1/responses`,{model:this.config.model,input:n,temperature:this.config.temperature,max_output_tokens:this.config.maxTokens,reasoning:this.config.reasoning,text:r==null?void 0:{format:{...r,name:"response_format"}}},{signal:t?.abortController?.signal,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}}),o=s.data.output.find(g=>g.type==="message")?.content?.find(g=>g.type==="output_text"),c=s.data.output.find(g=>g.type==="reasoning")?.summary?.find(g=>g.type==="summary_text"),l={role:"assistant",content:o?.text||""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,reasoningText:c?.text,apiResponse:s.data}}talkStream(e){let t=new AbortController;return fetch(`${this.openai._baseUrl}/v1/responses`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`},body:JSON.stringify({model:this.config.model,stream:!0,input:e.messages,max_output_tokens:this.config.maxTokens,reasoning:this.config.reasoning}),signal:t.signal}).then(async n=>{if(n.ok===!1)throw new Error(`HTTP error! status: ${n.status}`);let r="",s=n.body?.pipeThrough(new TextDecoderStream).getReader();if(!s)throw new Error("Can not get reader");for(;;){let{value:o,done:c}=await s.read();if(c)break;let l=o.split(`
15
+ `).filter(g=>g.startsWith("data:"));for(let g of l){let u=j(r+g.slice(5));for(let p of u.items)p.type==="response.reasoning_summary_text.delta"&&e.onThinking&&e.onThinking(p.delta||""),p.type==="response.output_text.delta"&&e.onMessage(p.delta||""),p.type==="response.completed"&&e.onEnd();r=u.lastChunk}}}).catch(n=>{n.name==="AbortError"?e.onEnd():e.onError(n)}),{cancel:()=>t.abort()}}async keepTalk(e,t=[]){let n=await this.talk([...t,{role:"user",content:Array.isArray(e)?e.join(`
16
+ `):e}]);return{result:n,nextTalk:r=>this.keepTalk(r,n.newMessages)}}};var J=class{constructor(e){i(this,"openai");i(this,"config",{model:"dall-e-2",size:"1024x1024"});this.openai=e}setConfig(e){Object.assign(this.config,e)}async create(e){return(await this.openai._axios.post(`${this.openai._baseUrl}/v1/images/generations`,{prompt:e,n:1,size:this.config.size,model:this.config.model,response_format:"b64_json"},{timeout:3e5,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}})).data}};var ee=class a{constructor(e=""){i(this,"_axios",Ne.create());i(this,"_apiKey","");i(this,"_baseUrl","https://api.openai.com");this._apiKey=e}static createChatRequest(e,t={},n){return async(r,{abortController:s})=>{let o=new a(typeof e=="string"?e:await e()),c=o.createChat();n&&(n.axios&&o.setAxios(n.axios),n.baseUrl&&o.setBaseUrl(n.baseUrl)),c.setConfig(typeof t=="function"?await t():t);let{text:l}=await c.talk(r,{abortController:s});return l}}static createChatRequestWithJsonSchema(e){return async(t,{schema:n,onCancel:r})=>{let s=new a(typeof e.apiKey=="string"?e.apiKey:await e.apiKey()),o=s.createChat(),c=new AbortController;e.config&&o.setConfig(typeof e.config=="function"?await e.config():e.config),e.axios&&s.setAxios(e.axios),r(()=>c.abort());let l=h(n.output),{text:g}=await o.talk(t,{abortController:c,jsonSchema:{name:"data",strict:!0,schema:l}});return g}}setAxios(e){this._axios=e}setBaseUrl(e){this._baseUrl=e}setConfiguration(e){this._apiKey=e}createChat(){return new V(this)}createVision(){return new B(this)}createImagesGeneration(){return new J(this)}};import Ue from"axios";import{flow as Ke,Once as $e}from"power-helper";import{Template as ke}from"@huggingface/jinja";var w=class{constructor(e){i(this,"core");i(this,"streamAbortControllers",[]);this.core=e}createAbortController(){let e=new AbortController,t=Ke.createUuid();return this.streamAbortControllers.push({id:t,controller:e}),{signal:e.signal,controllerId:t}}removeAbortController(e){this.streamAbortControllers=this.streamAbortControllers.filter(t=>t.id!==e)}async stream(e){let{signal:t,controllerId:n}=this.createAbortController(),r=()=>{this.removeAbortController(n),e.onEnd()},s=async o=>{if(o.body){let c=o.body.getReader(),l=!1,g="";for(;!l;){let{value:u,done:p}=await c.read();if(u){g+=new TextDecoder("utf-8").decode(u);let _=g.split(`
17
17
 
18
- `);p=T.pop()||"",T.forEach(d=>{if(d.includes("[DONE]")&&(c=!0),d.startsWith("data:"))try{let v=JSON.parse(d.replace("data: ",""));e.onMessage(v)}catch(v){e.onWarn(v)}})}u&&(c=!0)}r()}else e.onError(new Error("Body not found."))};fetch(`${this.core.config.baseUrl}/${e.path}`,{method:"POST",body:JSON.stringify(typeof e.data=="function"?await e.data():e.data),signal:t,headers:{"Content-Type":"application/json",...this.core.config.headers}}).then(s).catch(i=>{i instanceof Error&&i.message.includes("The user aborted a request")?r():e.onError(i)})}async fetch(e){let{signal:t,controllerId:n}=this.createAbortController();try{return{data:(await this.core.core._axios.post(`${this.core.config.baseUrl}/${e.path}`,e.data,{signal:t,headers:{"Content-Type":"application/json",...this.core.config.headers}})).data}}finally{this.removeAbortController(n)}}cancel(){this.streamAbortControllers.forEach(e=>e.controller.abort()),this.streamAbortControllers=[]}export(){return{cancel:this.cancel.bind(this)}}},V=class{constructor(e){o(this,"getProp",new Ne({handler:async()=>{let e=`${this.config.baseUrl}/props`,{data:t}=await this.core._axios.get(e,{});return t}}));o(this,"core");o(this,"config",{baseUrl:"",headers:{},autoConvertTraditionalChinese:!0});this.core=e}setConfig(e){this.config={...this.config,...e}}completion(e){let t=e.messages.at(-1)||"",n=new A(this);return{...n.export(),run:async()=>{let r=await this.getProp.run(),i=new ye(r.chat_template).render({bos_token:r.bos_token,messages:e.messages}).slice(0,r.eos_token.length*-1-1),l=await n.fetch({path:"completion",data:{...e.options||{},prompt:this.config.autoConvertTraditionalChinese?S(i):i}}),c=this.config.autoConvertTraditionalChinese?w(l.data.content):l.data.content;return{message:c,fullMessage:`${t}${c}`}}}}completionStream(e){let t=new A(this);return t.stream({path:"completion",onEnd:e.onEnd||(()=>null),onMessage:n=>{let r=this.config.autoConvertTraditionalChinese?w(n.content):n.content;e.onMessage(r)},onWarn:e.onWarn||(()=>null),onError:e.onError||(()=>null),data:async()=>{let n=await this.getProp.run(),s=new ye(n.chat_template).render({bos_token:n.bos_token,messages:e.messages}).slice(0,n.eos_token.length*-1-1);return{...e.options||{},prompt:this.config.autoConvertTraditionalChinese?S(s):s,stream:!0}}}),t.export()}talk(e){let t=new A(this);return{...t.export(),run:async()=>{let r=(await t.fetch({path:"v1/chat/completions",data:{...e.options||{},response_format:e.response_format,messages:e.messages.map(s=>({role:s.role,content:this.config.autoConvertTraditionalChinese?S(s.content):s.content}))}})).data.choices[0].message.content||"";return{message:this.config.autoConvertTraditionalChinese?w(r):r}}}}talkStream(e){let t=new A(this);return t.stream({path:"v1/chat/completions",onEnd:e.onEnd||(()=>null),onMessage:n=>{let r=n.choices[0].delta.content;if(r){let s=this.config.autoConvertTraditionalChinese?w(r):r;e.onMessage(s)}},onWarn:e.onWarn||(()=>null),onError:e.onError||(()=>null),data:{...e.options||{},stream:!0,messages:e.messages.map(n=>({role:n.role,content:this.config.autoConvertTraditionalChinese?S(n.content):n.content}))}}),t.export()}};var ee=class a{constructor(){o(this,"_axios",$e.create())}static createChatRequestWithJsonSchema(e){return async(t,{schema:n,onCancel:r})=>{let s=new a,i=s.createCompletion(),l=typeof e.config=="function"?await e.config():e.config;i.setConfig(l);let c=h(n.output);e.axios&&s.setAxios(e.axios),i.config.autoConvertTraditionalChinese&&(c=JSON.parse(S(JSON.stringify(c))));let{run:p,cancel:g}=i.talk({options:e.talkOptions,messages:t,response_format:{type:"json_object",schema:c}});r(g);let{message:u}=await p();return i.config.autoConvertTraditionalChinese?w(u):u}}setAxios(e){this._axios=e}createCompletion(){return new V(this)}};import{json as ze}from"power-helper";var B=class{constructor(e){o(this,"google");o(this,"config",{model:"gemini-2.0-flash",maxTokens:1024,temperature:.7});this.google=e}setConfig(e){Object.assign(this.config,e)}async talk(e=[]){let t=ze.jpjs(e),r=(await this.google.googleGenAI.models.generateContent({model:this.config.model,contents:t,config:{temperature:this.config.temperature,maxOutputTokens:this.config.maxTokens}})).text;return{text:r,newMessages:[...t,{role:"model",parts:[{text:r}]}]}}talkStream(e){let t={controller:new AbortController};return this.google.googleGenAI.models.generateContentStream({model:this.config.model,contents:e.messages,config:{abortSignal:t.controller.signal,temperature:this.config.temperature,maxOutputTokens:this.config.maxTokens}}).then(async r=>{try{for await(let s of r){let i=s.candidates?.[0].content?.parts?.[0].text||"";e.onMessage(i)}e.onEnd()}catch(s){if(t.controller.signal.aborted)e.onEnd();else throw s}}).catch(r=>{e.onError(r)}),{cancel:()=>{t.controller.abort()}}}};var q=class{constructor(e){o(this,"google");o(this,"config",{model:"imagen-4.0-generate-001",size:"1K",aspectRatio:"1:1"});this.google=e}setConfig(e){Object.assign(this.config,e)}async create(e){return{images:(await this.google.googleGenAI.models.generateImages({model:this.config.model,prompt:e,config:{numberOfImages:1,aspectRatio:this.config.aspectRatio,imageSize:this.config.size}})).generatedImages?.map(n=>({url:n.image?.imageBytes||"",mimeType:n.image?.mimeType||""}))||[]}}};var te=class a{constructor(e){o(this,"googleGenAI");this.googleGenAI=e}static chatGPTMessageToGoogleChatMessage(e){let t=n=>typeof n=="string"?[{text:n}]:Array.isArray(n)?n.map(({type:r,image_url:s,text:i})=>{if(r==="image_url"){let l=s?.url||"",c=l.includes("data:image/png")?"image/png":"image/jpeg";return{inlineData:{data:l.split("base64,")[1]||"",mimeType:c}}}else return{text:i||""}}):[];return e.map(n=>n.role==="user"||n.role==="system"?{role:"user",parts:t(n.content)}:{role:"model",parts:t(n.content)})}static createChatRequestWithJsonSchema(e){let t=e.googleGenAI,n=r=>(r.type==="object"?(delete r.additionalProperties,Object.keys(r.properties).forEach(s=>{n(r.properties[s])})):r.type==="array"&&n(r.items),r);return async(r,{schema:s,abortController:i})=>{let l=typeof e.config=="function"?await e.config():e.config;return(await t.models.generateContent({model:e.model,contents:a.chatGPTMessageToGoogleChatMessage(r),config:{abortSignal:i.signal,maxOutputTokens:l.maxTokens,temperature:l.temperature,responseMimeType:"application/json",responseJsonSchema:h(s.output)}})).text||""}}createChat(){return new B(this)}createImagesGeneration(){return new q(this)}};var K=class{constructor(e){o(this,"config");this.config=e}translateMessages(e){return{system:e.find(t=>t.role==="system")?.content,messages:e.filter(t=>t.role!=="system")}}createChatAndStructureBody(e,t){let n=this.config(),r=this.translateMessages(e);return{model:n.model,max_tokens:n.maxTokens,temperature:n.temperature,system:r.system,messages:r.messages,tools:[{name:"data",description:"Response Data",input_schema:t}],tool_choice:{type:"tool",name:"data"}}}parseChatAndStructureResult(e){let n=("content"in e?e.content.find(r=>r.type==="tool_use"):null)?.input||null;return n==null?"null":JSON.stringify(n)}createTalkBody(e){let t=this.config(),n=this.translateMessages(e);return{model:t.model,max_tokens:t.maxTokens,temperature:t.temperature,system:n.system,messages:n.messages}}parseTalkResult(e){let t="",n="content"in e?e.content.find(r=>r.type==="text"):null;return n&&(t=n.text),t}createTalkStreamBody(e){let t=this.config(),n=this.translateMessages(e);return{model:t.model,max_tokens:t.maxTokens,temperature:t.temperature,system:n.system,stream:!0,messages:n.messages}}},N=class{constructor(e){o(this,"anthropic");o(this,"dataGenerator",new K(()=>this.config));o(this,"config",{model:"claude-3-5-haiku-latest",maxTokens:8192,temperature:.7});this.anthropic=e}setConfig(e){Object.assign(this.config,e)}async chatAndStructure(e,t,n){let r=this.anthropic.anthropicSdk,s=this.dataGenerator.createChatAndStructureBody(e,t),i=await r.messages.create(s,{signal:n?.abortController?.signal});return this.dataGenerator.parseChatAndStructureResult(i)}async talk(e=[]){let t=this.anthropic.anthropicSdk,n=this.dataGenerator.createTalkBody(e),r=await t.messages.create(n);return this.dataGenerator.parseTalkResult(r)}talkStream(e){let t=null,n=this.anthropic.anthropicSdk,{onMessage:r,onEnd:s,onError:i}=e,l=this.dataGenerator.createTalkStreamBody(e.messages);return(async()=>{try{let p=await n.messages.create(l);if(p!=null&&"controller"in p){t=p;for await(let g of t)if(g.type==="content_block_delta"){let u="text"in g.delta?g.delta.text:"";r(u)}}s()}catch(p){i(p)}})(),{cancel:()=>{let p=setInterval(()=>{t&&t.controller&&(t.controller.abort(),clearInterval(p))},10)}}}};var ne=class a{constructor(e){o(this,"anthropicSdk");this.anthropicSdk=e}static chatGPTMessageToAnthropicChatMessage(e){return e.map(n=>({role:n.role,content:typeof n.content=="string"?n.content:n.content.map(r=>{if(r.type==="image_url"){let s=r.image_url?.url||"";return{type:"image",source:{type:"base64",media_type:s.slice(5).split(";")[0],data:s.split(",")[1]}}}return{type:"text",text:r.text}})}))}static createChatRequestWithJsonSchema(e){let n=new a(e.anthropicSdk).createChat();return n.setConfig(e.config||{}),async(r,{schema:s,abortController:i})=>{let l=h(s.output);return await n.chatAndStructure(r,l,{abortController:i})}}createChat(){return new N(this)}};import We from"axios";import{json as Ue}from"power-helper";var $=class{constructor(e){o(this,"xAi");o(this,"config",{n:1,model:"grok-3",temperature:1,maxTokens:void 0,forceJsonFormat:!0});this.xAi=e}setConfig(e){Object.assign(this.config,e)}async talk(e=[],t){let n=Ue.jpjs(e),r;this.config.forceJsonFormat&&(r={type:"json_object"}),this.config.forceJsonFormat&&t?.jsonSchema&&(r={type:"json_schema",json_schema:t.jsonSchema});let s=await this.xAi._axios.post("https://api.x.ai/v1/chat/completions",{model:this.config.model,n:this.config.n,messages:n,response_format:r,temperature:this.config.temperature},{signal:t?.abortController?.signal,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`}}),i=s.data.choices||[],l=i[0]?.message||{role:"assistant",content:""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,isDone:i[0]?.finish_reason==="stop",apiResponse:s.data}}talkStream(e){let t=new AbortController;return fetch("https://api.x.ai/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`},body:JSON.stringify({model:this.config.model,stream:!0,messages:e.messages}),signal:t.signal}).then(async n=>{if(!n.ok){let s=await n.text();throw new Error(`Error: ${s}`)}let r=n.body?.pipeThrough(new TextDecoderStream).getReader();if(!r)throw new Error("Can not get reader");for(;;){let{value:s,done:i}=await r.read();if(i)break;let l=s.split(`
19
- `);for(let c of l)if(c.length!==0&&!c.startsWith(":")){if(c==="data: [DONE]"){e.onEnd();break}try{let g=JSON.parse(c.substring(6)).choices[0].delta.content;e.onMessage(g)}catch(p){e.onWarn(p)}}}}).catch(n=>{n.name==="AbortError"?e.onEnd():e.onError(n)}),{cancel:()=>t.abort()}}async keepTalk(e,t=[]){let n=await this.talk([...t,{role:"user",content:Array.isArray(e)?e.join(`
20
- `):e}]);return{result:n,nextTalk:r=>this.keepTalk(r,n.newMessages)}}};var z=class{constructor(e){o(this,"xAi");o(this,"config",{model:"grok-2-image"});this.xAi=e}setConfig(e){Object.assign(this.config,e)}async create(e){return(await this.xAi._axios.post("https://api.x.ai/v1/images/generations",{prompt:e,n:1,model:this.config.model,response_format:"b64_json"},{timeout:3e5,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`}})).data}};var re=class a{constructor(e=""){o(this,"_axios",We.create());o(this,"_apiKey","");this._apiKey=e}static createChatRequest(e,t={},n){return async(r,{onCancel:s})=>{let i=new a(typeof e=="string"?e:await e()),l=i.createChat(),c=new AbortController;n&&n.axios&&i.setAxios(n.axios),l.setConfig(typeof t=="function"?await t():t),s(()=>c.abort());let{text:p}=await l.talk(r,{abortController:c});return p}}static createChatRequestWithJsonSchema(e){return async(t,{schema:n,abortController:r})=>{let s=new a(typeof e.apiKey=="string"?e.apiKey:await e.apiKey()),i=s.createChat();e.config&&i.setConfig(typeof e.config=="function"?await e.config():e.config),e.axios&&s.setAxios(e.axios);let l=h(n.output),{text:c}=await i.talk(t,{abortController:r,jsonSchema:{name:"data",strict:!0,schema:l}});return c}}setAxios(e){this._axios=e}setConfiguration(e){this._apiKey=e}createChat(){return new $(this)}createImagesGeneration(){return new z(this)}};export{K as AnthropicChatDataGenerator,ne as AnthropicCtodService,R as ChatBroker,y as ChatBrokerPlugin,Q as CtoD,y as CtoDPlugin,te as GoogleCtodService,ee as LlamaCppCtodService,Y as OpenAICtodService,O as TextParser,M as Translator,re as XCtodService,he as chineseConverter,ge as plugins,ue as templates,h as validateToJsonSchema};
18
+ `);g=_.pop()||"",_.forEach(d=>{if(d.includes("[DONE]")&&(l=!0),d.startsWith("data:"))try{let A=JSON.parse(d.replace("data: ",""));e.onMessage(A)}catch(A){e.onWarn(A)}})}p&&(l=!0)}r()}else e.onError(new Error("Body not found."))};fetch(`${this.core.config.baseUrl}/${e.path}`,{method:"POST",body:JSON.stringify(typeof e.data=="function"?await e.data():e.data),signal:t,headers:{"Content-Type":"application/json",...this.core.config.headers}}).then(s).catch(o=>{o instanceof Error&&o.message.includes("The user aborted a request")?r():e.onError(o)})}async fetch(e){let{signal:t,controllerId:n}=this.createAbortController();try{return{data:(await this.core.core._axios.post(`${this.core.config.baseUrl}/${e.path}`,e.data,{signal:t,headers:{"Content-Type":"application/json",...this.core.config.headers}})).data}}finally{this.removeAbortController(n)}}cancel(){this.streamAbortControllers.forEach(e=>e.controller.abort()),this.streamAbortControllers=[]}export(){return{cancel:this.cancel.bind(this)}}},q=class{constructor(e){i(this,"getProp",new $e({handler:async()=>{let e=`${this.config.baseUrl}/props`,{data:t}=await this.core._axios.get(e,{});return t}}));i(this,"core");i(this,"config",{baseUrl:"",headers:{},autoConvertTraditionalChinese:!0});this.core=e}setConfig(e){this.config={...this.config,...e}}completion(e){let t=e.messages.at(-1)||"",n=new w(this);return{...n.export(),run:async()=>{let r=await this.getProp.run(),o=new ke(r.chat_template).render({bos_token:r.bos_token,messages:e.messages}).slice(0,r.eos_token.length*-1-1),c=await n.fetch({path:"completion",data:{...e.options||{},prompt:this.config.autoConvertTraditionalChinese?T(o):o}}),l=this.config.autoConvertTraditionalChinese?S(c.data.content):c.data.content;return{message:l,fullMessage:`${t}${l}`}}}}completionStream(e){let t=new w(this);return t.stream({path:"completion",onEnd:e.onEnd||(()=>null),onMessage:n=>{let r=this.config.autoConvertTraditionalChinese?S(n.content):n.content;e.onMessage(r)},onWarn:e.onWarn||(()=>null),onError:e.onError||(()=>null),data:async()=>{let n=await this.getProp.run(),s=new ke(n.chat_template).render({bos_token:n.bos_token,messages:e.messages}).slice(0,n.eos_token.length*-1-1);return{...e.options||{},prompt:this.config.autoConvertTraditionalChinese?T(s):s,stream:!0}}}),t.export()}talk(e){let t=new w(this);return{...t.export(),run:async()=>{let r=(await t.fetch({path:"v1/chat/completions",data:{...e.options||{},response_format:e.response_format,messages:e.messages.map(s=>({role:s.role,content:this.config.autoConvertTraditionalChinese?T(s.content):s.content}))}})).data.choices[0].message.content||"";return{message:this.config.autoConvertTraditionalChinese?S(r):r}}}}talkStream(e){let t=new w(this);return t.stream({path:"v1/chat/completions",onEnd:e.onEnd||(()=>null),onMessage:n=>{let r=n.choices[0].delta.content;if(r){let s=this.config.autoConvertTraditionalChinese?S(r):r;e.onMessage(s)}},onWarn:e.onWarn||(()=>null),onError:e.onError||(()=>null),data:{...e.options||{},stream:!0,messages:e.messages.map(n=>({role:n.role,content:this.config.autoConvertTraditionalChinese?T(n.content):n.content}))}}),t.export()}};var te=class a{constructor(){i(this,"_axios",Ue.create())}static createChatRequestWithJsonSchema(e){return async(t,{schema:n,onCancel:r})=>{let s=new a,o=s.createCompletion(),c=typeof e.config=="function"?await e.config():e.config;o.setConfig(c);let l=h(n.output);e.axios&&s.setAxios(e.axios),o.config.autoConvertTraditionalChinese&&(l=JSON.parse(T(JSON.stringify(l))));let{run:g,cancel:u}=o.talk({options:e.talkOptions,messages:t,response_format:{type:"json_object",schema:l}});r(u);let{message:p}=await g();return o.config.autoConvertTraditionalChinese?S(p):p}}setAxios(e){this._axios=e}createCompletion(){return new q(this)}};import{json as ze}from"power-helper";var I=class a{constructor(e){i(this,"google");i(this,"config",{model:"gemini-3-flash-preview",maxTokens:1024,temperature:.7,thinkingConfig:{enabled:!1,level:"THINKING_LEVEL_UNSPECIFIED"}});this.google=e}setConfig(e){Object.assign(this.config,e)}static getThinkingConfig(e){if(e)return e.enabled===null?void 0:{includeThoughts:!0,thinkingLevel:e.level}}async talk(e=[]){let t=ze.jpjs(e),r=(await this.google.googleGenAI.models.generateContent({model:this.config.model,contents:t,config:{temperature:this.config.temperature,maxOutputTokens:this.config.maxTokens,thinkingConfig:a.getThinkingConfig(this.config.thinkingConfig)}})).text;return{text:r,newMessages:[...t,{role:"model",parts:[{text:r}]}]}}talkStream(e){let t={controller:new AbortController};return this.google.googleGenAI.models.generateContentStream({model:this.config.model,contents:e.messages,config:{abortSignal:t.controller.signal,temperature:this.config.temperature,maxOutputTokens:this.config.maxTokens,thinkingConfig:a.getThinkingConfig(this.config.thinkingConfig)}}).then(async r=>{try{for await(let s of r){let o=s.candidates?.[0].content?.parts||[];for(let c of o)c.text&&(c.thought?e.onThinking?.(c.text):e.onMessage(c.text))}e.onEnd()}catch(s){if(t.controller.signal.aborted)e.onEnd();else throw s}}).catch(r=>{e.onError(r)}),{cancel:()=>{t.controller.abort()}}}};var N=class{constructor(e){i(this,"google");i(this,"config",{model:"imagen-4.0-generate-001",size:"1K",aspectRatio:"1:1"});this.google=e}setConfig(e){Object.assign(this.config,e)}async create(e){return{images:(await this.google.googleGenAI.models.generateImages({model:this.config.model,prompt:e,config:{numberOfImages:1,aspectRatio:this.config.aspectRatio,imageSize:this.config.size}})).generatedImages?.map(n=>({url:n.image?.imageBytes||"",mimeType:n.image?.mimeType||""}))||[]}}};var ne=class a{constructor(e){i(this,"googleGenAI");this.googleGenAI=e}static chatGPTMessageToGoogleChatMessage(e){let t=n=>typeof n=="string"?[{text:n}]:Array.isArray(n)?n.map(({type:r,image_url:s,text:o})=>{if(r==="image_url"){let c=s?.url||"",l=c.includes("data:image/png")?"image/png":"image/jpeg";return{inlineData:{data:c.split("base64,")[1]||"",mimeType:l}}}else return{text:o||""}}):[];return e.map(n=>n.role==="user"||n.role==="system"?{role:"user",parts:t(n.content)}:{role:"model",parts:t(n.content)})}static createChatRequestWithJsonSchema(e){let t=e.googleGenAI,n=r=>(r.type==="object"?(delete r.additionalProperties,Object.keys(r.properties).forEach(s=>{n(r.properties[s])})):r.type==="array"&&n(r.items),r);return async(r,{schema:s,abortController:o})=>{let c=typeof e.config=="function"?await e.config():e.config;return(await t.models.generateContent({model:e.model,contents:a.chatGPTMessageToGoogleChatMessage(r),config:{abortSignal:o.signal,maxOutputTokens:c.maxTokens,temperature:c.temperature,responseMimeType:"application/json",responseJsonSchema:h(s.output),thinkingConfig:I.getThinkingConfig(c.thinkingConfig)}})).text||""}}createChat(){return new I(this)}createImagesGeneration(){return new N(this)}};var K=class{constructor(e){i(this,"config");this.config=e}translateMessages(e){return{system:e.find(t=>t.role==="system")?.content,messages:e.filter(t=>t.role!=="system")}}getThinkingParams(){let e=this.config(),t=Math.floor(e.maxTokens*.25);return e.thinking===!1?void 0:{budget_tokens:t<=1024?1024:t>32e3?32e3:t,type:"enabled"}}createChatAndStructureBody(e,t){let n=this.config(),r=this.translateMessages(e);return{model:n.model,max_tokens:n.maxTokens,temperature:n.temperature,system:r.system,messages:r.messages,tools:[{name:"data",description:"Response Data",input_schema:t}],tool_choice:{type:"tool",name:"data"}}}parseChatAndStructureResult(e){let n=("content"in e?e.content.find(r=>r.type==="tool_use"):null)?.input||null;return n==null?"null":JSON.stringify(n)}createTalkBody(e){let t=this.config(),n=this.translateMessages(e);return{model:t.model,max_tokens:t.maxTokens,temperature:t.thinking?1:t.temperature,system:n.system,messages:n.messages,thinking:this.getThinkingParams()}}parseTalkResult(e){let t=[];if("content"in e)for(let n of e.content)n.type==="text"&&t.push(n.text);return t.join(`
19
+ `)}parseTalkThingsResult(e){let t=[];if("content"in e)for(let n of e.content)n.type==="thinking"&&t.push(n.thinking);return t}createTalkStreamBody(e){let t=this.config(),n=this.translateMessages(e);return{model:t.model,max_tokens:t.maxTokens,temperature:t.thinking?1:t.temperature,system:n.system,stream:!0,thinking:this.getThinkingParams(),messages:n.messages}}},$=class{constructor(e){i(this,"anthropic");i(this,"dataGenerator",new K(()=>this.config));i(this,"config",{model:"claude-3-5-haiku-latest",thinking:!1,maxTokens:8192,temperature:.7});this.anthropic=e}setConfig(e){Object.assign(this.config,e)}async chatAndStructure(e,t,n){let r=this.anthropic.anthropicSdk,s=this.dataGenerator.createChatAndStructureBody(e,t),o=await r.messages.create(s,{signal:n?.abortController?.signal});return this.dataGenerator.parseChatAndStructureResult(o)}async chatAndStructureWithDetails(e,t,n){let r=this.anthropic.anthropicSdk,s=this.dataGenerator.createChatAndStructureBody(e,t),o=await r.messages.create(s,{signal:n?.abortController?.signal});return{data:this.dataGenerator.parseChatAndStructureResult(o),thinking:this.dataGenerator.parseTalkThingsResult(o)}}async talk(e=[]){let t=this.anthropic.anthropicSdk,n=this.dataGenerator.createTalkBody(e),r=await t.messages.create(n);return this.dataGenerator.parseTalkResult(r)}async talkAndDetails(e=[]){let t=this.anthropic.anthropicSdk,n=this.dataGenerator.createTalkBody(e),r=await t.messages.create(n);return{text:this.dataGenerator.parseTalkResult(r),thinking:this.dataGenerator.parseTalkThingsResult(r)}}talkStream(e){let t=null,n=this.anthropic.anthropicSdk,{onThinking:r,onMessage:s,onEnd:o,onError:c}=e,l=this.dataGenerator.createTalkStreamBody(e.messages);return(async()=>{try{let u=await n.messages.create(l);if(u!=null&&"controller"in u){t=u;for await(let p of t)p.type==="content_block_delta"&&(p.delta.type==="thinking_delta"&&r&&r(p.delta.thinking),p.delta.type==="text_delta"&&s(p.delta.text))}o()}catch(u){c(u)}})(),{cancel:()=>{let u=setInterval(()=>{t&&t.controller&&(t.controller.abort(),clearInterval(u))},10)}}}};var re=class a{constructor(e){i(this,"anthropicSdk");this.anthropicSdk=e}static chatGPTMessageToAnthropicChatMessage(e){return e.map(n=>({role:n.role,content:typeof n.content=="string"?n.content:n.content.map(r=>{if(r.type==="image_url"){let s=r.image_url?.url||"";return{type:"image",source:{type:"base64",media_type:s.slice(5).split(";")[0],data:s.split(",")[1]}}}return{type:"text",text:r.text}})}))}static createChatRequestWithJsonSchema(e){let n=new a(e.anthropicSdk).createChat();return n.setConfig(e.config||{}),async(r,{schema:s,abortController:o})=>{let c=h(s.output);return await n.chatAndStructure(r,c,{abortController:o})}}createChat(){return new $(this)}};import We from"axios";import{json as He}from"power-helper";var U=class{constructor(e){i(this,"xAi");i(this,"config",{model:"grok-4-1-fast-non-reasoning",temperature:1,maxTokens:void 0});this.xAi=e}setConfig(e){Object.assign(this.config,e)}async talk(e=[],t){let n=He.jpjs(e),r;t?.jsonSchema&&(r={type:"json_schema",schema:t.jsonSchema.schema});let s=await this.xAi._axios.post("https://api.x.ai/v1/responses",{model:this.config.model,input:n,temperature:this.config.temperature,max_output_tokens:this.config.maxTokens,reasoning:this.config.reasoning,text:r==null?void 0:{format:{...r,name:"response_format"}}},{signal:t?.abortController?.signal,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`}}),o=s.data.output.find(g=>g.type==="message")?.content?.find(g=>g.type==="output_text"),c=s.data.output.find(g=>g.type==="reasoning")?.summary?.find(g=>g.type==="summary_text"),l={role:"assistant",content:o?.text||""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,reasoningText:c?.text,apiResponse:s.data}}talkStream(e){let t=new AbortController;return fetch("https://api.x.ai/v1/responses",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`},body:JSON.stringify({model:this.config.model,stream:!0,input:e.messages,max_output_tokens:this.config.maxTokens,reasoning:this.config.reasoning}),signal:t.signal}).then(async n=>{if(n.ok===!1)throw new Error(`HTTP error! status: ${n.status}`);let r="",s=n.body?.pipeThrough(new TextDecoderStream).getReader();if(!s)throw new Error("Can not get reader");for(;;){let{value:o,done:c}=await s.read();if(c)break;let l=o.split(`
20
+ `).filter(g=>g.startsWith("data:"));for(let g of l){let u=j(r+g.slice(5));for(let p of u.items)p.type==="response.reasoning_summary_text.delta"&&e.onThinking&&e.onThinking(p.delta||""),p.type==="response.output_text.delta"&&e.onMessage(p.delta||""),p.type==="response.completed"&&e.onEnd();r=u.lastChunk}}}).catch(n=>{n.name==="AbortError"?e.onEnd():e.onError(n)}),{cancel:()=>t.abort()}}async keepTalk(e,t=[]){let n=await this.talk([...t,{role:"user",content:Array.isArray(e)?e.join(`
21
+ `):e}]);return{result:n,nextTalk:r=>this.keepTalk(r,n.newMessages)}}};var z=class{constructor(e){i(this,"xAi");i(this,"config",{model:"grok-2-image"});this.xAi=e}setConfig(e){Object.assign(this.config,e)}async create(e){return(await this.xAi._axios.post("https://api.x.ai/v1/images/generations",{prompt:e,n:1,model:this.config.model,response_format:"b64_json"},{timeout:3e5,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`}})).data}};var se=class a{constructor(e=""){i(this,"_axios",We.create());i(this,"_apiKey","");this._apiKey=e}static createChatRequest(e,t={},n){return async(r,{onCancel:s})=>{let o=new a(typeof e=="string"?e:await e()),c=o.createChat(),l=new AbortController;n&&n.axios&&o.setAxios(n.axios),c.setConfig(typeof t=="function"?await t():t),s(()=>l.abort());let{text:g}=await c.talk(r,{abortController:l});return g}}static createChatRequestWithJsonSchema(e){return async(t,{schema:n,abortController:r})=>{let s=new a(typeof e.apiKey=="string"?e.apiKey:await e.apiKey()),o=s.createChat();e.config&&o.setConfig(typeof e.config=="function"?await e.config():e.config),e.axios&&s.setAxios(e.axios);let c=h(n.output),{text:l}=await o.talk(t,{abortController:r,jsonSchema:{name:"data",strict:!0,schema:c}});return l}}setAxios(e){this._axios=e}setConfiguration(e){this._apiKey=e}createChat(){return new U(this)}createImagesGeneration(){return new z(this)}};export{K as AnthropicChatDataGenerator,re as AnthropicCtodService,R as ChatBroker,f as ChatBrokerPlugin,Y as CtoD,f as CtoDPlugin,ne as GoogleCtodService,te as LlamaCppCtodService,ee as OpenAICtodService,O as TextParser,M as Translator,se as XCtodService,ye as chineseConverter,j as parseJSONStream,ue as plugins,de as templates,h as validateToJsonSchema};
21
22
  //# sourceMappingURL=index.js.map