ctod 1.0.7 → 1.1.0

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/README.md CHANGED
@@ -47,7 +47,7 @@ yarn add ctod
47
47
  This example demonstrates how to pass a medication index and customer requirements to a chatbot and return the most suitable results. Developers can use the index results to search the database for the most appropriate medication for consumers:
48
48
 
49
49
  ```ts
50
- import { CtoD, OpenAICtodService } from 'ctod'
50
+ import { CtoD, OpenAICtodService, paragraph } from 'ctod'
51
51
 
52
52
  const ctod = new CtoD({
53
53
  request: OpenAICtodService.createChatRequestWithJsonSchema({
@@ -79,11 +79,16 @@ const broker = brokerBuilder.create(async({ zod, data, setMessages }) => {
79
79
  setMessages([
80
80
  {
81
81
  role: 'user',
82
- content: [
83
- 'I have the following indexes',
84
- `${JSON.stringify(indexes)}`,
85
- `Please help me analyze which index "${question}" might belong to`,
86
- 'Rank by relevance from high to low and give scores, scores range from 0 to 1'
82
+ contents: [
83
+ {
84
+ type: 'text',
85
+ content: paragraph([
86
+ 'I have the following indexes',
87
+ `${JSON.stringify(indexes)}`,
88
+ `Please help me analyze which index "${question}" might belong to`,
89
+ 'And sort by relevance from high to low with a score ranging from 0 to 1'
90
+ ])
91
+ }
87
92
  ]
88
93
  }
89
94
  ])
package/README_ZH.md CHANGED
@@ -79,11 +79,16 @@ const broker = brokerBuilder.create(async({ zod, data, setMessages }) => {
79
79
  setMessages([
80
80
  {
81
81
  role: 'user',
82
- content: [
83
- '我有以下索引',
84
- `${JSON.stringify(indexes)}`,
85
- `請幫我解析"${question}"可能是哪個索引`,
86
- '且相關性由高到低排序並給予分數,分數由 0 ~ 1'
82
+ contents: [
83
+ {
84
+ type: 'text',
85
+ content: paragraph([
86
+ '我有以下索引',
87
+ `${JSON.stringify(indexes)}`,
88
+ `請幫我解析"${question}"可能是哪個索引`,
89
+ '且相關性由高到低排序並給予分數,分數由 0 ~ 1'
90
+ ])
91
+ }
87
92
  ]
88
93
  }
89
94
  ])
package/dist/index.js CHANGED
@@ -1,22 +1,26 @@
1
- var le=Object.defineProperty;var Ce=(o,e,t)=>e in o?le(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var D=(o,e)=>{for(var t in e)le(o,t,{get:e[t],enumerable:!0})};var i=(o,e,t)=>Ce(o,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 k=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 k({name:"retry",params:o=>({retry:o.number().default(1),printWarn:o.boolean().default(!0)}),receiveData:()=>({}),onInstall({log:o,attach:e,params:t}){e("parseFailed",async({count:n,retry:r,messages:s,changeMessages:a})=>{n<=t.retry&&(t.printWarn&&o.print(`Is Failed, Retry ${n} times.`),a(s),r())})}});var ge=new k({name:"print-log",params:o=>({detail:o.boolean().default(!1)}),receiveData:()=>({}),onInstall({params:o,log:e,attach:t}){t("talkBefore",async({lastUserMessage:n,messages:r})=>{e.print("Send:",{color:"green"}),o.detail?e.print(`
2
- `+JSON.stringify(r,null,4)):e.print(`
3
- `+n)}),t("talkAfter",async({parseText:n})=>{e.print("Receive:",{color:"cyan"}),e.print(`
4
- `+n)}),t("succeeded",async({output:n})=>{e.print("Output:",{color:"yellow"});try{e.print(`
5
- `+JSON.stringify(n,null,4))}catch{e.print(`
6
- `+n)}})}});import{Event as be,flow as _e,Schedule as Te}from"power-helper";var F={limit:3,interval:6e4},d={event:new be,schedule:null,waitTimes:[],waitQueue:[]},L={event:d.event,config:F,closeSchedule:()=>{d.schedule&&(d.schedule.close(),d.schedule=null)},plugin:new k({name:"limiter",params:()=>({}),receiveData:()=>({}),onInstall({attach:o}){d.schedule==null&&(d.schedule=new Te,d.schedule.add("calc queue",1e3,async()=>{let e=Date.now();if(d.waitTimes=d.waitTimes.filter(t=>e-t<F.interval),d.waitTimes.length!==F.limit){let t=d.waitQueue.shift();t&&(d.waitTimes.push(Date.now()),d.event.emit("run",{id:t}))}else d.waitTimes[0]&&d.event.emit("waitTimeChange",{waitTime:Math.floor(60-(e-d.waitTimes[0])/1e3)})}),d.schedule.play()),o("talkBefore",async()=>{let e=_e.createUuid();return d.waitQueue.push(e),new Promise(t=>{d.event.on("run",({id:n},{off:r})=>{n===e&&(r(),t())})})})}})};var pe=new k({name:"role",params:o=>({role:o.string()}),receiveData:()=>({}),onInstall({attach:o,params:e}){o("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=L.plugin,we=L,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=(o,e)=>[...Array.isArray(o)?o:[o],"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(`
1
+ var lt=Object.defineProperty;var xt=(o,t,e)=>t in o?lt(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;var D=(o,t)=>{for(var e in t)lt(o,e,{get:t[e],enumerable:!0})};var i=(o,t,e)=>xt(o,typeof t!="symbol"?t+"":t,e);var ut={};D(ut,{LimiterPlugin:()=>Pt,LimiterPluginGlobState:()=>vt,PrintLogPlugin:()=>St,RetryPlugin:()=>At,RolePlugin:()=>wt});import{Event as kt}from"power-helper";var x=class{constructor(t){i(this,"_event",new kt);i(this,"_params");this._params=t}use(t){return{instance:this,params:t,send:e=>{this._event.emit("receive",e)},receive:e=>{this._event.on("receive",e)},__receiveData:null}}};var ct=new x({name:"retry",params:o=>({retry:o.number().default(1),printWarn:o.boolean().default(!0)}),receiveData:()=>({}),onInstall({log:o,attach:t,params:e}){t("parseFailed",async({count:n,retry:r,messages:s,changeMessages:a})=>{n<=e.retry&&(e.printWarn&&o.print(`Is Failed, Retry ${n} times.`),a(s),r())})}});var pt=new x({name:"print-log",params:o=>({detail:o.boolean().default(!1)}),receiveData:()=>({}),onInstall({params:o,log:t,attach:e}){e("talkBefore",async({lastUserMessage:n,messages:r})=>{t.print("Send:",{color:"green"}),o.detail?t.print(`
2
+ `+JSON.stringify(r,null,4)):t.print(`
3
+ `+n)}),e("talkAfter",async({parseText:n})=>{t.print("Receive:",{color:"cyan"}),t.print(`
4
+ `+n)}),e("succeeded",async({output:n})=>{t.print("Output:",{color:"yellow"});try{t.print(`
5
+ `+JSON.stringify(n,null,4))}catch{t.print(`
6
+ `+n)}})}});import{Event as bt,flow as _t,Schedule as Tt}from"power-helper";var F={limit:3,interval:6e4},y={event:new bt,schedule:null,waitTimes:[],waitQueue:[]},L={event:y.event,config:F,closeSchedule:()=>{y.schedule&&(y.schedule.close(),y.schedule=null)},plugin:new x({name:"limiter",params:()=>({}),receiveData:()=>({}),onInstall({attach:o}){y.schedule==null&&(y.schedule=new Tt,y.schedule.add("calc queue",1e3,async()=>{let t=Date.now();if(y.waitTimes=y.waitTimes.filter(e=>t-e<F.interval),y.waitTimes.length!==F.limit){let e=y.waitQueue.shift();e&&(y.waitTimes.push(Date.now()),y.event.emit("run",{id:e}))}else y.waitTimes[0]&&y.event.emit("waitTimeChange",{waitTime:Math.floor(60-(t-y.waitTimes[0])/1e3)})}),y.schedule.play()),o("talkBefore",async()=>{let t=_t.createUuid();return y.waitQueue.push(t),new Promise(e=>{y.event.on("run",({id:n},{off:r})=>{n===t&&(r(),e())})})})}})};var gt=new x({name:"role",params:o=>({role:o.string()}),receiveData:()=>({}),onInstall({attach:o,params:t}){o("start",async({messages:e,changeMessages:n})=>{n([{role:"user",content:`\u4F60\u73FE\u5728\u662F${t.role}\u3002`},{role:"assistant",content:`\u6C92\u554F\u984C\uFF0C\u6211\u73FE\u5728\u662F${t.role}\uFF0C\u6709\u4EC0\u9EBC\u53EF\u4EE5\u5E6B\u4F60\u7684\u55CE\uFF1F`},...e])})}});var St=pt,At=ct,Pt=L.plugin,vt=L,wt=gt;var dt={};D(dt,{requireJsonResponse:()=>mt,requireJsonResponseWithHandlebars:()=>Rt,requireJsonResponseWithJsonSchema:()=>jt});import Mt from"handlebars";import{record as Ot}from"power-helper";var mt=(o,t)=>[...Array.isArray(o)?o:[o],"Please respond using the following JSON format and minify the JSON without including any explanation: ","{",Object.entries(t).map(([e,n])=>[`/* ${n.desc} */`,`"${e}": ${JSON.stringify(n.example)}`].join(`
7
7
  `)).join(`,
8
8
  `),"}"].join(`
9
- `),Re=(o,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))(o)},je=(o,e)=>[...Array.isArray(o)?o:[o],"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=o=>he({from:"tw",to:"cn"})(o),S=o=>he({from:"cn",to:"tw"})(o);import Ie from"json5";var O=class o{constructor(e){i(this,"params");this.params=e}static JsonMessage(){return new o({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(o,e){return X.object(e(X)).parse(o||{})}function y(o){let e=Ge(X.object(o()));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(a){t=void 0,r.push({name:s.name,error:a})}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,a=new AbortController,c=[this.event.on("cancel",({requestId:m})=>{m===t&&g()}),this.event.on("cancelAll",()=>{g()})],l=()=>c.forEach(m=>m.off()),g=()=>{r===!1&&(s&&n&&n(),a.abort(),r=!0,l())},u=m=>{n=()=>{m()}},p=async()=>{let m=this.translator.getValidate(),A=null,ae={},x=new Map,oe=await this.translator.compile(e,{schema:m}),ie=[],C=[];oe.prompt&&C.push({role:"user",content:oe.prompt});for(let f in this.plugins)ae[f]={send:b=>this.plugins[f].send({id:t,data:b})};return await this.hook.notify("start",{id:t,data:e,schema:m,plugins:ae,messages:C,metadata:x,setPreMessages:f=>{ie=f.map(b=>({...b,content:Array.isArray(b.content)?b.content.join(`
12
- `):b.content}))},changeMessages:f=>{C=f},changeOutputSchema:f=>{this.translator.changeOutputSchema(f),m=this.translator.getValidate()}}),C=[...ie,...C],await Q.asyncWhile(async({count:f,doBreak:b})=>{if(f>=99)return b();let G="",E="",H=!1,W=C.filter(_=>_.role==="user").slice(-1)[0]?.content||"";try{await this.hook.notify("talkBefore",{id:t,data:e,messages:C,metadata:x,lastUserMessage:W});let _=this.params.request(C,{id:t,count:f,schema:m,onCancel:u,metadata:x,abortController:a,isRetry:H});if(r)n&&n(),a.abort();else try{s=!0,G=await _,E=G}finally{s=!1}r===!1&&(await this.hook.notify("talkAfter",{id:t,data:e,response:G,messages:C,parseText:E,metadata:x,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:x})),await this.hook.notify("done",{id:t,metadata:x}),b()}catch(_){if(_ instanceof v){if(await this.hook.notify("parseFailed",{id:t,error:_.error,count:f,response:G,messages:C,metadata:x,lastUserMessage:W,parserFails:_.parserFails,retry:()=>{H=!0},changeMessages:P=>{C=P}}),H===!1)throw await this.hook.notify("done",{id:t,metadata:x}),_}else throw await this.hook.notify("done",{id:t,metadata:x}),_}}),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,a=await this.translator.compile(e,{schema:n}),c=[],l=[];return a.prompt&&l.push({role:"user",content:a.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:y(()=>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:a,metadata:c,changeMessages:l,changeOutputSchema:g})=>{let u=await t({id:r,data:a,plugins:s,zod:Je,setMessages:p=>{l(p.map(h=>({role:h.role,content:Array.isArray(h.content)?h.content.join(`
14
- `):h.content})))},metadata:c});g(()=>u)})},plugins:this.params.plugins?()=>this.params.plugins():void 0,request:this.params.request})}}};var j=o=>{let e=[],t="",n=0,r=!1,s=!1,a=!1;for(let c=0;c<o.length;c++){let l=o[c];if(s){s=!1,a&&(t+=l);continue}if(l==="\\"){s=!0,a&&(t+=l);continue}if(l==='"'){r=!r,a&&(t+=l);continue}if(r)a&&(t+=l);else if(l==="{")n===0?(a=!0,t="{"):t+=l,n++;else if(l==="}"){if(n--,t+=l,n===0&&a){let g=t.trim();if(g)try{e.push(JSON.parse(g))}catch{}t="",a=!1}}else a&&(t+=l)}return{items:e,lastChunk:a?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}`}}),a=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:a?.text||""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,reasoningText:c?.text,apiResponse:s.data}}talkStream(e){let t=!1,n=new AbortController,r=()=>{t||(t=!0,e.onEnd())};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:n.signal}).then(async s=>{if(s.ok===!1)throw new Error(`HTTP error! status: ${s.status}`);let a="",c=s.body?.pipeThrough(new TextDecoderStream).getReader();if(!c)throw new Error("Can not get reader");for(;;){let{value:l,done:g}=await c.read();if(g){r();break}let u=l.split(`
15
- `).map(p=>p.startsWith("data:")?p.slice(5).trim():a&&!p.startsWith("event:")?a+p.trim():"");for(let p of u){if(!p)continue;let h=j(p);for(let m of h.items)m.type==="response.reasoning_summary_text.delta"&&e.onThinking&&e.onThinking(m.delta||""),m.type==="response.output_text.delta"&&e.onMessage(m.delta||""),m.type==="response.completed"&&r();a=h.lastChunk}}}).catch(s=>{s.name==="AbortError"?r():e.onError(s)}),{cancel:()=>n.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 o{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 a=new o(typeof e=="string"?e:await e()),c=a.createChat();n&&(n.axios&&a.setAxios(n.axios),n.baseUrl&&a.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 o(typeof e.apiKey=="string"?e.apiKey:await e.apiKey()),a=s.createChat(),c=new AbortController;e.config&&a.setConfig(typeof e.config=="function"?await e.config():e.config),e.axios&&s.setAxios(e.axios),r(()=>c.abort());let l=y(n.output),{text:g}=await a.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 a=>{if(a.body){let c=a.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 h=g.split(`
9
+ `),Rt=(o,t,e)=>{let n=Mt.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(Ot.omit(this,["__envs"]))}),n.registerHelper("JOIN",function(r){return Array.isArray(r)?r.join():JSON.stringify(r)}),n.compile(mt(t,e))(o)},jt=(o,t)=>[...Array.isArray(o)?o:[o],"Please provide JSON data according to the following JSON Schema format:",JSON.stringify(t)].join(`
10
+ `);var yt={};D(yt,{s2t:()=>A,t2s:()=>S});import{Converter as ht}from"opencc-js";var S=o=>ht({from:"tw",to:"cn"})(o),A=o=>ht({from:"cn",to:"tw"})(o);import It from"json5";var O=class o{constructor(t){i(this,"params");this.params=t}static JsonMessage(){return new o({name:"JsonMessage",handler:async t=>{try{return JSON.parse(t)}catch{let n=/{(?:[^{}]|(?:{[^{}]*}))*}/,r=t.match(n)?.[0]||"";return It.parse(r)}}})}get name(){return this.params.name}async read(t){return await this.params.handler(t)}};import{Event as Et,flow as Q,Hook as Bt,Log as Vt}from"power-helper";import{z as X,toJSONSchema as Gt}from"zod";function Z(o,t){return X.object(t(X)).parse(o||{})}function f(o){let t=Gt(X.object(o()));return delete t.$schema,t}var P=class{constructor(t,e){i(this,"isParserError",!0);i(this,"parserFails",[]);i(this,"error");this.error=t,this.parserFails=e}};var R=class{constructor(t){i(this,"params");this.params=t}get __schemeType(){return null}get __outputType(){return null}async compile(t,e){let n=this.params.input?Z(t,this.params.input):t,r=this.params.question?await this.params.question(n,e):"";return{scheme:n,prompt:Array.isArray(r)?r.join(`
11
+ `):r}}getValidate(){return{input:this.params.input,output:this.params.output}}changeOutputSchema(t){this.params.output=t}async parse(t){let e,n="",r=[];for(let s of this.params.parsers)try{e=await s.read(t),n=s.name}catch(a){e=void 0,r.push({name:s.name,error:a})}try{return{output:Z(e,this.params.output),parserName:n,parserFails:r}}catch(s){throw new P(s,r)}}};import{z as ft}from"zod";var j=class{constructor(t){i(this,"__hookType");i(this,"log");i(this,"hook",new Bt);i(this,"params");i(this,"plugins",{});i(this,"installed",!1);i(this,"translator");i(this,"event",new Et);this.log=new Vt(t.name??"no name"),this.params=t,this.translator=new R({...t,parsers:[O.JsonMessage()]})}_install(){if(this.installed===!1){this.installed=!0;let t={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 e in this.plugins)this.plugins[e].instance._params.onInstall({...t,params:this.plugins[e].params,receive:this.plugins[e].receive})}this.params.install?.(t)}}async cancel(t){t?this.event.emit("cancel",{requestId:t}):this.event.emit("cancelAll",{})}requestWithId(t){this._install();let e=Q.createUuid(),n=null,r=!1,s=!1,a=new AbortController,c=[this.event.on("cancel",({requestId:d})=>{d===e&&p()}),this.event.on("cancelAll",()=>{p()})],l=()=>c.forEach(d=>d.off()),p=()=>{r===!1&&(s&&n&&n(),a.abort(),r=!0,l())},m=d=>{n=()=>{d()}},u=async()=>{let d=this.translator.getValidate(),h=null,at={},b=new Map,ot=await this.translator.compile(t,{schema:d}),it=[],k=[];ot.prompt&&k.push({role:"user",content:ot.prompt});for(let C in this.plugins)at[C]={send:_=>this.plugins[C].send({id:e,data:_})};return await this.hook.notify("start",{id:e,data:t,schema:d,plugins:at,messages:k,metadata:b,setPreMessages:C=>{it=C.map(_=>({..._,content:Array.isArray(_.content)?_.content.join(`
12
+ `):_.content}))},changeMessages:C=>{k=C},changeOutputSchema:C=>{this.translator.changeOutputSchema(C),d=this.translator.getValidate()}}),k=[...it,...k],await Q.asyncWhile(async({count:C,doBreak:_})=>{if(C>=99)return _();let E="",B="",z=!1,H=k.filter(T=>T.role==="user").slice(-1)[0]?.content||"";try{await this.hook.notify("talkBefore",{id:e,data:t,messages:k,metadata:b,lastUserMessage:H});let T=this.params.request(k,{id:e,count:C,schema:d,onCancel:m,metadata:b,abortController:a,isRetry:z});if(r)n&&n(),a.abort();else try{s=!0,E=await T,B=E}finally{s=!1}r===!1&&(await this.hook.notify("talkAfter",{id:e,data:t,response:E,messages:k,parseText:B,metadata:b,lastUserMessage:H,parseFail:M=>{throw new P(M,[])},changeParseText:M=>{B=M}}),h=(await this.translator.parse(B)).output,await this.hook.notify("succeeded",{id:e,output:h,metadata:b})),await this.hook.notify("done",{id:e,metadata:b}),_()}catch(T){if(T instanceof P){if(await this.hook.notify("parseFailed",{id:e,error:T.error,count:C,response:E,messages:k,metadata:b,lastUserMessage:H,parserFails:T.parserFails,retry:()=>{z=!0},changeMessages:M=>{k=M}}),z===!1)throw await this.hook.notify("done",{id:e,metadata:b}),T}else throw await this.hook.notify("done",{id:e,metadata:b}),T}}),h};return{id:e,request:(async()=>{try{return await u()}finally{l()}})()}}async request(t){let{request:e}=this.requestWithId(t);return await e}async getPreRequestInfo(t){this._install();let e=Q.createUuid(),n=this.translator.getValidate(),r={},s=new Map,a=await this.translator.compile(t,{schema:n}),c=[],l=[];return a.prompt&&l.push({role:"user",content:a.prompt}),await this.hook.notify("start",{id:e,data:t,schema:n,plugins:r,messages:l,metadata:s,setPreMessages:m=>{c=m.map(u=>({...u,content:Array.isArray(u.content)?u.content.join(`
13
+ `):u.content}))},changeMessages:m=>{l=m},changeOutputSchema:m=>{this.translator.changeOutputSchema(m),n=this.translator.getValidate()}}),{outputSchema:n.output(ft),outputJsonSchema:f(()=>n.output(ft)),requestMessages:[...c,...l]}}};import*as Jt from"zod";var Y=class{constructor(t){i(this,"params");this.params=t}createBrokerBuilder(t){return{create:e=>new j({output:()=>({}),install:n=>{t?.install?.(n),n.attach("start",async({id:r,plugins:s,data:a,metadata:c,changeMessages:l,changeOutputSchema:p})=>{let m=await e({id:r,data:a,plugins:s,zod:Jt,setMessages:u=>{l(u.map(g=>({role:g.role,content:Array.isArray(g.content)?g.content.join(`
14
+ `):g.content,contents:g.contents})))},metadata:c});p(()=>m)})},plugins:this.params.plugins?()=>this.params.plugins():void 0,request:this.params.request})}}};var I=o=>{let t=[],e="",n=0,r=!1,s=!1,a=!1;for(let c=0;c<o.length;c++){let l=o[c];if(s){s=!1,a&&(e+=l);continue}if(l==="\\"){s=!0,a&&(e+=l);continue}if(l==='"'){r=!r,a&&(e+=l);continue}if(r)a&&(e+=l);else if(l==="{")n===0?(a=!0,e="{"):e+=l,n++;else if(l==="}"){if(n--,e+=l,n===0&&a){let p=e.trim();if(p)try{t.push(JSON.parse(p))}catch{}e="",a=!1}}else a&&(e+=l)}return{items:t,lastChunk:a?e.trim():""}};var qt=o=>typeof o=="string"?o:o.join(`
15
+ `);import Kt from"axios";var V=class{constructor(t){i(this,"openai");i(this,"config",{model:"gpt-5",maxTokens:void 0,temperature:.7});this.openai=t}setConfig(t){Object.assign(this.config,t)}async view(t){let e=await this.openai._axios.post(`${this.openai._baseUrl}/v1/chat/completions`,{model:this.config.model,n:1,messages:t,max_tokens:this.config.maxTokens,temperature:this.config.temperature},{headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}}),r=(e.data.choices||[])[0]?.message||{role:"assistant",content:""};return{id:e?.data.id,text:r.content,apiResponse:e.data}}};import{json as Nt}from"power-helper";var v=class o{constructor(t){i(this,"openai");i(this,"config",{model:"gpt-5",temperature:1,maxTokens:void 0});this.openai=t}static toApiMessages(t){return t.map(e=>{let n=[];if(e.content&&n.push({type:"input_text",text:e.content}),e.contents){for(let r of e.contents)if(r.type==="text")n.push({type:"input_text",text:r.content});else if(r.type==="image"){let s=r.content||"";n.push({type:"input_image",image_url:s})}}return{role:e.role,name:e.name,content:n}})}setConfig(t){Object.assign(this.config,t)}async moderations(t){let e=await this.openai._axios.post(`${this.openai._baseUrl}/v1/moderations`,{input:t},{headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}});return{isSafe:e.data.results?.[0]?.flagged===!1,result:e.data}}async talk(t=[],e){let n=Nt.jpjs(t),r;e?.jsonSchema&&(r={type:"json_schema",schema:e.jsonSchema.schema});let s=await this.openai._axios.post(`${this.openai._baseUrl}/v1/responses`,{model:this.config.model,input:o.toApiMessages(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:e?.abortController?.signal,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.openai._apiKey}`}}),a=s.data.output.find(p=>p.type==="message")?.content?.find(p=>p.type==="output_text"),c=s.data.output.find(p=>p.type==="reasoning")?.summary?.find(p=>p.type==="summary_text"),l={role:"assistant",content:a?.text||""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,reasoningText:c?.text,apiResponse:s.data}}talkStream(t){let e=!1,n=!1,r=new AbortController,s=()=>{e||(e=!0,t.onEnd({isManualCancelled:n}))};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:t.messages,max_output_tokens:this.config.maxTokens,reasoning:this.config.reasoning}),signal:r.signal}).then(async a=>{if(a.ok===!1)throw new Error(`HTTP error! status: ${a.status}`);let c="",l=a.body?.pipeThrough(new TextDecoderStream).getReader();if(!l)throw new Error("Can not get reader");for(;;){let{value:p,done:m}=await l.read();if(m){s();break}let u=p.split(`
16
+ `).map(g=>g.startsWith("data:")?g.slice(5).trim():c&&!g.startsWith("event:")?c+g.trim():"");for(let g of u){if(!g)continue;let d=I(g);for(let h of d.items)h.type==="response.reasoning_summary_text.delta"&&t.onThinking&&t.onThinking(h.delta||""),h.type==="response.output_text.delta"&&t.onMessage(h.delta||""),h.type==="response.completed"&&s();c=d.lastChunk}}}).catch(a=>{a.name==="AbortError"?s():t.onError(a)}),{isManualCancelled:()=>n,cancel:()=>{n=!0,r.abort()}}}async keepTalk(t,e=[]){let n=await this.talk([...e,{role:"user",content:Array.isArray(t)?t.join(`
17
+ `):t}]);return{result:n,nextTalk:r=>this.keepTalk(r,n.newMessages)}}};var J=class{constructor(t){i(this,"openai");i(this,"config",{model:"dall-e-2",size:"1024x1024"});this.openai=t}setConfig(t){Object.assign(this.config,t)}async create(t){return(await this.openai._axios.post(`${this.openai._baseUrl}/v1/images/generations`,{prompt:t,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 tt=class o{constructor(t=""){i(this,"_axios",Kt.create());i(this,"_apiKey","");i(this,"_baseUrl","https://api.openai.com");this._apiKey=t}static createChatRequest(t,e={},n){return async(r,{abortController:s})=>{let a=new o(typeof t=="string"?t:await t()),c=a.createChat();n&&(n.axios&&a.setAxios(n.axios),n.baseUrl&&a.setBaseUrl(n.baseUrl)),c.setConfig(typeof e=="function"?await e():e);let{text:l}=await c.talk(r,{abortController:s});return l}}static createChatRequestWithJsonSchema(t){return async(e,{schema:n,onCancel:r})=>{let s=new o(typeof t.apiKey=="string"?t.apiKey:await t.apiKey()),a=s.createChat(),c=new AbortController;t.config&&a.setConfig(typeof t.config=="function"?await t.config():t.config),t.axios&&s.setAxios(t.axios),r(()=>c.abort());let l=f(n.output),{text:p}=await a.talk(e,{abortController:c,jsonSchema:{name:"data",strict:!0,schema:l}});return p}}setAxios(t){this._axios=t}setBaseUrl(t){this._baseUrl=t}setConfiguration(t){this._apiKey=t}createChat(){return new v(this)}createVision(){return new V(this)}createImagesGeneration(){return new J(this)}};import Wt from"axios";import{flow as Ut,Once as $t}from"power-helper";import{Template as Ct}from"@huggingface/jinja";var w=class{constructor(t){i(this,"isManualCancelled",!1);i(this,"core");i(this,"streamAbortControllers",[]);this.core=t}createAbortController(){let t=new AbortController,e=Ut.createUuid();return this.streamAbortControllers.push({id:e,controller:t}),{signal:t.signal,controllerId:e}}removeAbortController(t){this.streamAbortControllers=this.streamAbortControllers.filter(e=>e.id!==t)}async stream(t){let{signal:e,controllerId:n}=this.createAbortController(),r=()=>{this.removeAbortController(n),t.onEnd()},s=async a=>{if(a.body){let c=a.body.getReader(),l=!1,p="";for(;!l;){let{value:m,done:u}=await c.read();if(m){p+=new TextDecoder("utf-8").decode(m);let g=p.split(`
17
18
 
18
- `);g=h.pop()||"",h.forEach(m=>{if(m.includes("[DONE]")&&(l=!0),m.startsWith("data:"))try{let A=JSON.parse(m.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(a=>{a instanceof Error&&a.message.includes("The user aborted a request")?r():e.onError(a)})}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(),a=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(a):a}}),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 o{constructor(){i(this,"_axios",Ue.create())}static createChatRequestWithJsonSchema(e){return async(t,{schema:n,onCancel:r})=>{let s=new o,a=s.createCompletion(),c=typeof e.config=="function"?await e.config():e.config;a.setConfig(c);let l=y(n.output);e.axios&&s.setAxios(e.axios),a.config.autoConvertTraditionalChinese&&(l=JSON.parse(T(JSON.stringify(l))));let{run:g,cancel:u}=a.talk({options:e.talkOptions,messages:t,response_format:{type:"json_object",schema:l}});r(u);let{message:p}=await g();return a.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 o{constructor(e){i(this,"google");i(this,"config",{model:"gemini-3-flash-preview",maxTokens:1024,temperature:.7,enableGoogleSearch:!1,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?{includeThoughts:!0,thinkingLevel:e.level}:void 0}async talk(e){let t=ze.jpjs(e.messages),r=(await this.google.googleGenAI.models.generateContent({model:this.config.model,contents:t,config:{temperature:this.config.temperature,maxOutputTokens:this.config.maxTokens,systemInstruction:e.system||void 0,thinkingConfig:o.getThinkingConfig(this.config.thinkingConfig),tools:this.config.enableGoogleSearch?[{googleSearch:{}}]:[]}})).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,systemInstruction:e.system||void 0,thinkingConfig:o.getThinkingConfig(this.config.thinkingConfig),tools:this.config.enableGoogleSearch?[{googleSearch:{}}]:[]}}).then(async r=>{try{for await(let s of r){let a=s.candidates?.[0].content?.parts||[];for(let c of a)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 o{constructor(e){i(this,"googleGenAI");this.googleGenAI=e}static chatGPTMessageToGoogleChatMessage(e){let t=s=>typeof s=="string"?[{text:s}]:Array.isArray(s)?s.map(({type:a,image_url:c,text:l})=>{if(a==="image_url"){let g=c?.url||"",u=g.includes("data:image/png")?"image/png":"image/jpeg";return{inlineData:{data:g.split("base64,")[1]||"",mimeType:u}}}else return{text:l||""}}):[],n="",r=e.map(s=>s.role==="system"?(n=typeof s.content=="string"?s.content:"",{role:"user",parts:[]}):s.role==="user"?{role:"user",parts:t(s.content)}:{role:"model",parts:t(s.content)});return{system:n,messages:r.filter(s=>s.parts.length>0)}}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:a})=>{let c=typeof e.config=="function"?await e.config():e.config,l=o.chatGPTMessageToGoogleChatMessage(r);return(await t.models.generateContent({model:e.model,contents:l.messages,config:{abortSignal:a.signal,maxOutputTokens:c.maxTokens,temperature:c.temperature,systemInstruction:l.system||void 0,responseMimeType:"application/json",responseJsonSchema:y(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?{budget_tokens:t<=1024?1024:t>32e3?32e3:t,type:"enabled"}:void 0}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),a=await r.messages.create(s,{signal:n?.abortController?.signal});return this.dataGenerator.parseChatAndStructureResult(a)}async chatAndStructureWithDetails(e,t,n){let r=this.anthropic.anthropicSdk,s=this.dataGenerator.createChatAndStructureBody(e,t),a=await r.messages.create(s,{signal:n?.abortController?.signal});return{data:this.dataGenerator.parseChatAndStructureResult(a),thinking:this.dataGenerator.parseTalkThingsResult(a)}}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:a,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))}a()}catch(u){c(u)}})(),{cancel:()=>{let u=setInterval(()=>{t&&t.controller&&(t.controller.abort(),clearInterval(u))},10)}}}};var re=class o{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 o(e.anthropicSdk).createChat();return n.setConfig(e.config||{}),async(r,{schema:s,abortController:a})=>{let c=y(s.output);return await n.chatAndStructure(r,c,{abortController:a})}}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}`}}),a=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:a?.text||""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,reasoningText:c?.text,apiResponse:s.data}}talkStream(e){let t=!1,n=new AbortController,r=()=>{t||(t=!0,e.onEnd())};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:n.signal}).then(async s=>{if(s.ok===!1)throw new Error(`HTTP error! status: ${s.status}`);let a="",c=s.body?.pipeThrough(new TextDecoderStream).getReader();if(!c)throw new Error("Can not get reader");for(;;){let{value:l,done:g}=await c.read();if(g){r();break}let u=l.split(`
20
- `).map(p=>p.startsWith("data:")?p.slice(5).trim():a&&!p.startsWith("event:")?a+p.trim():"");for(let p of u){if(!p)continue;let h=j(p);for(let m of h.items)m.type==="response.reasoning_summary_text.delta"&&e.onThinking&&e.onThinking(m.delta||""),m.type==="response.output_text.delta"&&e.onMessage(m.delta||""),m.type==="response.completed"&&r();a=h.lastChunk}}}).catch(s=>{s.name==="AbortError"?r():e.onError(s)}),{cancel:()=>n.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 o{constructor(e=""){i(this,"_axios",We.create());i(this,"_apiKey","");this._apiKey=e}static createChatRequest(e,t={},n){return async(r,{onCancel:s})=>{let a=new o(typeof e=="string"?e:await e()),c=a.createChat(),l=new AbortController;n&&n.axios&&a.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 o(typeof e.apiKey=="string"?e.apiKey:await e.apiKey()),a=s.createChat();e.config&&a.setConfig(typeof e.config=="function"?await e.config():e.config),e.axios&&s.setAxios(e.axios);let c=y(n.output),{text:l}=await a.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,k as ChatBrokerPlugin,Y as CtoD,k 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,y as validateToJsonSchema};
19
+ `);p=g.pop()||"",g.forEach(d=>{if(d.includes("[DONE]")&&(l=!0),d.startsWith("data:"))try{let h=JSON.parse(d.replace("data: ",""));t.onMessage(h)}catch(h){t.onWarn(h)}})}u&&(l=!0)}r()}else t.onError(new Error("Body not found."))};fetch(`${this.core.config.baseUrl}/${t.path}`,{method:"POST",body:JSON.stringify(typeof t.data=="function"?await t.data():t.data),signal:e,headers:{"Content-Type":"application/json",...this.core.config.headers}}).then(s).catch(a=>{a instanceof Error&&a.message.includes("The user aborted a request")?r():t.onError(a)})}async fetch(t){let{signal:e,controllerId:n}=this.createAbortController();try{return{data:(await this.core.core._axios.post(`${this.core.config.baseUrl}/${t.path}`,t.data,{signal:e,headers:{"Content-Type":"application/json",...this.core.config.headers}})).data}}finally{this.removeAbortController(n)}}cancel(){this.isManualCancelled=!0,this.streamAbortControllers.forEach(t=>t.controller.abort()),this.streamAbortControllers=[]}export(){return{cancel:this.cancel.bind(this)}}},q=class{constructor(t){i(this,"getProp",new $t({handler:async()=>{let t=`${this.config.baseUrl}/props`,{data:e}=await this.core._axios.get(t,{});return e}}));i(this,"core");i(this,"config",{baseUrl:"",headers:{},autoConvertTraditionalChinese:!0});this.core=t}setConfig(t){this.config={...this.config,...t}}completion(t){let e=t.messages.at(-1)||"",n=new w(this);return{...n.export(),run:async()=>{let r=await this.getProp.run(),a=new Ct(r.chat_template).render({bos_token:r.bos_token,messages:t.messages}).slice(0,r.eos_token.length*-1-1),c=await n.fetch({path:"completion",data:{...t.options||{},prompt:this.config.autoConvertTraditionalChinese?S(a):a}}),l=this.config.autoConvertTraditionalChinese?A(c.data.content):c.data.content;return{message:l,fullMessage:`${e}${l}`}}}}completionStream(t){let e=new w(this);return e.stream({path:"completion",onEnd:()=>{t.onEnd&&t.onEnd({isManualCancelled:e.isManualCancelled})},onMessage:n=>{let r=this.config.autoConvertTraditionalChinese?A(n.content):n.content;t.onMessage(r)},onWarn:t.onWarn||(()=>null),onError:t.onError||(()=>null),data:async()=>{let n=await this.getProp.run(),s=new Ct(n.chat_template).render({bos_token:n.bos_token,messages:t.messages}).slice(0,n.eos_token.length*-1-1);return{...t.options||{},prompt:this.config.autoConvertTraditionalChinese?S(s):s,stream:!0}}}),e.export()}talk(t){let e=new w(this);return{...e.export(),run:async()=>{let r=(await e.fetch({path:"v1/chat/completions",data:{...t.options||{},response_format:t.response_format,messages:t.messages.map(s=>{let a={role:s.role,content:""};return s.content&&(a.content=this.config.autoConvertTraditionalChinese?S(s.content):s.content),s.contents&&(a.content+=s.contents.map(c=>c.type==="text"?c.content:"").join(`
20
+ `)),a})}})).data.choices[0].message.content||"";return{message:this.config.autoConvertTraditionalChinese?A(r):r}}}}talkStream(t){let e=new w(this);return e.stream({path:"v1/chat/completions",onEnd:()=>{t.onEnd&&t.onEnd({isManualCancelled:e.isManualCancelled})},onMessage:n=>{let r=n.choices[0].delta.content;if(r){let s=this.config.autoConvertTraditionalChinese?A(r):r;t.onMessage(s)}},onWarn:t.onWarn||(()=>null),onError:t.onError||(()=>null),data:{...t.options||{},stream:!0,messages:t.messages.map(n=>({role:n.role,content:this.config.autoConvertTraditionalChinese?S(n.content):n.content}))}}),e.export()}};var et=class o{constructor(){i(this,"_axios",Wt.create())}static createChatRequestWithJsonSchema(t){return async(e,{schema:n,onCancel:r})=>{let s=new o,a=s.createCompletion(),c=typeof t.config=="function"?await t.config():t.config;a.setConfig(c);let l=f(n.output);t.axios&&s.setAxios(t.axios),a.config.autoConvertTraditionalChinese&&(l=JSON.parse(S(JSON.stringify(l))));let{run:p,cancel:m}=a.talk({options:t.talkOptions,messages:e,response_format:{type:"json_object",schema:l}});r(m);let{message:u}=await p();return a.config.autoConvertTraditionalChinese?A(u):u}}setAxios(t){this._axios=t}createCompletion(){return new q(this)}};import{json as zt}from"power-helper";var G=class o{constructor(t){i(this,"google");i(this,"config",{model:"gemini-3-flash-preview",maxTokens:1024,temperature:.7,enableGoogleSearch:!1,thinkingConfig:{enabled:!1,level:"THINKING_LEVEL_UNSPECIFIED"}});this.google=t}setConfig(t){Object.assign(this.config,t)}static getThinkingConfig(t){if(t)return t.enabled?{includeThoughts:!0,thinkingLevel:t.level}:void 0}async talk(t){let e=zt.jpjs(t.messages),r=(await this.google.googleGenAI.models.generateContent({model:this.config.model,contents:e,config:{temperature:this.config.temperature,maxOutputTokens:this.config.maxTokens,systemInstruction:t.system||void 0,thinkingConfig:o.getThinkingConfig(this.config.thinkingConfig),tools:this.config.enableGoogleSearch?[{googleSearch:{}}]:[]}})).text;return{text:r,newMessages:[...e,{role:"model",parts:[{text:r}]}]}}talkStream(t){let e={isManualCancelled:!1,controller:new AbortController};return this.google.googleGenAI.models.generateContentStream({model:this.config.model,contents:t.messages,config:{abortSignal:e.controller.signal,temperature:this.config.temperature,maxOutputTokens:this.config.maxTokens,systemInstruction:t.system||void 0,thinkingConfig:o.getThinkingConfig(this.config.thinkingConfig),tools:this.config.enableGoogleSearch?[{googleSearch:{}}]:[]}}).then(async r=>{try{for await(let s of r){let a=s.candidates?.[0].content?.parts||[];for(let c of a)c.text&&(c.thought?t.onThinking?.(c.text):t.onMessage(c.text))}t.onEnd({isManualCancelled:e.isManualCancelled})}catch(s){if(e.controller.signal.aborted)t.onEnd({isManualCancelled:e.isManualCancelled});else throw s}}).catch(r=>{t.onError(r)}),{isManualCancelled:()=>e.isManualCancelled,cancel:()=>{e.isManualCancelled=!0,e.controller.abort()}}}};var N=class{constructor(t){i(this,"google");i(this,"config",{model:"imagen-4.0-generate-001",size:"1K",aspectRatio:"1:1"});this.google=t}setConfig(t){Object.assign(this.config,t)}async create(t){return{images:(await this.google.googleGenAI.models.generateImages({model:this.config.model,prompt:t,config:{numberOfImages:1,aspectRatio:this.config.aspectRatio,imageSize:this.config.size}})).generatedImages?.map(n=>({url:n.image?.imageBytes||"",mimeType:n.image?.mimeType||""}))||[]}}};var nt=class o{constructor(t){i(this,"googleGenAI");this.googleGenAI=t}static chatGPTMessageToGoogleChatMessage(t){let e=s=>typeof s=="string"?[{text:s}]:Array.isArray(s)?s.map(({type:a,image_url:c,text:l})=>{if(a==="image_url"||a==="input_image"){let p=(typeof c=="string"?c:c?.url)||"";if(p.startsWith("http"))return{fileData:{fileUri:p}};{let m=p.includes("data:image/png")?"image/png":"image/jpeg";return{inlineData:{data:p.split("base64,")[1]||"",mimeType:m}}}}else return{text:l||""}}):[],n="",r=t.map(s=>s.role==="system"?(typeof s.content=="string"&&(n=s.content),Array.isArray(s.content)&&(n=s.content.map(a=>(a.type==="text"||a.type==="input_text")&&a.text||"").join(`
21
+ `)),{role:"user",parts:[]}):s.role==="user"?{role:"user",parts:e(s.content)}:{role:"model",parts:e(s.content)});return{system:n,messages:r.filter(s=>s.parts.length>0)}}static createChatRequestWithJsonSchema(t){let e=t.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:a})=>{let c=typeof t.config=="function"?await t.config():t.config,l=o.chatGPTMessageToGoogleChatMessage(v.toApiMessages(r));return(await e.models.generateContent({model:t.model,contents:l.messages,config:{abortSignal:a.signal,maxOutputTokens:c.maxTokens,temperature:c.temperature,systemInstruction:l.system||void 0,responseMimeType:"application/json",responseJsonSchema:f(s.output),thinkingConfig:G.getThinkingConfig(c.thinkingConfig)}})).text||""}}createChat(){return new G(this)}createImagesGeneration(){return new N(this)}};import{flow as Ht}from"power-helper";var K=class{constructor(t){i(this,"config");this.config=t}translateMessages(t){return{system:Ht.run(()=>{let e=t.find(r=>r.role==="system"),n="";if(e&&(e.content&&(n+=e.content),e.contents))for(let r of e.contents)r.type==="text"&&(n+=`
22
+ ${r.content}`);return n}),messages:t.filter(e=>e.role!=="system").map(e=>{let n=[];if(e.content&&n.push({type:"text",text:e.content}),e.contents)for(let r of e.contents)r.type==="text"&&n.push({type:"text",text:r.content}),r.type==="image"&&(r.content.startsWith("http")?n.push({type:"image",source:{type:"url",url:r.content}}):n.push({type:"image",source:{type:"base64",media_type:"image/png",data:r.content.split(",")[1]}}));return{role:e.role,content:n}})}}getThinkingParams(){let t=this.config(),e=Math.floor(t.maxTokens*.25);return t.thinking?{budget_tokens:e<=1024?1024:e>32e3?32e3:e,type:"enabled"}:void 0}createChatAndStructureBody(t,e){let n=this.config(),r=this.translateMessages(t);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:e}],tool_choice:{type:"tool",name:"data"}}}parseChatAndStructureResult(t){let n=("content"in t?t.content.find(r=>r.type==="tool_use"):null)?.input||null;return n==null?"null":JSON.stringify(n)}createTalkBody(t){let e=this.config(),n=this.translateMessages(t);return{model:e.model,max_tokens:e.maxTokens,temperature:e.thinking?1:e.temperature,system:n.system,messages:n.messages,thinking:this.getThinkingParams()}}parseTalkResult(t){let e=[];if("content"in t)for(let n of t.content)n.type==="text"&&e.push(n.text);return e.join(`
23
+ `)}parseTalkThingsResult(t){let e=[];if("content"in t)for(let n of t.content)n.type==="thinking"&&e.push(n.thinking);return e}createTalkStreamBody(t){let e=this.config(),n=this.translateMessages(t);return{model:e.model,max_tokens:e.maxTokens,temperature:e.thinking?1:e.temperature,system:n.system,stream:!0,thinking:this.getThinkingParams(),messages:n.messages}}},U=class{constructor(t){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=t}setConfig(t){Object.assign(this.config,t)}async chatAndStructure(t,e,n){let r=this.anthropic.anthropicSdk,s=this.dataGenerator.createChatAndStructureBody(t,e),a=await r.messages.create(s,{signal:n?.abortController?.signal});return this.dataGenerator.parseChatAndStructureResult(a)}async chatAndStructureWithDetails(t,e,n){let r=this.anthropic.anthropicSdk,s=this.dataGenerator.createChatAndStructureBody(t,e),a=await r.messages.create(s,{signal:n?.abortController?.signal});return{data:this.dataGenerator.parseChatAndStructureResult(a),thinking:this.dataGenerator.parseTalkThingsResult(a)}}async talk(t=[]){let e=this.anthropic.anthropicSdk,n=this.dataGenerator.createTalkBody(t),r=await e.messages.create(n);return this.dataGenerator.parseTalkResult(r)}async talkAndDetails(t=[]){let e=this.anthropic.anthropicSdk,n=this.dataGenerator.createTalkBody(t),r=await e.messages.create(n);return{text:this.dataGenerator.parseTalkResult(r),thinking:this.dataGenerator.parseTalkThingsResult(r)}}talkStream(t){let e=!1,n=null,{onThinking:r,onMessage:s,onEnd:a,onError:c}=t,l=this.anthropic.anthropicSdk,p=this.dataGenerator.createTalkStreamBody(t.messages);return(async()=>{try{let u=await l.messages.create(p);if(u!=null&&"controller"in u){n=u;for await(let g of n)g.type==="content_block_delta"&&(g.delta.type==="thinking_delta"&&r&&r(g.delta.thinking),g.delta.type==="text_delta"&&s(g.delta.text))}a({isManualCancelled:e})}catch(u){c(u)}})(),{isManualCancelled:()=>e,cancel:()=>{e=!0;let u=setInterval(()=>{n&&n.controller&&(n.controller.abort(),clearInterval(u))},10)}}}};var rt=class o{constructor(t){i(this,"anthropicSdk");this.anthropicSdk=t}static chatGPTMessageToAnthropicChatMessage(t){return t.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 s.startsWith("http")?{type:"image",source:{type:s,url:s}}:{type:"image",source:{type:"base64",media_type:s.slice(5).split(";")[0],data:s.split(",")[1]}}}return{type:"text",text:r.text}})}))}static createChatRequestWithJsonSchema(t){let n=new o(t.anthropicSdk).createChat();return n.setConfig(t.config||{}),async(r,{schema:s,abortController:a})=>{let c=f(s.output);return await n.chatAndStructure(r,c,{abortController:a})}}createChat(){return new U(this)}};import Ft from"axios";import{json as Dt}from"power-helper";var $=class o{constructor(t){i(this,"xAi");i(this,"config",{model:"grok-4-1-fast-non-reasoning",temperature:1,maxTokens:void 0});this.xAi=t}static toApiMessages(t){return t.map(e=>{let n=[];if(e.content&&n.push({type:"input_text",text:e.content}),e.contents){for(let r of e.contents)if(r.type==="text")n.push({type:"input_text",text:r.content});else if(r.type==="image"){let s=r.content||"";n.push({type:"input_image",image_url:s})}}return{role:e.role,name:e.name,content:n}})}setConfig(t){Object.assign(this.config,t)}async talk(t=[],e){let n=Dt.jpjs(t),r;e?.jsonSchema&&(r={type:"json_schema",schema:e.jsonSchema.schema});let s=await this.xAi._axios.post("https://api.x.ai/v1/responses",{model:this.config.model,input:o.toApiMessages(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:e?.abortController?.signal,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`}}),a=s.data.output.find(p=>p.type==="message")?.content?.find(p=>p.type==="output_text"),c=s.data.output.find(p=>p.type==="reasoning")?.summary?.find(p=>p.type==="summary_text"),l={role:"assistant",content:a?.text||""};return n.push(l),{id:s?.data.id,text:l.content,newMessages:n,reasoningText:c?.text,apiResponse:s.data}}talkStream(t){let e=!1,n=!1,r=new AbortController,s=()=>{e||(e=!0,t.onEnd({isManualCancelled:n}))};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:t.messages,max_output_tokens:this.config.maxTokens,reasoning:this.config.reasoning}),signal:r.signal}).then(async a=>{if(a.ok===!1)throw new Error(`HTTP error! status: ${a.status}`);let c="",l=a.body?.pipeThrough(new TextDecoderStream).getReader();if(!l)throw new Error("Can not get reader");for(;;){let{value:p,done:m}=await l.read();if(m){s();break}let u=p.split(`
24
+ `).map(g=>g.startsWith("data:")?g.slice(5).trim():c&&!g.startsWith("event:")?c+g.trim():"");for(let g of u){if(!g)continue;let d=I(g);for(let h of d.items)h.type==="response.reasoning_summary_text.delta"&&t.onThinking&&t.onThinking(h.delta||""),h.type==="response.output_text.delta"&&t.onMessage(h.delta||""),h.type==="response.completed"&&s();c=d.lastChunk}}}).catch(a=>{a.name==="AbortError"?s():t.onError(a)}),{isManualCancelled:()=>n,cancel:()=>{n=!0,r.abort()}}}async keepTalk(t,e=[]){let n=await this.talk([...e,{role:"user",content:Array.isArray(t)?t.join(`
25
+ `):t}]);return{result:n,nextTalk:r=>this.keepTalk(r,n.newMessages)}}};var W=class{constructor(t){i(this,"xAi");i(this,"config",{model:"grok-2-image"});this.xAi=t}setConfig(t){Object.assign(this.config,t)}async create(t){return(await this.xAi._axios.post("https://api.x.ai/v1/images/generations",{prompt:t,n:1,model:this.config.model,response_format:"b64_json"},{timeout:3e5,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.xAi._apiKey}`}})).data}};var st=class o{constructor(t=""){i(this,"_axios",Ft.create());i(this,"_apiKey","");this._apiKey=t}static createChatRequest(t,e={},n){return async(r,{onCancel:s})=>{let a=new o(typeof t=="string"?t:await t()),c=a.createChat(),l=new AbortController;n&&n.axios&&a.setAxios(n.axios),c.setConfig(typeof e=="function"?await e():e),s(()=>l.abort());let{text:p}=await c.talk(r,{abortController:l});return p}}static createChatRequestWithJsonSchema(t){return async(e,{schema:n,abortController:r})=>{let s=new o(typeof t.apiKey=="string"?t.apiKey:await t.apiKey()),a=s.createChat();t.config&&a.setConfig(typeof t.config=="function"?await t.config():t.config),t.axios&&s.setAxios(t.axios);let c=f(n.output),{text:l}=await a.talk(e,{abortController:r,jsonSchema:{name:"data",strict:!0,schema:c}});return l}}setAxios(t){this._axios=t}setConfiguration(t){this._apiKey=t}createChat(){return new $(this)}createImagesGeneration(){return new W(this)}};export{K as AnthropicChatDataGenerator,rt as AnthropicCtodService,j as ChatBroker,x as ChatBrokerPlugin,Y as CtoD,x as CtoDPlugin,nt as GoogleCtodService,et as LlamaCppCtodService,tt as OpenAICtodService,O as TextParser,R as Translator,st as XCtodService,yt as chineseConverter,qt as paragraph,I as parseJSONStream,ut as plugins,dt as templates,f as validateToJsonSchema};
22
26
  //# sourceMappingURL=index.js.map