@bkm016/basalt 0.1.6 → 0.1.8
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 +3 -3
- package/{chunk-n981vx1t.js → chunk-0d51ggzj.js} +6 -6
- package/chunk-12trygzx.js +25 -0
- package/{chunk-s6dejhfj.js → chunk-26cz8et8.js} +1 -1
- package/{chunk-zxkq9m8e.js → chunk-2ek3wq4b.js} +2 -2
- package/chunk-2gcp3xdc.js +2 -0
- package/{chunk-x4874m8e.js → chunk-2ks2tnac.js} +2 -2
- package/{chunk-0javrjcm.js → chunk-2nrkqq45.js} +22 -22
- package/chunk-320174qe.js +2 -0
- package/{chunk-ey15ye2h.js → chunk-3hg7yn1t.js} +1 -1
- package/{chunk-benrzwea.js → chunk-3j2kkgsc.js} +1 -1
- package/{chunk-8x21n7y9.js → chunk-47vf66t6.js} +1 -1
- package/chunk-4n49ptbz.js +3 -0
- package/{chunk-7hr6zw2m.js → chunk-5gxj9560.js} +1 -1
- package/{chunk-g0t9c3gv.js → chunk-6vnjg5x9.js} +1 -1
- package/{chunk-dnx91jrd.js → chunk-7kjr9gdx.js} +2 -2
- package/{chunk-y8dkfpmj.js → chunk-7p6e2f5s.js} +3 -3
- package/{chunk-053vb71h.js → chunk-86xhmz7k.js} +1 -1
- package/{chunk-ebpyvs1d.js → chunk-91r5nvth.js} +2 -2
- package/{chunk-c7rcw9fb.js → chunk-adys4qq4.js} +4 -4
- package/{chunk-npez1492.js → chunk-ckjw3b61.js} +2 -2
- package/{chunk-f156y565.js → chunk-d37gemt2.js} +3 -3
- package/{chunk-j7yvh0ae.js → chunk-dcwdmpw2.js} +1 -1
- package/chunk-dvb5nd2x.js +2 -0
- package/{chunk-063vbmtp.js → chunk-e6c2mzxc.js} +2 -2
- package/{chunk-s7skpgm2.js → chunk-ef9yhnk3.js} +1 -1
- package/{chunk-ecf896fz.js → chunk-fpxc6qjr.js} +2 -2
- package/chunk-frt9k18g.js +480 -0
- package/{chunk-bdy4jksd.js → chunk-fzcmzbsq.js} +1 -1
- package/{chunk-q9dd6fhj.js → chunk-g3ed130w.js} +3 -3
- package/{chunk-d48bfd2e.js → chunk-h1kb8b49.js} +2 -2
- package/{chunk-arcqjt91.js → chunk-hd3x1w46.js} +1 -1
- package/{chunk-dpz4hwqb.js → chunk-j781n7ca.js} +2 -2
- package/{chunk-z02sj1je.js → chunk-jp5afrwm.js} +2 -2
- package/{chunk-r8vvcp6c.js → chunk-jyv9cae6.js} +1 -1
- package/{chunk-whj87h4r.js → chunk-k3q5jqjj.js} +3 -3
- package/{chunk-75434aay.js → chunk-k3rmjrf1.js} +1 -1
- package/{chunk-peja51xv.js → chunk-kgkrccr1.js} +2 -2
- package/{chunk-pg5nkf1y.js → chunk-kpvaqb7c.js} +2 -2
- package/{chunk-hksqjts3.js → chunk-ky55taar.js} +332 -289
- package/{chunk-10p3mb40.js → chunk-mr807v9n.js} +1 -1
- package/chunk-n015c8nx.js +2 -0
- package/chunk-ndt6rjt9.js +2 -0
- package/{chunk-gv7wqkey.js → chunk-nmtk9xra.js} +2 -2
- package/{chunk-d6p2hgxh.js → chunk-pehyqj8k.js} +1 -1
- package/{chunk-ca982n62.js → chunk-pkpj7s2k.js} +1 -1
- package/{chunk-fx7f4m3c.js → chunk-pn413hjw.js} +1 -1
- package/{chunk-6ptv4g5e.js → chunk-ppxv5q7y.js} +3 -3
- package/{chunk-8wj32837.js → chunk-qmdpgbg3.js} +1 -1
- package/{chunk-8wv5t0w6.js → chunk-rnt1ckk9.js} +6 -6
- package/{chunk-prgm07j4.js → chunk-t40fag3z.js} +2 -2
- package/{chunk-w67dvqtb.js → chunk-t66jqz12.js} +2 -2
- package/{chunk-39vwrg8n.js → chunk-v2srrqcv.js} +2 -2
- package/{chunk-n85qs7cs.js → chunk-x496kg3v.js} +1 -1
- package/{chunk-6kdgk70p.js → chunk-xjw78yey.js} +4 -4
- package/chunk-xy2bxwq8.js +2 -0
- package/{chunk-y69ewdn2.js → chunk-ypqjfv3a.js} +2 -2
- package/{chunk-f544p9rh.js → chunk-yyy2yp6f.js} +10 -10
- package/{chunk-8gw5bvh3.js → chunk-yzevjkms.js} +5 -5
- package/chunk-z3ch1wg6.js +16 -0
- package/chunk-zdyd8hbn.js +2 -0
- package/compiled.js +6 -6
- package/package.json +1 -1
- package/ui-test-worker.js +19 -19
- package/web/{chunk-rf9dt6bg.js → chunk-0j9a7811.js} +6 -6
- package/web/chunk-0jfda4jw.js +2 -0
- package/web/{chunk-z1geewdf.js → chunk-0zwc2rvh.js} +2 -2
- package/web/{chunk-ht1dzftc.js → chunk-1gx0zpmp.js} +7 -7
- package/web/{chunk-0gg00f86.js → chunk-1s8zg6fb.js} +51 -51
- package/web/chunk-2axwda8c.js +89 -0
- package/web/chunk-2p3fkhy8.js +1 -0
- package/web/{chunk-xvcfp1zh.js → chunk-33w36n91.js} +2 -2
- package/web/{chunk-5v44qv67.js → chunk-3q0v8w45.js} +81 -81
- package/web/chunk-3sz5qcwj.js +1 -0
- package/web/chunk-433c80pc.js +1 -0
- package/web/chunk-48cnmhvd.js +106 -0
- package/web/{chunk-da7m1kva.js → chunk-4anjs6yp.js} +2 -2
- package/web/chunk-5r37rwq1.js +4 -0
- package/web/{chunk-g81h1e6n.js → chunk-6e38yf3a.js} +23 -23
- package/web/{chunk-zp3qrrkb.js → chunk-7a4xk6j9.js} +72 -72
- package/web/chunk-7f1t7z72.js +2 -0
- package/web/chunk-7qq1ypvj.js +1 -0
- package/web/{chunk-h6k1x096.js → chunk-7tkgbbf9.js} +2 -2
- package/web/chunk-7x35g67d.js +78 -0
- package/web/{chunk-n1jpg57t.js → chunk-823b7866.js} +15 -15
- package/web/chunk-85gdsmt4.js +1 -0
- package/web/{chunk-gyp6v7jd.js → chunk-8773nwdc.js} +2 -2
- package/web/{chunk-cktmyc13.js → chunk-8dp7h6w8.js} +24 -24
- package/web/{chunk-czq1yz51.js → chunk-8nv7q5ac.js} +9 -9
- package/web/chunk-8pzg8qw4.js +1 -0
- package/web/chunk-8wg44w91.js +2 -0
- package/web/chunk-9p5dfvav.js +1 -0
- package/web/chunk-9q9w9pay.js +1 -0
- package/web/chunk-a3teqvz2.js +39 -0
- package/web/chunk-bd8ftfxn.js +3 -0
- package/web/chunk-c03bt2pz.js +1 -0
- package/web/chunk-c1ha2xg6.js +8 -0
- package/web/chunk-cez1k71m.js +1 -0
- package/web/chunk-cgng31df.js +1 -0
- package/web/chunk-cn0tmwjs.js +2 -0
- package/web/{chunk-jve1zc80.js → chunk-cn1xpg3q.js} +2 -2
- package/web/chunk-cvd4f51j.js +1 -0
- package/web/chunk-cybvxssy.js +1 -0
- package/web/{chunk-a7gtb4kg.js → chunk-cyjnert7.js} +19 -19
- package/web/{chunk-twdy2f67.js → chunk-d0m0h0eb.js} +1 -1
- package/web/{chunk-hy4m34qp.js → chunk-dgwkqcz6.js} +37 -37
- package/web/{chunk-kyawkpv2.js → chunk-dtg5yhhs.js} +1 -1
- package/web/chunk-dynajx8x.js +2 -0
- package/web/{chunk-t851gdjh.js → chunk-et8q775x.js} +4 -4
- package/web/chunk-f3vv7n52.js +1 -0
- package/web/{chunk-3de552rg.js → chunk-f93pe4kb.js} +15 -15
- package/web/{chunk-5nda24gv.js → chunk-fe31sv6t.js} +1 -1
- package/web/chunk-fpa81dv7.js +62 -0
- package/web/{chunk-nyn9tghz.js → chunk-fx4mackk.js} +9 -9
- package/web/chunk-g17n6asp.js +1 -0
- package/web/chunk-g9dzaw9e.js +30 -0
- package/web/chunk-gcwhx3av.js +1139 -0
- package/web/chunk-gf8vm6b5.js +1 -0
- package/web/chunk-gnmeyy4h.js +1 -0
- package/web/chunk-h5cfg3vv.js +2 -0
- package/web/{chunk-d6tbw8br.js → chunk-hbkasy6c.js} +46 -46
- package/web/chunk-hn7mhsbg.js +1 -0
- package/web/{chunk-12xxh71x.js → chunk-hstbgb83.js} +26 -26
- package/web/chunk-jjjtv2r1.js +2 -0
- package/web/chunk-jzte2phh.js +2 -0
- package/web/chunk-k8h8zx6r.js +24 -0
- package/web/chunk-m3ajw575.js +1 -0
- package/web/chunk-m5y2d4zv.js +1 -0
- package/web/chunk-mbwwj216.js +1 -0
- package/web/chunk-mf6xng5b.js +2 -0
- package/web/chunk-nky3bqfg.js +1 -0
- package/web/chunk-np33kmn4.js +1 -0
- package/web/chunk-nvk8mazs.js +1 -0
- package/web/chunk-nyw5ewgv.js +1 -0
- package/web/{chunk-dwajwrpk.js → chunk-p0cjvjdx.js} +1 -1
- package/web/chunk-p56dcqpr.js +1 -0
- package/web/chunk-pdn4r8x4.js +1 -0
- package/web/chunk-q1xxs319.js +41 -0
- package/web/chunk-qpt34d8d.js +1 -0
- package/web/{chunk-96v2avmw.js → chunk-qq2v8h6d.js} +7 -7
- package/web/chunk-qskt3tqa.js +1 -0
- package/web/chunk-qt3n897m.js +4 -0
- package/web/chunk-r1rt48h9.js +1 -0
- package/web/{chunk-ck8rr0sr.js → chunk-r4ffr96e.js} +1 -1
- package/web/chunk-r7tgd2fm.js +7 -0
- package/web/{chunk-x5s7zr5f.js → chunk-rbdvc8x7.js} +7 -7
- package/web/{chunk-v4yqrx5y.js → chunk-rkjkynm3.js} +33 -33
- package/web/chunk-rznszqmy.js +1 -0
- package/web/chunk-s1pefd34.js +1 -0
- package/web/chunk-s38s9ff9.js +370 -0
- package/web/{chunk-vw1pbv1x.js → chunk-s7e93552.js} +8 -8
- package/web/chunk-sc29azev.js +1 -0
- package/web/{chunk-9c1yt2ex.js → chunk-sda7cyrt.js} +52 -52
- package/web/chunk-svh2gkx8.js +2 -0
- package/web/chunk-t4jc4nac.js +1 -0
- package/web/chunk-t7g366a5.js +24 -0
- package/web/chunk-tj1fn8v2.js +1 -0
- package/web/{chunk-sy7e4dmq.js → chunk-tkp72r9b.js} +1 -1
- package/web/{chunk-xc2sq3t5.js → chunk-v14s4vgc.js} +1 -1
- package/web/chunk-v94v68xg.js +36 -0
- package/web/{chunk-0whceqes.js → chunk-vvvd3grf.js} +2 -2
- package/web/chunk-w37n09px.js +21 -0
- package/web/chunk-wcphswcx.js +2 -0
- package/web/{chunk-fxs4nb93.js → chunk-wj3ymejj.js} +38 -38
- package/web/chunk-wwcnvyjh.css +1 -0
- package/web/{chunk-s2920f21.js → chunk-xabcx3ry.js} +6 -6
- package/web/chunk-xb9m0092.js +1 -0
- package/web/chunk-xfd3b01q.js +1 -0
- package/web/{chunk-03dmzvaq.js → chunk-xqyazzm7.js} +17 -17
- package/web/{chunk-prvh9syp.js → chunk-xsz1dfm2.js} +23 -23
- package/web/chunk-z0zrp8n8.js +1 -0
- package/web/index.html +1 -1
- package/worker.js +1 -1
- package/chunk-8saewt61.js +0 -3
- package/chunk-a0c989ky.js +0 -2
- package/chunk-a5apjjcn.js +0 -16
- package/chunk-a81p46j7.js +0 -2
- package/chunk-agsfy9w7.js +0 -2
- package/chunk-d20p02ny.js +0 -2
- package/chunk-ejsneb6f.js +0 -2
- package/chunk-fmq3zwzk.js +0 -2
- package/chunk-rfb85nj7.js +0 -2
- package/chunk-rfdt992v.js +0 -25
- package/chunk-tgfbtehh.js +0 -480
- package/web/chunk-0fgaepwm.js +0 -3
- package/web/chunk-0pecj6d7.js +0 -1
- package/web/chunk-0wt1dgny.js +0 -1
- package/web/chunk-1ves7sq5.js +0 -1
- package/web/chunk-1yj79b48.js +0 -1
- package/web/chunk-296hgy6k.js +0 -370
- package/web/chunk-2bmq1whf.js +0 -1
- package/web/chunk-2wqxhqr9.js +0 -1
- package/web/chunk-30zfw7zg.js +0 -1
- package/web/chunk-39ng8zwx.css +0 -1
- package/web/chunk-3nbzj48p.js +0 -36
- package/web/chunk-3zebd9fq.js +0 -7
- package/web/chunk-4r1n98zx.js +0 -2
- package/web/chunk-59678wmg.js +0 -1
- package/web/chunk-5wdk97mk.js +0 -4
- package/web/chunk-64rafq66.js +0 -78
- package/web/chunk-6kkw9ptc.js +0 -1
- package/web/chunk-718mr5gc.js +0 -2
- package/web/chunk-7hs57qdr.js +0 -1
- package/web/chunk-7kp237t3.js +0 -106
- package/web/chunk-86p42kym.js +0 -1
- package/web/chunk-8n79cqyd.js +0 -1
- package/web/chunk-9an6wcnr.js +0 -1
- package/web/chunk-9w5tf22s.js +0 -1
- package/web/chunk-b985y17w.js +0 -2
- package/web/chunk-bz2v64xe.js +0 -1
- package/web/chunk-c3nn0vvc.js +0 -1
- package/web/chunk-cb2rxtq9.js +0 -2
- package/web/chunk-cm92fyr3.js +0 -2
- package/web/chunk-cwtn2kdm.js +0 -1
- package/web/chunk-d4z2rgpx.js +0 -1
- package/web/chunk-dpkyygej.js +0 -1
- package/web/chunk-et5ess72.js +0 -1
- package/web/chunk-ez8b6neq.js +0 -1
- package/web/chunk-f5txt81n.js +0 -2
- package/web/chunk-fd1kqwe3.js +0 -1
- package/web/chunk-fp48zz2e.js +0 -2
- package/web/chunk-fx0n2g22.js +0 -89
- package/web/chunk-g6k9z8zt.js +0 -1
- package/web/chunk-gsh80797.js +0 -41
- package/web/chunk-hs5x78fb.js +0 -1
- package/web/chunk-hyd5hzpa.js +0 -1
- package/web/chunk-hyt1nkaw.js +0 -1
- package/web/chunk-j6a4z530.js +0 -1139
- package/web/chunk-kegv14sg.js +0 -2
- package/web/chunk-kw9emsqw.js +0 -1
- package/web/chunk-m2prjwk3.js +0 -4
- package/web/chunk-m9bzz9m0.js +0 -19
- package/web/chunk-mqsyzzgt.js +0 -30
- package/web/chunk-nywdeb4m.js +0 -2
- package/web/chunk-pxkhm40r.js +0 -2
- package/web/chunk-q9ekgjh6.js +0 -62
- package/web/chunk-r3mj50zs.js +0 -1
- package/web/chunk-sc0ghp25.js +0 -24
- package/web/chunk-t74r2n8h.js +0 -1
- package/web/chunk-t9mvsgt9.js +0 -1
- package/web/chunk-vf4vkcf9.js +0 -24
- package/web/chunk-vnt34mkb.js +0 -1
- package/web/chunk-vtxw9rmr.js +0 -1
- package/web/chunk-x19v2sxv.js +0 -1
- package/web/chunk-y21zy3eh.js +0 -1
- package/web/chunk-ya3ghn3n.js +0 -2
- package/web/chunk-yd74yxzt.js +0 -8
- package/web/chunk-z4ha8181.js +0 -1
- package/web/chunk-z8rarqe6.js +0 -1
- package/web/chunk-zsxw5fj7.js +0 -39
package/README.md
CHANGED
|
@@ -132,7 +132,7 @@ bun packages/cli/src/main.ts --demo --open # 无需 API Key,使用内置演
|
|
|
132
132
|
|
|
133
133
|
**可选:Cloudflare Access(再加一道只认你的登录)**
|
|
134
134
|
|
|
135
|
-
配好之后在同一页的「Access
|
|
135
|
+
配好之后在同一页的「Access 校验」点「配置引导」,再点弹窗里的链接直达你账号的 Cloudflare 应用程序页(账号 ID 从登录证书自动读出,令牌模式则先进入 Zero Trust)。点右上角「新建应用程序」,选「自托管和私有」、保持「公共 DNS」,点「继续使用」;「子域」填子域名(如 `micode`)、「域」下拉选根域(如 `taboo.sh`),路径留空;在「Access 策略」里点「创建新策略」,选「允许」、按「电子邮件」填你的邮箱;只允许指定 GitHub 用户时,再在「要求」里加「登录方法 = GitHub」,并在「身份验证」里关闭「接受所有可用的标识提供程序」、只选 GitHub(「应用即时身份验证」开启后会直接跳 GitHub),然后点「创建」;最后到应用的「其他设置」→「AUD 标签」,复制「令牌」下的字符串,回到 Basalt 点「设置」粘贴,团队域名会自动识别。之后经隧道进来的请求必须带 Cloudflare 签发的有效 JWT,否则被直接拒绝。
|
|
136
136
|
|
|
137
137
|
**安全说明**
|
|
138
138
|
|
|
@@ -158,7 +158,7 @@ bun packages/cli/src/main.ts --demo --open # 无需 API Key,使用内置演
|
|
|
158
158
|
basalt update 用安装时的 npm/bun 更新到最新版本(运行中的服务空闲时自动重启)
|
|
159
159
|
basalt setup 把 basalt 所在目录加入 PATH(装完提示找不到命令时用)
|
|
160
160
|
basalt plugin reload <id> [--data <目录>]
|
|
161
|
-
basalt tunnel set <主机名> [--token <令牌>] [--
|
|
161
|
+
basalt tunnel set <主机名> [--token <令牌>] [--aud <Audience> [--team <团队域名>]]
|
|
162
162
|
basalt tunnel off | status 远程访问(Cloudflare 隧道)
|
|
163
163
|
|
|
164
164
|
选项:
|
|
@@ -173,8 +173,8 @@ bun packages/cli/src/main.ts --demo --open # 无需 API Key,使用内置演
|
|
|
173
173
|
--web-url <地址> 生成配对链接时使用的外部 Web 工作台地址
|
|
174
174
|
--allow-origin <来源> 允许跨域访问的 Web 来源,可多次传入;* 表示允许任意来源
|
|
175
175
|
--token <令牌> tunnel set 用:隧道令牌(更推荐用环境变量,避免进 shell 历史)
|
|
176
|
-
--team <团队域名> tunnel set 用:Access 团队域名
|
|
177
176
|
--aud <Audience> tunnel set 用:Access 应用的 Audience 标签
|
|
177
|
+
--team <团队域名> tunnel set 用:Access 团队域名(不填按公共域名的登录跳转自动探测)
|
|
178
178
|
--no-tray 不启动系统托盘图标
|
|
179
179
|
--no-update-check 不自动检查和安装新版本(也可设 BASALT_NO_UPDATE_CHECK=1)
|
|
180
180
|
--no-auth 关闭令牌认证(仅本机监听可用,或需配合 --allow-remote-no-auth)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{M,Ve}from"./chunk-
|
|
3
|
-
`){if(typeof e==="string")return e;return e.filter((r)=>r.type==="text").map((r)=>r.text).join(t)}function
|
|
2
|
+
import{M,Ve}from"./chunk-jp5afrwm.js";function H(e,t,r){return{role:"assistant",content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"error",errorMessage:t instanceof Error?t.message:String(t),timestamp:r}}function z(e){return typeof e.result==="function"}async function F(e,t){for await(let r of t)e.push(r);e.end(z(t)?await t.result():void 0)}function Ie(e,t){let r=Date.now(),n=new M;return t().then((s)=>F(n,s)).catch((s)=>{let o=H(e,s,r);n.push({type:"error",reason:"error",error:o}),n.end(o)}),n}function te(e,t){let r={stream:(n,s,o)=>Ie(n,async()=>(await e()).stream(n,s,o)),streamSimple:(n,s,o)=>Ie(n,async()=>(await e()).streamSimple(n,s,o))};if(t?.fetchDeferred)r.fetchDeferred=(n,s,o)=>Ie(n,async()=>{let i=await e();if(!i.fetchDeferred)throw Error("API does not support deferred responses");return i.fetchDeferred(n,s,o)});if(t?.cancelDeferred)r.cancelDeferred=async(n,s,o)=>{let i=await e();if(!i.cancelDeferred)throw Error("API cannot cancel deferred responses");await i.cancelDeferred(n,s,o)};return r}var J=function(e,t){if(typeof e==="string"&&/^\.\.?\//.test(e))return e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(r,n,s,o,i){return n?t?".jsx":".js":s&&(!o||!i)?r:s+o+"."+i.toLowerCase()+"js"});return e},O=(e)=>import(J(e));function V(){return globalThis.process?.env}function $o(){return{async env(e){let t=V()?.[e];return typeof t==="string"&&t.trim().length>0?t:void 0},async fileExists(e){try{let t=await O("node:fs/promises"),r=e;if(r.startsWith("~"))r=(await O("node:os")).homedir()+r.slice(1);return await t.access(r),!0}catch{return!1}}}}function R(e){if(e.reason!==void 0)return e.reason;let t=Error("The operation was aborted");return t.name="AbortError",t}function g(e){return e??new AbortController().signal}function v(e,t){if(t.aborted)return e.catch(()=>{}),Promise.reject(R(t));return new Promise((r,n)=>{let s=!1,o=()=>t.removeEventListener("abort",i),i=()=>{if(s)return;s=!0,o(),n(R(t))};if(t.addEventListener("abort",i,{once:!0}),e.then((c)=>{if(s)return;s=!0,o(),r(c)},(c)=>{if(s)return;s=!0,o(),n(c)}),t.aborted)i()})}class jn{credentials=new Map;chains=new Map;enqueue(e,t,r){let n=g(r?.signal),s=this.chains.get(e)??Promise.resolve(),o=(async()=>(await s.catch(()=>{}),n.throwIfAborted(),t()))(),i=o.catch(()=>{});return this.chains.set(e,i),i.then(()=>{if(this.chains.get(e)===i)this.chains.delete(e)}),v(o,n)}async read(e,t){return t?.signal?.throwIfAborted(),this.credentials.get(e)}async list(e){return e?.signal?.throwIfAborted(),[...this.credentials].map(([t,r])=>({providerId:t,type:r.type}))}modify(e,t,r){return this.enqueue(e,async()=>{let n=this.credentials.get(e),s=await t(n);if(r?.signal?.throwIfAborted(),s!==void 0)this.credentials.set(e,s);return s??n},r)}delete(e,t){return this.enqueue(e,async()=>{this.credentials.delete(e)},t)}}class I extends Error{code;constructor(e,t,r){super(Y(t,r?.cause),r);this.name="ModelsError",this.code=e}}function Y(e,t){if(t===void 0||t===null)return e;let r=Ve(t).trim();if(!r||e.includes(r))return e;return`${e}: ${r}`}function E(e,t,r,n){let s=g(n?.signal);return v(X(e,t,r,n,s),s)}async function X(e,t,r,n,s){s.throwIfAborted();let o=n?.env?B(r,n.env):r;if(n?.apiKey!==void 0&&e.auth.apiKey)return P(o,e.auth.apiKey,e.id,{type:"api_key",key:n.apiKey,env:n.env},s);let i=await se(t,e.id,s);if(i){if(i.type==="oauth"&&e.auth.oauth)return ne(t,e.id,e.auth.oauth,i,s,n?.minOAuthValidityMs);if(i.type==="api_key"&&e.auth.apiKey){let c=n?.env?{...i,env:{...i.env,...n.env}}:i;return P(o,e.auth.apiKey,e.id,c,s)}return}return e.auth.apiKey?P(o,e.auth.apiKey,e.id,void 0,s):void 0}function B(e,t){return{env:async(r)=>t[r]||await e.env(r),fileExists:(r)=>e.fileExists(r)}}var Z=300000,ee=15000;async function T(e,t,r,n,s){let o,i=new AbortController,c=()=>i.abort(s.reason);if(s.addEventListener("abort",c,{once:!0}),s.aborted)c();try{o=await e.modify(t,async(u)=>{if(s.removeEventListener("abort",c),s.throwIfAborted(),u?.type!=="oauth")return;if(!n(u))return;try{return await r.refresh(u,AbortSignal.timeout(ee))}catch(f){throw new I("oauth",`OAuth refresh failed for ${t}`,{cause:f})}},{signal:i.signal})}catch(u){if(u instanceof I)throw u;throw s.throwIfAborted(),new I("auth",`Credential store modify failed for ${t}`,{cause:u})}finally{s.removeEventListener("abort",c)}return o?.type==="oauth"?o:void 0}async function ne(e,t,r,n,s,o){let i=Math.max(Z,o??0),c=(f)=>Date.now()+i>=f.expires,u=n;if(c(u)){let f=await T(e,t,r,c,s);if(!f)return;if(u=f,o!==void 0&&c(u))throw new I("oauth",`OAuth refresh returned a token that expires too soon for ${t}`)}try{return{auth:await r.toAuth(u),source:"OAuth"}}catch(f){throw new I("oauth",`OAuth auth derivation failed for ${t}`,{cause:f})}}async function P(e,t,r,n,s){try{return await t.resolve({ctx:e,credential:n,signal:s})}catch(o){throw new I("auth",`API key auth failed for provider ${r}`,{cause:o})}}async function se(e,t,r){try{return await e.read(t,{signal:r})}catch(n){throw new I("auth",`Credential store read failed for ${t}`,{cause:n})}}class Vn{entries=new Map;async read(e,t){t?.signal?.throwIfAborted();let r=this.entries.get(e);return r?structuredClone(r):void 0}async write(e,t,r){r?.signal?.throwIfAborted(),this.entries.set(e,structuredClone(t))}async delete(e,t){t?.signal?.throwIfAborted(),this.entries.delete(e)}}function ht(e){return e.type??"chat"}function Me(e,t){return ht(e)===t}function q(e){if(!Me(e,"chat"))throw new I("provider",`Model ${e.provider}/${e.id} is not a chat model`)}function _(e){if(!Me(e,"image"))throw new I("provider",`Model ${e.provider}/${e.id} is not an image model`)}function K(e){if(!Me(e,"classifier"))throw new I("provider",`Model ${e.provider}/${e.id} is not a classifier model`)}function L(e,t){if(t.images?.length&&!e.input.includes("image"))throw new I("provider",`Model ${e.provider}/${e.id} does not accept image input`)}function k(e,t,r=!1){return{api:e.api,provider:e.provider,model:e.id,output:[],stopReason:r?"aborted":"error",errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}function D(e,t,r=!1){return{api:e.api,provider:e.provider,model:e.id,answers:{},stopReason:r?"aborted":"error",errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}function dr(e,t=`
|
|
3
|
+
`){if(typeof e==="string")return e;return e.filter((r)=>r.type==="text").map((r)=>r.text).join(t)}function U(e){let t=[dr(e.content)];for(let r of Object.values(e.sections??{}))if(r!==null)t.push(r);return t.filter((r)=>r.length>0).join(`
|
|
4
4
|
|
|
5
|
-
`)}function
|
|
5
|
+
`)}function Le(e){let t=[],r=dr(e.content);if(r.length>0)t.push(r);for(let[n,s]of Object.entries(e.sections??{}))t.push(s===null?`Removed system prompt section "${n}".`:`Updated system prompt section "${n}":
|
|
6
6
|
|
|
7
7
|
${s}`);return t.join(`
|
|
8
8
|
|
|
9
|
-
`)}function
|
|
9
|
+
`)}function Kn(e,t){let r=e!==void 0&&e.length>0,n=t!==void 0&&t.length>0;if(!r&&!n)return;return{role:"system",content:e??"",...n?{toolsAdded:t}:{},timestamp:0}}function ft(e){let t=Kn(e.systemPrompt,e.tools);return{messages:t?[t,...e.messages]:e.messages}}function x(e){return e.role==="system"}function de(e){let t=e[0];return t&&x(t)?t:void 0}function $t(e){return de(e)?e.slice(1):e}function oe(e){let t=new Map;for(let r of e){if(!x(r))continue;for(let n of r.toolsRemoved??[])t.delete(n.name);for(let n of r.toolsAdded??[])t.set(n.name,n)}return[...t.values()]}function Xr(e){let t=[],r=new Map,n;for(let o of e){if(!x(o))continue;n??=o.timestamp;let i=dr(o.content);if(i.length>0)t.push(i);for(let[c,u]of Object.entries(o.sections??{}))if(u===null)r.delete(c);else r.set(c,u)}let s=oe(e);if(n===void 0&&s.length===0)return;return{role:"system",content:t.join(`
|
|
10
10
|
|
|
11
|
-
`),...r.size>0?{sections:Object.fromEntries(r)}:{},...s.length>0?{toolsAdded:s}:{},timestamp:n??0}}function Wo(e){let t=Kr(e);return t?N(t):""}function Le(e){let t=Kr(e.messages),r=e.messages.filter((n)=>n.role!=="system");return{messages:t?[t,...r]:r}}function re(e,t){return t?e:Le(e)}function ot(e){return{name:e.name,description:e.description,parameters:JSON.parse(JSON.stringify(e.parameters)),...e.constrainedSampling===void 0?{}:{constrainedSampling:e.constrainedSampling}}}function Vn(e,t){return JSON.stringify(ot(e))===JSON.stringify(ot(t))}function $o(e,t){let r=new Map(e.map((s)=>[s.name,s])),n=new Map(t.map((s)=>[s.name,s]));return{toolsAdded:t.filter((s)=>{let o=r.get(s.name);return o===void 0||!Vn(o,s)}).map(ot),toolsRemoved:e.filter((s)=>{let o=n.get(s.name);return o===void 0||!Vn(s,o)}).map((s)=>({name:s.name}))}}function ge(e){let t=new Map;for(let r of e){if(!x(r))continue;for(let n of r.toolsAdded??[])t.set(n.name,n)}return[...t.values()]}function Ti(e){let t=new Map;for(let r of e){if(!x(r))continue;for(let n of r.toolsAdded??[]){let s=t.get(n.name);if(s!==void 0&&!Vn(s,n))return!0;t.set(n.name,n)}}return!1}function wi(e){let t=new Set;for(let r of e){if(!x(r))continue;if((r.toolsRemoved?.length??0)>0)return!0;for(let n of r.toolsAdded??[]){if(t.has(n.name))return!0;t.add(n.name)}}return!1}function ye(e,t){let r=t&&!wi(e);return{requestTools:r?pe(e)?.toolsAdded??[]:ne(e),anchorsAdditions:r}}var ie={chat:!0,image:!0,classifier:!0};function U(e){return Object.hasOwn(ie,ht(e))}function ae(e){return{...e,models:e.models.filter(U)}}function W(e,t){if(!e&&!t)return;let r={...e};for(let[n,s]of Object.entries(t??{})){let o=n.toLowerCase();for(let i of Object.keys(r))if(i.toLowerCase()===o)delete r[i];r[n]=s}return r}class j{providers=new Map;credentials;modelsStore;authContext;refreshGenerations=new Map;refreshControllers=new Map;publicationChains=new Map;constructor(e){this.credentials=e?.credentials??new Gn,this.modelsStore=e?.modelsStore??new zn,this.authContext=e?.authContext??Fo()}setProvider(e){this.supersedeProviderRefresh(e.id),this.providers.set(e.id,e)}deleteProvider(e){this.supersedeProviderRefresh(e),this.providers.delete(e)}clearProviders(){for(let e of new Set([...this.providers.keys(),...this.refreshControllers.keys()]))this.supersedeProviderRefresh(e);this.providers.clear()}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}getModels(e){if(e!==void 0){let r=this.providers.get(e);if(!r)return[];try{return r.getModels()}catch{return[]}}let t=[];for(let r of this.providers.values())try{t.push(...r.getModels())}catch{}return t}getAllModels(e){if(e!==void 0){let r=this.providers.get(e);if(!r)return[];try{return r.getAllModels?.()??r.getModels()}catch{return[]}}let t=[];for(let r of this.providers.values())try{t.push(...r.getAllModels?.()??r.getModels())}catch{}return t}getModelsOfType(e,t){return this.getAllModels(t).filter((r)=>Ie(r,e))}getModel(e,t){return this.getModels(e).find((r)=>r.id===t)}getModelOfType(e,t,r){return this.getModelsOfType(e,t).find((n)=>n.id===r)}supersedeProviderRefresh(e){let t=(this.refreshGenerations.get(e)??0)+1;this.refreshGenerations.set(e,t);let r=this.refreshControllers.get(e);if(r)this.refreshControllers.delete(e),r.abort();return t}beginProviderRefresh(e){let t=this.supersedeProviderRefresh(e),r=new AbortController;return this.refreshControllers.set(e,r),{generation:t,controller:r}}publishProviderModels(e,t,r,n){let s=this.publicationChains.get(e)??Promise.resolve(),o=(async()=>{if(await s.catch(()=>{}),r.aborted||this.refreshGenerations.get(e)!==t)return!1;if(n.persist===null)await this.modelsStore.delete(e,{signal:r});else if(n.persist!==void 0)await this.modelsStore.write(e,structuredClone(n.persist),{signal:r});if(r.aborted||this.refreshGenerations.get(e)!==t)return!1;return n.update?.(),!0})(),i=o.catch(()=>{});return this.publicationChains.set(e,i),i.then(()=>{if(this.publicationChains.get(e)===i)this.publicationChains.delete(e)}),v(o,r)}async runProviderRefreshPhase(e,t,r,n,s,o){let i=await this.modelsStore.read(e.id,{signal:o});await e.refreshModels({credential:t,stored:i?ae(structuredClone(i)):void 0,publish:(c)=>this.publishProviderModels(e.id,s,o,c),allowNetwork:r,force:r?n:void 0,signal:o,baseUrl:e.baseUrl})}async refresh(e={}){let t=e.allowNetwork??!0,r=g(e.signal),n=new Map;if(r.aborted)return{aborted:!0,errors:n};let s=e.providers?new Set(e.providers):void 0,o=Array.from(this.providers.values()).filter((c)=>c.refreshModels!==void 0&&(!s||s.has(c.id))),i=Promise.all(o.map(async(c)=>{let{generation:u,controller:f}=this.beginProviderRefresh(c.id),m=AbortSignal.any([r,f.signal]),b=(async()=>{let w,y;try{w=await this.readCredential(c.id,m)}catch(a){y=a}if(await this.runProviderRefreshPhase(c,w,!1,void 0,u,m),y!==void 0)throw y;if(!t||m.aborted)return;let A=await this.resolveRefreshCredential(c,w,m);if(!A)return;await this.runProviderRefreshPhase(c,A,!0,e.force,u,m)})();try{await v(b,m)}catch(w){if(!m.aborted)n.set(c.id,w instanceof Error?w:new I("model_source",`Model refresh failed for ${c.id}`,{cause:w}))}finally{if(this.refreshControllers.get(c.id)===f)this.refreshControllers.delete(c.id)}}));try{await v(i,r)}catch(c){if(!r.aborted)throw c}return{aborted:r.aborted,errors:new Map(n)}}async resolveRefreshCredential(e,t,r){if(t?.type==="oauth"){let i=e.auth.oauth;if(!i)return;if(Date.now()<t.expires)return t;if(r.aborted)return;return T(this.credentials,e.id,i,(c)=>Date.now()>=c.expires,r)}let n=e.auth.apiKey;if(!n)return;let s=t?.type==="api_key"?t:void 0,o=await n.resolve({ctx:this.authContext,credential:s,signal:r});if(!o)return;return{type:"api_key",key:o.auth.apiKey,env:o.env}}async readCredential(e,t){try{return await this.credentials.read(e,{signal:t})}catch(r){throw new I("auth",`Credential store read failed for ${e}`,{cause:r})}}async checkProviderAuth(e,t,r){if(t?.type==="oauth")return e.auth.oauth?{source:"OAuth",type:"oauth"}:void 0;let n=e.auth.apiKey;if(!n)return;if(n.check)try{return await n.check({ctx:this.authContext,credential:t?.type==="api_key"?t:void 0,signal:r})}catch(o){throw new I("auth",`API key auth check failed for provider ${e.id}`,{cause:o})}let s=await E(e,this.credentials,this.authContext,{signal:r});return s?{source:s.source,type:"api_key"}:void 0}checkAuth(e,t){let r=g(t?.signal),n=(async()=>{r.throwIfAborted();let s=this.providers.get(e);if(!s)return;return this.checkProviderAuth(s,await this.readCredential(e,r),r)})();return v(n,r)}async getAuthenticatedProviders(e,t){t.throwIfAborted();let r=e?[this.providers.get(e)].filter((s)=>s!==void 0):this.getProviders();return(await Promise.all(r.map(async(s)=>{let o=await this.readCredential(s.id,t);return{provider:s,credential:o,auth:await this.checkProviderAuth(s,o,t)}}))).filter((s)=>s.auth!==void 0)}getAvailable(e,t){let r=g(t?.signal),n=(async()=>(await this.getAuthenticatedProviders(e,r)).flatMap(({provider:o,credential:i})=>{let c=o.getModels();return o.filterModels?.(c,i)??c}))();return v(n,r)}async getAvailableOfType(e,t,r){return(await this.getAllAvailable(t,r)).filter((n)=>Ie(n,e))}getAllAvailable(e,t){let r=g(t?.signal),n=(async()=>(await this.getAuthenticatedProviders(e,r)).flatMap(({provider:o,credential:i})=>{let c=o.getAllModels?.()??o.getModels();if(o.filterAllModels)return o.filterAllModels(c,i);if(!o.filterModels)return c;let u=new Set(o.filterModels(o.getModels(),i).map((f)=>f.id));return c.filter((f)=>!Ie(f,"chat")||u.has(f.id))}))();return v(n,r)}async getAuth(e,t){let r=g(t?.signal),n=typeof e==="string"?e:e.provider,s=this.providers.get(n);if(!s)return;let o=await E(s,this.credentials,this.authContext,{...t,signal:r});if(!o||typeof e==="string"||!e.headers)return o;return{...o,auth:{...o.auth,headers:W(o.auth.headers,e.headers)}}}async login(e,t,r,n){let s=g(r.signal);s.throwIfAborted();let o=this.providers.get(e);if(!o)throw new I("provider",`Unknown provider: ${e}`);let i=t==="oauth"?o.auth.oauth:o.auth.apiKey;if(!i?.login)throw new I("auth",`${o.name} does not support ${t} login`);let c=i.login({...r,signal:s},n),u=await v(c,s),f=!1,m,b=new Promise((y)=>{m=y}),w=this.credentials.modify(e,async()=>(f=!0,m?.(),u),{signal:s});w.catch(()=>{});try{await new Promise((y,A)=>{let a=()=>{if(!f)A(s.reason)};if(s.addEventListener("abort",a,{once:!0}),Promise.race([b,w]).then(()=>{s.removeEventListener("abort",a),y()},(l)=>{s.removeEventListener("abort",a),A(l)}),s.aborted)a()}),await w}catch(y){throw s.throwIfAborted(),new I("auth",`Credential store modify failed for ${e}`,{cause:y})}return u}async logout(e,t){let r=g(t?.signal);r.throwIfAborted();try{await this.credentials.delete(e,{signal:r})}catch(n){throw r.throwIfAborted(),new I("auth",`Credential store delete failed for ${e}`,{cause:n})}}requireProvider(e){let t=this.providers.get(e.provider);if(!t)throw new I("provider",`Unknown provider: ${e.provider}`);return t}requireChatProvider(e){return q(e),this.requireProvider(e)}async applyAuth(e,t){this.requireProvider(e);let r=await this.getAuth(e,{apiKey:t?.apiKey,env:t?.env,signal:t?.signal});if(!r)throw new I("auth",`Provider is not configured: ${e.provider}`);let n=r.auth,s=t?.apiKey??n.apiKey,o=W(n.headers,t?.headers);if(t?.transformHeaders)o=await t.transformHeaders(o??{});let i=r.env||t?.env?{...r.env??{},...t?.env??{}}:void 0,c=n.baseUrl?{...e,baseUrl:n.baseUrl}:e,{transformHeaders:u,...f}=t??{},m={...f,apiKey:s,headers:o,env:i};return{requestModel:c,requestOptions:m}}stream(e,t,r){let n=ft(t);return Ce(e,async()=>{let s=this.requireChatProvider(e),{requestModel:o,requestOptions:i}=await this.applyAuth(e,r);return s.stream(o,n,i)})}async complete(e,t,r){return this.stream(e,t,r).result()}streamSimple(e,t,r){let n=ft(t);return Ce(e,async()=>{let s=this.requireChatProvider(e),{requestModel:o,requestOptions:i}=await this.applyAuth(e,r);return s.streamSimple(o,n,i)})}async completeSimple(e,t,r){return this.streamSimple(e,t,r).result()}streamDeferred(e,t,r){return Ce(e,async()=>{let n=this.requireChatProvider(e);if(!n.fetchDeferred)throw new I("provider",`Provider ${e.provider} does not support deferred responses`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);return n.fetchDeferred(s,t,o)})}async fetchDeferred(e,t,r){return this.streamDeferred(e,t,r).result()}async cancelDeferred(e,t,r){let n=this.requireChatProvider(e);if(!n.cancelDeferred)throw new I("provider",`Provider ${e.provider} does not support deferred responses`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);await n.cancelDeferred(s,t,o)}async generateImages(e,t,r){try{_(e);let n=this.requireProvider(e);if(!n.generateImages)throw new I("provider",`Provider ${e.provider} does not support image generation`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);return await n.generateImages(s,t,o)}catch(n){return k(e,n,r?.signal?.aborted)}}async classify(e,t,r){try{K(e),L(e,t);let n=this.requireProvider(e);if(!n.classify)throw new I("provider",`Provider ${e.provider} does not support classification`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);return await n.classify(s,t,o)}catch(n){return D(e,n,r?.signal?.aborted)}}}function Kn(e){return new j(e)}function d(e){let t=e.api&&typeof e.api.stream==="function"?e.api:void 0,r=t||!e.api?void 0:e.api,{images:n,classifiers:s}=e,o=t?[t]:Object.values(r??{}).filter((a)=>a!==void 0),i=Object.values(n??{}).filter((a)=>a!==void 0),c=Object.values(s??{}).filter((a)=>a!==void 0);if(o.length===0&&i.length===0&&c.length===0)throw Error(`Provider ${e.id}: at least one of "api", "images", or "classifiers" is required.`);let u=e.models,f=[],m=e.fetchModels,b=()=>{let a=[...u];for(let l of f){let h=a.findIndex((p)=>ht(p)===ht(l)&&p.id===l.id);if(h>=0)a[h]=l;else a.push(l)}return a},w=(a)=>t??r?.[a.api],y=(a,l)=>{let h=w(a);if(!h)return Ce(a,async()=>{throw new I("stream",`Provider ${e.id} has no API implementation for "${a.api}"`)});return l(h)},A={id:e.id,name:e.name??e.id,baseUrl:e.baseUrl,headers:e.headers,auth:e.auth,getModels:()=>b().filter((a)=>Ie(a,"chat")),getAllModels:b,refreshModels:m?async(a)=>{if(a.stored){let p=a.stored.models.filter((C)=>C.provider===e.id).map((C)=>C);if(!await a.publish({update:()=>{f=p}}))return}if(!a.allowNetwork||a.signal.aborted)return;let l=await m(a);if(a.signal.aborted)return;let h=l.filter(U);await a.publish({persist:{models:h,checkedAt:Date.now()},update:()=>{f=h}})}:void 0,filterModels:e.filterModels,filterAllModels:e.filterAllModels,stream:(a,l,h)=>y(a,(p)=>p.stream(a,l,h)),streamSimple:(a,l,h)=>y(a,(p)=>p.streamSimple(a,l,h))};if(o.some((a)=>a.fetchDeferred!==void 0))A.fetchDeferred=(a,l,h)=>Ce(a,async()=>{let p=w(a);if(!p?.fetchDeferred)throw new I("provider",`Provider ${e.id} does not support deferred responses for "${a.api}"`);return p.fetchDeferred(a,l,h)});if(o.some((a)=>a.cancelDeferred!==void 0))A.cancelDeferred=async(a,l,h)=>{let p=w(a);if(!p?.cancelDeferred)throw new I("provider",`Provider ${e.id} cannot cancel deferred responses for "${a.api}"`);await p.cancelDeferred(a,l,h)};if(n&&i.length>0)A.generateImages=async(a,l,h)=>{let p=n[a.api];if(!p)return k(a,new I("provider",`Provider ${e.id} has no image generation implementation for "${a.api}"`));return p.generateImages(a,l,h)};if(s&&c.length>0)A.classify=async(a,l,h)=>{let p=s[a.api];if(!p)return D(a,new I("provider",`Provider ${e.id} has no classifier implementation for "${a.api}"`));return p.classify(a,l,h)};return A}function ki(e,t){return Ie(e,"chat")&&e.api===t}function Q(e,t){let r=t.input+t.cacheRead+t.cacheWrite,n=e.cost,s=-1;for(let c of e.cost.tiers??[])if(r>c.inputTokensAbove&&c.inputTokensAbove>s)n=c,s=c.inputTokensAbove;let o=t.cacheWrite1h??0,i=t.cacheWrite-o;return t.cost.input=n.input/1e6*t.input,t.cost.output=n.output/1e6*t.output,t.cost.cacheRead=n.cacheRead/1e6*t.cacheRead,t.cost.cacheWrite=(n.cacheWrite*i+n.input*2*o)/1e6,t.cost.total=t.cost.input+t.cost.output+t.cost.cacheRead+t.cost.cacheWrite,t.cost}var S=["off","minimal","low","medium","high","xhigh","max"];function Qr(e){if(!e.reasoning)return["off"];return S.filter((t)=>{let r=e.thinkingLevelMap?.[t];if(r===null)return!1;if(t==="xhigh"||t==="max")return r!==void 0;return!0})}function G(e,t){let r=Qr(e);if(r.includes(t))return t;let n=S.indexOf(t);if(n===-1)return r[0]??"off";for(let s=n;s<S.length;s++){let o=S[s];if(r.includes(o))return o}for(let s=n-1;s>=0;s--){let o=S[s];if(r.includes(o))return o}return r[0]??"off"}function Ri(e,t){if(!e||!t)return!1;return ht(e)===ht(t)&&e.id===t.id&&e.provider===t.provider}
|
|
12
|
-
export{
|
|
11
|
+
`),...r.size>0?{sections:Object.fromEntries(r)}:{},...s.length>0?{toolsAdded:s}:{},timestamp:n??0}}function Ho(e){let t=Xr(e);return t?U(t):""}function Oe(e){let t=Xr(e.messages),r=e.messages.filter((n)=>n.role!=="system");return{messages:t?[t,...r]:r}}function re(e,t){return t?e:Oe(e)}function ot(e){return{name:e.name,description:e.description,parameters:JSON.parse(JSON.stringify(e.parameters)),...e.constrainedSampling===void 0?{}:{constrainedSampling:e.constrainedSampling}}}function Qn(e,t){return JSON.stringify(ot(e))===JSON.stringify(ot(t))}function qo(e,t){let r=new Map(e.map((s)=>[s.name,s])),n=new Map(t.map((s)=>[s.name,s]));return{toolsAdded:t.filter((s)=>{let o=r.get(s.name);return o===void 0||!Qn(o,s)}).map(ot),toolsRemoved:e.filter((s)=>{let o=n.get(s.name);return o===void 0||!Qn(s,o)}).map((s)=>({name:s.name}))}}function ye(e){let t=new Map;for(let r of e){if(!x(r))continue;for(let n of r.toolsAdded??[])t.set(n.name,n)}return[...t.values()]}function ki(e){let t=new Map;for(let r of e){if(!x(r))continue;for(let n of r.toolsAdded??[]){let s=t.get(n.name);if(s!==void 0&&!Qn(s,n))return!0;t.set(n.name,n)}}return!1}function vi(e){let t=new Set;for(let r of e){if(!x(r))continue;if((r.toolsRemoved?.length??0)>0)return!0;for(let n of r.toolsAdded??[]){if(t.has(n.name))return!0;t.add(n.name)}}return!1}function be(e,t){let r=t&&!vi(e);return{requestTools:r?de(e)?.toolsAdded??[]:oe(e),anchorsAdditions:r}}var ie={chat:!0,image:!0,classifier:!0};function j(e){return Object.hasOwn(ie,ht(e))}function ae(e){return{...e,models:e.models.filter(j)}}function W(e,t){if(!e&&!t)return;let r={...e};for(let[n,s]of Object.entries(t??{})){let o=n.toLowerCase();for(let i of Object.keys(r))if(i.toLowerCase()===o)delete r[i];r[n]=s}return r}class N{providers=new Map;credentials;modelsStore;authContext;refreshGenerations=new Map;refreshControllers=new Map;publicationChains=new Map;constructor(e){this.credentials=e?.credentials??new jn,this.modelsStore=e?.modelsStore??new Vn,this.authContext=e?.authContext??$o()}setProvider(e){this.supersedeProviderRefresh(e.id),this.providers.set(e.id,e)}deleteProvider(e){this.supersedeProviderRefresh(e),this.providers.delete(e)}clearProviders(){for(let e of new Set([...this.providers.keys(),...this.refreshControllers.keys()]))this.supersedeProviderRefresh(e);this.providers.clear()}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}getModels(e){if(e!==void 0){let r=this.providers.get(e);if(!r)return[];try{return r.getModels()}catch{return[]}}let t=[];for(let r of this.providers.values())try{t.push(...r.getModels())}catch{}return t}getAllModels(e){if(e!==void 0){let r=this.providers.get(e);if(!r)return[];try{return r.getAllModels?.()??r.getModels()}catch{return[]}}let t=[];for(let r of this.providers.values())try{t.push(...r.getAllModels?.()??r.getModels())}catch{}return t}getModelsOfType(e,t){return this.getAllModels(t).filter((r)=>Me(r,e))}getModel(e,t){return this.getModels(e).find((r)=>r.id===t)}getModelOfType(e,t,r){return this.getModelsOfType(e,t).find((n)=>n.id===r)}supersedeProviderRefresh(e){let t=(this.refreshGenerations.get(e)??0)+1;this.refreshGenerations.set(e,t);let r=this.refreshControllers.get(e);if(r)this.refreshControllers.delete(e),r.abort();return t}beginProviderRefresh(e){let t=this.supersedeProviderRefresh(e),r=new AbortController;return this.refreshControllers.set(e,r),{generation:t,controller:r}}publishProviderModels(e,t,r,n){let s=this.publicationChains.get(e)??Promise.resolve(),o=(async()=>{if(await s.catch(()=>{}),r.aborted||this.refreshGenerations.get(e)!==t)return!1;if(n.persist===null)await this.modelsStore.delete(e,{signal:r});else if(n.persist!==void 0)await this.modelsStore.write(e,structuredClone(n.persist),{signal:r});if(r.aborted||this.refreshGenerations.get(e)!==t)return!1;return n.update?.(),!0})(),i=o.catch(()=>{});return this.publicationChains.set(e,i),i.then(()=>{if(this.publicationChains.get(e)===i)this.publicationChains.delete(e)}),v(o,r)}async runProviderRefreshPhase(e,t,r,n,s,o){let i=await this.modelsStore.read(e.id,{signal:o});await e.refreshModels({credential:t,stored:i?ae(structuredClone(i)):void 0,publish:(c)=>this.publishProviderModels(e.id,s,o,c),allowNetwork:r,force:r?n:void 0,signal:o,baseUrl:e.baseUrl})}async refresh(e={}){let t=e.allowNetwork??!0,r=g(e.signal),n=new Map;if(r.aborted)return{aborted:!0,errors:n};let s=e.providers?new Set(e.providers):void 0,o=Array.from(this.providers.values()).filter((c)=>c.refreshModels!==void 0&&(!s||s.has(c.id))),i=Promise.all(o.map(async(c)=>{let{generation:u,controller:f}=this.beginProviderRefresh(c.id),m=AbortSignal.any([r,f.signal]),b=(async()=>{let w,y;try{w=await this.readCredential(c.id,m)}catch(a){y=a}if(await this.runProviderRefreshPhase(c,w,!1,void 0,u,m),y!==void 0)throw y;if(!t||m.aborted)return;let A=await this.resolveRefreshCredential(c,w,m);if(!A)return;await this.runProviderRefreshPhase(c,A,!0,e.force,u,m)})();try{await v(b,m)}catch(w){if(!m.aborted)n.set(c.id,w instanceof Error?w:new I("model_source",`Model refresh failed for ${c.id}`,{cause:w}))}finally{if(this.refreshControllers.get(c.id)===f)this.refreshControllers.delete(c.id)}}));try{await v(i,r)}catch(c){if(!r.aborted)throw c}return{aborted:r.aborted,errors:new Map(n)}}async resolveRefreshCredential(e,t,r){if(t?.type==="oauth"){let i=e.auth.oauth;if(!i)return;if(Date.now()<t.expires)return t;if(r.aborted)return;return T(this.credentials,e.id,i,(c)=>Date.now()>=c.expires,r)}let n=e.auth.apiKey;if(!n)return;let s=t?.type==="api_key"?t:void 0,o=await n.resolve({ctx:this.authContext,credential:s,signal:r});if(!o)return;return{type:"api_key",key:o.auth.apiKey,env:o.env}}async readCredential(e,t){try{return await this.credentials.read(e,{signal:t})}catch(r){throw new I("auth",`Credential store read failed for ${e}`,{cause:r})}}async checkProviderAuth(e,t,r){if(t?.type==="oauth")return e.auth.oauth?{source:"OAuth",type:"oauth"}:void 0;let n=e.auth.apiKey;if(!n)return;if(n.check)try{return await n.check({ctx:this.authContext,credential:t?.type==="api_key"?t:void 0,signal:r})}catch(o){throw new I("auth",`API key auth check failed for provider ${e.id}`,{cause:o})}let s=await E(e,this.credentials,this.authContext,{signal:r});return s?{source:s.source,type:"api_key"}:void 0}checkAuth(e,t){let r=g(t?.signal),n=(async()=>{r.throwIfAborted();let s=this.providers.get(e);if(!s)return;return this.checkProviderAuth(s,await this.readCredential(e,r),r)})();return v(n,r)}async getAuthenticatedProviders(e,t){t.throwIfAborted();let r=e?[this.providers.get(e)].filter((s)=>s!==void 0):this.getProviders();return(await Promise.all(r.map(async(s)=>{let o=await this.readCredential(s.id,t);return{provider:s,credential:o,auth:await this.checkProviderAuth(s,o,t)}}))).filter((s)=>s.auth!==void 0)}getAvailable(e,t){let r=g(t?.signal),n=(async()=>(await this.getAuthenticatedProviders(e,r)).flatMap(({provider:o,credential:i})=>{let c=o.getModels();return o.filterModels?.(c,i)??c}))();return v(n,r)}async getAvailableOfType(e,t,r){return(await this.getAllAvailable(t,r)).filter((n)=>Me(n,e))}getAllAvailable(e,t){let r=g(t?.signal),n=(async()=>(await this.getAuthenticatedProviders(e,r)).flatMap(({provider:o,credential:i})=>{let c=o.getAllModels?.()??o.getModels();if(o.filterAllModels)return o.filterAllModels(c,i);if(!o.filterModels)return c;let u=new Set(o.filterModels(o.getModels(),i).map((f)=>f.id));return c.filter((f)=>!Me(f,"chat")||u.has(f.id))}))();return v(n,r)}async getAuth(e,t){let r=g(t?.signal),n=typeof e==="string"?e:e.provider,s=this.providers.get(n);if(!s)return;let o=await E(s,this.credentials,this.authContext,{...t,signal:r});if(!o||typeof e==="string"||!e.headers)return o;return{...o,auth:{...o.auth,headers:W(o.auth.headers,e.headers)}}}async login(e,t,r,n){let s=g(r.signal);s.throwIfAborted();let o=this.providers.get(e);if(!o)throw new I("provider",`Unknown provider: ${e}`);let i=t==="oauth"?o.auth.oauth:o.auth.apiKey;if(!i?.login)throw new I("auth",`${o.name} does not support ${t} login`);let c=i.login({...r,signal:s},n),u=await v(c,s),f=!1,m,b=new Promise((y)=>{m=y}),w=this.credentials.modify(e,async()=>(f=!0,m?.(),u),{signal:s});w.catch(()=>{});try{await new Promise((y,A)=>{let a=()=>{if(!f)A(s.reason)};if(s.addEventListener("abort",a,{once:!0}),Promise.race([b,w]).then(()=>{s.removeEventListener("abort",a),y()},(l)=>{s.removeEventListener("abort",a),A(l)}),s.aborted)a()}),await w}catch(y){throw s.throwIfAborted(),new I("auth",`Credential store modify failed for ${e}`,{cause:y})}return u}async logout(e,t){let r=g(t?.signal);r.throwIfAborted();try{await this.credentials.delete(e,{signal:r})}catch(n){throw r.throwIfAborted(),new I("auth",`Credential store delete failed for ${e}`,{cause:n})}}requireProvider(e){let t=this.providers.get(e.provider);if(!t)throw new I("provider",`Unknown provider: ${e.provider}`);return t}requireChatProvider(e){return q(e),this.requireProvider(e)}async applyAuth(e,t){this.requireProvider(e);let r=await this.getAuth(e,{apiKey:t?.apiKey,env:t?.env,signal:t?.signal});if(!r)throw new I("auth",`Provider is not configured: ${e.provider}`);let n=r.auth,s=t?.apiKey??n.apiKey,o=W(n.headers,t?.headers);if(t?.transformHeaders)o=await t.transformHeaders(o??{});let i=r.env||t?.env?{...r.env??{},...t?.env??{}}:void 0,c=n.baseUrl?{...e,baseUrl:n.baseUrl}:e,{transformHeaders:u,...f}=t??{},m={...f,apiKey:s,headers:o,env:i};return{requestModel:c,requestOptions:m}}stream(e,t,r){let n=ft(t);return Ie(e,async()=>{let s=this.requireChatProvider(e),{requestModel:o,requestOptions:i}=await this.applyAuth(e,r);return s.stream(o,n,i)})}async complete(e,t,r){return this.stream(e,t,r).result()}streamSimple(e,t,r){let n=ft(t);return Ie(e,async()=>{let s=this.requireChatProvider(e),{requestModel:o,requestOptions:i}=await this.applyAuth(e,r);return s.streamSimple(o,n,i)})}async completeSimple(e,t,r){return this.streamSimple(e,t,r).result()}streamDeferred(e,t,r){return Ie(e,async()=>{let n=this.requireChatProvider(e);if(!n.fetchDeferred)throw new I("provider",`Provider ${e.provider} does not support deferred responses`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);return n.fetchDeferred(s,t,o)})}async fetchDeferred(e,t,r){return this.streamDeferred(e,t,r).result()}async cancelDeferred(e,t,r){let n=this.requireChatProvider(e);if(!n.cancelDeferred)throw new I("provider",`Provider ${e.provider} does not support deferred responses`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);await n.cancelDeferred(s,t,o)}async generateImages(e,t,r){try{_(e);let n=this.requireProvider(e);if(!n.generateImages)throw new I("provider",`Provider ${e.provider} does not support image generation`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);return await n.generateImages(s,t,o)}catch(n){return k(e,n,r?.signal?.aborted)}}async classify(e,t,r){try{K(e),L(e,t);let n=this.requireProvider(e);if(!n.classify)throw new I("provider",`Provider ${e.provider} does not support classification`);let{requestModel:s,requestOptions:o}=await this.applyAuth(e,r);return await n.classify(s,t,o)}catch(n){return D(e,n,r?.signal?.aborted)}}}function Xn(e){return new N(e)}function d(e){let t=e.api&&typeof e.api.stream==="function"?e.api:void 0,r=t||!e.api?void 0:e.api,{images:n,classifiers:s}=e,o=t?[t]:Object.values(r??{}).filter((a)=>a!==void 0),i=Object.values(n??{}).filter((a)=>a!==void 0),c=Object.values(s??{}).filter((a)=>a!==void 0);if(o.length===0&&i.length===0&&c.length===0)throw Error(`Provider ${e.id}: at least one of "api", "images", or "classifiers" is required.`);let u=e.models,f=[],m=e.fetchModels,b=()=>{let a=[...u];for(let l of f){let h=a.findIndex((p)=>ht(p)===ht(l)&&p.id===l.id);if(h>=0)a[h]=l;else a.push(l)}return a},w=(a)=>t??r?.[a.api],y=(a,l)=>{let h=w(a);if(!h)return Ie(a,async()=>{throw new I("stream",`Provider ${e.id} has no API implementation for "${a.api}"`)});return l(h)},A={id:e.id,name:e.name??e.id,baseUrl:e.baseUrl,headers:e.headers,auth:e.auth,getModels:()=>b().filter((a)=>Me(a,"chat")),getAllModels:b,refreshModels:m?async(a)=>{if(a.stored){let p=a.stored.models.filter((C)=>C.provider===e.id).map((C)=>C);if(!await a.publish({update:()=>{f=p}}))return}if(!a.allowNetwork||a.signal.aborted)return;let l=await m(a);if(a.signal.aborted)return;let h=l.filter(j);await a.publish({persist:{models:h,checkedAt:Date.now()},update:()=>{f=h}})}:void 0,filterModels:e.filterModels,filterAllModels:e.filterAllModels,stream:(a,l,h)=>y(a,(p)=>p.stream(a,l,h)),streamSimple:(a,l,h)=>y(a,(p)=>p.streamSimple(a,l,h))};if(o.some((a)=>a.fetchDeferred!==void 0))A.fetchDeferred=(a,l,h)=>Ie(a,async()=>{let p=w(a);if(!p?.fetchDeferred)throw new I("provider",`Provider ${e.id} does not support deferred responses for "${a.api}"`);return p.fetchDeferred(a,l,h)});if(o.some((a)=>a.cancelDeferred!==void 0))A.cancelDeferred=async(a,l,h)=>{let p=w(a);if(!p?.cancelDeferred)throw new I("provider",`Provider ${e.id} cannot cancel deferred responses for "${a.api}"`);await p.cancelDeferred(a,l,h)};if(n&&i.length>0)A.generateImages=async(a,l,h)=>{let p=n[a.api];if(!p)return k(a,new I("provider",`Provider ${e.id} has no image generation implementation for "${a.api}"`));return p.generateImages(a,l,h)};if(s&&c.length>0)A.classify=async(a,l,h)=>{let p=s[a.api];if(!p)return D(a,new I("provider",`Provider ${e.id} has no classifier implementation for "${a.api}"`));return p.classify(a,l,h)};return A}function Ri(e,t){return Me(e,"chat")&&e.api===t}function Q(e,t){let r=t.input+t.cacheRead+t.cacheWrite,n=e.cost,s=-1;for(let c of e.cost.tiers??[])if(r>c.inputTokensAbove&&c.inputTokensAbove>s)n=c,s=c.inputTokensAbove;let o=t.cacheWrite1h??0,i=t.cacheWrite-o;return t.cost.input=n.input/1e6*t.input,t.cost.output=n.output/1e6*t.output,t.cost.cacheRead=n.cacheRead/1e6*t.cacheRead,t.cost.cacheWrite=(n.cacheWrite*i+n.input*2*o)/1e6,t.cost.total=t.cost.input+t.cost.output+t.cost.cacheRead+t.cost.cacheWrite,t.cost}var S=["off","minimal","low","medium","high","xhigh","max"];function Jr(e){if(!e.reasoning)return["off"];return S.filter((t)=>{let r=e.thinkingLevelMap?.[t];if(r===null)return!1;if(t==="xhigh"||t==="max")return r!==void 0;return!0})}function G(e,t){let r=Jr(e);if(r.includes(t))return t;let n=S.indexOf(t);if(n===-1)return r[0]??"off";for(let s=n;s<S.length;s++){let o=S[s];if(r.includes(o))return o}for(let s=n-1;s>=0;s--){let o=S[s];if(r.includes(o))return o}return r[0]??"off"}function Ci(e,t){if(!e||!t)return!1;return ht(e)===ht(t)&&e.id===t.id&&e.provider===t.provider}
|
|
12
|
+
export{Ie,te,$o,jn,I,Vn,ht,Me,dr,U,Le,Kn,ft,de,$t,oe,Xr,Ho,Oe,re,ot,Qn,qo,ye,ki,vi,be,Xn,d,Ri,Q,Jr,G,Ci};
|