@fugood/buttress-server-poc 2.23.0-beta.27 → 2.23.0-beta.28
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/lib/index.js +1 -1
- package/package.json +3 -3
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{initTRPC as e}from"@trpc/server";import{createRequire as t}from"node:module";const n=t(import.meta.url);import{z as r}from"zod";import{gguf as o}from"@huggingface/gguf";import{getBackendDevicesInfo as a,isLibVariantAvailable as i,loadModel as s}from"@fugood/llama.node";import{initWhisper as l}from"@fugood/whisper.node";import{default as c}from"@iarna/toml";var u,d,p={285:e=>{e.exports=function(e,t){if("string"==typeof e)return i(e);if("number"==typeof e)return a(e,t);return null},e.exports.format=a,e.exports.parse=i;var t=/\B(?=(\d{3})+(?!\d))/g,n=/(?:\.0*|(\.[^0]+)0+)$/,r={b:1,kb:1024,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)},o=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function a(e,o){if(!Number.isFinite(e))return null;var a=Math.abs(e),i=o&&o.thousandsSeparator||"",s=o&&o.unitSeparator||"",l=o&&void 0!==o.decimalPlaces?o.decimalPlaces:2,c=Boolean(o&&o.fixedDecimals),u=o&&o.unit||"";u&&r[u.toLowerCase()]||(u=a>=r.pb?"PB":a>=r.tb?"TB":a>=r.gb?"GB":a>=r.mb?"MB":a>=r.kb?"KB":"B");var d=(e/r[u.toLowerCase()]).toFixed(l);return c||(d=d.replace(n,"$1")),i&&(d=d.split(".").map(function(e,n){return 0===n?e.replace(t,i):e}).join(".")),d+s+u}function i(e){if("number"==typeof e&&!isNaN(e))return e;if("string"!=typeof e)return null;var t,n=o.exec(e),a="b";return n?(t=parseFloat(n[1]),a=n[4].toLowerCase()):(t=parseInt(e,10),a="b"),isNaN(t)?null:Math.floor(r[a]*t)}}},m={};function f(e){var t=m[e];if(void 0!==t)return t.exports;var n=m[e]={exports:{}};return p[e](n,n.exports,f),n.exports}d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var n=Object.create(null);f.r(n);var r={};u=u||[null,d({}),d([]),d(d)];for(var o=2&t&&e;("object"==typeof o||"function"==typeof o)&&!~u.indexOf(o);o=d(o))Object.getOwnPropertyNames(o).forEach(t=>r[t]=()=>e[t]);return r.default=()=>e,f.d(n,r),n},f.d=(e,t)=>{for(var n in t)f.o(t,n)&&!f.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var h={};f.r(h),f.d(h,{finalizeGenerator:()=>Ur,getCapabilities:()=>Ar,getModelIdentifier:()=>jr,ggmlLlm:()=>Fr,ggmlStt:()=>qr,startGenerator:()=>Ir});const y={PARSE_ERROR:-32700,BAD_REQUEST:-32600,INTERNAL_SERVER_ERROR:-32603,NOT_IMPLEMENTED:-32603,BAD_GATEWAY:-32603,SERVICE_UNAVAILABLE:-32603,GATEWAY_TIMEOUT:-32603,UNAUTHORIZED:-32001,PAYMENT_REQUIRED:-32002,FORBIDDEN:-32003,NOT_FOUND:-32004,METHOD_NOT_SUPPORTED:-32005,TIMEOUT:-32008,CONFLICT:-32009,PRECONDITION_FAILED:-32012,PAYLOAD_TOO_LARGE:-32013,UNSUPPORTED_MEDIA_TYPE:-32015,UNPROCESSABLE_CONTENT:-32022,PRECONDITION_REQUIRED:-32028,TOO_MANY_REQUESTS:-32029,CLIENT_CLOSED_REQUEST:-32099},g={[-32700]:"PARSE_ERROR",[-32600]:"BAD_REQUEST",[-32603]:"INTERNAL_SERVER_ERROR",[-32001]:"UNAUTHORIZED",[-32002]:"PAYMENT_REQUIRED",[-32003]:"FORBIDDEN",[-32004]:"NOT_FOUND",[-32005]:"METHOD_NOT_SUPPORTED",[-32008]:"TIMEOUT",[-32009]:"CONFLICT",[-32012]:"PRECONDITION_FAILED",[-32013]:"PAYLOAD_TOO_LARGE",[-32015]:"UNSUPPORTED_MEDIA_TYPE",[-32022]:"UNPROCESSABLE_CONTENT",[-32028]:"PRECONDITION_REQUIRED",[-32029]:"TOO_MANY_REQUESTS",[-32099]:"CLIENT_CLOSED_REQUEST"};function b(e){return!!e&&!Array.isArray(e)&&"object"==typeof e}const v="function"==typeof Symbol&&!!Symbol.asyncIterator;function w(e){return v&&b(e)&&Symbol.asyncIterator in e}const _=e=>e();function x(e){return e}var S=Object.create,k=Object.defineProperty,E=Object.getOwnPropertyDescriptor,C=Object.getOwnPropertyNames,B=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty,$=(e,t)=>function(){return t||(0,e[C(e)[0]])((t={exports:{}}).exports,t),t.exports},O=(e,t,n)=>(n=null!=e?S(B(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var o,a=C(t),i=0,s=a.length;i<s;i++)o=a[i],M.call(e,o)||o===n||k(e,o,{get:(e=>t[e]).bind(null,o),enumerable:!(r=E(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:k(n,"default",{value:e,enumerable:!0}),e));const N={PARSE_ERROR:400,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_SUPPORTED:405,TIMEOUT:408,CONFLICT:409,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,UNSUPPORTED_MEDIA_TYPE:415,UNPROCESSABLE_CONTENT:422,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504};function T(e){var t;return null!==(t=N[e])&&void 0!==t?t:500}function P(e){return T(e.code)}var I=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(e,t){function n(e){return t.exports=n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t.exports.__esModule=!0,t.exports.default=t.exports,n(e)}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports}}),U=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(e,t){var n=I().default;t.exports=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)},t.exports.__esModule=!0,t.exports.default=t.exports}}),A=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(e,t){var n=I().default,r=U();t.exports=function(e){var t=r(e,"string");return"symbol"==n(t)?t:t+""},t.exports.__esModule=!0,t.exports.default=t.exports}}),F=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(e,t){var n=A();t.exports=function(e,t,r){return(t=n(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e},t.exports.__esModule=!0,t.exports.default=t.exports}}),q=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(e,t){var n=F();function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}t.exports=function(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?r(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e},t.exports.__esModule=!0,t.exports.default=t.exports}}),j=O(q(),1);function z(e){const{path:t,error:n,config:r}=e,{code:o}=e.error,a={message:n.message,code:y[o],data:{code:o,httpStatus:P(n)}};return r.isDev&&"string"==typeof e.error.stack&&(a.data.stack=e.error.stack),"string"==typeof t&&(a.data.path=t),r.errorFormatter((0,j.default)((0,j.default)({},e),{},{shape:a}))}var R=O(F(),1),D=class extends Error{};function L(e){if(e instanceof G)return e;if(e instanceof Error&&"TRPCError"===e.name)return e;const t=new G({code:"INTERNAL_SERVER_ERROR",cause:e});return e instanceof Error&&e.stack&&(t.stack=e.stack),t}var G=class extends Error{constructor(e){var t,n,r;const o=function(e){if(e instanceof Error)return e;const t=typeof e;return"undefined"!==t&&"function"!==t&&null!==e?"object"!==t?new Error(String(e)):b(e)?Object.assign(new D,e):void 0:void 0}(e.cause);super(null!==(t=null!==(n=e.message)&&void 0!==n?n:null==o?void 0:o.message)&&void 0!==t?t:e.code,{cause:o}),(0,R.default)(this,"cause",void 0),(0,R.default)(this,"code",void 0),this.code=e.code,this.name="TRPCError",null!==(r=this.cause)&&void 0!==r||(this.cause=o)}},J=O(q(),1);function V(e,t){return"error"in t?(0,J.default)((0,J.default)({},t),{},{error:e.transformer.output.serialize(t.error)}):"data"in t.result?(0,J.default)((0,J.default)({},t),{},{result:(0,J.default)((0,J.default)({},t.result),{},{data:e.transformer.output.serialize(t.result.data)})}):t}function H(e,t){return Array.isArray(t)?t.map(t=>V(e,t)):V(e,t)}Error;O(q(),1);async function K(e,t){const{_def:n}=e;let r=n.procedures[t];for(;!r;){const e=Object.keys(n.lazy).find(e=>t.startsWith(e));if(!e)return null;const o=n.lazy[e];await o.load(),r=n.procedures[t]}return r}const Y=Symbol();function W(e){return Array.isArray(e)&&e[2]===Y}function Q(e){return"object"==typeof e&&null!==e&&"subscribe"in e}function Z(e){const t={subscribe(t){let n=null,r=!1,o=!1,a=!1;function i(){null!==n?o||(o=!0,"function"==typeof n?n():n&&n.unsubscribe()):a=!0}return n=e({next(e){var n;r||null===(n=t.next)||void 0===n||n.call(t,e)},error(e){var n;r||(r=!0,null===(n=t.error)||void 0===n||n.call(t,e),i())},complete(){var e;r||(r=!0,null===(e=t.complete)||void 0===e||e.call(t),i())}}),a&&i(),{unsubscribe:i}},pipe:(...e)=>e.reduce(X,t)};return t}function X(e,t){return t(e)}function ee(e,t){const n=function(e,t){let n=null;const r=()=>{null==n||n.unsubscribe(),n=null,t.removeEventListener("abort",r)};return new ReadableStream({start(o){n=e.subscribe({next(e){o.enqueue({ok:!0,value:e})},error(e){o.enqueue({ok:!1,error:e}),o.close()},complete(){o.close()}}),t.aborted?r():t.addEventListener("abort",r,{once:!0})},cancel(){r()}})}(e,t),r=n.getReader(),o={async next(){const e=await r.read();if(e.done)return{value:void 0,done:!0};const{value:t}=e;if(!t.ok)throw t.error;return{value:t.value,done:!1}},return:async()=>(await r.cancel(),{value:void 0,done:!0})};return{[Symbol.asyncIterator]:()=>o}}function te(e){let t;try{t=JSON.parse(e)}catch(e){throw new G({code:"PARSE_ERROR",message:"Not JSON-parsable query params",cause:e})}return function(e){try{if(null===e)return null;if(!b(e))throw new Error("Expected object");const t=Object.entries(e).filter(([e,t])=>"string"!=typeof t);if(t.length>0)throw new Error(`Expected connectionParams to be string values. Got ${t.map(([e,t])=>`${e}: ${typeof t}`).join(", ")}`);return e}catch(e){throw new G({code:"PARSE_ERROR",message:"Invalid connection params shape",cause:e})}}(t)}var ne=O(q(),1);function re(e){let t=null;const n=Symbol.for("@trpc/server/http/memo");let r=n;return{read:async()=>{var o;return r!==n||(null!==(o=t)&&void 0!==o||(t=e().catch(e=>{if(e instanceof G)throw e;throw new G({code:"BAD_REQUEST",message:e instanceof Error?e.message:"Invalid input",cause:e})})),r=await t,t=null),r},result:()=>r!==n?r:void 0}}const oe={isMatch(e){var t;return!!(null===(t=e.headers.get("content-type"))||void 0===t?void 0:t.startsWith("application/json"))},async parse(e){var t;const{req:n}=e,r="1"===e.searchParams.get("batch"),o=r?e.path.split(","):[e.path],a=re(async()=>{let t;if("GET"===n.method){const n=e.searchParams.get("input");n&&(t=JSON.parse(n))}else t=await n.json();if(void 0===t)return{};if(!r)return{0:e.router._def._config.transformer.input.deserialize(t)};if(!b(t))throw new G({code:"BAD_REQUEST",message:'"input" needs to be an object when doing a batch call'});const a={};for(const n of o.keys()){const r=t[n];void 0!==r&&(a[n]=e.router._def._config.transformer.input.deserialize(r))}return a}),i=await Promise.all(o.map(async(t,n)=>{const r=await K(e.router,t);return{path:t,procedure:r,getRawInput:async()=>{let t=(await a.read())[n];if("subscription"===(null==r?void 0:r._def.type)){var o,i;const n=null!==(o=null!==(i=e.headers.get("last-event-id"))&&void 0!==i?i:e.searchParams.get("lastEventId"))&&void 0!==o?o:e.searchParams.get("Last-Event-Id");if(n)if(b(t))t=(0,ne.default)((0,ne.default)({},t),{},{lastEventId:n});else{var s;null!==(s=t)&&void 0!==s||(t={lastEventId:n})}}return t},result:()=>{var e;return null===(e=a.result())||void 0===e?void 0:e[n]}}})),s=new Set(i.map(e=>{var t;return null===(t=e.procedure)||void 0===t?void 0:t._def.type}).filter(Boolean));if(s.size>1)throw new G({code:"BAD_REQUEST",message:`Cannot mix procedure types in call: ${Array.from(s).join(", ")}`});const l=null!==(t=s.values().next().value)&&void 0!==t?t:"unknown",c=e.searchParams.get("connectionParams");return{isBatchCall:r,accept:n.headers.get("trpc-accept"),calls:i,type:l,connectionParams:null===c?null:te(c),signal:n.signal,url:e.url}}},ae=[oe,{isMatch(e){var t;return!!(null===(t=e.headers.get("content-type"))||void 0===t?void 0:t.startsWith("multipart/form-data"))},async parse(e){const{req:t}=e;if("POST"!==t.method)throw new G({code:"METHOD_NOT_SUPPORTED",message:"Only POST requests are supported for multipart/form-data requests"});const n=re(async()=>await t.formData()),r=await K(e.router,e.path);return{accept:null,calls:[{path:e.path,getRawInput:n.read,result:n.result,procedure:r}],isBatchCall:!1,type:"mutation",connectionParams:null,signal:t.signal,url:e.url}}},{isMatch(e){var t;return!!(null===(t=e.headers.get("content-type"))||void 0===t?void 0:t.startsWith("application/octet-stream"))},async parse(e){const{req:t}=e;if("POST"!==t.method)throw new G({code:"METHOD_NOT_SUPPORTED",message:"Only POST requests are supported for application/octet-stream requests"});const n=re(async()=>t.body);return{calls:[{path:e.path,getRawInput:n.read,result:n.result,procedure:await K(e.router,e.path)}],isBatchCall:!1,accept:null,type:"mutation",connectionParams:null,signal:t.signal,url:e.url}}}];async function ie(e){const t=function(e){const t=ae.find(t=>t.isMatch(e));if(t)return t;if(!t&&"GET"===e.method)return oe;throw new G({code:"UNSUPPORTED_MEDIA_TYPE",message:e.headers.has("content-type")?`Unsupported content-type "${e.headers.get("content-type")}`:"Missing content-type header"})}(e.req);return await t.parse(e)}function se(e){return b(e)&&"AbortError"===e.name}function le(e="AbortError"){throw new DOMException(e,"AbortError")}function ce(e){return"[object Object]"===Object.prototype.toString.call(e)}var ue=O(F(),1);let de;const pe=new WeakMap,me=()=>{};de=Symbol.toStringTag;var fe,he,ye,ge,be=class e{constructor(e){(0,ue.default)(this,"promise",void 0),(0,ue.default)(this,"subscribers",[]),(0,ue.default)(this,"settlement",null),(0,ue.default)(this,de,"Unpromise"),this.promise="function"==typeof e?new Promise(e):e;const t=this.promise.then(e=>{const{subscribers:t}=this;this.subscribers=null,this.settlement={status:"fulfilled",value:e},null==t||t.forEach(({resolve:t})=>{t(e)})});"catch"in t&&t.catch(e=>{const{subscribers:t}=this;this.subscribers=null,this.settlement={status:"rejected",reason:e},null==t||t.forEach(({reject:t})=>{t(e)})})}subscribe(){let e,t;const{settlement:n}=this;if(null===n){if(null===this.subscribers)throw new Error("Unpromise settled but still has subscribers");const n=function(){let e,t;const n=new Promise((n,r)=>{e=n,t=r});return{promise:n,resolve:e,reject:t}}();this.subscribers=(r=this.subscribers,o=n,[...r,o]),e=n.promise,t=()=>{null!==this.subscribers&&(this.subscribers=function(e,t){const n=e.indexOf(t);return-1!==n?function(e,t){return[...e.slice(0,t),...e.slice(t+1)]}(e,n):e}(this.subscribers,n))}}else{const{status:r}=n;e="fulfilled"===r?Promise.resolve(n.value):Promise.reject(n.reason),t=me}var r,o;return Object.assign(e,{unsubscribe:t})}then(e,t){const n=this.subscribe(),{unsubscribe:r}=n;return Object.assign(n.then(e,t),{unsubscribe:r})}catch(e){const t=this.subscribe(),{unsubscribe:n}=t;return Object.assign(t.catch(e),{unsubscribe:n})}finally(e){const t=this.subscribe(),{unsubscribe:n}=t;return Object.assign(t.finally(e),{unsubscribe:n})}static proxy(t){const n=e.getSubscribablePromise(t);return void 0!==n?n:e.createSubscribablePromise(t)}static createSubscribablePromise(t){const n=new e(t);return pe.set(t,n),pe.set(n,n),n}static getSubscribablePromise(e){return pe.get(e)}static resolve(t){const n="object"==typeof t&&null!==t&&"then"in t&&"function"==typeof t.then?t:Promise.resolve(t);return e.proxy(n).subscribe()}static async any(t){const n=(Array.isArray(t)?t:[...t]).map(e.resolve);try{return await Promise.any(n)}finally{n.forEach(({unsubscribe:e})=>{e()})}}static async race(t){const n=(Array.isArray(t)?t:[...t]).map(e.resolve);try{return await Promise.race(n)}finally{n.forEach(({unsubscribe:e})=>{e()})}}static async raceReferences(e){const t=e.map(ve);try{return await Promise.race(t)}finally{for(const e of t)e.unsubscribe()}}};function ve(e){return be.proxy(e).then(()=>[e])}function we(e,t){const n=e,r=n[Symbol.dispose];return n[Symbol.dispose]=()=>{t(),null==r||r()},n}function _e(e,t){const n=e,r=n[Symbol.asyncDispose];return n[Symbol.asyncDispose]=async()=>{await t(),await(null==r?void 0:r())},n}null!==(he=(fe=Symbol).dispose)&&void 0!==he||(fe.dispose=Symbol()),null!==(ge=(ye=Symbol).asyncDispose)&&void 0!==ge||(ye.asyncDispose=Symbol());const xe=Symbol();function Se(e){let t=null;return we({start(){if(t)throw new Error("Timer already started");return new Promise(n=>{t=setTimeout(()=>n(xe),e)})}},()=>{t&&clearTimeout(t)})}var ke=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js"(e,t){t.exports=function(){var e="function"==typeof SuppressedError?SuppressedError:function(e,t){var n=Error();return n.name="SuppressedError",n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(null!=t){if(Object(t)!==t)throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");if(e)var r=t[Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose")];if(void 0===r&&(r=t[Symbol.dispose||Symbol.for("Symbol.dispose")],e))var o=r;if("function"!=typeof r)throw new TypeError("Object is not disposable.");o&&(r=function(){try{o.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,o=this.e,a=0;function i(){for(;r=n.pop();)try{if(!r.a&&1===a)return a=0,n.push(r),Promise.resolve().then(i);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(i,s)}else a|=1}catch(e){return s(e)}if(1===a)return o!==t?Promise.reject(o):Promise.resolve();if(o!==t)throw o}function s(n){return o=o!==t?new e(n,o):n,i()}return i()}}},t.exports.__esModule=!0,t.exports.default=t.exports}}),Ee=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js"(e,t){t.exports=function(e,t){this.v=e,this.k=t},t.exports.__esModule=!0,t.exports.default=t.exports}}),Ce=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js"(e,t){var n=Ee();t.exports=function(e){return new n(e,0)},t.exports.__esModule=!0,t.exports.default=t.exports}}),Be=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js"(e,t){var n=Ee();function r(e){var t,r;function o(t,r){try{var i=e[t](r),s=i.value,l=s instanceof n;Promise.resolve(l?s.v:s).then(function(n){if(l){var r="return"===t?"return":"next";if(!s.k||n.done)return o(r,n);n=e[r](n).value}a(i.done?"return":"normal",n)},function(e){o("throw",e)})}catch(e){a("throw",e)}}function a(e,n){switch(e){case"return":t.resolve({value:n,done:!0});break;case"throw":t.reject(n);break;default:t.resolve({value:n,done:!1})}(t=t.next)?o(t.key,t.arg):r=null}this._invoke=function(e,n){return new Promise(function(a,i){var s={key:e,arg:n,resolve:a,reject:i,next:null};r?r=r.next=s:(t=r=s,o(e,n))})},"function"!=typeof e.return&&(this.return=void 0)}r.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},r.prototype.next=function(e){return this._invoke("next",e)},r.prototype.throw=function(e){return this._invoke("throw",e)},r.prototype.return=function(e){return this._invoke("return",e)},t.exports=function(e){return function(){return new r(e.apply(this,arguments))}},t.exports.__esModule=!0,t.exports.default=t.exports}}),Me=O(ke(),1),$e=O(Ce(),1),Oe=O(Be(),1);function Ne(e){const t=e[Symbol.asyncIterator]();return t[Symbol.asyncDispose]?t:_e(t,async()=>{var e;await(null===(e=t.return)||void 0===e?void 0:e.call(t))})}function Te(){return(Te=(0,Oe.default)(function*(e,t){try{var n=(0,Me.default)();const r=n.a(Ne(e)),o=n.u(Se(t.maxDurationMs)).start();let a;for(;;){if(a=yield(0,$e.default)(be.race([r.next(),o])),a===xe&&le(),a.done)return a;yield a.value,a=null}}catch(e){n.e=e}finally{yield(0,$e.default)(n.d())}})).apply(this,arguments)}function Pe(){return(Pe=(0,Oe.default)(function*(e,t){try{var n=(0,Me.default)();const r=n.a(Ne(e));let o;const a=n.u(Se(t.gracePeriodMs));let i=t.count,s=new Promise(()=>{});for(;;){if(o=yield(0,$e.default)(be.race([r.next(),s])),o===xe&&le(),o.done)return o.value;yield o.value,0===--i&&(s=a.start()),o=null}}catch(e){n.e=e}finally{yield(0,$e.default)(n.d())}})).apply(this,arguments)}function Ie(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var Ue=O(ke(),1),Ae=O(Ce(),1),Fe=O(Be(),1);function qe(){let e="idle",t=Ie();const n=[],r=new Set,o=[];function a(n){if("pending"!==e)return;const a=function(e,t){const n=e[Symbol.asyncIterator]();let r="idle";function o(){r="done",t=()=>{}}return{pull:function(){"idle"===r&&(r="pending",n.next().then(e=>{if(e.done)return r="done",t({status:"return",value:e.value}),void o();r="idle",t({status:"yield",value:e.value})}).catch(e=>{t({status:"error",error:e}),o()}))},destroy:async()=>{var e;o(),await(null===(e=n.return)||void 0===e?void 0:e.call(n))}}}(n,n=>{if("pending"===e){switch(n.status){case"yield":o.push([a,n]);break;case"return":r.delete(a);break;case"error":o.push([a,n]),r.delete(a)}t.resolve()}});r.add(a),a.pull()}return{add(t){switch(e){case"idle":n.push(t);break;case"pending":a(t)}},[Symbol.asyncIterator]:()=>(0,Fe.default)(function*(){try{var i=(0,Ue.default)();if("idle"!==e)throw new Error("Cannot iterate twice");e="pending";i.a(_e({},async()=>{e="done";const n=[];if(await Promise.all(Array.from(r.values()).map(async e=>{try{await e.destroy()}catch(e){n.push(e)}})),o.length=0,r.clear(),t.resolve(),n.length>0)throw new AggregateError(n)}));for(;n.length>0;)a(n.shift());for(;r.size>0;){for(yield(0,Ae.default)(t.promise);o.length>0;){const[e,t]=o.shift();switch(t.status){case"yield":yield t.value,e.pull();break;case"error":throw t.error}}t=Ie()}}catch(e){i.e=e}finally{yield(0,Ae.default)(i.d())}})()}}function je(e){const t=e[Symbol.asyncIterator]();return new ReadableStream({async cancel(){var e;await(null===(e=t.return)||void 0===e?void 0:e.call(t))},async pull(e){const n=await t.next();n.done?e.close():e.enqueue(n.value)}})}var ze=O(ke(),1),Re=O(Ce(),1),De=O(Be(),1);const Le=Symbol("ping");function Ge(e,t){return Je.apply(this,arguments)}function Je(){return(Je=(0,De.default)(function*(e,t){try{var n=(0,ze.default)();const o=n.a(Ne(e));let a,i=o.next();for(;;)try{var r=(0,ze.default)();const e=r.u(Se(t));if(a=yield(0,Re.default)(be.race([i,e.start()])),a===xe){yield Le;continue}if(a.done)return a.value;i=o.next(),yield a.value,a=null}catch(e){r.e=e}finally{r.d()}}catch(e){n.e=e}finally{yield(0,Re.default)(n.d())}})).apply(this,arguments)}var Ve=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js"(e,t){function n(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return(n=function(e){this.s=e,this.n=e.next}).prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new n(e)}t.exports=function(e){var t,r,o,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,o=Symbol.iterator);a--;){if(r&&null!=(t=e[r]))return t.call(e);if(o&&null!=(t=e[o]))return new n(t.call(e));r="@@asyncIterator",o="@@iterator"}throw new TypeError("Object is not async iterable")},t.exports.__esModule=!0,t.exports.default=t.exports}}),He=O(Ce(),1),Ke=O(Be(),1),Ye=O(ke(),1),We=O(Ve(),1);function Qe(e){return(b(e)||"function"==typeof e)&&"function"==typeof(null==e?void 0:e.then)&&"function"==typeof(null==e?void 0:e.catch)}var Ze=class extends Error{constructor(e){super("Max depth reached at path: "+e.join(".")),this.path=e}};function Xe(){return Xe=(0,Ke.default)(function*(e){const{data:t}=e;let n=0;const r=qe();function o(e){const t=n++,o=e(t);return r.add(o),t}function a(t,n){return o(function(){var r=(0,Ke.default)(function*(r){const o=s(n);o&&(t.catch(t=>{var r;null===(r=e.onError)||void 0===r||r.call(e,{error:t,path:n})}),t=Promise.reject(o));try{const e=yield(0,He.default)(t);yield[r,0,c(e,n)]}catch(t){var a,i;null===(a=e.onError)||void 0===a||a.call(e,{error:t,path:n}),yield[r,1,null===(i=e.formatError)||void 0===i?void 0:i.call(e,{error:t,path:n})]}});return function(e){return r.apply(this,arguments)}}())}function i(t,n){return o(function(){var r=(0,Ke.default)(function*(r){try{var o=(0,Ye.default)();const l=s(n);if(l)throw l;const u=o.a(Ne(t));try{for(;;){const e=yield(0,He.default)(u.next());if(e.done){yield[r,0,c(e.value,n)];break}yield[r,1,c(e.value,n)]}}catch(t){var a,i;null===(a=e.onError)||void 0===a||a.call(e,{error:t,path:n}),yield[r,2,null===(i=e.formatError)||void 0===i?void 0:i.call(e,{error:t,path:n})]}}catch(e){o.e=e}finally{yield(0,He.default)(o.d())}});return function(e){return r.apply(this,arguments)}}())}function s(t){return e.maxDepth&&t.length>e.maxDepth?new Ze(t):null}function l(t,n){if(Qe(t))return[0,a(t,n)];if(w(t)){if(e.maxDepth&&n.length>=e.maxDepth)throw new Error("Max depth reached");return[1,i(t,n)]}return null}function c(e,t){if(void 0===e)return[[]];const n=l(e,t);if(n)return[[0],[null,...n]];if(!1===ce(r=e)||void 0!==(o=r.constructor)&&(!1===ce(a=o.prototype)||!1===a.hasOwnProperty("isPrototypeOf")))return[[e]];var r,o,a;const i={},s=[];for(const[n,r]of Object.entries(e)){const e=l(r,[...t,n]);e?(i[n]=0,s.push([n,...e])):i[n]=r}return[[i],...s]}const u={};for(const[e,n]of Object.entries(t))u[e]=c(n,[e]);yield u;let d=r;e.pingMs&&(d=Ge(r,e.pingMs));var p,m=!1,f=!1;try{for(var h,y=(0,We.default)(d);m=!(h=yield(0,He.default)(y.next())).done;m=!1){const e=h.value;yield e}}catch(e){f=!0,p=e}finally{try{m&&null!=y.return&&(yield(0,He.default)(y.return()))}finally{if(f)throw p}}}),Xe.apply(this,arguments)}function et(e){let t=je(function(e){return Xe.apply(this,arguments)}(e));const{serialize:n}=e;return n&&(t=t.pipeThrough(new TransformStream({transform(e,t){e===Le?t.enqueue(Le):t.enqueue(n(e))}}))),t.pipeThrough(new TransformStream({transform(e,t){e===Le?t.enqueue(" "):t.enqueue(JSON.stringify(e)+"\n")}})).pipeThrough(new TextEncoderStream)}Error;var tt=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncGeneratorDelegate.js"(e,t){var n=Ee();t.exports=function(e){var t={},r=!1;function o(t,o){return r=!0,o=new Promise(function(n){n(e[t](o))}),{done:!1,value:new n(o,1)}}return t["undefined"!=typeof Symbol&&Symbol.iterator||"@@iterator"]=function(){return this},t.next=function(e){return r?(r=!1,e):o("next",e)},"function"==typeof e.throw&&(t.throw=function(e){if(r)throw r=!1,e;return o("throw",e)}),"function"==typeof e.return&&(t.return=function(e){return r?(r=!1,e):o("return",e)}),t},t.exports.__esModule=!0,t.exports.default=t.exports}}),nt=O(Ve(),1),rt=O(Ce(),1),ot=O(Be(),1),at=O(tt(),1);O(ke(),1);const it="ping",st="serialized-error",lt="connected",ct="return";function ut(e){var t,n,r,o,a;const{serialize:i=x}=e,s={enabled:null!==(t=null===(n=e.ping)||void 0===n?void 0:n.enabled)&&void 0!==t&&t,intervalMs:null!==(r=null===(o=e.ping)||void 0===o?void 0:o.intervalMs)&&void 0!==r?r:1e3},l=null!==(a=e.client)&&void 0!==a?a:{};if(s.enabled&&l.reconnectAfterInactivityMs&&s.intervalMs>l.reconnectAfterInactivityMs)throw new Error(`Ping interval must be less than client reconnect interval to prevent unnecessary reconnection - ping.intervalMs: ${s.intervalMs} client.reconnectAfterInactivityMs: ${l.reconnectAfterInactivityMs}`);function c(){return c=(0,ot.default)(function*(){yield{event:lt,data:JSON.stringify(l)};let t,n,r=e.data;e.emitAndEndImmediately&&(r=function(e,t){return Pe.apply(this,arguments)}(r,{count:1,gracePeriodMs:1})),e.maxDurationMs&&e.maxDurationMs>0&&e.maxDurationMs!==1/0&&(r=function(e,t){return Te.apply(this,arguments)}(r,{maxDurationMs:e.maxDurationMs})),s.enabled&&s.intervalMs!==1/0&&s.intervalMs>0&&(r=Ge(r,s.intervalMs));var o,a=!1,c=!1;try{for(var u,d=(0,nt.default)(r);a=!(u=yield(0,rt.default)(d.next())).done;a=!1)t=u.value,t!==Le?(n=W(t)?{id:t[0],data:t[1]}:{data:t},n.data=JSON.stringify(i(n.data)),yield n,t=null,n=null):yield{event:it,data:""}}catch(e){c=!0,o=e}finally{try{a&&null!=d.return&&(yield(0,rt.default)(d.return()))}finally{if(c)throw o}}}),c.apply(this,arguments)}function u(){return u=(0,ot.default)(function*(){try{yield*(0,at.default)((0,nt.default)(function(){return c.apply(this,arguments)}())),yield{event:ct,data:""}}catch(r){var t,n;if(se(r))return;const o=L(r),a=null!==(t=null===(n=e.formatError)||void 0===n?void 0:n.call(e,{error:o}))&&void 0!==t?t:null;yield{event:st,data:JSON.stringify(i(a))}}}),u.apply(this,arguments)}const d=je(function(){return u.apply(this,arguments)}());return d.pipeThrough(new TransformStream({transform(e,t){"event"in e&&t.enqueue(`event: ${e.event}\n`),"data"in e&&t.enqueue(`data: ${e.data}\n`),"id"in e&&t.enqueue(`id: ${e.id}\n`),"comment"in e&&t.enqueue(`: ${e.comment}\n`),t.enqueue("\n\n")}})).pipeThrough(new TextEncoderStream)}const dt={"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform","X-Accel-Buffering":"no",Connection:"keep-alive"};var pt=O(Be(),1),mt=O(q(),1);function ft(e){return _((0,pt.default)(function*(){throw e}))}const ht={mutation:["POST"],query:["GET"],subscription:["GET"]},yt={mutation:["POST"],query:["GET","POST"],subscription:["GET","POST"]};function gt(e){var t,n,r;const{ctx:o,info:a,responseMeta:i,untransformedJSON:s,errors:l=[],headers:c}=e;let u=s?function(e){const t=Array.isArray(e)?e:[e],n=new Set(t.map(e=>{var t;return"error"in e&&b(e.error.data)?"number"==typeof(null===(t=e.error.data)||void 0===t?void 0:t.httpStatus)?e.error.data.httpStatus:T(g[e.error.code]):200}));return 1!==n.size?207:n.values().next().value}(s):200;const d=!s,p=d?[]:Array.isArray(s)?s:[s],m=null!==(t=null==i?void 0:i({ctx:o,info:a,paths:null==a?void 0:a.calls.map(e=>e.path),data:p,errors:l,eagerGeneration:d,type:null!==(n=null==a||null===(r=a.calls.find(e=>{var t;return null===(t=e.procedure)||void 0===t?void 0:t._def.type}))||void 0===r||null===(r=r.procedure)||void 0===r?void 0:r._def.type)&&void 0!==n?n:"unknown"}))&&void 0!==t?t:{};if(m.headers)if(m.headers instanceof Headers)for(const[e,t]of m.headers.entries())c.append(e,t);else for(const[e,t]of Object.entries(m.headers))if(Array.isArray(t))for(const n of t)c.append(e,n);else"string"==typeof t&&c.set(e,t);return m.status&&(u=m.status),{status:u}}function bt(e){return!!b(e)&&(!!w(e)||(Object.values(e).some(Qe)||Object.values(e).some(w)))}async function vt(e){var t,n,r,o,a,i;const{router:s,req:l}=e,c=new Headers([["vary","trpc-accept"]]),u=s._def._config,d=new URL(l.url);if("HEAD"===l.method)return new Response(null,{status:204});const p=null===(t=null!==(n=e.allowBatching)&&void 0!==n?n:null===(r=e.batching)||void 0===r?void 0:r.enabled)||void 0===t||t,m=null!==(o=e.allowMethodOverride)&&void 0!==o&&o&&"POST"===l.method,f=await _(async()=>{try{return[void 0,await ie({req:l,path:decodeURIComponent(e.path),router:s,searchParams:d.searchParams,headers:e.req.headers,url:d})]}catch(e){return[L(e),void 0]}}),h=_(()=>{let t;return{valueOrUndefined:()=>{if(t)return t[1]},value:()=>{const[e,n]=t;if(e)throw e;return n},create:async n=>{if(t)throw new Error("This should only be called once - report a bug in tRPC");try{const r=await e.createContext({info:n});t=[void 0,r]}catch(e){t=[L(e),void 0]}}}}),y=m?yt:ht,g="application/jsonl"===l.headers.get("trpc-accept"),b=null===(a=null===(i=u.sse)||void 0===i?void 0:i.enabled)||void 0===a||a;try{const[t,n]=f;if(t)throw t;if(n.isBatchCall&&!p)throw new G({code:"BAD_REQUEST",message:"Batching is not enabled on the server"});if(g&&!n.isBatchCall)throw new G({message:"Streaming requests must be batched (you can do a batch of 1)",code:"BAD_REQUEST"});await h.create(n);const r=n.calls.map(async t=>{const r=t.procedure;try{if(e.error)throw e.error;if(!r)throw new G({code:"NOT_FOUND",message:`No procedure found on path "${t.path}"`});if(!y[r._def.type].includes(l.method))throw new G({code:"METHOD_NOT_SUPPORTED",message:`Unsupported ${l.method}-request to ${r._def.type} procedure at path "${t.path}"`});if("subscription"===r._def.type&&n.isBatchCall)throw new G({code:"BAD_REQUEST",message:"Cannot batch subscription calls"});return[void 0,{data:await r({path:t.path,getRawInput:t.getRawInput,ctx:h.value(),type:r._def.type,signal:e.req.signal})}]}catch(n){var o,a,i;const r=L(n),s=t.result();return null===(o=e.onError)||void 0===o||o.call(e,{error:r,path:t.path,input:s,ctx:h.valueOrUndefined(),type:null!==(a=null===(i=t.procedure)||void 0===i?void 0:i._def.type)&&void 0!==a?a:"unknown",req:e.req}),[r,void 0]}});if(!n.isBatchCall){const[t]=n.calls,[o,a]=await r[0];switch(n.type){case"unknown":case"mutation":case"query":{if(c.set("content-type","application/json"),bt(null==a?void 0:a.data))throw new G({code:"UNSUPPORTED_MEDIA_TYPE",message:"Cannot use stream-like response in non-streaming request - use httpBatchStreamLink"});const r=o?{error:z({config:u,ctx:h.valueOrUndefined(),error:o,input:t.result(),path:t.path,type:n.type})}:{result:{data:a.data}},i=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,errors:o?[o]:[],headers:c,untransformedJSON:[r]});return new Response(JSON.stringify(H(u,r)),{status:i.status,headers:c})}case"subscription":{const r=_(()=>{if(o)return ft(o);if(!b)return ft(new G({code:"METHOD_NOT_SUPPORTED",message:'Missing experimental flag "sseSubscriptions"'}));if(!Q(a.data)&&!w(a.data))return ft(new G({message:`Subscription ${t.path} did not return an observable or a AsyncGenerator`,code:"INTERNAL_SERVER_ERROR"}));return Q(a.data)?ee(a.data,e.req.signal):a.data}),i=ut((0,mt.default)((0,mt.default)({},u.sse),{},{data:r,serialize:e=>u.transformer.output.serialize(e),formatError(n){var r,o,a;const i=L(n.error),s=null==t?void 0:t.result(),l=null==t?void 0:t.path,c=null!==(r=null==t||null===(o=t.procedure)||void 0===o?void 0:o._def.type)&&void 0!==r?r:"unknown";null===(a=e.onError)||void 0===a||a.call(e,{error:i,path:l,input:s,ctx:h.valueOrUndefined(),req:e.req,type:c});return z({config:u,ctx:h.valueOrUndefined(),error:i,input:s,path:l,type:c})}}));for(const[e,t]of Object.entries(dt))c.set(e,t);const s=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,errors:[],headers:c,untransformedJSON:null});return new Response(i,{headers:c,status:s.status})}}}if("application/jsonl"===n.accept){c.set("content-type","application/json"),c.set("transfer-encoding","chunked");const t=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,errors:[],headers:c,untransformedJSON:null}),o=et((0,mt.default)((0,mt.default)({},u.jsonl),{},{maxDepth:1/0,data:r.map(async t=>{const[r,o]=await t,a=n.calls[0];var i,s;if(r)return{error:z({config:u,ctx:h.valueOrUndefined(),error:r,input:a.result(),path:a.path,type:null!==(i=null===(s=a.procedure)||void 0===s?void 0:s._def.type)&&void 0!==i?i:"unknown"})};const l=Q(o.data)?ee(o.data,e.req.signal):Promise.resolve(o.data);return{result:Promise.resolve({data:l})}}),serialize:e=>u.transformer.output.serialize(e),onError:t=>{var r,o;null===(r=e.onError)||void 0===r||r.call(e,{error:L(t),path:void 0,input:void 0,ctx:h.valueOrUndefined(),req:e.req,type:null!==(o=null==n?void 0:n.type)&&void 0!==o?o:"unknown"})},formatError(e){var t,r;const o=null==n?void 0:n.calls[e.path[0]],a=L(e.error),i=null==o?void 0:o.result(),s=null==o?void 0:o.path,l=null!==(t=null==o||null===(r=o.procedure)||void 0===r?void 0:r._def.type)&&void 0!==t?t:"unknown";return z({config:u,ctx:h.valueOrUndefined(),error:a,input:i,path:s,type:l})}}));return new Response(o,{headers:c,status:t.status})}c.set("content-type","application/json");const o=(await Promise.all(r)).map(e=>{const[t,n]=e;return t?e:bt(n.data)?[new G({code:"UNSUPPORTED_MEDIA_TYPE",message:"Cannot use stream-like response in non-streaming request - use httpBatchStreamLink"}),void 0]:e}),a=o.map(([e,t],r)=>{const o=n.calls[r];var a,i;return e?{error:z({config:u,ctx:h.valueOrUndefined(),error:e,input:o.result(),path:o.path,type:null!==(a=null===(i=o.procedure)||void 0===i?void 0:i._def.type)&&void 0!==a?a:"unknown"})}:{result:{data:t.data}}}),i=o.map(([e])=>e).filter(Boolean),s=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,untransformedJSON:a,errors:i,headers:c});return new Response(JSON.stringify(H(u,a)),{status:s.status,headers:c})}catch(t){var v;const[n,r]=f,o=h.valueOrUndefined(),{error:a,untransformedJSON:i,body:s}=function(e,t){const{router:n,req:r,onError:o}=t.opts,a=L(e);null==o||o({error:a,path:t.path,input:t.input,ctx:t.ctx,type:t.type,req:r});const i={error:z({config:n._def._config,error:a,type:t.type,path:t.path,input:t.input,ctx:t.ctx})},s=H(n._def._config,i);return{error:a,untransformedJSON:i,body:JSON.stringify(s)}}(t,{opts:e,ctx:h.valueOrUndefined(),type:null!==(v=null==r?void 0:r.type)&&void 0!==v?v:"unknown"}),l=gt({ctx:o,info:r,responseMeta:e.responseMeta,untransformedJSON:i,errors:[a],headers:c});return new Response(s,{status:l.status,headers:c})}}function wt(e){try{var t,n;const r=e.headers[":scheme"]&&"https"===e.headers[":scheme"]||e.socket&&"encrypted"in e.socket&&e.socket.encrypted?"https:":"http:",o=null!==(t=null!==(n=e.headers.host)&&void 0!==n?n:e.headers[":authority"])&&void 0!==t?t:"localhost";return new URL(e.url,`${r}//${o}`)}catch(e){throw new G({code:"BAD_REQUEST",message:"Invalid URL",cause:e})}}function _t(e){const t=new Headers;for(const n in e){const r=e[n];if("string"!=typeof n||!n.startsWith(":"))if(Array.isArray(r))for(const e of r)t.append(n,e);else null!=r&&t.append(n,r)}return t}function xt(e,t,n){const r=new AbortController,o=()=>{t.off("close",o),e.off("aborted",o),r.abort()};t.once("close",o),e.once("aborted",o);const a=wt(e),i={headers:_t(e.headers),method:e.method,signal:r.signal};"GET"!==e.method&&"HEAD"!==e.method&&(i.body=function(e,t){if("body"in e){if(void 0===e.body)return;return"string"==typeof e.body?e.body:JSON.stringify(e.body)}let n=0,r=!1;return new ReadableStream({start(o){const a=s=>{n+=s.length,!t.maxBodySize||n<=t.maxBodySize?o.enqueue(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)):(o.error(new G({code:"PAYLOAD_TOO_LARGE"})),r=!0,e.off("data",a),e.off("end",i))},i=()=>{r||(r=!0,e.off("data",a),e.off("end",i),o.close())};e.on("data",a),e.on("end",i)},cancel(){e.destroy()}})}(e,n),i.duplex="half");return new Request(a,i)}async function St(e){const{res:t}=e;try{const n=new WritableStream({async write(e){var n;await async function(e,t){!1===e.write(t)&&await new Promise((t,n)=>{const r=e=>{n(e),a()},o=()=>{t(),a()},a=()=>{e.off("error",r),e.off("drain",o)};e.once("error",r),e.once("drain",o)})}(t,e),null===(n=t.flush)||void 0===n||n.call(t)}});await e.body.pipeTo(n,{signal:e.signal})}catch(e){if(se(e))return;throw e}}var kt=O(q(),1);function Et(e){return t=>{var n;const{res:r,req:o}=e,a=L(t),i=z({config:e.router._def._config,error:a,type:"unknown",path:void 0,input:void 0,ctx:void 0});null===(n=e.onError)||void 0===n||n.call(e,{req:o,error:a,type:"unknown",path:void 0,input:void 0,ctx:void 0});const s=H(e.router._def._config,{error:i});r.statusCode=i.data.httpStatus,r.end(JSON.stringify(s))}}async function Ct(e){return new Promise(t=>{var n;const r=null!==(n=e.middleware)&&void 0!==n?n:(e,t,n)=>n();return e.res.once("finish",()=>{t()}),r(e.req,e.res,t=>{_(async()=>{var n;const r=xt(e.req,e.res,{maxBodySize:null!==(n=e.maxBodySize)&&void 0!==n?n:null}),o=await vt((0,kt.default)((0,kt.default)({},e),{},{req:r,error:t?L(t):null,createContext:async t=>{var n;return await(null===(n=e.createContext)||void 0===n?void 0:n.call(e,(0,kt.default)((0,kt.default)({},e),t)))},onError(t){var n;null==e||null===(n=e.onError)||void 0===n||n.call(e,(0,kt.default)((0,kt.default)({},t),{},{req:e.req}))}}));await async function(e){const{response:t,rawResponse:n}=e;200===n.statusCode&&(n.statusCode=t.status);for(const[e,r]of t.headers)n.setHeader(e,r);try{t.body&&await St({res:n,signal:e.request.signal,body:t.body})}catch(e){throw n.headersSent||(n.statusCode=500),e}finally{n.end()}}({request:r,response:o,rawResponse:e.res})}).catch(Et(e))})})}const Bt=n("http");var Mt=O(q(),1);function $t(e){var t;const n=(null!==(t=e.basePath)&&void 0!==t?t:"/").length;return(t,r)=>{let o="";_(async()=>{const a=wt(t);o=a.pathname.slice(n),await Ct((0,Mt.default)((0,Mt.default)({},e),{},{req:t,res:r,path:o}))}).catch(Et((0,Mt.default)({req:t,res:r,path:o},e)))}}function Ot(e){return Bt.createServer(function(e){return $t(e)}(e))}const Nt=n("node:path"),Tt=n("node:os"),Pt=n("node:fs/promises"),It=n("node:crypto"),Ut=1024**3,At=(e,t,n)=>Math.min(Math.max(e,t),n),Ft=e=>e?40:0,qt=(e=0)=>{if(!e)return 0;return At(e/(12*Ut)*20,0,20)},jt=(e=0)=>{if(!e)return 0;return At(e/(32*Ut)*10,0,10)},zt=e=>e?10:0,Rt=(e="default",t=null)=>{const n=String(e).toLowerCase();if(!n)return 0;if(n.includes("cuda"))return 20;if(n.includes("vulkan"))return 10;if(n.includes("default")){return"darwin"===t||"ios"===t?15:5}return 0},Dt=({platform:e,variant:t,hasGpu:n,gpuUsableBytes:r=0,cpuUsableBytes:o=0,ok:a=!0}={})=>{if(!a)return 0;const i=Ft(n)+Rt(t,e)+qt(r),s=jt(o),l=zt(a);return Math.min(100,Math.round(i+s+l))},Lt=["cuda","vulkan","snapdragon","default"],Gt=e=>e||0===e?Array.isArray(e)?e.filter(e=>null!=e):[e]:[],Jt=e=>e&&String(e).trim().toLowerCase()||null,Vt=(e={})=>{const t=String(e.type||e.deviceType||e.kind||"").toLowerCase();return!!t.includes("gpu")||(!!t.includes("cuda")||(!!t.includes("metal")||(!!t.includes("vulkan")||!!t.includes("snapdragon"))))},Ht=({platform:e,totalMemoryInBytes:t,variant:n,devices:r,gpuMemoryFraction:o,cpuMemoryFraction:a,ok:i,error:s})=>{const l=(e=>Array.isArray(e)?e.map(e=>({...e})):[])(((e,t)=>"snapdragon"===e?t.filter(e=>"GPUOpenCL"!==e.deviceName):t)(n,r)),c=l.some(Vt),u=l.filter(e=>Vt(e)&&Number.isFinite(Number(e.maxMemorySize))).reduce((e,t)=>e+t.maxMemorySize,0),d=t,p=c?Math.floor(u*o):0,m=d?Math.floor(d*a):0,f={platform:e,variant:n,hasGpu:c,gpuUsableBytes:p,cpuUsableBytes:m,ok:i},h=Dt(f),y=i?(({platform:e,variant:t,hasGpu:n,gpuUsableBytes:r=0,cpuUsableBytes:o=0,ok:a=!0}={})=>({gpuPresence:Ft(n),variant:Rt(t,e),gpuMemory:qt(r),cpuMemory:jt(o),availability:zt(a)}))(f):null;return{platform:e,ok:i,variant:n,hasGpu:c,devices:l,gpuTotalBytes:u,gpuUsableBytes:p,cpuTotalBytes:d,cpuUsableBytes:m,score:h,breakdown:y,error:s,timestamp:(new Date).toISOString()}},Kt=({device:e,modelBytes:t=0,kvCacheBytes:n=0}={})=>{if(!e)return{totalRequiredBytes:t+n,fitsInGpu:!1,fitsInCpu:!1,limiting:"unknown-device"};const r=Math.max(0,Number(t)||0)+Math.max(0,Number(n)||0),o=e.hasGpu&&r>0&&r<=e.gpuUsableBytes,a=r>0&&r<=e.cpuUsableBytes;let i="ok";return!o&&e.hasGpu&&(i="gpu-memory"),a||(i=o?"cpu-memory":"insufficient-memory"),{totalRequiredBytes:r,fitsInGpu:o,fitsInCpu:a,limiting:i}},Yt=async({platform:e,variant:t=null,preferVariants:n=[],variantPreference:r=[],gpuMemoryFraction:o=.85,cpuMemoryFraction:a=.5,includeBreakdown:i=!1,totalMemoryInBytes:s,modelBytes:l=null,kvCacheBytes:c=null,limitedKvCacheBytes:u=null,dependencies:d={},defaultVariants:p=Lt}={})=>{const{getBackendDevicesInfo:m,isLibVariantAvailable:f}=d;if("function"!=typeof m||"function"!=typeof f)throw new TypeError("GGML capability detection requires getBackendDevicesInfo and isLibVariantAvailable functions");const h=(({variant:e,preferVariants:t=[],variantPreference:n=[],defaultVariants:r=Lt}={})=>{const o=[];e&&o.push(e),o.push(...Gt(t)),o.push(...Gt(n)),o.push(...r);const a=o.map(Jt).filter(Boolean);return Array.from(new Set(a))})({variant:t,preferVariants:n,variantPreference:r,defaultVariants:p}),y=[];for(const t of h)try{if(!await f(t))throw new Error(`Variant ${t} not available on this platform`);const n=await m(t);y.push(Ht({platform:e,totalMemoryInBytes:s,variant:t,devices:n,gpuMemoryFraction:o,cpuMemoryFraction:a,ok:!0}))}catch(n){const r=n instanceof Error?n.message:String(n);y.push(Ht({platform:e,totalMemoryInBytes:s,variant:t,devices:[],gpuMemoryFraction:o,cpuMemoryFraction:a,ok:!1,error:r}))}const g=y.filter(e=>e.ok),b=g.find(e=>e.hasGpu)||g.find(e=>"default"===e.variant)||g[0]||null,v={ok:Boolean(b),selected:b?{...b,breakdown:i?b.breakdown:void 0}:null,attempts:y};if(!i&&v.selected&&delete v.selected.breakdown,!v||!l&&!c)return v;const w=e=>{if(!e)return e;const t=Kt({device:e,modelBytes:l||0,kvCacheBytes:c||0});let n=null;return null!=u&&u!==c&&(n=Kt({device:e,modelBytes:l||0,kvCacheBytes:u})),{...e,fit:t,...n&&{limitedFit:n}}};return v.selected=w(v.selected),v.attempts=Array.isArray(v.attempts)?v.attempts.map(w):v.attempts,v},Wt="ggml-llm",Qt=["cuda","vulkan","default"],Zt=new Map([[Wt,Yt],["ggml-stt",async({platform:e,variant:t=null,preferVariants:n=[],variantPreference:r=[],gpuMemoryFraction:o=.85,cpuMemoryFraction:a=.5,includeBreakdown:i=!1,totalMemoryInBytes:s,modelBytes:l=null,processingBytes:c=null,kvCacheBytes:u=null,dependencies:d={}}={})=>{const p=r&&r.length>0?r:Qt;return Yt({platform:e,variant:t,preferVariants:n,variantPreference:p,gpuMemoryFraction:o,cpuMemoryFraction:a,includeBreakdown:i,totalMemoryInBytes:s,modelBytes:l,kvCacheBytes:c??u,dependencies:d,defaultVariants:Qt})}]]),Xt=async({platform:e,totalMemoryInBytes:t,backend:n=Wt,dependencies:r,...o}={})=>{const a=Zt.get(n);if(!a)throw new Error(`No capability detector registered for backend "${n}"`);return await a({...o,dependencies:r,totalMemoryInBytes:t,platform:e})},en={f16:2,f32:4,q8_0:1,q6_k:.75,q5_k:.625,q5_k_m:.625,q5_k_s:.625,q5_1:.625,q5_0:.625,q4_k:.5,q4_k_m:.5,q4_k_s:.5,q4_1:.5,q4_0:.5,iq4_nl:.5},tn=e=>{const t=e?String(e).toLowerCase():"f16";return en[t]||en.f16},nn=({modelBytes:e=0,audioLengthSeconds:t=30,sampleRate:n=16e3,bytesPerSample:r=4}={})=>{const o=Math.max(0,Number(e)||0),a=Math.max(0,Math.floor(Math.max(0,t)*n*r)),i=1048576,s=1024*i;let l,c,u;l=o<200*i?120*i:o<500*i?140*i:o<2*s?150*i:160*i,c=o<200*i?70*i:o<500*i?135*i:220*i,u=o<100*i?20*i:o<200*i?30*i:o<500*i?85*i:o<2*s?215*i:360*i;const d=l+c+u;return{modelBytes:o,audioBufferBytes:a,processingBufferBytes:d,totalBytes:o+d+a}},rn=e=>e?String(e).trim().toLowerCase():null,on=({arch:e,nLayer:t=0})=>({arch:rn(e),enabled:!1,window:null,pattern:null,denseFirst:!1,type:null,kvLayers:Math.max(0,Math.floor(Number(t)||0)),swaLayers:0}),an=new Map([["llama4",({nSwa:e})=>{if(0===e)return{enabled:!1};return{enabled:!0,window:e&&e>0?e:8192,pattern:4,type:"chunked"}}],["afmoe",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:4,type:"standard"}],["phi3",()=>({enabled:!1})],["gemma2",({nSwa:e})=>{const t=e&&e>0?e:4096;return t?{enabled:!0,window:t,pattern:2,type:"standard"}:{enabled:!1}}],["gemma3",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:6,type:"standard"}],["gemma3n",({nLayer:e,nSwa:t})=>!t||t<=0?{enabled:!1}:{enabled:!0,window:t,pattern:5,type:"standard",kvLayers:Math.min(20,e)}],["gemma-embedding",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:6,type:"symmetric"}],["cohere2",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:4,type:"standard"}],["olmo2",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:4,type:"standard"}],["exaone4",({nLayer:e,nSwa:t})=>{let n=null;return t&&t>0?n=t:e>=64&&(n=4096),n?{enabled:!0,window:n,pattern:4,type:"standard"}:{enabled:!1}}],["gpt-oss",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:2,type:"standard"}],["smallthinker",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:4096,pattern:4,denseFirst:!0,type:"standard"}]]),sn=({arch:e,metadata:t={},nLayer:n=0}={})=>{const r=rn(e||t["general.architecture"]),o=Math.max(0,Math.floor(Number(n)||0)),a=((e={},t=null)=>{if(!e)return null;const n=rn(t),r=n?`${n}.attention.sliding_window`:null,o=(r&&null!=e[r]?e[r]:null)??e["llama.attention.sliding_window"];if(null==o)return null;const a=Number(o);return Number.isFinite(a)?a:null})(t,r),i=r?an.get(r):null;if(!i)return on({arch:r,nLayer:n});const s=i({nLayer:o,nSwa:a,metadata:t});if(!s||!s.enabled||!s.window||s.window<=0)return on({arch:r,nLayer:n});const l=Math.max(0,Math.floor(Number(s.pattern)||0)),c=null!=s.kvLayers&&Number.isFinite(Number(s.kvLayers))?Number(s.kvLayers):o,u=Math.max(0,Math.floor(c)),d=((e=0,t=0,n=!1)=>{const r=Math.max(0,Math.floor(Number(e)||0)),o=Math.max(0,Math.floor(Number(t)||0));if(!r||1===o)return 0;if(o<=0)return r;const a=Math.max(0,o-1),i=r%o;return Math.floor(r/o)*a+(n?Math.max(0,i-1):Math.min(i,a))})(u,l,Boolean(s.denseFirst));return{arch:r,enabled:d>0,window:s.window,pattern:l,denseFirst:Boolean(s.denseFirst),type:s.type||"standard",kvLayers:u,swaLayers:d}},ln=(e={})=>{const t=e["general.architecture"],n=(t,n=null)=>{const r=e[t],o=Number(r);return Number.isFinite(o)?o:n},r=t?n(`${t}.context_length`,n("llama.context_length")):null,o=t?n(`${t}.block_count`,n("llama.block_count")):null,a=t?n(`${t}.embedding_length`,n("llama.embedding_length")):null,i=t?n(`${t}.attention.head_count`,n("llama.attention.head_count")):null;return{arch:t,nCtxTrain:r,nLayer:o,nEmbd:a,nHead:i,nHeadKv:t?n(`${t}.attention.head_count_kv`,n("llama.attention.head_count_kv",i)):null,nEmbdHeadK:t?n(`${t}.attention.key_length`,n("llama.attention.key_length")):null,nEmbdHeadV:t?n(`${t}.attention.value_length`,n("llama.attention.value_length")):null,quantVersion:e["general.quantization_version"]||null,fileType:e["general.file_type"]||null}},cn=({layerCount:e,headKvCount:t,embdHeadKCount:n,embdHeadVCount:r,cacheTypes:o,swaConfig:a,kvUnified:i=!1,nParallel:s=1,swaFull:l=!1})=>{const c=a?.window&&i?Math.max(1,Number(s)||1):1;return i=>((e,t,n,r,o,a={},{totalLayers:i=null,swaLayers:s=0,swaContext:l=null,swaContextMultiplier:c=1,swaAdditionalTokens:u=0,swaFull:d=!1}={})=>{if(!(e&&t&&n&&r&&o))return 0;const p=Number(null!=i&&void 0!==i?i:e),m=Math.max(0,Math.floor(p));if(!m)return 0;const f=tn(a.k),h=tn(a.v),y=Number(n)*(Number(r)*f+Number(o)*h);if(!y)return 0;const g=Math.max(0,Number(t)||0),b=Math.min(m,Math.max(0,Math.floor(Number(s)||0))),v=Math.max(0,m-b),w=(null!=l&&Number.isFinite(Number(l))?Math.max(0,Number(l)):g)*Math.max(1,Number(c)||1)+Math.max(0,Number(u)||0),_=d?g:Math.min(g,w),x=v*g+b*Math.max(0,Math.floor(_));return Math.round(y*x)})(e,i,t,n,r,o,{totalLayers:e,swaLayers:a?.swaLayers||0,swaContext:a?.window,swaFull:l,swaContextMultiplier:c})},un=({maxCtx:e,availableMemory:t,modelBytes:n,kvBytesForCtx:r})=>{const o=Math.max(1,Math.floor(Number(e)||0));if(!r||t<=n)return o;let a=1,i=o,s=o;for(;a<=i;){const e=Math.floor((a+i)/2);n+r(e)<=t?(s=e,a=e+1):i=e-1}return s};var dn=f(285);const pn=n("node:stream/web");var mn=f.t(pn,2);const fn="undefined"!=typeof globalThis&&globalThis.ReadableStream&&globalThis.WritableStream?{ReadableStream:globalThis.ReadableStream,WritableStream:globalThis.WritableStream}:mn,{ReadableStream:hn,WritableStream:yn}=fn,gn=new TextEncoder,bn=(e={},t={})=>(Object.entries(t||{}).forEach(([t,n])=>{n&&"object"==typeof n&&!Array.isArray(n)?(e[t]&&"object"==typeof e[t]||(e[t]={}),bn(e[t],n)):e[t]=n}),e),vn="https://huggingface.co",wn="https://huggingface.co/api",_n=Nt.join(Tt.homedir(),".buttress","models"),xn=["mxfp4","q8_0","q6_k","q6","q5_k_m","q5_k_s","q5_k","q5_1","q5_0","q4_k_m","q4_k_s","q4_k","q4_1","q4_0","q3","q2"],Sn=.5,kn={backend:{type:"ggml-llm",variant:null,variant_preference:["cuda","vulkan","snapdragon","default"],gpu_memory_fraction:.85,cpu_memory_fraction:Sn},model:{repo_id:null,revision:"main",filename:null,url:null,quantization:null,preferred_quantizations:[],n_ctx:null,n_gpu_layers:"auto",n_parallel:4,n_batch:2048,flash_attn:"auto",cache_type_k:"f16",cache_type_v:"f16",ctx_shift:!1,kv_unified:!1,swa_full:!1,allow_local_file:!1,local_path:null,api_base:wn,base_url:vn},runtime:{cache_dir:_n,prefer_variants:[],huggingface_token:process.env.HUGGINGFACE_TOKEN||null,http_headers:{},session_cache:{enabled:!0,max_size_bytes:10737418240,max_entries:1e3}}},En=(e,t=[])=>e||0===e?Array.isArray(e)?e.filter(e=>null!=e):[e]:[...t],Cn=e=>{if(!e)return null;const t=String(e).toLowerCase();return["cuda","vulkan","snapdragon","default"].includes(t)?t:null},Bn=(e={})=>{const t=JSON.parse(JSON.stringify(kn));if(bn(t,e),t.backend.variant=Cn(t.backend.variant),t.backend.variant_preference=Array.from(new Set(En(t.backend.variant_preference).map(Cn).filter(Boolean))),0===t.backend.variant_preference.length&&(t.backend.variant_preference=["cuda","vulkan","snapdragon","default"]),t.runtime.prefer_variants=Array.from(new Set(En(t.runtime.prefer_variants).map(Cn).filter(Boolean))),t.model.preferred_quantizations=Array.from(new Set(En(t.model.preferred_quantizations||t.model.quantizations).map(e=>e?String(e).toLowerCase():null).filter(Boolean))),t.model.quantization){const e=String(t.model.quantization).toLowerCase();t.model.preferred_quantizations.includes(e)||t.model.preferred_quantizations.unshift(e)}return t.model.n_parallel=Math.max(1,Number(t.model.n_parallel)||4),t.model.n_batch=Math.max(1,Number(t.model.n_batch)||512),t.model.base_url=t.model.base_url||vn,t.model.api_base=t.model.api_base||wn,t.runtime.cache_dir=t.runtime.cache_dir?Nt.resolve(t.runtime.cache_dir):_n,t.runtime.session_cache={...kn.runtime.session_cache,...t.runtime.session_cache||{}},t},Mn=e=>{const t=e.toLowerCase();return xn.find(e=>t.includes(e))||null},$n=async e=>{await(0,Pt.mkdir)(e,{recursive:!0})},On=(e,t,n=_n)=>{const r=(0,It.createHash)("sha256").update(e).digest("hex");return Nt.join(((e=_n)=>Nt.join(e,".metadata-cache"))(n),t,`${r}.json`)},Nn=async(e,t,n=_n)=>{try{const r=On(e,t,n),o=await(0,Pt.readFile)(r,"utf-8");return console.log(`[Cache] Hit ${t} cache:`,Nt.basename(r)),JSON.parse(o,(e,t)=>"string"==typeof t&&t.startsWith("__bigint__")?BigInt(t.slice(10)):t)}catch(e){return null}},Tn=async(e,t,n,r=_n)=>{try{const o=On(e,t,r);await $n(Nt.dirname(o)),await(0,Pt.writeFile)(o,JSON.stringify(n,(e,t)=>"bigint"==typeof t?`__bigint__${t.toString()}`:t),"utf-8"),console.log(`[Cache] Wrote ${t} cache:`,Nt.basename(o))}catch(e){console.warn(`[Cache] Failed to write ${t} cache:`,e.message)}},Pn=(e=_n)=>Nt.join(e,".session-state-cache"),In=(e=_n)=>Nt.join(Pn(e),"cache-map.json"),Un=(e=_n)=>Nt.join(Pn(e),"temp"),An=(e=_n)=>Nt.join(Pn(e),"states"),Fn=async(e,t=_n)=>{const n=In(t),r=`${n}.tmp.${Date.now()}`;try{await $n(Nt.dirname(n)),await(0,Pt.writeFile)(r,JSON.stringify(e,null,2),"utf-8"),await(0,Pt.rename)(r,n)}catch(e){throw await(0,Pt.unlink)(r).catch(()=>{}),e}},qn=(e,t,n)=>{const r=Object.values(n.entries);console.log(`[SessionCache] Finding match for promptText (${e.length} chars)`),console.log(`[SessionCache] Checking ${r.length} cache entries`);const o=r.filter(e=>{return n=e.metadata,r=t,n.modelPath===r.modelPath&&n.variant===r.variant&&n.n_gpu_layers===r.n_gpu_layers&&n.n_ctx>=r.n_ctx&&n.cacheTypeK===r.cacheTypeK&&n.cacheTypeV===r.cacheTypeV;var n,r}).reduce((t,n)=>{const r=((e,t)=>{const n=Math.min(e.length,t.length);let r=0;for(;r<n&&e[r]===t[r];)r+=1;return r})(e,n.fullText);return r>=100&&r>t.prefixLen?{entry:n,prefixLen:r}:t},{entry:null,prefixLen:0});return o.entry?(console.log(`[SessionCache] Prefix match found: ${o.entry.id} (${o.prefixLen}/${o.entry.fullText.length} chars)`),{entry:o.entry,prefixLength:o.prefixLen}):(console.log("[SessionCache] No match found"),null)};class jn{constructor(e,t){this.config=e,this.plan=t,this.baseDir=e.runtime.cache_dir,this.enabled=!1!==e.runtime.session_cache?.enabled,this.maxSizeBytes=((e,t)=>{if(null==e)return t;if("number"==typeof e)return e;if("string"==typeof e){const n=dn.parse(e);return null!=n?n:t}return t})(e.runtime.session_cache?.max_size_bytes,10737418240),this.maxEntries=e.runtime.session_cache?.max_entries||1e3,this.metadata={variant:t.info?.runtime?.variant||null,n_gpu_layers:t.info?.runtime?.n_gpu_layers||0,n_ctx:t.info?.runtime?.n_ctx||0,modelPath:t.localPath,cacheTypeK:t.info?.runtime?.cache_type_k||"f16",cacheTypeV:t.info?.runtime?.cache_type_v||"f16"},this.cacheMap=null,this.initialized=!1}async initialize(){if(this.enabled&&!this.initialized)try{await $n(Pn(this.baseDir)),await $n(Un(this.baseDir)),await $n(An(this.baseDir)),this.cacheMap=await(async(e=_n)=>{try{const t=In(e),n=await(0,Pt.readFile)(t,"utf-8"),r=JSON.parse(n);return r.entries&&"object"==typeof r.entries?r:{version:1,entries:{},totalSize:0}}catch{return{version:1,entries:{},totalSize:0}}})(this.baseDir),this.initialized=!0,console.log(`[SessionCache] Initialized with ${Object.keys(this.cacheMap.entries).length} entries`)}catch(e){console.warn(`[SessionCache] Failed to initialize: ${e.message}`),this.enabled=!1}}async findMatchingEntry(e){if(!this.enabled||!this.cacheMap)return null;const t=qn(e,this.metadata,this.cacheMap);if(t){const{entry:e}=t;return await(async e=>{try{return await(0,Pt.stat)(e),!0}catch{return!1}})(e.stateFilePath)?(e.lastAccessedAt=(new Date).toISOString(),await Fn(this.cacheMap,this.baseDir).catch(()=>{}),{entry:e}):(console.log(`[SessionCache] Removing stale entry: ${e.id}`),delete this.cacheMap.entries[e.id],this.cacheMap.totalSize-=e.stateFileSize||0,await Fn(this.cacheMap,this.baseDir).catch(()=>{}),null)}return null}async prepareCompletionOptions(e,t){if(!this.enabled)return{options:e,cacheEntry:null,promptPrefix:null};const n=await this.findMatchingEntry(t);if(n){const{entry:t}=n;console.log(`[SessionCache] Found matching entry: ${t.id} (${t.fullText.length} chars, loadStateSize=${t.loadStateSize})`);return{options:{...e,load_state_path:t.stateFilePath},cacheEntry:t,promptPrefix:t.fullText}}return{options:e,cacheEntry:null,promptPrefix:null}}async saveCompletionState(e,t,n,r=0){if(!this.enabled)return null;const o=((e,t)=>{const n=JSON.stringify({text:e,model:t.modelPath,variant:t.variant,n_gpu_layers:t.n_gpu_layers,n_ctx:t.n_ctx});return(0,It.createHash)("sha256").update(n).digest("hex").slice(0,24)})(e,this.metadata);if(this.cacheMap.entries[o])return console.log(`[SessionCache] Entry already exists for prompt: ${o}`),await(0,Pt.unlink)(n).catch(()=>{}),this.cacheMap.entries[o];const a=e+t,i=((e,t=_n)=>Nt.join(An(t),`${e}.bin`))(o,this.baseDir);try{await $n(Nt.dirname(i)),await(0,Pt.rename)(n,i);const s=await(0,Pt.stat)(i),l={id:o,promptText:e,completionText:t,fullText:a,promptTokenCount:r,stateFilePath:i,stateFileSize:s.size,metadata:{...this.metadata},createdAt:(new Date).toISOString(),lastAccessedAt:(new Date).toISOString()};return this.cacheMap.entries[o]=l,this.cacheMap.totalSize+=s.size,await(async(e,t,n)=>{const r=Object.values(e.entries).sort((e,t)=>new Date(e.lastAccessedAt)-new Date(t.lastAccessedAt));let o=e.totalSize,a=Object.keys(e.entries).length;const i=r.filter(e=>(o>t||a>n)&&(o-=e.stateFileSize||0,a-=1,!0));return await Promise.all(i.map(async t=>{await(0,Pt.unlink)(t.stateFilePath).catch(()=>{}),delete e.entries[t.id],console.log(`[SessionCache] Evicted entry: ${t.id}`)})),e.totalSize=Math.max(0,o),i.map(e=>e.id)})(this.cacheMap,this.maxSizeBytes,this.maxEntries),await Fn(this.cacheMap,this.baseDir),console.log(`[SessionCache] Saved entry: ${o} (${s.size} bytes)`),l}catch(e){return console.warn(`[SessionCache] Failed to save state: ${e.message}`),await(0,Pt.unlink)(n).catch(()=>{}),null}}async generateTempStatePath(){return await $n(Un(this.baseDir)),((e=_n)=>{const t=`${Date.now()}-${Math.random().toString(36).slice(2,10)}`;return Nt.join(Un(e),`${t}.bin`)})(this.baseDir)}async cleanup(){await(async(e=_n)=>{const t=Un(e);try{const e=await(0,Pt.readdir)(t),n=Date.now(),r=36e5;await Promise.all(e.map(async e=>{const o=Nt.join(t,e),a=await(0,Pt.stat)(o).catch(()=>null);a&&n-a.mtimeMs>r&&(await(0,Pt.unlink)(o).catch(()=>{}),console.log(`[SessionCache] Cleaned up temp file: ${e}`))}))}catch{}})(this.baseDir)}}const zn=async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,t);if(!n.ok){const t=await n.text().catch(()=>"");throw new Error(`Failed to fetch ${e}: ${n.status} ${n.statusText} ${t}`.trim())}return n.json()},Rn=async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,{...t,method:"HEAD"});if(!n.ok)throw new Error(`Failed to fetch headers for ${e}: ${n.status} ${n.statusText}`);return n},Dn=async(e,t,n=_n)=>{const r=JSON.stringify({url:e,headers:t}),a=await Nn(r,"range-metadata",n);if(a)return a;const i=!/^https?:/i.test(e),{metadata:s}=await o(e,{fetch,additionalFetchHeaders:t,allowLocalFile:i});return await Tn(r,"range-metadata",s,n),s},Ln=async(e,t)=>{try{const n=await(0,Pt.stat)(e);return!t||n.size===t}catch(e){return!1}},Gn=async(e,t,n,r,o)=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");await $n(Nt.dirname(n));const a=await fetch(e,{headers:t});if(!a.ok||!a.body)throw new Error(`Failed to download ${e}: ${a.status} ${a.statusText}`);const i=await(0,Pt.open)(n,"w"),s=Number(a.headers.get("content-length"))||r||0;let l=0,c=.05;try{await a.body.pipeTo(new yn({async write(e){if(await i.write(e),l+=e.byteLength,"function"==typeof o&&s>0){const e=Math.min(1,l/s);for(;e>=c;)o(c),c+=.05}},async close(){await i.close(),"function"==typeof o&&o(1)},async abort(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}}))}catch(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}if(r){const e=await(0,Pt.stat)(n);if(e.size!==r)throw await(0,Pt.unlink)(n).catch(()=>{}),new Error(`Downloaded file size mismatch, expected ${r} got ${e.size}`)}},Jn=async e=>{const t=e.model.repo_id||e.model.repository||e.model.model;if(!t)throw new Error("`model.repo_id` is required in Buttress backend config");const n=e.model.revision||"main",r=e.runtime.cache_dir,o=JSON.stringify({repoId:t,revision:n,filename:e.model.filename,url:e.model.url,quantization:e.model.quantization,preferred_quantizations:e.model.preferred_quantizations}),a=await Nn(o,"artifact-info",r);if(a)return a;const i={...e.runtime.http_headers||{}};if(e.runtime.huggingface_token&&(i.Authorization=`Bearer ${e.runtime.huggingface_token}`),e.model.url){const a=await Rn(e.model.url,{headers:i}),s=Number(a.headers.get("content-length"))||null,l={repoId:t,revision:n,filename:e.model.filename||e.model.url.split("/").pop(),url:e.model.url,size:s,headers:i};return await Tn(o,"artifact-info",l,r),l}let{filename:s}=e.model,l=e.model.quantization&&String(e.model.quantization).toLowerCase();const c=await zn(`${e.model.api_base}/models/${t}?revision=${n}&blobs=true`,{headers:i}),u=(c?.siblings||c?.files||[]).map(e=>e.rfilename||e.path||e.filename).filter(e=>"string"==typeof e&&e.endsWith(".gguf"));if(0===u.length)throw new Error(`No GGUF artifacts found in repo ${t}`);const d=e.model.preferred_quantizations.length>0?e.model.preferred_quantizations:xn;if(s)l||(l=Mn(s));else{const e=(()=>{const e=d.find(e=>u.find(t=>t.toLowerCase().includes(e)));if(e)return{filename:u.find(t=>t.toLowerCase().includes(e)),quantization:e};return null})()||{filename:u[0],quantization:null},{filename:t,quantization:n}=e;s=t,l=n||Mn(s)}const p=`${e.model.base_url.replace(/\/+$/,"")}/${t}/resolve/${n}/${s}`,m=/-(\d{5})-of-(\d{5})\.gguf$/,f=s.match(m);let h=null;if(f){const[,,r]=f,o=await zn(`${e.model.api_base}/models/${t}?revision=${n}&blobs=true`,{headers:i}),a=o?.siblings||o?.files||[],l=Number(r);h=0;for(let e=1;e<=l;e+=1){const t=String(e).padStart(5,"0"),n=s.replace(m,`-${t}-of-${r}.gguf`),o=a.find(e=>(e.rfilename||e.path||e.filename)===n),i=Number(o?.size);Number.isFinite(i)&&i>0&&(h+=i)}}else{const e=await Rn(p,{headers:i});h=Number(e.headers.get("content-length"))||null}const y={repoId:t,revision:n,filename:s,url:p,size:h,quantization:l,headers:i,isSplit:Boolean(f),splitCount:f?Number(f[2]):0};return await Tn(o,"artifact-info",y,r),y},Vn=async(e,{modelBytes:t=null,kvCacheBytes:n=null}={})=>{const r=(e=>{const t=[];return e.backend.variant&&t.push(e.backend.variant),e.runtime.prefer_variants.length>0&&t.push(...e.runtime.prefer_variants),t.push(...e.backend.variant_preference),t.push("default"),Array.from(new Set(t.map(Cn).filter(Boolean)))})(e),[o,...s]=r,l=null!=e.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.gpu_memory_fraction))):kn.backend.gpu_memory_fraction||1,c=null!=e.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.cpu_memory_fraction))):Sn,u=await Xt({platform:process.platform,totalMemoryInBytes:Tt.totalmem(),backend:"ggml-llm",variant:o||null,preferVariants:s,gpuMemoryFraction:l,cpuMemoryFraction:c,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:t,kvCacheBytes:n}),d=e=>({...e,devices:Array.isArray(e.devices)?e.devices:[],ok:e.ok,hasGpu:Boolean(e.hasGpu),totalMemory:e.gpuTotalBytes||e.totalMemory||0,error:e.ok?null:new Error(e.error||`Variant ${e.variant} not available on this platform`)});if(!u.ok||!u.selected){const e=(u.attempts||[]).map(e=>`${e.variant}: ${e.error||"unknown error"}`).join("; ");throw new Error(`Unable to initialize any backend variant (${r.join(", ")}). Errors: ${e}`)}const p=(u.attempts||[]).map(d);return{selected:d(u.selected),attempts:p}},Hn=async e=>{const t=await Jn(e),n=await Dn(t.url,t.headers,e.runtime.cache_dir),{arch:r,nCtxTrain:o,nLayer:a,nEmbd:i,nHead:s,nHeadKv:l,nEmbdHeadK:c,nEmbdHeadV:u,quantVersion:d,fileType:p}=ln(n),m=Number.isFinite(Number(a))?Number(a):0,f=Number.isFinite(Number(i))?Number(i):0,h=Number.isFinite(Number(s))?Number(s):0,y=Number.isFinite(Number(l))?Number(l):h,g=h>0&&f>0?f/h:128,b=Number.isFinite(Number(c))?Number(c):g,v=Number.isFinite(Number(u))?Number(u):g,w=sn({arch:r,metadata:n,nLayer:m}),_=w&&Number.isFinite(Number(w.kvLayers))?Number(w.kvLayers):m,x=Math.max(0,Math.floor(Number(_)||0)),S=e.model.n_ctx?Number(e.model.n_ctx):null;let k=S||o||4096;const E=[],C=[];let B=!0;if(S&&o&&S>o){B=!1;const e=`Requested context length (${S}) exceeds model training context (${o})`;E.push(e),C.push(e),k=o}S&&!o&&E.push("Model metadata missing training context length, using requested value");const M={k:e.model.cache_type_k,v:e.model.cache_type_v},$=t.size>0?t.size:0,O=cn({layerCount:x,headKvCount:y,embdHeadKCount:b,embdHeadVCount:v,cacheTypes:M,swaConfig:w,kvUnified:e.model.kv_unified,nParallel:e.model.n_parallel,swaFull:e.model.swa_full}),N=O(k),T=await Vn(e,{modelBytes:$,kvCacheBytes:N}),P=T.selected.totalMemory||0,I=P*(e.backend.gpu_memory_fraction||1),U=null!=e.backend.cpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.cpu_memory_fraction))):Sn,A=Math.max(0,Tt.totalmem()*U),F=T.selected.hasGpu?I:A,q=un({maxCtx:k,availableMemory:F,modelBytes:$,kvBytesForCtx:O});if(!S&&q){const e=o?Math.min(q,o):q,t=Math.max(32,e);t<k&&E.push(`Context length capped to ${t} by memory limits`),k=t}k>q&&(k=q);const j=Math.floor(q);console.log(`[buttress] Memory-limited context length: ${j}`);const z=O(k),R=$+z,D=m?$/(m+1):$;let L,G=0;T.selected.hasGpu&&D>0&&(G=Math.min(m+1,Math.max(0,Math.floor(I/D)))),console.log(`[buttress] Auto GPU layer capacity (${T.selected.variant}): ${G}/${m+1}`),L="auto"===e.model.n_gpu_layers||null==e.model.n_gpu_layers?G:Math.max(0,Math.min(Number(e.model.n_gpu_layers)||0,m+1));const J=(()=>{const t=e.model.flash_attn&&String(e.model.flash_attn).toLowerCase();return"on"===t||"off"===t?t:T.selected.hasGpu?"auto":"off"})(),V=e.runtime.cache_dir,H=((e,t)=>{if(e.model.local_path)return Nt.resolve(e.model.local_path);const n=t.repoId.split("/"),r=Nt.join(e.runtime.cache_dir,...n,t.revision);return Nt.join(r,t.filename)})(e,t),K=await Ln(H,t.size),Y={ok:B,backend:"ggml-llm",warnings:E,errors:C,model:{repoId:t.repoId,revision:t.revision,filename:t.filename,quantization:t.quantization,url:t.url,sizeBytes:t.size,metadata:{architecture:r,n_ctx_train:o,n_layer:m,n_embd:f,quantization_version:d,file_type:p,kv_layer_count:x,swa:w?.enabled?{window:w.window,pattern:w.pattern,dense_first:w.denseFirst,type:w.type,layers:w.swaLayers}:null}},runtime:{variant:T.selected.variant,n_ctx:k,requested_ctx:S,n_gpu_layers:L,n_parallel:e.model.n_parallel,n_batch:e.model.n_batch,flash_attn_type:J,cache_type_k:M.k,cache_type_v:M.v,ctx_shift:e.model.ctx_shift,kv_unified:e.model.kv_unified,swa_full:e.model.swa_full,estimated_max_n_ctx:j,auto_gpu_layers:G},resources:{modelBytes:$,kvCacheBytes:z,totalEstimatedBytes:R,gpuCapacityBytes:P,gpuUsableBytes:I,cpuUsableBytes:A,fit:T.selected.fit},devices:{selected:T.selected,attempts:T.attempts},download:{cacheDir:V,localPath:H,exists:K},timestamp:(new Date).toISOString()};return{config:e,info:Y,artifact:t,metadata:{arch:r,nCtxTrain:o,nLayer:m,nEmbd:f},devices:T,cacheTypes:M,localPath:H,localExists:K}},Kn=(e,t)=>`event: ${e}\ndata: ${null==t?"":JSON.stringify(t)}\n\n`,Yn=(e,t)=>{let n;return new hn({async start(r){try{const o=await e.parallel.completion(t,(e,t)=>{t&&r.enqueue(gn.encode(Kn("token",{requestId:e,...t})))}),{requestId:a}=o;n=o.stop;const i=await o.promise;console.log("[Completion] Result:",i),r.enqueue(gn.encode(Kn("result",{requestId:a,...i}))),r.close()}catch(e){r.enqueue(gn.encode(Kn("error",{message:e?.message||String(e)}))),r.error(e)}},cancel(){n&&n()}})},Wn=(e,t,n,r,o,a)=>{let i,s="",l=!1;return new hn({async start(c){try{const u=await e.parallel.completion(t,(e,t)=>{t&&(t.token&&(s+=t.token),c.enqueue(gn.encode(Kn("token",{requestId:e,...t}))))}),{requestId:d}=u;i=u.stop;const p=await u.promise;p.text?s=p.text:p.content&&(s=p.content),l=!p.interrupted&&!p.context_full,console.log("[Completion] Result:",p),c.enqueue(gn.encode(Kn("result",{requestId:d,...p}))),c.close(),l&&n.enabled&&s?n.saveCompletionState(r,s,o,a).catch(e=>{console.warn("[SessionCache] Save failed:",e.message)}):o&&(0,Pt.unlink)(o).catch(()=>{})}catch(e){c.enqueue(gn.encode(Kn("error",{message:e?.message||String(e)}))),c.error(e),(0,Pt.unlink)(o).catch(()=>{})}},cancel(){i&&i(),(0,Pt.unlink)(o).catch(()=>{})}})},Qn=e=>{const t={model:e.plan.localPath,runtime:e.plan.info.runtime};return(0,It.createHash)("sha256").update(JSON.stringify(t)).digest("hex").slice(0,24)},Zn=async(e,t)=>{const n=Qn(e);let r=e.contexts.get(n);if(r)return r.refCount+=1,await r.ready,"function"==typeof t&&t(1),r;r={key:n,refCount:1},r.ready=(async()=>{const n=await(async(e,t,n)=>{const{config:r,localPath:o,artifact:a}=e;if(e.localExists&&!t.has(o))return e.info.download.exists=!0,"function"==typeof n&&n(.5),o;if(r.model.local_path&&!r.model.allow_local_file)throw new Error("Local model path provided but `model.allow_local_file` is not enabled");const i=o;t.has(i)||t.set(i,(async()=>{if(a.isSplit&&a.splitCount>0){const e=/-(\d{5})-of-(\d{5})\.gguf$/,t=Nt.dirname(o),i=a.splitCount;let s=0;for(let o=1;o<=i;o+=1){const l=String(o).padStart(5,"0"),c=a.filename.replace(e,`-${l}-of-${String(i).padStart(5,"0")}.gguf`),u=`${r.model.base_url.replace(/\/+$/,"")}/${a.repoId}/resolve/${a.revision}/${c}`,d=Nt.join(t,c);await Ln(d)||await Gn(u,a.headers,d,null,e=>{if(e>=0&&Number.isFinite(e)){const t=(s+e)/i,r=Math.round(100*t);console.log(`Downloading model splits: ${Math.min(100,r)}%`),"function"==typeof n&&n(.5*t)}}),s+=1}}else await Gn(a.url,a.headers,o,a.size,e=>{if(e>=0&&Number.isFinite(e)){const t=Math.round(100*e);console.log(`Downloading model: ${Math.min(100,t)}%`),"function"==typeof n&&n(.5*e)}});e.localExists=!0,e.info.download.exists=!0})());try{await t.get(i)}finally{t.delete(i)}return o})(e.plan,e.downloads,t);"function"==typeof t&&t(.5);const o={model:n,n_ctx:e.plan.info.runtime.n_ctx,n_gpu_layers:e.plan.info.runtime.n_gpu_layers,n_parallel:e.plan.info.runtime.n_parallel,n_batch:e.plan.info.runtime.n_batch,flash_attn_type:e.plan.info.runtime.flash_attn_type,ctx_shift:e.plan.info.runtime.ctx_shift,kv_unified:e.plan.info.runtime.kv_unified,swa_full:e.plan.info.runtime.swa_full,lib_variant:e.plan.info.runtime.variant};let a;"off"!==e.plan.info.runtime.flash_attn_type&&(o.cache_type_k=e.plan.info.runtime.cache_type_k,o.cache_type_v=e.plan.info.runtime.cache_type_v),console.log("[Context] Load Options:",o);try{if(a=await s(o,e=>{"function"==typeof t&&(t(.5+.25*e),e%5==0&&console.log("[Context] Load Model Progress:",e))}),e.plan.info.runtime.n_parallel){if(!await a.parallel.enable({n_parallel:e.plan.info.runtime.n_parallel,n_batch:e.plan.info.runtime.n_batch}))throw new Error("Failed to enable parallel decoding mode for context")}return"function"==typeof t&&t(1),r.context=a,r.modelInfo=a.getModelInfo(),r}catch(e){if(a)try{a.release()}catch(e){}throw e}})(),e.contexts.set(n,r);try{return await r.ready,r}catch(t){throw e.contexts.delete(n),t}},Xn=async(e,t,n=!1)=>{if(n)t.refCount=0;else if(t.refCount=Math.max(0,t.refCount-1),t.refCount>0)return!1;e.contexts.delete(t.key);try{t.context?.parallel?.disable?.()}catch(e){}return await(t.context?.release?.()),!0};async function er(e,t){const n=Bn(t),r=await Hn(n),o=new jn(n,r);await o.initialize();const a={id:e,type:"ggml-llm",config:n,plan:r,info:r.info,contexts:new Map,downloads:new Map,sessionCache:o};return{id:e,type:"ggml-llm",info:r.info,initContext:async(e={})=>{const{onProgress:t}=e,n=await Zn(a,t);return{modelInfo:n.modelInfo?{...n.modelInfo}:null,runtime:{...a.plan.info.runtime},download:{...a.plan.info.download}}},completion:async(e={})=>{const{options:t={},useCache:n=!0}=e,r=Qn(a),o=a.contexts.get(r);if(!o)throw new Error(`Context "${r}" not initialized`);await o.ready;let i=t.prompt||"";if(!i&&t.messages){const e=await o.context.getFormattedChat(t.messages,t.chat_template||t.chatTemplate,{jinja:t.jinja,tools:t.tools,parallel_tool_calls:t.parallel_tool_calls,tool_choice:t.tool_choice,enable_thinking:t.enable_thinking,add_generation_prompt:t.add_generation_prompt,now:t.now,chat_template_kwargs:t.chat_template_kwargs});i=e?.prompt||e||""}if(n&&a.sessionCache.enabled&&i){const{options:e}=await a.sessionCache.prepareCompletionOptions(t,i),n=await a.sessionCache.generateTempStatePath(),r=await o.context.tokenize(i),s=r?.tokens?.length||0,l={...e,save_state_path:n,save_state_size:s};return console.log(`[SessionCache] save_state_size=${s} (prompt tokens)`),Wn(o.context,l,a.sessionCache,i,n,s)}return Yn(o.context,t)},tokenize:async(e={})=>{const{text:t="",params:n={}}=e,r=Qn(a),o=a.contexts.get(r);if(!o)throw new Error(`Context "${r}" not initialized`);await o.ready;const i=await o.context.tokenize(t,n);if(!i)return{tokens:[]};const s=Array.from(i.tokens??[]).map(e=>Number(e));return{...i,tokens:s}},detokenize:async(e={})=>{const{tokens:t=[]}=e,n=Qn(a),r=a.contexts.get(n);if(!r)throw new Error(`Context "${n}" not initialized`);await r.ready;const o=t.map(e=>Number(e));return r.context.detokenize(o)},applyChatTemplate:async(e={})=>{const{messages:t=[],template:n,params:r}=e,o=Qn(a),i=a.contexts.get(o);if(!i)throw new Error(`Context "${o}" not initialized`);return await i.ready,i.context.getFormattedChat(t,n,r)},releaseContext:async(e={})=>{const t=Qn(a),n=a.contexts.get(t);return!!n&&Xn(a,n,Boolean(e.force))},finalize:async()=>{const e=Array.from(a.contexts.values()).map(e=>Xn(a,e,!0));await Promise.allSettled(e),await a.sessionCache.cleanup()}}}const tr=e=>{const t=Bn(e);return t.model.repo_id||t.model.repository||t.model.model||null};const nr=e=>e?"number"==typeof e.score&&Number.isFinite(e.score)?Number(e.score):Dt(e):0;async function rr(e=null,t={}){const{threshold:n=1.1,includeBreakdown:r=!1,config:o,...s}=t;let l=null,c=null,u=null,d=null,p=null,m=null;if(o)try{const{modelBytes:e,kvCacheBytes:t,limitedKvCacheBytes:n,memoryLimitedCtx:r,kvInfo:a,quantization:i}=await async function(e){const t=Bn(e),n=await Jn(t),r=await Dn(n.url,n.headers,t.runtime.cache_dir),{arch:o,nCtxTrain:a,nLayer:i,nEmbd:s,nHead:l,nHeadKv:c,nEmbdHeadK:u,nEmbdHeadV:d,quantVersion:p,fileType:m}=ln(r),f=Number.isFinite(Number(i))?Number(i):0,h=Number.isFinite(Number(s))?Number(s):0,y=Number.isFinite(Number(l))?Number(l):0,g=Number.isFinite(Number(c))?Number(c):y,b=y>0&&h>0?h/y:128,v=Number.isFinite(Number(u))?Number(u):b,w=Number.isFinite(Number(d))?Number(d):b,_=sn({arch:o,metadata:r,nLayer:f}),x=_&&Number.isFinite(Number(_.kvLayers))?Number(_.kvLayers):f,S=Math.max(0,Math.floor(Number(x)||0)),k=(t.model.n_ctx?Number(t.model.n_ctx):null)||a||4096,E={k:t.model.cache_type_k,v:t.model.cache_type_v},C=n.size>0?n.size:0,B=cn({layerCount:S,headKvCount:g,embdHeadKCount:v,embdHeadVCount:w,cacheTypes:E,swaConfig:_,kvUnified:t.model.kv_unified,nParallel:t.model.n_parallel,swaFull:t.model.swa_full}),M=null!=t.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(t.backend.gpu_memory_fraction))):kn.backend.gpu_memory_fraction||1,$=null!=t.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(t.backend.cpu_memory_fraction))):Sn,O=B(k),N=await Vn(t,{modelBytes:C,kvCacheBytes:O}),T=(N.selected.totalMemory||0)*M,P=Math.max(0,Tt.totalmem()*$),I=N.selected.hasGpu?T:P,U=un({maxCtx:k,availableMemory:I,modelBytes:C,kvBytesForCtx:B}),A=B(k),F=B(U);return{kvInfo:{nCtxTrain:a,nLayer:f,nEmbd:h,nHeadKv:g,nEmbdHeadK:v,nEmbdHeadV:w,nHeadCount:y,nHeadKvCount:g,kvLayerCount:S,swa:_?.enabled?{window:_.window,pattern:_.pattern,denseFirst:_.denseFirst,type:_.type,layers:_.swaLayers}:null},modelBytes:C,kvCacheBytes:A,limitedKvCacheBytes:F,memoryLimitedCtx:U,quantization:{fileType:m,version:p}}}(o);l=e,c=t,u=n,d=r,p=a,m=i}catch(e){}const f=null!=o?.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.gpu_memory_fraction))):void 0,h=null!=o?.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.cpu_memory_fraction))):void 0,y=await Xt({...s,platform:process.platform,totalMemoryInBytes:Tt.totalmem(),backend:"ggml-llm",includeBreakdown:r,gpuMemoryFraction:f,cpuMemoryFraction:h,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:l,kvCacheBytes:c,limitedKvCacheBytes:u}),g=y.selected,b=nr(g);g.modelBytes=l||null,g.kvCacheBytes=c||null,g.memoryLimitedCtx=d||null,g.limitedKvCacheBytes=u||null,g.kvInfo=p||null,g.quantization=m||null;let v=null,w=null;if(e){const t=nr(e);w={...e,score:t};let r="buttress",o="buttress-higher-score";if(y.ok)if(t||0===t){const e=w.fit,a=w.limitedFit,i=g?.fit,s=g?.limitedFit,l=e?.fitsInGpu||e?.fitsInCpu||a?.fitsInGpu||a?.fitsInCpu,c=i?.fitsInGpu||i?.fitsInCpu||s?.fitsInGpu||s?.fitsInCpu;l&&!c?(r="local",o="client-fits-in-memory"):c&&!l?(r="buttress",o="buttress-fits-in-memory"):t>b*n?(r="local",o="client-better"):b>t*n?(r="buttress",o="buttress-better"):(r="either",o="comparable-scores")}else r="buttress",o="missing-client-score";else r="local",o="buttress-unavailable";v={buttressScore:b,clientScore:t,threshold:n,recommendation:r,reason:o}}y.ok||v||(v={buttressScore:b,clientScore:e?.score??null,threshold:n,recommendation:"local",reason:"buttress-unavailable"});let _=null;return o&&(_={repoId:o.model?.repo_id||null,quantization:o.model?.quantization||null,nCtx:o.model?.n_ctx||null,cacheKType:o.model?.cache_type_k||"f16",cacheVType:o.model?.cache_type_v||"f16"}),{type:"ggml-llm",timestamp:(new Date).toISOString(),buttress:y,client:w,comparison:v,modelConfig:_}}const{WritableStream:or}="undefined"!=typeof globalThis&&globalThis.ReadableStream&&globalThis.WritableStream?{ReadableStream:globalThis.ReadableStream,WritableStream:globalThis.WritableStream}:mn,ar=(e={},t={})=>(Object.entries(t||{}).forEach(([t,n])=>{n&&"object"==typeof n&&!Array.isArray(n)?(e[t]&&"object"==typeof e[t]||(e[t]={}),ar(e[t],n)):e[t]=n}),e),ir="https://huggingface.co",sr="https://huggingface.co/api",lr=Nt.join(Tt.homedir(),".buttress","models"),cr=["cuda","vulkan","default"],ur=["q8_0","q5_1","q5_0","q4_1","q4_0","base"],dr={backend:{type:"ggml-stt",variant:null,variant_preference:cr,gpu_memory_fraction:.85,cpu_memory_fraction:.5},model:{repo_id:"BricksDisplay/whisper-ggml",revision:"main",filename:null,url:null,quantization:null,preferred_quantizations:["q5_1","q8_0","base"],allow_local_file:!1,local_path:null,api_base:sr,base_url:ir,use_gpu:!0,use_flash_attn:"auto"},runtime:{cache_dir:lr,prefer_variants:[],huggingface_token:process.env.HUGGINGFACE_TOKEN||null,http_headers:{},max_threads:null}},pr=(e,t=[])=>e||0===e?Array.isArray(e)?e.filter(e=>null!=e):[e]:[...t],mr=e=>{if(!e)return null;const t=String(e).toLowerCase();return["cuda","vulkan","default"].includes(t)?t:null},fr=(e={})=>{const t=JSON.parse(JSON.stringify(dr));if(ar(t,e),t.backend.variant=mr(t.backend.variant),t.backend.variant_preference=Array.from(new Set(pr(t.backend.variant_preference||cr).map(mr).filter(Boolean))),0===t.backend.variant_preference.length&&(t.backend.variant_preference=[...cr]),t.runtime.prefer_variants=Array.from(new Set(pr(t.runtime.prefer_variants).map(mr).filter(Boolean))),t.model.preferred_quantizations=Array.from(new Set(pr(t.model.preferred_quantizations||t.model.quantizations).map(e=>e?String(e).toLowerCase():null).filter(Boolean))),t.model.quantization){const e=String(t.model.quantization).toLowerCase();t.model.preferred_quantizations.includes(e)||t.model.preferred_quantizations.unshift(e)}return t.model.base_url=t.model.base_url||ir,t.model.api_base=t.model.api_base||sr,t.runtime.cache_dir=t.runtime.cache_dir?Nt.resolve(t.runtime.cache_dir):lr,t},hr=e=>{const t=e.toLowerCase();return ur.find(e=>t.includes(e))||null},yr=async e=>{await(0,Pt.mkdir)(e,{recursive:!0})},gr=(e,t,n=lr)=>{const r=(0,It.createHash)("sha256").update(e).digest("hex");return Nt.join(((e=lr)=>Nt.join(e,".metadata-cache"))(n),t,`${r}.json`)},br=async(e,t,n,r=lr)=>{try{const o=gr(e,t,r);await yr(Nt.dirname(o)),await(0,Pt.writeFile)(o,JSON.stringify(n),"utf-8")}catch(e){}},vr=async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,{...t,method:"HEAD"});if(!n.ok)throw new Error(`Failed to fetch headers for ${e}: ${n.status} ${n.statusText}`);return n},wr=async(e,t)=>{try{const n=await(0,Pt.stat)(e);return!t||n.size===t}catch(e){return!1}},_r=async e=>{const t=e.model.repo_id||e.model.repository||e.model.model;if(!t)throw new Error("`model.repo_id` is required in Buttress backend config");const n=e.model.revision||"main",r=e.runtime.cache_dir,o=JSON.stringify({repoId:t,revision:n,filename:e.model.filename,url:e.model.url,quantization:e.model.quantization,preferred_quantizations:e.model.preferred_quantizations}),a=await(async(e,t,n=lr)=>{try{const r=gr(e,t,n),o=await(0,Pt.readFile)(r,"utf-8");return JSON.parse(o)}catch(e){return null}})(o,"artifact-info",r);if(a)return a;const i={...e.runtime.http_headers||{}};if(e.runtime.huggingface_token&&(i.Authorization=`Bearer ${e.runtime.huggingface_token}`),e.model.url){const a=await vr(e.model.url,{headers:i}),s=Number(a.headers.get("content-length"))||null,l=e.model.filename||e.model.url.split("/").pop(),c={repoId:t,revision:n,filename:l,url:e.model.url,size:s,quantization:hr(l||""),headers:i};return await br(o,"artifact-info",c,r),c}let{filename:s}=e.model,l=e.model.quantization&&String(e.model.quantization).toLowerCase();const c=await(async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,t);if(!n.ok){const t=await n.text().catch(()=>"");throw new Error(`Failed to fetch ${e}: ${n.status} ${n.statusText} ${t}`.trim())}return n.json()})(`${e.model.api_base}/models/${t}?revision=${n}&blobs=true`,{headers:i}),u=(c?.siblings||c?.files||[]).map(e=>e.rfilename||e.path||e.filename).filter(e=>"string"==typeof e&&e.endsWith(".bin"));if(0===u.length)throw new Error(`No model artifacts found in repo ${t}`);const d=e.model.preferred_quantizations.length>0?e.model.preferred_quantizations:ur;if(s)l||(l=hr(s));else{const e=(()=>{const e=d.find(e=>u.find(t=>t.toLowerCase().includes(e)));if(e)return{filename:u.find(t=>t.toLowerCase().includes(e)),quantization:e};return null})()||{filename:u[0],quantization:null},{filename:t,quantization:n}=e;s=t,l=n||hr(s)}const p=`${e.model.base_url.replace(/\/+$/,"")}/${t}/resolve/${n}/${s}`,m=await vr(p,{headers:i}),f={repoId:t,revision:n,filename:s,url:p,size:Number(m.headers.get("content-length"))||null,quantization:l,headers:i,isSplit:!1,splitCount:0};return await br(o,"artifact-info",f,r),f},xr=async(e,{modelBytes:t=null,processingBytes:n=null}={})=>{const r=(e=>{const t=[];return e.backend.variant&&t.push(e.backend.variant),e.runtime.prefer_variants.length>0&&t.push(...e.runtime.prefer_variants),t.push(...e.backend.variant_preference),t.push("default"),Array.from(new Set(t.map(mr).filter(Boolean)))})(e),[o,...s]=r,l=null!=e.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.gpu_memory_fraction))):dr.backend.gpu_memory_fraction||1,c=null!=e.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.cpu_memory_fraction))):.5,u=await Xt({platform:process.platform,totalMemoryInBytes:Tt.totalmem(),backend:"ggml-stt",variant:o||null,preferVariants:s,variantPreference:e.backend.variant_preference,gpuMemoryFraction:l,cpuMemoryFraction:c,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:t,kvCacheBytes:n}),d=e=>({...e,devices:Array.isArray(e.devices)?e.devices:[],ok:e.ok,hasGpu:Boolean(e.hasGpu),totalMemory:e.gpuTotalBytes||e.totalMemory||0,error:e.ok?null:new Error(e.error||`Variant ${e.variant} not available on this platform`)});if(!u.ok||!u.selected){const e=(u.attempts||[]).map(e=>`${e.variant}: ${e.error||"unknown error"}`).join("; ");throw new Error(`Unable to initialize any backend variant (${r.join(", ")}). Errors: ${e}`)}const p=(u.attempts||[]).map(d);return{selected:d(u.selected),attempts:p}},Sr=async e=>{const t=await _r(e),n=nn({modelBytes:t.size>0?t.size:0}),r=await xr(e,{modelBytes:n.modelBytes,processingBytes:n.processingBufferBytes});let o=r.selected.hasGpu&&(void 0===r.selected.fit?.fitsInGpu||r.selected.fit.fitsInGpu);!1===e.model.use_gpu&&(o=!1);const a=e.model.use_flash_attn&&String(e.model.use_flash_attn).toLowerCase();let i;i="on"===a||"true"===a||"off"!==a&&"false"!==a&&o;const s=e.runtime.cache_dir,l=((e,t)=>{if(e.model.local_path)return Nt.resolve(e.model.local_path);const n=t.repoId.split("/"),r=Nt.join(e.runtime.cache_dir,...n,t.revision);return Nt.join(r,t.filename)})(e,t),c=await wr(l,t.size);return{config:e,info:{ok:!0,backend:"ggml-stt",model:{repoId:t.repoId,revision:t.revision,filename:t.filename,quantization:t.quantization,url:t.url,sizeBytes:t.size},runtime:{variant:r.selected.variant,use_gpu:o,use_flash_attn:i,max_threads:e.runtime.max_threads?Number(e.runtime.max_threads):null},resources:{...n,gpuCapacityBytes:r.selected.gpuTotalBytes,gpuUsableBytes:r.selected.gpuUsableBytes,cpuUsableBytes:r.selected.cpuUsableBytes,fit:r.selected.fit},devices:{selected:r.selected,attempts:r.attempts},download:{cacheDir:s,localPath:l,exists:c},timestamp:(new Date).toISOString()},artifact:t,memory:n,devices:r,localPath:l,localExists:c}},kr=async(e,t,n)=>{const{localPath:r,artifact:o,config:a}=e;if(e.localExists)return"function"==typeof n&&n(1),r;const i=t.get(r);if(i)return await i,"function"==typeof n&&n(1),r;const s=(async()=>{if(a.model.allow_local_file){if(!await wr(r,o.size))throw new Error(`Local model file not found: ${r}`);return r}return await(async(e,t,n,r,o)=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");await yr(Nt.dirname(n));const a=await fetch(e,{headers:t});if(!a.ok||!a.body)throw new Error(`Failed to download ${e}: ${a.status} ${a.statusText}`);const i=await(0,Pt.open)(n,"w"),s=Number(a.headers.get("content-length"))||r||0;let l=0,c=.05;try{await a.body.pipeTo(new or({async write(e){if(await i.write(e),l+=e.byteLength,"function"==typeof o&&s>0){const e=Math.min(1,l/s);for(;e>=c;)o(c),c+=.05}},async close(){await i.close(),"function"==typeof o&&o(1)},async abort(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}}))}catch(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}if(r){const e=await(0,Pt.stat)(n);if(e.size!==r)throw await(0,Pt.unlink)(n).catch(()=>{}),new Error(`Downloaded file size mismatch, expected ${r} got ${e.size}`)}})(o.url,o.headers,r,o.size,n),r})();t.set(r,s);try{return await s,r}finally{t.delete(r)}};class Er{constructor(){this.queue=[],this.processing=!1}async enqueue(e){return new Promise((t,n)=>{this.queue.push({task:e,resolve:t,reject:n}),this.processNext()})}async processNext(){if(this.processing||0===this.queue.length)return;this.processing=!0;const{task:e,resolve:t,reject:n}=this.queue.shift();try{t(await e())}catch(e){n(e)}finally{this.processing=!1,this.processNext()}}}const Cr=e=>{if(!e)return null;if(e instanceof ArrayBuffer)return e;if(ArrayBuffer.isView(e))return e.buffer;if("string"==typeof e){const t=e.startsWith("data:")?e.split(",")[1]||"":e,n=Buffer.from(t,"base64");return n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)}throw new Error("Unsupported audioData format, expected base64 string or ArrayBuffer")},Br=async(e,t)=>{if(e.contextRecord)return e.contextRecord.refCount+=1,await e.contextRecord.ready,"function"==typeof t&&t(1),e.contextRecord;const n={refCount:1};n.ready=(async()=>{const r=await kr(e.plan,e.downloads,t),o=await l({filePath:r,useFlashAttn:e.plan.info.runtime.use_flash_attn,useGpu:e.plan.info.runtime.use_gpu},e.plan.info.runtime.variant);n.context=o;try{n.modelInfo=await o.getModelInfo()}catch(e){n.modelInfo=null}return n})(),e.contextRecord=n;try{return await n.ready,"function"==typeof t&&t(1),n}catch(t){throw e.contextRecord=null,t}},Mr=async(e,t,n=!1)=>{if(n)t.refCount=0;else if(t.refCount=Math.max(0,t.refCount-1),t.refCount>0)return!1;return e.contextRecord=null,await(t.context?.release?.()),!0};async function $r(e,t){const n=await Sr(fr(t)),r={id:e,type:"ggml-stt",config:t,plan:n,info:n.info,contextRecord:null,downloads:new Map,queue:new Er},o=async(e={})=>{const{audioPath:t,audioData:n,options:o={}}=e,a=await Br(r),i={...o};return r.plan.info.runtime.max_threads&&null==i.maxThreads&&(i.maxThreads=r.plan.info.runtime.max_threads),r.queue.enqueue(async()=>{if(await a.ready,n){const e=Cr(n),{promise:t}=a.context.transcribeData(e,i);return await t}if(!t)throw new Error("audioPath or audioData is required for transcription");const e=Nt.resolve(t),{promise:r}=a.context.transcribe(e,i);return await r})};return{id:e,type:"ggml-stt",info:n.info,initContext:async(e={})=>{const{onProgress:t}=e,n=await Br(r,t);return{modelInfo:n.modelInfo?{...n.modelInfo}:null,runtime:{...r.plan.info.runtime},download:{...r.plan.info.download}}},transcribe:async(e={})=>o(e),transcribeData:async(e={})=>o(e),releaseContext:async(e={})=>{const t=r.contextRecord;return!!t&&Mr(r,t,Boolean(e.force))},finalize:async()=>{r.contextRecord&&await Mr(r,r.contextRecord,!0)}}}const Or=e=>{const t=fr(e);return t.model.repo_id||t.model.repository||t.model.model||null},Nr=e=>e?"number"==typeof e.score&&Number.isFinite(e.score)?Number(e.score):Dt(e):0;const Tr=new Map,Pr=(e,t)=>{const n=(e=>{const t=Tr.get(e);if(!t)throw new Error(`Unknown generator id "${e}"`);return t})(e);if(n.type!==t)throw new Error(`Generator "${e}" does not support ${t} backend`);return n.instance};async function Ir(e,t){const n={"ggml-llm":{create:er,getId:tr},"ggml-stt":{create:$r,getId:Or}}[e];if(!n)throw new Error(`Unsupported backend type: ${e}`);const r=n.getId(t);if(!r)throw new Error("Buttress generator config missing repo identifier");const o=`${e}:${r}`,a=Tr.get(o);if(a)return a.refCount+=1,{id:a.id,info:a.instance.info};const i=await n.create(o,t),s={id:o,type:i.type,instance:i,refCount:1};return Tr.set(o,s),{id:o,info:i.info}}async function Ur(e){const t=Tr.get(e);return!!t&&(t.refCount-=1,t.refCount<=0&&(await t.instance.finalize(),Tr.delete(e)),!0)}async function Ar(e,t=null,n={}){if("ggml-llm"===e)return rr(t,n);if("ggml-stt"===e)return async function(e=null,t={}){const{threshold:n=1.1,includeBreakdown:r=!1,config:o,...s}=t;let l=null,c=null,u=null;if(o)try{const e=fr(o),t=await _r(e);l=t.size??null,({processingBufferBytes:c}=nn({modelBytes:l})),u=t.quantization||null}catch(e){}const d=null!=o?.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.gpu_memory_fraction))):void 0,p=null!=o?.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.cpu_memory_fraction))):void 0,m=await Xt({...s,platform:process.platform,totalMemoryInBytes:Tt.totalmem(),backend:"ggml-stt",includeBreakdown:r,gpuMemoryFraction:d,cpuMemoryFraction:p,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:l,kvCacheBytes:c}),f=m.selected,h=Nr(f);f&&(f.modelBytes=l||null,f.processingBytes=c||null,f.quantization=u||null);let y=null,g=null;if(e){const t=Nr(e);g={...e,score:t};let r="buttress",o="buttress-higher-score";if(m.ok)if(t||0===t)if(e.fit&&f?.fit){const a=e.fit.fitsInGpu||e.fit.fitsInCpu,i=f.fit.fitsInGpu||f.fit.fitsInCpu;a&&!i?(r="local",o="client-fits-in-memory"):i&&!a?(r="buttress",o="buttress-fits-in-memory"):t>h*n?(r="local",o="client-better"):h>t*n?(r="buttress",o="buttress-better"):(r="either",o="comparable-scores")}else t>h*n?(r="local",o="client-better"):h>t*n?(r="buttress",o="buttress-better"):(r="either",o="comparable-scores");else r="buttress",o="missing-client-score";else r="local",o="buttress-unavailable";y={buttressScore:h,clientScore:t,threshold:n,recommendation:r,reason:o}}m.ok||y||(y={buttressScore:h,clientScore:e?.score??null,threshold:n,recommendation:"local",reason:"buttress-unavailable"});let b=null;return o&&(b={repoId:o.model?.repo_id||null,quantization:o.model?.quantization||null,filename:o.model?.filename||null}),{type:"ggml-stt",timestamp:(new Date).toISOString(),buttress:m,client:g,comparison:y,modelConfig:b}}(t,n);throw new Error(`Unknown backend type: ${e}`)}const Fr={initContext:async(e,t)=>Pr(e,"ggml-llm").initContext(t),completion:async(e,t)=>Pr(e,"ggml-llm").completion(t),tokenize:async(e,t)=>Pr(e,"ggml-llm").tokenize(t),detokenize:async(e,t)=>Pr(e,"ggml-llm").detokenize(t),applyChatTemplate:async(e,t)=>Pr(e,"ggml-llm").applyChatTemplate(t),releaseContext:async(e,t)=>Pr(e,"ggml-llm").releaseContext(t)},qr={initContext:async(e,t)=>Pr(e,"ggml-stt").initContext(t),transcribe:async(e,t)=>Pr(e,"ggml-stt").transcribe(t),transcribeData:async(e,t)=>Pr(e,"ggml-stt").transcribeData(t),releaseContext:async(e,t)=>Pr(e,"ggml-stt").releaseContext(t)};function jr(e,t){return"ggml-llm"===e?tr(t):"ggml-stt"===e?Or(t):null}const{version:zr,name:Rr}={version:"2.23.0-beta.27",name:"@fugood/buttress-server-poc"},Dr=async()=>{const e=`https://registry.npmjs.org/${Rr}/latest`;try{const t=new AbortController,n=setTimeout(()=>t.abort(),3e3),r=await fetch(e,{headers:{Accept:"application/json"},signal:t.signal});if(clearTimeout(n),!r.ok)return null;return(await r.json()).version||null}catch{return null}},Lr=(e,t)=>{if(!t)return!1;const n=e.split(/[.-]/),r=t.split(/[.-]/);for(let e=0;e<Math.max(n.length,r.length);e+=1){const t=parseInt(n[e])||0,o=parseInt(r[e])||0;if(o>t)return!0;if(o<t)return!1}return!1},Gr=async()=>{try{const e=await Dr();e&&Lr(zr,e)&&(e=>{console.log(""),console.log("[33mâ•─────────────────────────────────────────────────╮[0m"),console.log("[33m│[0m Update available! [2m%s[0m → [32m%s[0m",zr.padEnd(12),e.padEnd(12),"[33m│[0m"),console.log("[33m│[0m [33m│[0m"),console.log("[33m│[0m Run to upgrade: [33m│[0m"),console.log("[33m│[0m [36mnpm install -g %s[0m [33m│[0m",Rr.padEnd(27)),console.log("[33m╰─────────────────────────────────────────────────╯[0m"),console.log("")})(e)}catch(e){}},Jr=n("node:fs"),Vr=n("node:child_process"),Hr=JSON.parse('{"UU":"@fugood/buttress-server-poc","rE":"2.23.0-beta.27"}'),Kr=e=>{if(!e)return{repoId:null,filename:null};const[t,n]=e.split(":");return{repoId:t,filename:n||null}};async function Yr({modelIds:e=[],defaultConfig:t=null}={}){const n=[];console.log(`${Hr.UU} v${Hr.rE}`),console.log("Generating model capabilities comparison...\n"),n.push(`${Hr.UU} v${Hr.rE}`),n.push("## Model Capabilities Comparison\n"),e&&0!==e.length||(console.error("Error: No model IDs provided"),process.exit(1));try{const r=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=r(n[e]||{},t):n[e]=t}),n},o=t||{},{server:a,generators:i=[],...s}=o,l=e=>r(JSON.parse(JSON.stringify(s)),e||{}),u=e=>{if(Array.isArray(i)&&i.length>0){const t=i.filter(e=>"ggml-llm"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return l(n)}}return Object.keys(s).length>0?l({}):null},d=[];for(let t=0;t<e.length;t+=1){const n=e[t];console.log(`[${t+1}/${e.length}] Analyzing ${n}...`);let r=u(n);r={...r||{},model:{...s.runtime,...r?.model||{},repo_id:n}};const o=await Ar("ggml-llm",null,{config:r,includeBreakdown:!0});d.push({modelId:n,capabilities:o,modelInfo:o.buttress?.selected||null,modelConfig:o.modelConfig||null})}const p=e=>e?(e/1024/1024/1024).toFixed(2):"N/A",m=e=>e?"✅":"🚫";n.push("| Model ID | Size (GB) | Context Size | KV Cache Size (GB) | Total Required Memory (GB) | Fits GPU (Full) | Fits CPU (Full) |"),n.push("|----------|-----------|--------------|--------------------|----------------------------|-----------------|-----------------|"),d.forEach(({modelId:e,modelInfo:t,modelConfig:r})=>{const o=p(t?.modelBytes),a=r?.nCtx||t?.kvInfo?.nCtxTrain||"N/A",i=cn(t),s=Number(a),l=t?.kvCacheBytes||(i&&Number.isFinite(s)&&s>0?i(s):i&&i(t?.kvInfo?.nCtxTrain||0))||null,c=p(l),u=p(t?.modelBytes&&l?t.modelBytes+l:t?.fit?.totalRequiredBytes),d=m(t?.fit?.fitsInGpu),f=m(t?.fit?.fitsInCpu);n.push(`| ${e} | ${o} | ${a} | ${c} | ${u} | ${d} | ${f} |`);if((null!=t?.memoryLimitedCtx||null!=t?.limitedFit)&&(!t?.fit?.fitsInGpu||!t?.fit?.fitsInCpu)){const e=t?.memoryLimitedCtx||a,r=Number(e),s=t?.limitedKvCacheBytes||i&&Number.isFinite(r)&&r>0&&i(r)||null,l=p(s),d=p(t?.modelBytes&&s?t.modelBytes+s:t?.limitedFit?.totalRequiredBytes),f=m(t?.limitedFit?.fitsInGpu),h=m(t?.limitedFit?.fitsInCpu);(e!==a||l!==c||d!==u)&&n.push(`| ↳ Limited | ${o} | ${e} | ${l} | ${d} | ${f} | ${h} |`)}}),n.push("\n---"),n.push("\n### System Information");let f=null;if("win32"!==process.platform)try{f=(0,Vr.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}if(f?n.push(`- **System:** ${f}`):(n.push(`- **Hostname:** ${Tt.hostname()}`),n.push(`- **OS:** ${Tt.type()} ${Tt.release()}`)),n.push(`- **Platform:** ${process.platform}`),n.push(`- **CPU Cores:** ${Tt.cpus().length}`),n.push(`- **Total System Memory:** ${(Tt.totalmem()/1024/1024/1024).toFixed(2)} GB`),d.length>0){const e=d[0].capabilities,t=e.buttress?.selected;if(t){const e=t.cpuTotalBytes>0?(t.cpuUsableBytes/t.cpuTotalBytes*100).toFixed(0):0;if(n.push(`- **Usable CPU Memory:** ${(t.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${e}% of ${(t.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.hasGpu){const e=t.devices.filter(e=>"gpu"===e.type);if(e.length>0){const r=e[0];n.push(`- **GPU Backend:** ${r.backend}`),n.push(`- **GPU Name:** ${r.deviceName}`),n.push(`- **GPU Total Memory:** ${(r.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const o=t.gpuTotalBytes>0?(t.gpuUsableBytes/t.gpuTotalBytes*100).toFixed(0):0;n.push(`- **GPU Usable Memory:** ${(t.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${o}% of ${(t.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`)}}else n.push("- **GPU:** Not available")}}n.push("\n### Command Used");const h=process.argv.slice(2).join(" ");if(n.push(`\`\`\`bash\n${process.argv[0]} ${process.argv[1]} ${h}\n\`\`\``),n.push("\n### Package Information"),n.push(`- **Name:** ${Hr.UU}`),n.push(`- **Version:** ${Hr.rE}`),Hr.description&&n.push(`- **Description:** ${Hr.description}`),t&&Object.keys(t).length>0){n.push("\n### Configuration"),n.push("<details>"),n.push("<summary>Click to expand TOML configuration</summary>"),n.push("\n```toml");try{const e=c.stringify(t);n.push(e)}catch(e){n.push("# Error serializing config"),n.push(JSON.stringify(t,null,2))}n.push("```"),n.push("</details>")}const y=`ggml-llm-model-capabilities-${(new Date).toISOString().replace(/[.:]/g,"-").split("T")[0]}.md`,g=Nt.join(process.cwd(),y);Jr.writeFileSync(g,n.join("\n"),"utf8"),console.log(`\nModel capabilities table saved to: ${g}`),process.exit(0)}catch(e){console.error("Failed to generate model table:",e.message),process.exit(1)}}async function Wr({modelId:e=null,defaultConfig:t=null}={}){console.log(`${Hr.UU} v${Hr.rE}`),console.log("Testing capabilities for backend: ggml-llm"),e&&console.log(`Model: ${e}`),console.log("--------------------------------");try{const n=t||{},{server:r,generators:o=[],...a}=n,i=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=i(n[e]||{},t):n[e]=t}),n},s=e=>i(JSON.parse(JSON.stringify(a)),e||{});let l=(e=>{if(Array.isArray(o)&&o.length>0){const t=o.filter(e=>"ggml-llm"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return s(n)}}return Object.keys(a).length>0?s({}):null})(e);e&&(l={...l||{},model:{...l?.model||{},repo_id:e}});const c=await Ar("ggml-llm",null,{config:l,includeBreakdown:!0}),u=c.buttress?.selected||null,d=c.modelConfig||null;if(e||d?.repoId){console.log("\n=== Model Information ===");const t=e||d?.repoId;if(console.log(`Repository ID: ${t}`),d?.quantization&&console.log(`Quantization: ${d.quantization}`),d?.nCtx&&console.log(`Context Length: ${d.nCtx}`),u?.quantization){const{fileType:e}=u.quantization;null!=e&&console.log(`Model File Type (GGUF): ${e}`)}const n=d?.cache_type_k||"f16",r=d?.cache_type_v||"f16";if(console.log(`KV Cache Type: K=${n}, V=${r}`),u?.modelBytes&&u?.kvCacheBytes){if(console.log(`Model Size: ${(u.modelBytes/1024/1024/1024).toFixed(2)} GB`),u.kvInfo?console.log(`KV Cache Size: ${(u.kvCacheBytes/1024/1024/1024).toFixed(2)} GB (KV info: ${JSON.stringify(u.kvInfo)})`):console.log(`KV Cache Size: ${(u.kvCacheBytes/1024/1024/1024).toFixed(2)} GB`),console.log(`Total Required Memory: ${((u.modelBytes+u.kvCacheBytes)/1024/1024/1024).toFixed(2)} GB`),null!=u.memoryLimitedCtx){const e=u.memoryLimitedCtx,t=u.kvInfo?.nCtxTrain;t?console.log(`\nMemory-Limited Context: ${e} (Train: ${t})`):console.log(`\nMemory-Limited Context: ${e}`),null!=u.limitedKvCacheBytes&&console.log(`Limited KV Cache Size: ${(u.limitedKvCacheBytes/1024/1024/1024).toFixed(2)} GB`)}}else if(c.buttress?.selected?.fit){const{totalRequiredBytes:e}=c.buttress.selected.fit;console.log(`Total Required Memory: ${(e/1024/1024/1024).toFixed(2)} GB`)}}if(c.buttress?.selected){const{selected:e}=c.buttress;console.log("\n=== Hardware Information ===");let t=null;if("win32"!==process.platform)try{t=(0,Vr.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}t?console.log(`System: ${t}`):(console.log(`Hostname: ${Tt.hostname()}`),console.log(`OS: ${Tt.type()} ${Tt.release()}`)),console.log(`Platform: ${e.platform}`),console.log(`CPU Cores: ${Tt.cpus().length}`),console.log(`Total System Memory: ${(Tt.totalmem()/1024/1024/1024).toFixed(2)} GB`);const n=e.cpuTotalBytes>0?(e.cpuUsableBytes/e.cpuTotalBytes*100).toFixed(0):0;if(console.log(`Usable CPU Memory: ${(e.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),e.hasGpu){console.log("\n--- GPU Details ---");e.devices.filter(e=>"gpu"===e.type).forEach(t=>{console.log(`GPU Backend: ${t.backend}`),console.log(`GPU Name: ${t.deviceName}`),console.log(`GPU Total Memory: ${(t.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const n=e.gpuTotalBytes>0?(e.gpuUsableBytes/e.gpuTotalBytes*100).toFixed(0):0;console.log(`GPU Usable Memory: ${(e.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.metadata&&(t.metadata.hasBFloat16&&console.log("Supports BFloat16: Yes"),t.metadata.hasUnifiedMemory&&console.log("Unified Memory: Yes"))})}else console.log("GPU: Not available");console.log(`\nBackend Variant: ${e.variant}`),console.log(`Performance Score: ${e.score}`),e.fit&&(console.log("\n--- Model Fit Analysis ---"),console.log("Fits in GPU: "+(e.fit.fitsInGpu?"Yes":"No")),console.log("Fits in CPU: "+(e.fit.fitsInCpu?"Yes":"No")),console.log(`Limiting Factor: ${e.fit.limiting}`),e.limitedFit&&(console.log("\n--- Memory-Limited Fit Analysis ---"),console.log(`Limited Total Required: ${(e.limitedFit.totalRequiredBytes/1024/1024/1024).toFixed(2)} GB`),console.log("Fits in GPU (Limited): "+(e.limitedFit.fitsInGpu?"Yes":"No")),console.log("Fits in CPU (Limited): "+(e.limitedFit.fitsInCpu?"Yes":"No")),console.log(`Limiting Factor (Limited): ${e.limitedFit.limiting}`)))}console.log("\n=== Full Capabilities JSON ==="),console.log(JSON.stringify(c,null,2)),process.exit(0)}catch(e){console.error("Failed to get capabilities:",e.message),process.exit(1)}}async function Qr({modelIds:e=[],defaultConfig:t=null}={}){const n=[];console.log(`${Hr.UU} v${Hr.rE}`),console.log("Generating STT model capabilities comparison...\n"),n.push(`${Hr.UU} v${Hr.rE}`),n.push("## STT Model Capabilities Comparison\n"),e&&0!==e.length||(console.error("Error: No model IDs provided"),process.exit(1));try{const r=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=r(n[e]||{},t):n[e]=t}),n},o=t||{},{server:a,generators:i=[],...s}=o,l=e=>r(JSON.parse(JSON.stringify(s)),e||{}),u=e=>{if(Array.isArray(i)&&i.length>0){const t=i.filter(e=>"ggml-stt"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return l(n)}}return Object.keys(s).length>0?l({}):null},d=[];for(let t=0;t<e.length;t+=1){const n=e[t],{repoId:r,filename:o}=Kr(n);console.log(`[${t+1}/${e.length}] Analyzing ${n}...`);let a=u(r);a={...a||{},model:{...a?.model||{},repo_id:r,...o&&{filename:o}}};const i=await Ar("ggml-stt",null,{config:a,includeBreakdown:!0});d.push({modelId:n,repoId:r,filename:o,capabilities:i,modelInfo:i.buttress?.selected||null,modelConfig:i.modelConfig||null})}const p=e=>e?(e/1024/1024).toFixed(1):"N/A",m=e=>e?"✅":"🚫";n.push("| Model | Size (MB) | Processing Buffer (MB) | Total Required (MB) | Fits GPU | Fits CPU |"),n.push("|-------|-----------|------------------------|---------------------|----------|----------|"),d.forEach(({modelId:e,modelInfo:t})=>{const r=p(t?.modelBytes),o=p(t?.processingBytes||t?.kvCacheBytes),a=p(t?.fit?.totalRequiredBytes),i=m(t?.fit?.fitsInGpu),s=m(t?.fit?.fitsInCpu);n.push(`| ${e} | ${r} | ${o} | ${a} | ${i} | ${s} |`)}),n.push("\n---"),n.push("\n### System Information");let f=null;if("win32"!==process.platform)try{f=(0,Vr.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}if(f?n.push(`- **System:** ${f}`):(n.push(`- **Hostname:** ${Tt.hostname()}`),n.push(`- **OS:** ${Tt.type()} ${Tt.release()}`)),n.push(`- **Platform:** ${process.platform}`),n.push(`- **CPU Cores:** ${Tt.cpus().length}`),n.push(`- **Total System Memory:** ${(Tt.totalmem()/1024/1024/1024).toFixed(2)} GB`),d.length>0){const e=d[0].capabilities,t=e.buttress?.selected;if(t){const e=t.cpuTotalBytes>0?(t.cpuUsableBytes/t.cpuTotalBytes*100).toFixed(0):0;if(n.push(`- **Usable CPU Memory:** ${(t.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${e}% of ${(t.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.hasGpu){const e=t.devices.filter(e=>"gpu"===e.type);if(e.length>0){const r=e[0];n.push(`- **GPU Backend:** ${r.backend}`),n.push(`- **GPU Name:** ${r.deviceName}`),n.push(`- **GPU Total Memory:** ${(r.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const o=t.gpuTotalBytes>0?(t.gpuUsableBytes/t.gpuTotalBytes*100).toFixed(0):0;n.push(`- **GPU Usable Memory:** ${(t.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${o}% of ${(t.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`)}}else n.push("- **GPU:** Not available")}}n.push("\n### Command Used");const h=process.argv.slice(2).join(" ");if(n.push(`\`\`\`bash\n${process.argv[0]} ${process.argv[1]} ${h}\n\`\`\``),n.push("\n### Package Information"),n.push(`- **Name:** ${Hr.UU}`),n.push(`- **Version:** ${Hr.rE}`),Hr.description&&n.push(`- **Description:** ${Hr.description}`),t&&Object.keys(t).length>0){n.push("\n### Configuration"),n.push("<details>"),n.push("<summary>Click to expand TOML configuration</summary>"),n.push("\n```toml");try{const e=c.stringify(t);n.push(e)}catch(e){n.push("# Error serializing config"),n.push(JSON.stringify(t,null,2))}n.push("```"),n.push("</details>")}const y=`ggml-stt-model-capabilities-${(new Date).toISOString().replace(/[.:]/g,"-").split("T")[0]}.md`,g=Nt.join(process.cwd(),y);Jr.writeFileSync(g,n.join("\n"),"utf8"),console.log(`\nSTT model capabilities table saved to: ${g}`),process.exit(0)}catch(e){console.error("Failed to generate STT model table:",e.message),process.exit(1)}}async function Zr({modelId:e=null,defaultConfig:t=null}={}){console.log(`${Hr.UU} v${Hr.rE}`),console.log("Testing capabilities for backend: ggml-stt"),e&&console.log(`Model: ${e}`),console.log("--------------------------------");try{const{repoId:n,filename:r}=Kr(e),o=t||{},{server:a,generators:i=[],...s}=o,l=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=l(n[e]||{},t):n[e]=t}),n},c=e=>l(JSON.parse(JSON.stringify(s)),e||{});let u=(e=>{if(Array.isArray(i)&&i.length>0){const t=i.filter(e=>"ggml-stt"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return c(n)}}return Object.keys(s).length>0?c({}):null})(n);n&&(u={...u||{},model:{...s.runtime,...u?.model||{},repo_id:n,...r&&{filename:r}}});const d=await Ar("ggml-stt",null,{config:u,includeBreakdown:!0}),p=d.buttress?.selected||null,m=d.modelConfig||null;if(n||m?.repoId){console.log("\n=== Model Information ===");const e=n||m?.repoId;console.log(`Repository ID: ${e}`),r&&console.log(`Filename: ${r}`),p?.modelBytes&&console.log(`Model Size: ${(p.modelBytes/1024/1024).toFixed(1)} MB`);const t=p?.processingBytes||p?.kvCacheBytes;if(t&&console.log(`Processing Buffer: ${(t/1024/1024).toFixed(1)} MB`),p?.modelBytes&&t)console.log(`Total Required Memory: ${((p.modelBytes+t)/1024/1024).toFixed(1)} MB`);else if(d.buttress?.selected?.fit){const{totalRequiredBytes:e}=d.buttress.selected.fit;console.log(`Total Required Memory: ${(e/1024/1024).toFixed(1)} MB`)}}if(d.buttress?.selected){const{selected:e}=d.buttress;console.log("\n=== Hardware Information ===");let t=null;if("win32"!==process.platform)try{t=(0,Vr.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}t?console.log(`System: ${t}`):(console.log(`Hostname: ${Tt.hostname()}`),console.log(`OS: ${Tt.type()} ${Tt.release()}`)),console.log(`Platform: ${e.platform}`),console.log(`CPU Cores: ${Tt.cpus().length}`),console.log(`Total System Memory: ${(Tt.totalmem()/1024/1024/1024).toFixed(2)} GB`);const n=e.cpuTotalBytes>0?(e.cpuUsableBytes/e.cpuTotalBytes*100).toFixed(0):0;if(console.log(`Usable CPU Memory: ${(e.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),e.hasGpu){console.log("\n--- GPU Details ---");e.devices.filter(e=>"gpu"===e.type).forEach(t=>{console.log(`GPU Backend: ${t.backend}`),console.log(`GPU Name: ${t.deviceName}`),console.log(`GPU Total Memory: ${(t.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const n=e.gpuTotalBytes>0?(e.gpuUsableBytes/e.gpuTotalBytes*100).toFixed(0):0;console.log(`GPU Usable Memory: ${(e.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.metadata&&(t.metadata.hasBFloat16&&console.log("Supports BFloat16: Yes"),t.metadata.hasUnifiedMemory&&console.log("Unified Memory: Yes"))})}else console.log("GPU: Not available");console.log(`\nBackend Variant: ${e.variant}`),console.log(`Performance Score: ${e.score}`),e.fit&&(console.log("\n--- Model Fit Analysis ---"),console.log("Fits in GPU: "+(e.fit.fitsInGpu?"Yes":"No")),console.log("Fits in CPU: "+(e.fit.fitsInCpu?"Yes":"No")),console.log(`Limiting Factor: ${e.fit.limiting}`))}console.log("\n=== Full Capabilities JSON ==="),console.log(JSON.stringify(d,null,2)),process.exit(0)}catch(e){console.error("Failed to get capabilities:",e.message),process.exit(1)}}const Xr=new TextDecoder,eo=e.context().create(),to=r.record(r.any()).optional(),no=r.object({id:r.string()}),ro=r.object({id:r.string(),property:r.any().optional()}),oo=new Map,ao=r.object({type:r.string(),config:to}),io=r.object({type:r.string().optional().default("ggml-llm"),config:to,currentClientCapabilities:r.record(r.any()).optional(),options:r.record(r.any()).optional()}).optional(),so=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=so(n[e]||{},t):n[e]=t}),n},lo=e=>e&&"object"==typeof e?JSON.parse(JSON.stringify(e)):null,co=(e,t)=>{const n=lo(e)||{},r=lo(t)||{};return so(n,r)},uo=(e=h,{defaultConfig:t}={})=>{const n=lo(t)||{},o=Array.isArray(n.generators)?n.generators:[],{server:a,generators:i,...s}=n,l=e=>so(JSON.parse(JSON.stringify(s)),e||{}),c=(e,t)=>{if(o.length>0){const n=o.filter(t=>t?.type===e);if(n.length>0&&t){const e=n.find(e=>e.model?.repo_id===t);if(e)return l(e)}}return Object.keys(s).length>0?l({}):null};return eo.router({getCapabilities:eo.procedure.input(io).query(async({input:t})=>{console.log("[Server] Get Capabilities:",t);const n=t||{type:"ggml-llm"},{type:r="ggml-llm",config:o,currentClientCapabilities:a=null,options:i={}}=n,s=lo(o),l=e.getModelIdentifier(r,s),u=c(r,l),d=co(u,o);if(0===Object.keys(d).length)throw new Error("Buttress server missing generator configuration");return d.backend=d.backend||{},d.backend.type||(d.backend.type=r),e.getCapabilities(r,a,{...i,config:d})}),startGenerator:eo.procedure.input(ao).mutation(async({input:t})=>{console.log("[Server] Start Generator:",t);const{type:n,config:r}=t,o=lo(r),a=e.getModelIdentifier(n,o),i=c(n,a),s=co(i,r);if(0===Object.keys(s).length)throw new Error("Buttress server missing generator configuration");return s.backend=s.backend||{},s.backend.type||(s.backend.type=n),e.startGenerator(n,s)}),finalizeGenerator:eo.procedure.input(no).mutation(async({input:t})=>(console.log("[Server] Finalize Generator:",t),e.finalizeGenerator(t.id))),ggmlLlm:eo.router({initContext:eo.procedure.input(ro).subscription(({input:t})=>Z(n=>{console.log("[Server] Init Context:",t);let r=!0;return(async()=>{try{const o={...t.property,onProgress:e=>{r&&n.next({progress:e})}};await new Promise(e=>setTimeout(e));const a=await e.ggmlLlm.initContext(t.id,o);if(r){const{download:e,...t}=a||{};n.next({result:t}),n.complete()}}catch(e){r&&n.error(e)}})(),()=>{r=!1}})),createCompletion:eo.procedure.input(ro).mutation(async({input:t})=>{console.log("[Server] createCompletion:",t);const n=`completion-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;try{const r=await e.ggmlLlm.completion(t.id,t.property);if(!r)throw new Error("Failed to create completion stream");return oo.set(n,{stream:r,cancel:null,generatorId:t.id}),{completionId:n}}catch(e){throw console.error("[Server] createCompletion error:",e),e}}),completion:eo.procedure.input(ro).subscription(({input:e})=>Z(t=>{const n=e.property;console.log("[Server] completion subscription:",n);const r=oo.get(n);if(!r)return t.error(new Error(`Unknown completion ID: ${n}`)),()=>{};const{stream:o}=r,a=((e,t)=>{const n=e.getReader();let r=!0;return(async()=>{try{for(;r;){const{value:e,done:o}=await n.read();if(o||!r)break;if(e){const n=Xr.decode(e,{stream:!0});t.next(n)}}t.complete()}catch(e){t.error(e)}finally{n.cancel().catch(()=>{})}})(),()=>{r=!1,n.cancel().catch(()=>{})}})(o,t);return r.cancel=a,()=>{console.log("[Server] completion subscription closed:",n),a(),oo.delete(n)}})),cancelCompletion:eo.procedure.input(ro).mutation(async({input:e})=>{const t=e.property;console.log("[Server] cancelCompletion:",t);const n=oo.get(t);return n?(n.cancel&&n.cancel(),oo.delete(t),{success:!0}):{success:!1,error:"Unknown completion ID"}}),tokenize:eo.procedure.input(ro).query(async({input:t})=>(console.log("[Server] Tokenize:",t),e.ggmlLlm.tokenize(t.id,t.property))),detokenize:eo.procedure.input(ro).mutation(async({input:t})=>(console.log("[Server] Detokenize:",t),e.ggmlLlm.detokenize(t.id,t.property))),applyChatTemplate:eo.procedure.input(ro).query(async({input:t})=>(console.log("[Server] Apply Chat Template:",t),e.ggmlLlm.applyChatTemplate(t.id,t.property))),releaseContext:eo.procedure.input(ro).mutation(async({input:t})=>(console.log("[Server] Release Context:",t),e.ggmlLlm.releaseContext(t.id,t.property)))}),ggmlStt:eo.router({initContext:eo.procedure.input(ro).subscription(({input:t})=>Z(n=>{console.log("[Server] Init STT Context:",t);let r=!0;return(async()=>{try{const o={...t.property,onProgress:e=>{r&&n.next({progress:e})}};await new Promise(e=>setTimeout(e));const a=await e.ggmlStt.initContext(t.id,o);if(r){const{download:e,...t}=a||{};n.next({result:t}),n.complete()}}catch(e){r&&n.error(e)}})(),()=>{r=!1}})),transcribeData:eo.procedure.input(r.instanceof(FormData)).mutation(async({input:t})=>{const n=t,r=n.get("id"),o=n.get("options"),a=n.get("audioData"),i=o?JSON.parse(o):{};let s;if(a instanceof Blob||a&&"function"==typeof a.arrayBuffer){const e=await a.arrayBuffer();s=Buffer.from(e)}else s=Buffer.isBuffer(a)?a:a instanceof ArrayBuffer?Buffer.from(a):a;return console.log("[Server] Transcribe Data:",{id:r,audioDataLength:s?.length||0,options:i}),e.ggmlStt.transcribeData(r,{audioData:s,options:i})}),releaseContext:eo.procedure.input(ro).mutation(async({input:t})=>(console.log("[Server] Release STT Context:",t),e.ggmlStt.releaseContext(t.id,t.property)))})})},po=({backend:e=h,router:t,createContext:n=()=>({}),defaultConfig:r}={})=>{const o=t||uo(e,{defaultConfig:r});return{server:Ot({router:o,createContext:n,basePath:"/trpc/"}),router:o,backend:e}},mo=async({port:e=2080,backend:t,router:n,createContext:r,defaultConfig:o}={})=>{const{server:a,router:i}=po({backend:t,router:n,createContext:r,defaultConfig:o});return await new Promise(t=>a.listen(e,t)),{server:a,router:i,port:e}};export{Gr as checkAndNotifyUpdates,Dr as checkForUpdates,Lr as compareVersions,uo as createRouter,po as createServer,zr as currentVersion,Yr as showModelsTable,Qr as showSttModelsTable,mo as startServer,Wr as testGgmlLlmCapabilities,Zr as testGgmlSttCapabilities};
|
|
1
|
+
import{initTRPC as e}from"@trpc/server";import{createRequire as t}from"node:module";const n=t(import.meta.url);import{z as r}from"zod";import{gguf as o}from"@huggingface/gguf";import{getBackendDevicesInfo as a,isLibVariantAvailable as i,loadModel as s}from"@fugood/llama.node";import{initWhisper as l}from"@fugood/whisper.node";import{default as c}from"@iarna/toml";var u,d,p={285:e=>{e.exports=function(e,t){if("string"==typeof e)return i(e);if("number"==typeof e)return a(e,t);return null},e.exports.format=a,e.exports.parse=i;var t=/\B(?=(\d{3})+(?!\d))/g,n=/(?:\.0*|(\.[^0]+)0+)$/,r={b:1,kb:1024,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)},o=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function a(e,o){if(!Number.isFinite(e))return null;var a=Math.abs(e),i=o&&o.thousandsSeparator||"",s=o&&o.unitSeparator||"",l=o&&void 0!==o.decimalPlaces?o.decimalPlaces:2,c=Boolean(o&&o.fixedDecimals),u=o&&o.unit||"";u&&r[u.toLowerCase()]||(u=a>=r.pb?"PB":a>=r.tb?"TB":a>=r.gb?"GB":a>=r.mb?"MB":a>=r.kb?"KB":"B");var d=(e/r[u.toLowerCase()]).toFixed(l);return c||(d=d.replace(n,"$1")),i&&(d=d.split(".").map(function(e,n){return 0===n?e.replace(t,i):e}).join(".")),d+s+u}function i(e){if("number"==typeof e&&!isNaN(e))return e;if("string"!=typeof e)return null;var t,n=o.exec(e),a="b";return n?(t=parseFloat(n[1]),a=n[4].toLowerCase()):(t=parseInt(e,10),a="b"),isNaN(t)?null:Math.floor(r[a]*t)}}},m={};function f(e){var t=m[e];if(void 0!==t)return t.exports;var n=m[e]={exports:{}};return p[e](n,n.exports,f),n.exports}d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var n=Object.create(null);f.r(n);var r={};u=u||[null,d({}),d([]),d(d)];for(var o=2&t&&e;("object"==typeof o||"function"==typeof o)&&!~u.indexOf(o);o=d(o))Object.getOwnPropertyNames(o).forEach(t=>r[t]=()=>e[t]);return r.default=()=>e,f.d(n,r),n},f.d=(e,t)=>{for(var n in t)f.o(t,n)&&!f.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var h={};f.r(h),f.d(h,{finalizeGenerator:()=>Gr,getCapabilities:()=>Or,getModelIdentifier:()=>Hr,ggmlLlm:()=>Jr,ggmlStt:()=>Vr,showModelsTable:()=>qr,showSttModelsTable:()=>jr,startGenerator:()=>Lr,testGgmlLlmCapabilities:()=>Fr,testGgmlSttCapabilities:()=>zr});const y={PARSE_ERROR:-32700,BAD_REQUEST:-32600,INTERNAL_SERVER_ERROR:-32603,NOT_IMPLEMENTED:-32603,BAD_GATEWAY:-32603,SERVICE_UNAVAILABLE:-32603,GATEWAY_TIMEOUT:-32603,UNAUTHORIZED:-32001,PAYMENT_REQUIRED:-32002,FORBIDDEN:-32003,NOT_FOUND:-32004,METHOD_NOT_SUPPORTED:-32005,TIMEOUT:-32008,CONFLICT:-32009,PRECONDITION_FAILED:-32012,PAYLOAD_TOO_LARGE:-32013,UNSUPPORTED_MEDIA_TYPE:-32015,UNPROCESSABLE_CONTENT:-32022,PRECONDITION_REQUIRED:-32028,TOO_MANY_REQUESTS:-32029,CLIENT_CLOSED_REQUEST:-32099},g={[-32700]:"PARSE_ERROR",[-32600]:"BAD_REQUEST",[-32603]:"INTERNAL_SERVER_ERROR",[-32001]:"UNAUTHORIZED",[-32002]:"PAYMENT_REQUIRED",[-32003]:"FORBIDDEN",[-32004]:"NOT_FOUND",[-32005]:"METHOD_NOT_SUPPORTED",[-32008]:"TIMEOUT",[-32009]:"CONFLICT",[-32012]:"PRECONDITION_FAILED",[-32013]:"PAYLOAD_TOO_LARGE",[-32015]:"UNSUPPORTED_MEDIA_TYPE",[-32022]:"UNPROCESSABLE_CONTENT",[-32028]:"PRECONDITION_REQUIRED",[-32029]:"TOO_MANY_REQUESTS",[-32099]:"CLIENT_CLOSED_REQUEST"};function b(e){return!!e&&!Array.isArray(e)&&"object"==typeof e}const v="function"==typeof Symbol&&!!Symbol.asyncIterator;function w(e){return v&&b(e)&&Symbol.asyncIterator in e}const _=e=>e();function x(e){return e}var S=Object.create,k=Object.defineProperty,C=Object.getOwnPropertyDescriptor,E=Object.getOwnPropertyNames,B=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty,$=(e,t)=>function(){return t||(0,e[E(e)[0]])((t={exports:{}}).exports,t),t.exports},T=(e,t,n)=>(n=null!=e?S(B(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var o,a=E(t),i=0,s=a.length;i<s;i++)o=a[i],M.call(e,o)||o===n||k(e,o,{get:(e=>t[e]).bind(null,o),enumerable:!(r=C(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:k(n,"default",{value:e,enumerable:!0}),e));const N={PARSE_ERROR:400,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_SUPPORTED:405,TIMEOUT:408,CONFLICT:409,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,UNSUPPORTED_MEDIA_TYPE:415,UNPROCESSABLE_CONTENT:422,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504};function O(e){var t;return null!==(t=N[e])&&void 0!==t?t:500}function P(e){return O(e.code)}var I=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(e,t){function n(e){return t.exports=n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t.exports.__esModule=!0,t.exports.default=t.exports,n(e)}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports}}),U=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(e,t){var n=I().default;t.exports=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)},t.exports.__esModule=!0,t.exports.default=t.exports}}),A=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(e,t){var n=I().default,r=U();t.exports=function(e){var t=r(e,"string");return"symbol"==n(t)?t:t+""},t.exports.__esModule=!0,t.exports.default=t.exports}}),q=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(e,t){var n=A();t.exports=function(e,t,r){return(t=n(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e},t.exports.__esModule=!0,t.exports.default=t.exports}}),F=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(e,t){var n=q();function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}t.exports=function(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?r(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e},t.exports.__esModule=!0,t.exports.default=t.exports}}),j=T(F(),1);function z(e){const{path:t,error:n,config:r}=e,{code:o}=e.error,a={message:n.message,code:y[o],data:{code:o,httpStatus:P(n)}};return r.isDev&&"string"==typeof e.error.stack&&(a.data.stack=e.error.stack),"string"==typeof t&&(a.data.path=t),r.errorFormatter((0,j.default)((0,j.default)({},e),{},{shape:a}))}var R=T(q(),1),D=class extends Error{};function L(e){if(e instanceof G)return e;if(e instanceof Error&&"TRPCError"===e.name)return e;const t=new G({code:"INTERNAL_SERVER_ERROR",cause:e});return e instanceof Error&&e.stack&&(t.stack=e.stack),t}var G=class extends Error{constructor(e){var t,n,r;const o=function(e){if(e instanceof Error)return e;const t=typeof e;return"undefined"!==t&&"function"!==t&&null!==e?"object"!==t?new Error(String(e)):b(e)?Object.assign(new D,e):void 0:void 0}(e.cause);super(null!==(t=null!==(n=e.message)&&void 0!==n?n:null==o?void 0:o.message)&&void 0!==t?t:e.code,{cause:o}),(0,R.default)(this,"cause",void 0),(0,R.default)(this,"code",void 0),this.code=e.code,this.name="TRPCError",null!==(r=this.cause)&&void 0!==r||(this.cause=o)}},J=T(F(),1);function V(e,t){return"error"in t?(0,J.default)((0,J.default)({},t),{},{error:e.transformer.output.serialize(t.error)}):"data"in t.result?(0,J.default)((0,J.default)({},t),{},{result:(0,J.default)((0,J.default)({},t.result),{},{data:e.transformer.output.serialize(t.result.data)})}):t}function H(e,t){return Array.isArray(t)?t.map(t=>V(e,t)):V(e,t)}Error;T(F(),1);async function K(e,t){const{_def:n}=e;let r=n.procedures[t];for(;!r;){const e=Object.keys(n.lazy).find(e=>t.startsWith(e));if(!e)return null;const o=n.lazy[e];await o.load(),r=n.procedures[t]}return r}const Y=Symbol();function Q(e){return Array.isArray(e)&&e[2]===Y}function W(e){return"object"==typeof e&&null!==e&&"subscribe"in e}function Z(e){const t={subscribe(t){let n=null,r=!1,o=!1,a=!1;function i(){null!==n?o||(o=!0,"function"==typeof n?n():n&&n.unsubscribe()):a=!0}return n=e({next(e){var n;r||null===(n=t.next)||void 0===n||n.call(t,e)},error(e){var n;r||(r=!0,null===(n=t.error)||void 0===n||n.call(t,e),i())},complete(){var e;r||(r=!0,null===(e=t.complete)||void 0===e||e.call(t),i())}}),a&&i(),{unsubscribe:i}},pipe:(...e)=>e.reduce(X,t)};return t}function X(e,t){return t(e)}function ee(e,t){const n=function(e,t){let n=null;const r=()=>{null==n||n.unsubscribe(),n=null,t.removeEventListener("abort",r)};return new ReadableStream({start(o){n=e.subscribe({next(e){o.enqueue({ok:!0,value:e})},error(e){o.enqueue({ok:!1,error:e}),o.close()},complete(){o.close()}}),t.aborted?r():t.addEventListener("abort",r,{once:!0})},cancel(){r()}})}(e,t),r=n.getReader(),o={async next(){const e=await r.read();if(e.done)return{value:void 0,done:!0};const{value:t}=e;if(!t.ok)throw t.error;return{value:t.value,done:!1}},return:async()=>(await r.cancel(),{value:void 0,done:!0})};return{[Symbol.asyncIterator]:()=>o}}function te(e){let t;try{t=JSON.parse(e)}catch(e){throw new G({code:"PARSE_ERROR",message:"Not JSON-parsable query params",cause:e})}return function(e){try{if(null===e)return null;if(!b(e))throw new Error("Expected object");const t=Object.entries(e).filter(([e,t])=>"string"!=typeof t);if(t.length>0)throw new Error(`Expected connectionParams to be string values. Got ${t.map(([e,t])=>`${e}: ${typeof t}`).join(", ")}`);return e}catch(e){throw new G({code:"PARSE_ERROR",message:"Invalid connection params shape",cause:e})}}(t)}var ne=T(F(),1);function re(e){let t=null;const n=Symbol.for("@trpc/server/http/memo");let r=n;return{read:async()=>{var o;return r!==n||(null!==(o=t)&&void 0!==o||(t=e().catch(e=>{if(e instanceof G)throw e;throw new G({code:"BAD_REQUEST",message:e instanceof Error?e.message:"Invalid input",cause:e})})),r=await t,t=null),r},result:()=>r!==n?r:void 0}}const oe={isMatch(e){var t;return!!(null===(t=e.headers.get("content-type"))||void 0===t?void 0:t.startsWith("application/json"))},async parse(e){var t;const{req:n}=e,r="1"===e.searchParams.get("batch"),o=r?e.path.split(","):[e.path],a=re(async()=>{let t;if("GET"===n.method){const n=e.searchParams.get("input");n&&(t=JSON.parse(n))}else t=await n.json();if(void 0===t)return{};if(!r)return{0:e.router._def._config.transformer.input.deserialize(t)};if(!b(t))throw new G({code:"BAD_REQUEST",message:'"input" needs to be an object when doing a batch call'});const a={};for(const n of o.keys()){const r=t[n];void 0!==r&&(a[n]=e.router._def._config.transformer.input.deserialize(r))}return a}),i=await Promise.all(o.map(async(t,n)=>{const r=await K(e.router,t);return{path:t,procedure:r,getRawInput:async()=>{let t=(await a.read())[n];if("subscription"===(null==r?void 0:r._def.type)){var o,i;const n=null!==(o=null!==(i=e.headers.get("last-event-id"))&&void 0!==i?i:e.searchParams.get("lastEventId"))&&void 0!==o?o:e.searchParams.get("Last-Event-Id");if(n)if(b(t))t=(0,ne.default)((0,ne.default)({},t),{},{lastEventId:n});else{var s;null!==(s=t)&&void 0!==s||(t={lastEventId:n})}}return t},result:()=>{var e;return null===(e=a.result())||void 0===e?void 0:e[n]}}})),s=new Set(i.map(e=>{var t;return null===(t=e.procedure)||void 0===t?void 0:t._def.type}).filter(Boolean));if(s.size>1)throw new G({code:"BAD_REQUEST",message:`Cannot mix procedure types in call: ${Array.from(s).join(", ")}`});const l=null!==(t=s.values().next().value)&&void 0!==t?t:"unknown",c=e.searchParams.get("connectionParams");return{isBatchCall:r,accept:n.headers.get("trpc-accept"),calls:i,type:l,connectionParams:null===c?null:te(c),signal:n.signal,url:e.url}}},ae=[oe,{isMatch(e){var t;return!!(null===(t=e.headers.get("content-type"))||void 0===t?void 0:t.startsWith("multipart/form-data"))},async parse(e){const{req:t}=e;if("POST"!==t.method)throw new G({code:"METHOD_NOT_SUPPORTED",message:"Only POST requests are supported for multipart/form-data requests"});const n=re(async()=>await t.formData()),r=await K(e.router,e.path);return{accept:null,calls:[{path:e.path,getRawInput:n.read,result:n.result,procedure:r}],isBatchCall:!1,type:"mutation",connectionParams:null,signal:t.signal,url:e.url}}},{isMatch(e){var t;return!!(null===(t=e.headers.get("content-type"))||void 0===t?void 0:t.startsWith("application/octet-stream"))},async parse(e){const{req:t}=e;if("POST"!==t.method)throw new G({code:"METHOD_NOT_SUPPORTED",message:"Only POST requests are supported for application/octet-stream requests"});const n=re(async()=>t.body);return{calls:[{path:e.path,getRawInput:n.read,result:n.result,procedure:await K(e.router,e.path)}],isBatchCall:!1,accept:null,type:"mutation",connectionParams:null,signal:t.signal,url:e.url}}}];async function ie(e){const t=function(e){const t=ae.find(t=>t.isMatch(e));if(t)return t;if(!t&&"GET"===e.method)return oe;throw new G({code:"UNSUPPORTED_MEDIA_TYPE",message:e.headers.has("content-type")?`Unsupported content-type "${e.headers.get("content-type")}`:"Missing content-type header"})}(e.req);return await t.parse(e)}function se(e){return b(e)&&"AbortError"===e.name}function le(e="AbortError"){throw new DOMException(e,"AbortError")}function ce(e){return"[object Object]"===Object.prototype.toString.call(e)}var ue=T(q(),1);let de;const pe=new WeakMap,me=()=>{};de=Symbol.toStringTag;var fe,he,ye,ge,be=class e{constructor(e){(0,ue.default)(this,"promise",void 0),(0,ue.default)(this,"subscribers",[]),(0,ue.default)(this,"settlement",null),(0,ue.default)(this,de,"Unpromise"),this.promise="function"==typeof e?new Promise(e):e;const t=this.promise.then(e=>{const{subscribers:t}=this;this.subscribers=null,this.settlement={status:"fulfilled",value:e},null==t||t.forEach(({resolve:t})=>{t(e)})});"catch"in t&&t.catch(e=>{const{subscribers:t}=this;this.subscribers=null,this.settlement={status:"rejected",reason:e},null==t||t.forEach(({reject:t})=>{t(e)})})}subscribe(){let e,t;const{settlement:n}=this;if(null===n){if(null===this.subscribers)throw new Error("Unpromise settled but still has subscribers");const n=function(){let e,t;const n=new Promise((n,r)=>{e=n,t=r});return{promise:n,resolve:e,reject:t}}();this.subscribers=(r=this.subscribers,o=n,[...r,o]),e=n.promise,t=()=>{null!==this.subscribers&&(this.subscribers=function(e,t){const n=e.indexOf(t);return-1!==n?function(e,t){return[...e.slice(0,t),...e.slice(t+1)]}(e,n):e}(this.subscribers,n))}}else{const{status:r}=n;e="fulfilled"===r?Promise.resolve(n.value):Promise.reject(n.reason),t=me}var r,o;return Object.assign(e,{unsubscribe:t})}then(e,t){const n=this.subscribe(),{unsubscribe:r}=n;return Object.assign(n.then(e,t),{unsubscribe:r})}catch(e){const t=this.subscribe(),{unsubscribe:n}=t;return Object.assign(t.catch(e),{unsubscribe:n})}finally(e){const t=this.subscribe(),{unsubscribe:n}=t;return Object.assign(t.finally(e),{unsubscribe:n})}static proxy(t){const n=e.getSubscribablePromise(t);return void 0!==n?n:e.createSubscribablePromise(t)}static createSubscribablePromise(t){const n=new e(t);return pe.set(t,n),pe.set(n,n),n}static getSubscribablePromise(e){return pe.get(e)}static resolve(t){const n="object"==typeof t&&null!==t&&"then"in t&&"function"==typeof t.then?t:Promise.resolve(t);return e.proxy(n).subscribe()}static async any(t){const n=(Array.isArray(t)?t:[...t]).map(e.resolve);try{return await Promise.any(n)}finally{n.forEach(({unsubscribe:e})=>{e()})}}static async race(t){const n=(Array.isArray(t)?t:[...t]).map(e.resolve);try{return await Promise.race(n)}finally{n.forEach(({unsubscribe:e})=>{e()})}}static async raceReferences(e){const t=e.map(ve);try{return await Promise.race(t)}finally{for(const e of t)e.unsubscribe()}}};function ve(e){return be.proxy(e).then(()=>[e])}function we(e,t){const n=e,r=n[Symbol.dispose];return n[Symbol.dispose]=()=>{t(),null==r||r()},n}function _e(e,t){const n=e,r=n[Symbol.asyncDispose];return n[Symbol.asyncDispose]=async()=>{await t(),await(null==r?void 0:r())},n}null!==(he=(fe=Symbol).dispose)&&void 0!==he||(fe.dispose=Symbol()),null!==(ge=(ye=Symbol).asyncDispose)&&void 0!==ge||(ye.asyncDispose=Symbol());const xe=Symbol();function Se(e){let t=null;return we({start(){if(t)throw new Error("Timer already started");return new Promise(n=>{t=setTimeout(()=>n(xe),e)})}},()=>{t&&clearTimeout(t)})}var ke=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js"(e,t){t.exports=function(){var e="function"==typeof SuppressedError?SuppressedError:function(e,t){var n=Error();return n.name="SuppressedError",n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(null!=t){if(Object(t)!==t)throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");if(e)var r=t[Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose")];if(void 0===r&&(r=t[Symbol.dispose||Symbol.for("Symbol.dispose")],e))var o=r;if("function"!=typeof r)throw new TypeError("Object is not disposable.");o&&(r=function(){try{o.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,o=this.e,a=0;function i(){for(;r=n.pop();)try{if(!r.a&&1===a)return a=0,n.push(r),Promise.resolve().then(i);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(i,s)}else a|=1}catch(e){return s(e)}if(1===a)return o!==t?Promise.reject(o):Promise.resolve();if(o!==t)throw o}function s(n){return o=o!==t?new e(n,o):n,i()}return i()}}},t.exports.__esModule=!0,t.exports.default=t.exports}}),Ce=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js"(e,t){t.exports=function(e,t){this.v=e,this.k=t},t.exports.__esModule=!0,t.exports.default=t.exports}}),Ee=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js"(e,t){var n=Ce();t.exports=function(e){return new n(e,0)},t.exports.__esModule=!0,t.exports.default=t.exports}}),Be=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js"(e,t){var n=Ce();function r(e){var t,r;function o(t,r){try{var i=e[t](r),s=i.value,l=s instanceof n;Promise.resolve(l?s.v:s).then(function(n){if(l){var r="return"===t?"return":"next";if(!s.k||n.done)return o(r,n);n=e[r](n).value}a(i.done?"return":"normal",n)},function(e){o("throw",e)})}catch(e){a("throw",e)}}function a(e,n){switch(e){case"return":t.resolve({value:n,done:!0});break;case"throw":t.reject(n);break;default:t.resolve({value:n,done:!1})}(t=t.next)?o(t.key,t.arg):r=null}this._invoke=function(e,n){return new Promise(function(a,i){var s={key:e,arg:n,resolve:a,reject:i,next:null};r?r=r.next=s:(t=r=s,o(e,n))})},"function"!=typeof e.return&&(this.return=void 0)}r.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},r.prototype.next=function(e){return this._invoke("next",e)},r.prototype.throw=function(e){return this._invoke("throw",e)},r.prototype.return=function(e){return this._invoke("return",e)},t.exports=function(e){return function(){return new r(e.apply(this,arguments))}},t.exports.__esModule=!0,t.exports.default=t.exports}}),Me=T(ke(),1),$e=T(Ee(),1),Te=T(Be(),1);function Ne(e){const t=e[Symbol.asyncIterator]();return t[Symbol.asyncDispose]?t:_e(t,async()=>{var e;await(null===(e=t.return)||void 0===e?void 0:e.call(t))})}function Oe(){return(Oe=(0,Te.default)(function*(e,t){try{var n=(0,Me.default)();const r=n.a(Ne(e)),o=n.u(Se(t.maxDurationMs)).start();let a;for(;;){if(a=yield(0,$e.default)(be.race([r.next(),o])),a===xe&&le(),a.done)return a;yield a.value,a=null}}catch(e){n.e=e}finally{yield(0,$e.default)(n.d())}})).apply(this,arguments)}function Pe(){return(Pe=(0,Te.default)(function*(e,t){try{var n=(0,Me.default)();const r=n.a(Ne(e));let o;const a=n.u(Se(t.gracePeriodMs));let i=t.count,s=new Promise(()=>{});for(;;){if(o=yield(0,$e.default)(be.race([r.next(),s])),o===xe&&le(),o.done)return o.value;yield o.value,0===--i&&(s=a.start()),o=null}}catch(e){n.e=e}finally{yield(0,$e.default)(n.d())}})).apply(this,arguments)}function Ie(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var Ue=T(ke(),1),Ae=T(Ee(),1),qe=T(Be(),1);function Fe(){let e="idle",t=Ie();const n=[],r=new Set,o=[];function a(n){if("pending"!==e)return;const a=function(e,t){const n=e[Symbol.asyncIterator]();let r="idle";function o(){r="done",t=()=>{}}return{pull:function(){"idle"===r&&(r="pending",n.next().then(e=>{if(e.done)return r="done",t({status:"return",value:e.value}),void o();r="idle",t({status:"yield",value:e.value})}).catch(e=>{t({status:"error",error:e}),o()}))},destroy:async()=>{var e;o(),await(null===(e=n.return)||void 0===e?void 0:e.call(n))}}}(n,n=>{if("pending"===e){switch(n.status){case"yield":o.push([a,n]);break;case"return":r.delete(a);break;case"error":o.push([a,n]),r.delete(a)}t.resolve()}});r.add(a),a.pull()}return{add(t){switch(e){case"idle":n.push(t);break;case"pending":a(t)}},[Symbol.asyncIterator]:()=>(0,qe.default)(function*(){try{var i=(0,Ue.default)();if("idle"!==e)throw new Error("Cannot iterate twice");e="pending";i.a(_e({},async()=>{e="done";const n=[];if(await Promise.all(Array.from(r.values()).map(async e=>{try{await e.destroy()}catch(e){n.push(e)}})),o.length=0,r.clear(),t.resolve(),n.length>0)throw new AggregateError(n)}));for(;n.length>0;)a(n.shift());for(;r.size>0;){for(yield(0,Ae.default)(t.promise);o.length>0;){const[e,t]=o.shift();switch(t.status){case"yield":yield t.value,e.pull();break;case"error":throw t.error}}t=Ie()}}catch(e){i.e=e}finally{yield(0,Ae.default)(i.d())}})()}}function je(e){const t=e[Symbol.asyncIterator]();return new ReadableStream({async cancel(){var e;await(null===(e=t.return)||void 0===e?void 0:e.call(t))},async pull(e){const n=await t.next();n.done?e.close():e.enqueue(n.value)}})}var ze=T(ke(),1),Re=T(Ee(),1),De=T(Be(),1);const Le=Symbol("ping");function Ge(e,t){return Je.apply(this,arguments)}function Je(){return(Je=(0,De.default)(function*(e,t){try{var n=(0,ze.default)();const o=n.a(Ne(e));let a,i=o.next();for(;;)try{var r=(0,ze.default)();const e=r.u(Se(t));if(a=yield(0,Re.default)(be.race([i,e.start()])),a===xe){yield Le;continue}if(a.done)return a.value;i=o.next(),yield a.value,a=null}catch(e){r.e=e}finally{r.d()}}catch(e){n.e=e}finally{yield(0,Re.default)(n.d())}})).apply(this,arguments)}var Ve=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js"(e,t){function n(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return(n=function(e){this.s=e,this.n=e.next}).prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new n(e)}t.exports=function(e){var t,r,o,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,o=Symbol.iterator);a--;){if(r&&null!=(t=e[r]))return t.call(e);if(o&&null!=(t=e[o]))return new n(t.call(e));r="@@asyncIterator",o="@@iterator"}throw new TypeError("Object is not async iterable")},t.exports.__esModule=!0,t.exports.default=t.exports}}),He=T(Ee(),1),Ke=T(Be(),1),Ye=T(ke(),1),Qe=T(Ve(),1);function We(e){return(b(e)||"function"==typeof e)&&"function"==typeof(null==e?void 0:e.then)&&"function"==typeof(null==e?void 0:e.catch)}var Ze=class extends Error{constructor(e){super("Max depth reached at path: "+e.join(".")),this.path=e}};function Xe(){return Xe=(0,Ke.default)(function*(e){const{data:t}=e;let n=0;const r=Fe();function o(e){const t=n++,o=e(t);return r.add(o),t}function a(t,n){return o(function(){var r=(0,Ke.default)(function*(r){const o=s(n);o&&(t.catch(t=>{var r;null===(r=e.onError)||void 0===r||r.call(e,{error:t,path:n})}),t=Promise.reject(o));try{const e=yield(0,He.default)(t);yield[r,0,c(e,n)]}catch(t){var a,i;null===(a=e.onError)||void 0===a||a.call(e,{error:t,path:n}),yield[r,1,null===(i=e.formatError)||void 0===i?void 0:i.call(e,{error:t,path:n})]}});return function(e){return r.apply(this,arguments)}}())}function i(t,n){return o(function(){var r=(0,Ke.default)(function*(r){try{var o=(0,Ye.default)();const l=s(n);if(l)throw l;const u=o.a(Ne(t));try{for(;;){const e=yield(0,He.default)(u.next());if(e.done){yield[r,0,c(e.value,n)];break}yield[r,1,c(e.value,n)]}}catch(t){var a,i;null===(a=e.onError)||void 0===a||a.call(e,{error:t,path:n}),yield[r,2,null===(i=e.formatError)||void 0===i?void 0:i.call(e,{error:t,path:n})]}}catch(e){o.e=e}finally{yield(0,He.default)(o.d())}});return function(e){return r.apply(this,arguments)}}())}function s(t){return e.maxDepth&&t.length>e.maxDepth?new Ze(t):null}function l(t,n){if(We(t))return[0,a(t,n)];if(w(t)){if(e.maxDepth&&n.length>=e.maxDepth)throw new Error("Max depth reached");return[1,i(t,n)]}return null}function c(e,t){if(void 0===e)return[[]];const n=l(e,t);if(n)return[[0],[null,...n]];if(!1===ce(r=e)||void 0!==(o=r.constructor)&&(!1===ce(a=o.prototype)||!1===a.hasOwnProperty("isPrototypeOf")))return[[e]];var r,o,a;const i={},s=[];for(const[n,r]of Object.entries(e)){const e=l(r,[...t,n]);e?(i[n]=0,s.push([n,...e])):i[n]=r}return[[i],...s]}const u={};for(const[e,n]of Object.entries(t))u[e]=c(n,[e]);yield u;let d=r;e.pingMs&&(d=Ge(r,e.pingMs));var p,m=!1,f=!1;try{for(var h,y=(0,Qe.default)(d);m=!(h=yield(0,He.default)(y.next())).done;m=!1){const e=h.value;yield e}}catch(e){f=!0,p=e}finally{try{m&&null!=y.return&&(yield(0,He.default)(y.return()))}finally{if(f)throw p}}}),Xe.apply(this,arguments)}function et(e){let t=je(function(e){return Xe.apply(this,arguments)}(e));const{serialize:n}=e;return n&&(t=t.pipeThrough(new TransformStream({transform(e,t){e===Le?t.enqueue(Le):t.enqueue(n(e))}}))),t.pipeThrough(new TransformStream({transform(e,t){e===Le?t.enqueue(" "):t.enqueue(JSON.stringify(e)+"\n")}})).pipeThrough(new TextEncoderStream)}Error;var tt=$({"../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncGeneratorDelegate.js"(e,t){var n=Ce();t.exports=function(e){var t={},r=!1;function o(t,o){return r=!0,o=new Promise(function(n){n(e[t](o))}),{done:!1,value:new n(o,1)}}return t["undefined"!=typeof Symbol&&Symbol.iterator||"@@iterator"]=function(){return this},t.next=function(e){return r?(r=!1,e):o("next",e)},"function"==typeof e.throw&&(t.throw=function(e){if(r)throw r=!1,e;return o("throw",e)}),"function"==typeof e.return&&(t.return=function(e){return r?(r=!1,e):o("return",e)}),t},t.exports.__esModule=!0,t.exports.default=t.exports}}),nt=T(Ve(),1),rt=T(Ee(),1),ot=T(Be(),1),at=T(tt(),1);T(ke(),1);const it="ping",st="serialized-error",lt="connected",ct="return";function ut(e){var t,n,r,o,a;const{serialize:i=x}=e,s={enabled:null!==(t=null===(n=e.ping)||void 0===n?void 0:n.enabled)&&void 0!==t&&t,intervalMs:null!==(r=null===(o=e.ping)||void 0===o?void 0:o.intervalMs)&&void 0!==r?r:1e3},l=null!==(a=e.client)&&void 0!==a?a:{};if(s.enabled&&l.reconnectAfterInactivityMs&&s.intervalMs>l.reconnectAfterInactivityMs)throw new Error(`Ping interval must be less than client reconnect interval to prevent unnecessary reconnection - ping.intervalMs: ${s.intervalMs} client.reconnectAfterInactivityMs: ${l.reconnectAfterInactivityMs}`);function c(){return c=(0,ot.default)(function*(){yield{event:lt,data:JSON.stringify(l)};let t,n,r=e.data;e.emitAndEndImmediately&&(r=function(e,t){return Pe.apply(this,arguments)}(r,{count:1,gracePeriodMs:1})),e.maxDurationMs&&e.maxDurationMs>0&&e.maxDurationMs!==1/0&&(r=function(e,t){return Oe.apply(this,arguments)}(r,{maxDurationMs:e.maxDurationMs})),s.enabled&&s.intervalMs!==1/0&&s.intervalMs>0&&(r=Ge(r,s.intervalMs));var o,a=!1,c=!1;try{for(var u,d=(0,nt.default)(r);a=!(u=yield(0,rt.default)(d.next())).done;a=!1)t=u.value,t!==Le?(n=Q(t)?{id:t[0],data:t[1]}:{data:t},n.data=JSON.stringify(i(n.data)),yield n,t=null,n=null):yield{event:it,data:""}}catch(e){c=!0,o=e}finally{try{a&&null!=d.return&&(yield(0,rt.default)(d.return()))}finally{if(c)throw o}}}),c.apply(this,arguments)}function u(){return u=(0,ot.default)(function*(){try{yield*(0,at.default)((0,nt.default)(function(){return c.apply(this,arguments)}())),yield{event:ct,data:""}}catch(r){var t,n;if(se(r))return;const o=L(r),a=null!==(t=null===(n=e.formatError)||void 0===n?void 0:n.call(e,{error:o}))&&void 0!==t?t:null;yield{event:st,data:JSON.stringify(i(a))}}}),u.apply(this,arguments)}const d=je(function(){return u.apply(this,arguments)}());return d.pipeThrough(new TransformStream({transform(e,t){"event"in e&&t.enqueue(`event: ${e.event}\n`),"data"in e&&t.enqueue(`data: ${e.data}\n`),"id"in e&&t.enqueue(`id: ${e.id}\n`),"comment"in e&&t.enqueue(`: ${e.comment}\n`),t.enqueue("\n\n")}})).pipeThrough(new TextEncoderStream)}const dt={"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform","X-Accel-Buffering":"no",Connection:"keep-alive"};var pt=T(Be(),1),mt=T(F(),1);function ft(e){return _((0,pt.default)(function*(){throw e}))}const ht={mutation:["POST"],query:["GET"],subscription:["GET"]},yt={mutation:["POST"],query:["GET","POST"],subscription:["GET","POST"]};function gt(e){var t,n,r;const{ctx:o,info:a,responseMeta:i,untransformedJSON:s,errors:l=[],headers:c}=e;let u=s?function(e){const t=Array.isArray(e)?e:[e],n=new Set(t.map(e=>{var t;return"error"in e&&b(e.error.data)?"number"==typeof(null===(t=e.error.data)||void 0===t?void 0:t.httpStatus)?e.error.data.httpStatus:O(g[e.error.code]):200}));return 1!==n.size?207:n.values().next().value}(s):200;const d=!s,p=d?[]:Array.isArray(s)?s:[s],m=null!==(t=null==i?void 0:i({ctx:o,info:a,paths:null==a?void 0:a.calls.map(e=>e.path),data:p,errors:l,eagerGeneration:d,type:null!==(n=null==a||null===(r=a.calls.find(e=>{var t;return null===(t=e.procedure)||void 0===t?void 0:t._def.type}))||void 0===r||null===(r=r.procedure)||void 0===r?void 0:r._def.type)&&void 0!==n?n:"unknown"}))&&void 0!==t?t:{};if(m.headers)if(m.headers instanceof Headers)for(const[e,t]of m.headers.entries())c.append(e,t);else for(const[e,t]of Object.entries(m.headers))if(Array.isArray(t))for(const n of t)c.append(e,n);else"string"==typeof t&&c.set(e,t);return m.status&&(u=m.status),{status:u}}function bt(e){return!!b(e)&&(!!w(e)||(Object.values(e).some(We)||Object.values(e).some(w)))}async function vt(e){var t,n,r,o,a,i;const{router:s,req:l}=e,c=new Headers([["vary","trpc-accept"]]),u=s._def._config,d=new URL(l.url);if("HEAD"===l.method)return new Response(null,{status:204});const p=null===(t=null!==(n=e.allowBatching)&&void 0!==n?n:null===(r=e.batching)||void 0===r?void 0:r.enabled)||void 0===t||t,m=null!==(o=e.allowMethodOverride)&&void 0!==o&&o&&"POST"===l.method,f=await _(async()=>{try{return[void 0,await ie({req:l,path:decodeURIComponent(e.path),router:s,searchParams:d.searchParams,headers:e.req.headers,url:d})]}catch(e){return[L(e),void 0]}}),h=_(()=>{let t;return{valueOrUndefined:()=>{if(t)return t[1]},value:()=>{const[e,n]=t;if(e)throw e;return n},create:async n=>{if(t)throw new Error("This should only be called once - report a bug in tRPC");try{const r=await e.createContext({info:n});t=[void 0,r]}catch(e){t=[L(e),void 0]}}}}),y=m?yt:ht,g="application/jsonl"===l.headers.get("trpc-accept"),b=null===(a=null===(i=u.sse)||void 0===i?void 0:i.enabled)||void 0===a||a;try{const[t,n]=f;if(t)throw t;if(n.isBatchCall&&!p)throw new G({code:"BAD_REQUEST",message:"Batching is not enabled on the server"});if(g&&!n.isBatchCall)throw new G({message:"Streaming requests must be batched (you can do a batch of 1)",code:"BAD_REQUEST"});await h.create(n);const r=n.calls.map(async t=>{const r=t.procedure;try{if(e.error)throw e.error;if(!r)throw new G({code:"NOT_FOUND",message:`No procedure found on path "${t.path}"`});if(!y[r._def.type].includes(l.method))throw new G({code:"METHOD_NOT_SUPPORTED",message:`Unsupported ${l.method}-request to ${r._def.type} procedure at path "${t.path}"`});if("subscription"===r._def.type&&n.isBatchCall)throw new G({code:"BAD_REQUEST",message:"Cannot batch subscription calls"});return[void 0,{data:await r({path:t.path,getRawInput:t.getRawInput,ctx:h.value(),type:r._def.type,signal:e.req.signal})}]}catch(n){var o,a,i;const r=L(n),s=t.result();return null===(o=e.onError)||void 0===o||o.call(e,{error:r,path:t.path,input:s,ctx:h.valueOrUndefined(),type:null!==(a=null===(i=t.procedure)||void 0===i?void 0:i._def.type)&&void 0!==a?a:"unknown",req:e.req}),[r,void 0]}});if(!n.isBatchCall){const[t]=n.calls,[o,a]=await r[0];switch(n.type){case"unknown":case"mutation":case"query":{if(c.set("content-type","application/json"),bt(null==a?void 0:a.data))throw new G({code:"UNSUPPORTED_MEDIA_TYPE",message:"Cannot use stream-like response in non-streaming request - use httpBatchStreamLink"});const r=o?{error:z({config:u,ctx:h.valueOrUndefined(),error:o,input:t.result(),path:t.path,type:n.type})}:{result:{data:a.data}},i=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,errors:o?[o]:[],headers:c,untransformedJSON:[r]});return new Response(JSON.stringify(H(u,r)),{status:i.status,headers:c})}case"subscription":{const r=_(()=>{if(o)return ft(o);if(!b)return ft(new G({code:"METHOD_NOT_SUPPORTED",message:'Missing experimental flag "sseSubscriptions"'}));if(!W(a.data)&&!w(a.data))return ft(new G({message:`Subscription ${t.path} did not return an observable or a AsyncGenerator`,code:"INTERNAL_SERVER_ERROR"}));return W(a.data)?ee(a.data,e.req.signal):a.data}),i=ut((0,mt.default)((0,mt.default)({},u.sse),{},{data:r,serialize:e=>u.transformer.output.serialize(e),formatError(n){var r,o,a;const i=L(n.error),s=null==t?void 0:t.result(),l=null==t?void 0:t.path,c=null!==(r=null==t||null===(o=t.procedure)||void 0===o?void 0:o._def.type)&&void 0!==r?r:"unknown";null===(a=e.onError)||void 0===a||a.call(e,{error:i,path:l,input:s,ctx:h.valueOrUndefined(),req:e.req,type:c});return z({config:u,ctx:h.valueOrUndefined(),error:i,input:s,path:l,type:c})}}));for(const[e,t]of Object.entries(dt))c.set(e,t);const s=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,errors:[],headers:c,untransformedJSON:null});return new Response(i,{headers:c,status:s.status})}}}if("application/jsonl"===n.accept){c.set("content-type","application/json"),c.set("transfer-encoding","chunked");const t=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,errors:[],headers:c,untransformedJSON:null}),o=et((0,mt.default)((0,mt.default)({},u.jsonl),{},{maxDepth:1/0,data:r.map(async t=>{const[r,o]=await t,a=n.calls[0];var i,s;if(r)return{error:z({config:u,ctx:h.valueOrUndefined(),error:r,input:a.result(),path:a.path,type:null!==(i=null===(s=a.procedure)||void 0===s?void 0:s._def.type)&&void 0!==i?i:"unknown"})};const l=W(o.data)?ee(o.data,e.req.signal):Promise.resolve(o.data);return{result:Promise.resolve({data:l})}}),serialize:e=>u.transformer.output.serialize(e),onError:t=>{var r,o;null===(r=e.onError)||void 0===r||r.call(e,{error:L(t),path:void 0,input:void 0,ctx:h.valueOrUndefined(),req:e.req,type:null!==(o=null==n?void 0:n.type)&&void 0!==o?o:"unknown"})},formatError(e){var t,r;const o=null==n?void 0:n.calls[e.path[0]],a=L(e.error),i=null==o?void 0:o.result(),s=null==o?void 0:o.path,l=null!==(t=null==o||null===(r=o.procedure)||void 0===r?void 0:r._def.type)&&void 0!==t?t:"unknown";return z({config:u,ctx:h.valueOrUndefined(),error:a,input:i,path:s,type:l})}}));return new Response(o,{headers:c,status:t.status})}c.set("content-type","application/json");const o=(await Promise.all(r)).map(e=>{const[t,n]=e;return t?e:bt(n.data)?[new G({code:"UNSUPPORTED_MEDIA_TYPE",message:"Cannot use stream-like response in non-streaming request - use httpBatchStreamLink"}),void 0]:e}),a=o.map(([e,t],r)=>{const o=n.calls[r];var a,i;return e?{error:z({config:u,ctx:h.valueOrUndefined(),error:e,input:o.result(),path:o.path,type:null!==(a=null===(i=o.procedure)||void 0===i?void 0:i._def.type)&&void 0!==a?a:"unknown"})}:{result:{data:t.data}}}),i=o.map(([e])=>e).filter(Boolean),s=gt({ctx:h.valueOrUndefined(),info:n,responseMeta:e.responseMeta,untransformedJSON:a,errors:i,headers:c});return new Response(JSON.stringify(H(u,a)),{status:s.status,headers:c})}catch(t){var v;const[n,r]=f,o=h.valueOrUndefined(),{error:a,untransformedJSON:i,body:s}=function(e,t){const{router:n,req:r,onError:o}=t.opts,a=L(e);null==o||o({error:a,path:t.path,input:t.input,ctx:t.ctx,type:t.type,req:r});const i={error:z({config:n._def._config,error:a,type:t.type,path:t.path,input:t.input,ctx:t.ctx})},s=H(n._def._config,i);return{error:a,untransformedJSON:i,body:JSON.stringify(s)}}(t,{opts:e,ctx:h.valueOrUndefined(),type:null!==(v=null==r?void 0:r.type)&&void 0!==v?v:"unknown"}),l=gt({ctx:o,info:r,responseMeta:e.responseMeta,untransformedJSON:i,errors:[a],headers:c});return new Response(s,{status:l.status,headers:c})}}function wt(e){try{var t,n;const r=e.headers[":scheme"]&&"https"===e.headers[":scheme"]||e.socket&&"encrypted"in e.socket&&e.socket.encrypted?"https:":"http:",o=null!==(t=null!==(n=e.headers.host)&&void 0!==n?n:e.headers[":authority"])&&void 0!==t?t:"localhost";return new URL(e.url,`${r}//${o}`)}catch(e){throw new G({code:"BAD_REQUEST",message:"Invalid URL",cause:e})}}function _t(e){const t=new Headers;for(const n in e){const r=e[n];if("string"!=typeof n||!n.startsWith(":"))if(Array.isArray(r))for(const e of r)t.append(n,e);else null!=r&&t.append(n,r)}return t}function xt(e,t,n){const r=new AbortController,o=()=>{t.off("close",o),e.off("aborted",o),r.abort()};t.once("close",o),e.once("aborted",o);const a=wt(e),i={headers:_t(e.headers),method:e.method,signal:r.signal};"GET"!==e.method&&"HEAD"!==e.method&&(i.body=function(e,t){if("body"in e){if(void 0===e.body)return;return"string"==typeof e.body?e.body:JSON.stringify(e.body)}let n=0,r=!1;return new ReadableStream({start(o){const a=s=>{n+=s.length,!t.maxBodySize||n<=t.maxBodySize?o.enqueue(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)):(o.error(new G({code:"PAYLOAD_TOO_LARGE"})),r=!0,e.off("data",a),e.off("end",i))},i=()=>{r||(r=!0,e.off("data",a),e.off("end",i),o.close())};e.on("data",a),e.on("end",i)},cancel(){e.destroy()}})}(e,n),i.duplex="half");return new Request(a,i)}async function St(e){const{res:t}=e;try{const n=new WritableStream({async write(e){var n;await async function(e,t){!1===e.write(t)&&await new Promise((t,n)=>{const r=e=>{n(e),a()},o=()=>{t(),a()},a=()=>{e.off("error",r),e.off("drain",o)};e.once("error",r),e.once("drain",o)})}(t,e),null===(n=t.flush)||void 0===n||n.call(t)}});await e.body.pipeTo(n,{signal:e.signal})}catch(e){if(se(e))return;throw e}}var kt=T(F(),1);function Ct(e){return t=>{var n;const{res:r,req:o}=e,a=L(t),i=z({config:e.router._def._config,error:a,type:"unknown",path:void 0,input:void 0,ctx:void 0});null===(n=e.onError)||void 0===n||n.call(e,{req:o,error:a,type:"unknown",path:void 0,input:void 0,ctx:void 0});const s=H(e.router._def._config,{error:i});r.statusCode=i.data.httpStatus,r.end(JSON.stringify(s))}}async function Et(e){return new Promise(t=>{var n;const r=null!==(n=e.middleware)&&void 0!==n?n:(e,t,n)=>n();return e.res.once("finish",()=>{t()}),r(e.req,e.res,t=>{_(async()=>{var n;const r=xt(e.req,e.res,{maxBodySize:null!==(n=e.maxBodySize)&&void 0!==n?n:null}),o=await vt((0,kt.default)((0,kt.default)({},e),{},{req:r,error:t?L(t):null,createContext:async t=>{var n;return await(null===(n=e.createContext)||void 0===n?void 0:n.call(e,(0,kt.default)((0,kt.default)({},e),t)))},onError(t){var n;null==e||null===(n=e.onError)||void 0===n||n.call(e,(0,kt.default)((0,kt.default)({},t),{},{req:e.req}))}}));await async function(e){const{response:t,rawResponse:n}=e;200===n.statusCode&&(n.statusCode=t.status);for(const[e,r]of t.headers)n.setHeader(e,r);try{t.body&&await St({res:n,signal:e.request.signal,body:t.body})}catch(e){throw n.headersSent||(n.statusCode=500),e}finally{n.end()}}({request:r,response:o,rawResponse:e.res})}).catch(Ct(e))})})}const Bt=n("http");var Mt=T(F(),1);function $t(e){var t;const n=(null!==(t=e.basePath)&&void 0!==t?t:"/").length;return(t,r)=>{let o="";_(async()=>{const a=wt(t);o=a.pathname.slice(n),await Et((0,Mt.default)((0,Mt.default)({},e),{},{req:t,res:r,path:o}))}).catch(Ct((0,Mt.default)({req:t,res:r,path:o},e)))}}function Tt(e){return Bt.createServer(function(e){return $t(e)}(e))}const Nt=n("node:path"),Ot=n("node:os"),Pt=n("node:fs/promises"),It=n("node:crypto"),Ut=1024**3,At=(e,t,n)=>Math.min(Math.max(e,t),n),qt=e=>e?40:0,Ft=(e=0)=>{if(!e)return 0;return At(e/(12*Ut)*20,0,20)},jt=(e=0)=>{if(!e)return 0;return At(e/(32*Ut)*10,0,10)},zt=e=>e?10:0,Rt=(e="default",t=null)=>{const n=String(e).toLowerCase();if(!n)return 0;if(n.includes("cuda"))return 20;if(n.includes("vulkan"))return 10;if(n.includes("default")){return"darwin"===t||"ios"===t?15:5}return 0},Dt=({platform:e,variant:t,hasGpu:n,gpuUsableBytes:r=0,cpuUsableBytes:o=0,ok:a=!0}={})=>{if(!a)return 0;const i=qt(n)+Rt(t,e)+Ft(r),s=jt(o),l=zt(a);return Math.min(100,Math.round(i+s+l))},Lt=["cuda","vulkan","snapdragon","default"],Gt=e=>e||0===e?Array.isArray(e)?e.filter(e=>null!=e):[e]:[],Jt=e=>e&&String(e).trim().toLowerCase()||null,Vt=(e={})=>{const t=String(e.type||e.deviceType||e.kind||"").toLowerCase();return!!t.includes("gpu")||(!!t.includes("cuda")||(!!t.includes("metal")||(!!t.includes("vulkan")||!!t.includes("snapdragon"))))},Ht=({platform:e,totalMemoryInBytes:t,variant:n,devices:r,gpuMemoryFraction:o,cpuMemoryFraction:a,ok:i,error:s})=>{const l=(e=>Array.isArray(e)?e.map(e=>({...e})):[])(((e,t)=>"snapdragon"===e?t.filter(e=>"GPUOpenCL"!==e.deviceName):t)(n,r)),c=l.some(Vt),u=l.filter(e=>Vt(e)&&Number.isFinite(Number(e.maxMemorySize))).reduce((e,t)=>e+t.maxMemorySize,0),d=t,p=c?Math.floor(u*o):0,m=d?Math.floor(d*a):0,f={platform:e,variant:n,hasGpu:c,gpuUsableBytes:p,cpuUsableBytes:m,ok:i},h=Dt(f),y=i?(({platform:e,variant:t,hasGpu:n,gpuUsableBytes:r=0,cpuUsableBytes:o=0,ok:a=!0}={})=>({gpuPresence:qt(n),variant:Rt(t,e),gpuMemory:Ft(r),cpuMemory:jt(o),availability:zt(a)}))(f):null;return{platform:e,ok:i,variant:n,hasGpu:c,devices:l,gpuTotalBytes:u,gpuUsableBytes:p,cpuTotalBytes:d,cpuUsableBytes:m,score:h,breakdown:y,error:s,timestamp:(new Date).toISOString()}},Kt=({device:e,modelBytes:t=0,kvCacheBytes:n=0}={})=>{if(!e)return{totalRequiredBytes:t+n,fitsInGpu:!1,fitsInCpu:!1,limiting:"unknown-device"};const r=Math.max(0,Number(t)||0)+Math.max(0,Number(n)||0),o=e.hasGpu&&r>0&&r<=e.gpuUsableBytes,a=r>0&&r<=e.cpuUsableBytes;let i="ok";return!o&&e.hasGpu&&(i="gpu-memory"),a||(i=o?"cpu-memory":"insufficient-memory"),{totalRequiredBytes:r,fitsInGpu:o,fitsInCpu:a,limiting:i}},Yt=async({platform:e,variant:t=null,preferVariants:n=[],variantPreference:r=[],gpuMemoryFraction:o=.85,cpuMemoryFraction:a=.5,includeBreakdown:i=!1,totalMemoryInBytes:s,modelBytes:l=null,kvCacheBytes:c=null,limitedKvCacheBytes:u=null,dependencies:d={},defaultVariants:p=Lt}={})=>{const{getBackendDevicesInfo:m,isLibVariantAvailable:f}=d;if("function"!=typeof m||"function"!=typeof f)throw new TypeError("GGML capability detection requires getBackendDevicesInfo and isLibVariantAvailable functions");const h=(({variant:e,preferVariants:t=[],variantPreference:n=[],defaultVariants:r=Lt}={})=>{const o=[];e&&o.push(e),o.push(...Gt(t)),o.push(...Gt(n)),o.push(...r);const a=o.map(Jt).filter(Boolean);return Array.from(new Set(a))})({variant:t,preferVariants:n,variantPreference:r,defaultVariants:p}),y=[];for(const t of h)try{if(!await f(t))throw new Error(`Variant ${t} not available on this platform`);const n=await m(t);y.push(Ht({platform:e,totalMemoryInBytes:s,variant:t,devices:n,gpuMemoryFraction:o,cpuMemoryFraction:a,ok:!0}))}catch(n){const r=n instanceof Error?n.message:String(n);y.push(Ht({platform:e,totalMemoryInBytes:s,variant:t,devices:[],gpuMemoryFraction:o,cpuMemoryFraction:a,ok:!1,error:r}))}const g=y.filter(e=>e.ok),b=g.find(e=>e.hasGpu)||g.find(e=>"default"===e.variant)||g[0]||null,v={ok:Boolean(b),selected:b?{...b,breakdown:i?b.breakdown:void 0}:null,attempts:y};if(!i&&v.selected&&delete v.selected.breakdown,!v||!l&&!c)return v;const w=e=>{if(!e)return e;const t=Kt({device:e,modelBytes:l||0,kvCacheBytes:c||0});let n=null;return null!=u&&u!==c&&(n=Kt({device:e,modelBytes:l||0,kvCacheBytes:u})),{...e,fit:t,...n&&{limitedFit:n}}};return v.selected=w(v.selected),v.attempts=Array.isArray(v.attempts)?v.attempts.map(w):v.attempts,v},Qt="ggml-llm",Wt=["cuda","vulkan","default"],Zt=new Map([[Qt,Yt],["ggml-stt",async({platform:e,variant:t=null,preferVariants:n=[],variantPreference:r=[],gpuMemoryFraction:o=.85,cpuMemoryFraction:a=.5,includeBreakdown:i=!1,totalMemoryInBytes:s,modelBytes:l=null,processingBytes:c=null,kvCacheBytes:u=null,dependencies:d={}}={})=>{const p=r&&r.length>0?r:Wt;return Yt({platform:e,variant:t,preferVariants:n,variantPreference:p,gpuMemoryFraction:o,cpuMemoryFraction:a,includeBreakdown:i,totalMemoryInBytes:s,modelBytes:l,kvCacheBytes:c??u,dependencies:d,defaultVariants:Wt})}]]),Xt=async({platform:e,totalMemoryInBytes:t,backend:n=Qt,dependencies:r,...o}={})=>{const a=Zt.get(n);if(!a)throw new Error(`No capability detector registered for backend "${n}"`);return await a({...o,dependencies:r,totalMemoryInBytes:t,platform:e})},en={f16:2,f32:4,q8_0:1,q6_k:.75,q5_k:.625,q5_k_m:.625,q5_k_s:.625,q5_1:.625,q5_0:.625,q4_k:.5,q4_k_m:.5,q4_k_s:.5,q4_1:.5,q4_0:.5,iq4_nl:.5},tn=e=>{const t=e?String(e).toLowerCase():"f16";return en[t]||en.f16},nn=({modelBytes:e=0,audioLengthSeconds:t=30,sampleRate:n=16e3,bytesPerSample:r=4}={})=>{const o=Math.max(0,Number(e)||0),a=Math.max(0,Math.floor(Math.max(0,t)*n*r)),i=1048576,s=1024*i;let l,c,u;l=o<200*i?120*i:o<500*i?140*i:o<2*s?150*i:160*i,c=o<200*i?70*i:o<500*i?135*i:220*i,u=o<100*i?20*i:o<200*i?30*i:o<500*i?85*i:o<2*s?215*i:360*i;const d=l+c+u;return{modelBytes:o,audioBufferBytes:a,processingBufferBytes:d,totalBytes:o+d+a}},rn=e=>e?String(e).trim().toLowerCase():null,on=({arch:e,nLayer:t=0})=>({arch:rn(e),enabled:!1,window:null,pattern:null,denseFirst:!1,type:null,kvLayers:Math.max(0,Math.floor(Number(t)||0)),swaLayers:0}),an=new Map([["llama4",({nSwa:e})=>{if(0===e)return{enabled:!1};return{enabled:!0,window:e&&e>0?e:8192,pattern:4,type:"chunked"}}],["afmoe",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:4,type:"standard"}],["phi3",()=>({enabled:!1})],["gemma2",({nSwa:e})=>{const t=e&&e>0?e:4096;return t?{enabled:!0,window:t,pattern:2,type:"standard"}:{enabled:!1}}],["gemma3",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:6,type:"standard"}],["gemma3n",({nLayer:e,nSwa:t})=>!t||t<=0?{enabled:!1}:{enabled:!0,window:t,pattern:5,type:"standard",kvLayers:Math.min(20,e)}],["gemma-embedding",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:6,type:"symmetric"}],["cohere2",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:4,type:"standard"}],["olmo2",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:4,type:"standard"}],["exaone4",({nLayer:e,nSwa:t})=>{let n=null;return t&&t>0?n=t:e>=64&&(n=4096),n?{enabled:!0,window:n,pattern:4,type:"standard"}:{enabled:!1}}],["gpt-oss",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:e,pattern:2,type:"standard"}],["smallthinker",({nSwa:e})=>!e||e<=0?{enabled:!1}:{enabled:!0,window:4096,pattern:4,denseFirst:!0,type:"standard"}]]),sn=({arch:e,metadata:t={},nLayer:n=0}={})=>{const r=rn(e||t["general.architecture"]),o=Math.max(0,Math.floor(Number(n)||0)),a=((e={},t=null)=>{if(!e)return null;const n=rn(t),r=n?`${n}.attention.sliding_window`:null,o=(r&&null!=e[r]?e[r]:null)??e["llama.attention.sliding_window"];if(null==o)return null;const a=Number(o);return Number.isFinite(a)?a:null})(t,r),i=r?an.get(r):null;if(!i)return on({arch:r,nLayer:n});const s=i({nLayer:o,nSwa:a,metadata:t});if(!s||!s.enabled||!s.window||s.window<=0)return on({arch:r,nLayer:n});const l=Math.max(0,Math.floor(Number(s.pattern)||0)),c=null!=s.kvLayers&&Number.isFinite(Number(s.kvLayers))?Number(s.kvLayers):o,u=Math.max(0,Math.floor(c)),d=((e=0,t=0,n=!1)=>{const r=Math.max(0,Math.floor(Number(e)||0)),o=Math.max(0,Math.floor(Number(t)||0));if(!r||1===o)return 0;if(o<=0)return r;const a=Math.max(0,o-1),i=r%o;return Math.floor(r/o)*a+(n?Math.max(0,i-1):Math.min(i,a))})(u,l,Boolean(s.denseFirst));return{arch:r,enabled:d>0,window:s.window,pattern:l,denseFirst:Boolean(s.denseFirst),type:s.type||"standard",kvLayers:u,swaLayers:d}},ln=(e={})=>{const t=e["general.architecture"],n=(t,n=null)=>{const r=e[t],o=Number(r);return Number.isFinite(o)?o:n},r=t?n(`${t}.context_length`,n("llama.context_length")):null,o=t?n(`${t}.block_count`,n("llama.block_count")):null,a=t?n(`${t}.embedding_length`,n("llama.embedding_length")):null,i=t?n(`${t}.attention.head_count`,n("llama.attention.head_count")):null;return{arch:t,nCtxTrain:r,nLayer:o,nEmbd:a,nHead:i,nHeadKv:t?n(`${t}.attention.head_count_kv`,n("llama.attention.head_count_kv",i)):null,nEmbdHeadK:t?n(`${t}.attention.key_length`,n("llama.attention.key_length")):null,nEmbdHeadV:t?n(`${t}.attention.value_length`,n("llama.attention.value_length")):null,quantVersion:e["general.quantization_version"]||null,fileType:e["general.file_type"]||null}},cn=({layerCount:e,headKvCount:t,embdHeadKCount:n,embdHeadVCount:r,cacheTypes:o,swaConfig:a,kvUnified:i=!1,nParallel:s=1,swaFull:l=!1})=>{const c=a?.window&&i?Math.max(1,Number(s)||1):1;return i=>((e,t,n,r,o,a={},{totalLayers:i=null,swaLayers:s=0,swaContext:l=null,swaContextMultiplier:c=1,swaAdditionalTokens:u=0,swaFull:d=!1}={})=>{if(!(e&&t&&n&&r&&o))return 0;const p=Number(null!=i&&void 0!==i?i:e),m=Math.max(0,Math.floor(p));if(!m)return 0;const f=tn(a.k),h=tn(a.v),y=Number(n)*(Number(r)*f+Number(o)*h);if(!y)return 0;const g=Math.max(0,Number(t)||0),b=Math.min(m,Math.max(0,Math.floor(Number(s)||0))),v=Math.max(0,m-b),w=(null!=l&&Number.isFinite(Number(l))?Math.max(0,Number(l)):g)*Math.max(1,Number(c)||1)+Math.max(0,Number(u)||0),_=d?g:Math.min(g,w),x=v*g+b*Math.max(0,Math.floor(_));return Math.round(y*x)})(e,i,t,n,r,o,{totalLayers:e,swaLayers:a?.swaLayers||0,swaContext:a?.window,swaFull:l,swaContextMultiplier:c})},un=({maxCtx:e,availableMemory:t,modelBytes:n,kvBytesForCtx:r})=>{const o=Math.max(1,Math.floor(Number(e)||0));if(!r||t<=n)return o;let a=1,i=o,s=o;for(;a<=i;){const e=Math.floor((a+i)/2);n+r(e)<=t?(s=e,a=e+1):i=e-1}return s};var dn=f(285);const pn=n("node:stream/web");var mn=f.t(pn,2);const fn="undefined"!=typeof globalThis&&globalThis.ReadableStream&&globalThis.WritableStream?{ReadableStream:globalThis.ReadableStream,WritableStream:globalThis.WritableStream}:mn,{ReadableStream:hn,WritableStream:yn}=fn,gn=new TextEncoder,bn=(e={},t={})=>(Object.entries(t||{}).forEach(([t,n])=>{n&&"object"==typeof n&&!Array.isArray(n)?(e[t]&&"object"==typeof e[t]||(e[t]={}),bn(e[t],n)):e[t]=n}),e),vn="https://huggingface.co",wn="https://huggingface.co/api",_n=Nt.join(Ot.homedir(),".buttress","models"),xn=["mxfp4","q8_0","q6_k","q6","q5_k_m","q5_k_s","q5_k","q5_1","q5_0","q4_k_m","q4_k_s","q4_k","q4_1","q4_0","q3","q2"],Sn=.5,kn={backend:{type:"ggml-llm",variant:null,variant_preference:["cuda","vulkan","snapdragon","default"],gpu_memory_fraction:.85,cpu_memory_fraction:Sn},model:{repo_id:null,revision:"main",filename:null,url:null,quantization:null,preferred_quantizations:[],n_ctx:null,n_gpu_layers:"auto",n_parallel:4,n_batch:2048,flash_attn:"auto",cache_type_k:"f16",cache_type_v:"f16",ctx_shift:!1,kv_unified:!1,swa_full:!1,allow_local_file:!1,local_path:null,api_base:wn,base_url:vn},runtime:{cache_dir:_n,prefer_variants:[],huggingface_token:process.env.HUGGINGFACE_TOKEN||null,http_headers:{},session_cache:{enabled:!0,max_size_bytes:10737418240,max_entries:1e3}}},Cn=(e,t=[])=>e||0===e?Array.isArray(e)?e.filter(e=>null!=e):[e]:[...t],En=e=>{if(!e)return null;const t=String(e).toLowerCase();return["cuda","vulkan","snapdragon","default"].includes(t)?t:null},Bn=(e={})=>{const t=JSON.parse(JSON.stringify(kn));if(bn(t,e),t.backend.variant=En(t.backend.variant),t.backend.variant_preference=Array.from(new Set(Cn(t.backend.variant_preference).map(En).filter(Boolean))),0===t.backend.variant_preference.length&&(t.backend.variant_preference=["cuda","vulkan","snapdragon","default"]),t.runtime.prefer_variants=Array.from(new Set(Cn(t.runtime.prefer_variants).map(En).filter(Boolean))),t.model.preferred_quantizations=Array.from(new Set(Cn(t.model.preferred_quantizations||t.model.quantizations).map(e=>e?String(e).toLowerCase():null).filter(Boolean))),t.model.quantization){const e=String(t.model.quantization).toLowerCase();t.model.preferred_quantizations.includes(e)||t.model.preferred_quantizations.unshift(e)}return t.model.n_parallel=Math.max(1,Number(t.model.n_parallel)||4),t.model.n_batch=Math.max(1,Number(t.model.n_batch)||512),t.model.base_url=t.model.base_url||vn,t.model.api_base=t.model.api_base||wn,t.runtime.cache_dir=t.runtime.cache_dir?Nt.resolve(t.runtime.cache_dir):_n,t.runtime.session_cache={...kn.runtime.session_cache,...t.runtime.session_cache||{}},t},Mn=e=>{const t=e.toLowerCase();return xn.find(e=>t.includes(e))||null},$n=async e=>{await(0,Pt.mkdir)(e,{recursive:!0})},Tn=(e,t,n=_n)=>{const r=(0,It.createHash)("sha256").update(e).digest("hex");return Nt.join(((e=_n)=>Nt.join(e,".metadata-cache"))(n),t,`${r}.json`)},Nn=async(e,t,n=_n)=>{try{const r=Tn(e,t,n),o=await(0,Pt.readFile)(r,"utf-8");return console.log(`[Cache] Hit ${t} cache:`,Nt.basename(r)),JSON.parse(o,(e,t)=>"string"==typeof t&&t.startsWith("__bigint__")?BigInt(t.slice(10)):t)}catch(e){return null}},On=async(e,t,n,r=_n)=>{try{const o=Tn(e,t,r);await $n(Nt.dirname(o)),await(0,Pt.writeFile)(o,JSON.stringify(n,(e,t)=>"bigint"==typeof t?`__bigint__${t.toString()}`:t),"utf-8"),console.log(`[Cache] Wrote ${t} cache:`,Nt.basename(o))}catch(e){console.warn(`[Cache] Failed to write ${t} cache:`,e.message)}},Pn=(e=_n)=>Nt.join(e,".session-state-cache"),In=(e=_n)=>Nt.join(Pn(e),"cache-map.json"),Un=(e=_n)=>Nt.join(Pn(e),"temp"),An=(e=_n)=>Nt.join(Pn(e),"states"),qn=async(e,t=_n)=>{const n=In(t),r=`${n}.tmp.${Date.now()}`;try{await $n(Nt.dirname(n)),await(0,Pt.writeFile)(r,JSON.stringify(e,null,2),"utf-8"),await(0,Pt.rename)(r,n)}catch(e){throw await(0,Pt.unlink)(r).catch(()=>{}),e}},Fn=(e,t,n)=>{const r=Object.values(n.entries);console.log(`[SessionCache] Finding match for promptText (${e.length} chars)`),console.log(`[SessionCache] Checking ${r.length} cache entries`);const o=r.filter(e=>{return n=e.metadata,r=t,n.modelPath===r.modelPath&&n.variant===r.variant&&n.n_gpu_layers===r.n_gpu_layers&&n.n_ctx>=r.n_ctx&&n.cacheTypeK===r.cacheTypeK&&n.cacheTypeV===r.cacheTypeV;var n,r}).reduce((t,n)=>{const r=((e,t)=>{const n=Math.min(e.length,t.length);let r=0;for(;r<n&&e[r]===t[r];)r+=1;return r})(e,n.fullText);return r>=100&&r>t.prefixLen?{entry:n,prefixLen:r}:t},{entry:null,prefixLen:0});return o.entry?(console.log(`[SessionCache] Prefix match found: ${o.entry.id} (${o.prefixLen}/${o.entry.fullText.length} chars)`),{entry:o.entry,prefixLength:o.prefixLen}):(console.log("[SessionCache] No match found"),null)};class jn{constructor(e,t){this.config=e,this.plan=t,this.baseDir=e.runtime.cache_dir,this.enabled=!1!==e.runtime.session_cache?.enabled,this.maxSizeBytes=((e,t)=>{if(null==e)return t;if("number"==typeof e)return e;if("string"==typeof e){const n=dn.parse(e);return null!=n?n:t}return t})(e.runtime.session_cache?.max_size_bytes,10737418240),this.maxEntries=e.runtime.session_cache?.max_entries||1e3,this.metadata={variant:t.info?.runtime?.variant||null,n_gpu_layers:t.info?.runtime?.n_gpu_layers||0,n_ctx:t.info?.runtime?.n_ctx||0,modelPath:t.localPath,cacheTypeK:t.info?.runtime?.cache_type_k||"f16",cacheTypeV:t.info?.runtime?.cache_type_v||"f16"},this.cacheMap=null,this.initialized=!1}async initialize(){if(this.enabled&&!this.initialized)try{await $n(Pn(this.baseDir)),await $n(Un(this.baseDir)),await $n(An(this.baseDir)),this.cacheMap=await(async(e=_n)=>{try{const t=In(e),n=await(0,Pt.readFile)(t,"utf-8"),r=JSON.parse(n);return r.entries&&"object"==typeof r.entries?r:{version:1,entries:{},totalSize:0}}catch{return{version:1,entries:{},totalSize:0}}})(this.baseDir),this.initialized=!0,console.log(`[SessionCache] Initialized with ${Object.keys(this.cacheMap.entries).length} entries`)}catch(e){console.warn(`[SessionCache] Failed to initialize: ${e.message}`),this.enabled=!1}}async findMatchingEntry(e){if(!this.enabled||!this.cacheMap)return null;const t=Fn(e,this.metadata,this.cacheMap);if(t){const{entry:e}=t;return await(async e=>{try{return await(0,Pt.stat)(e),!0}catch{return!1}})(e.stateFilePath)?(e.lastAccessedAt=(new Date).toISOString(),await qn(this.cacheMap,this.baseDir).catch(()=>{}),{entry:e}):(console.log(`[SessionCache] Removing stale entry: ${e.id}`),delete this.cacheMap.entries[e.id],this.cacheMap.totalSize-=e.stateFileSize||0,await qn(this.cacheMap,this.baseDir).catch(()=>{}),null)}return null}async prepareCompletionOptions(e,t){if(!this.enabled)return{options:e,cacheEntry:null,promptPrefix:null};const n=await this.findMatchingEntry(t);if(n){const{entry:t}=n;console.log(`[SessionCache] Found matching entry: ${t.id} (${t.fullText.length} chars, loadStateSize=${t.loadStateSize})`);return{options:{...e,load_state_path:t.stateFilePath},cacheEntry:t,promptPrefix:t.fullText}}return{options:e,cacheEntry:null,promptPrefix:null}}async saveCompletionState(e,t,n,r=0){if(!this.enabled)return null;const o=((e,t)=>{const n=JSON.stringify({text:e,model:t.modelPath,variant:t.variant,n_gpu_layers:t.n_gpu_layers,n_ctx:t.n_ctx});return(0,It.createHash)("sha256").update(n).digest("hex").slice(0,24)})(e,this.metadata);if(this.cacheMap.entries[o])return console.log(`[SessionCache] Entry already exists for prompt: ${o}`),await(0,Pt.unlink)(n).catch(()=>{}),this.cacheMap.entries[o];const a=e+t,i=((e,t=_n)=>Nt.join(An(t),`${e}.bin`))(o,this.baseDir);try{await $n(Nt.dirname(i)),await(0,Pt.rename)(n,i);const s=await(0,Pt.stat)(i),l={id:o,promptText:e,completionText:t,fullText:a,promptTokenCount:r,stateFilePath:i,stateFileSize:s.size,metadata:{...this.metadata},createdAt:(new Date).toISOString(),lastAccessedAt:(new Date).toISOString()};return this.cacheMap.entries[o]=l,this.cacheMap.totalSize+=s.size,await(async(e,t,n)=>{const r=Object.values(e.entries).sort((e,t)=>new Date(e.lastAccessedAt)-new Date(t.lastAccessedAt));let o=e.totalSize,a=Object.keys(e.entries).length;const i=r.filter(e=>(o>t||a>n)&&(o-=e.stateFileSize||0,a-=1,!0));return await Promise.all(i.map(async t=>{await(0,Pt.unlink)(t.stateFilePath).catch(()=>{}),delete e.entries[t.id],console.log(`[SessionCache] Evicted entry: ${t.id}`)})),e.totalSize=Math.max(0,o),i.map(e=>e.id)})(this.cacheMap,this.maxSizeBytes,this.maxEntries),await qn(this.cacheMap,this.baseDir),console.log(`[SessionCache] Saved entry: ${o} (${s.size} bytes)`),l}catch(e){return console.warn(`[SessionCache] Failed to save state: ${e.message}`),await(0,Pt.unlink)(n).catch(()=>{}),null}}async generateTempStatePath(){return await $n(Un(this.baseDir)),((e=_n)=>{const t=`${Date.now()}-${Math.random().toString(36).slice(2,10)}`;return Nt.join(Un(e),`${t}.bin`)})(this.baseDir)}async cleanup(){await(async(e=_n)=>{const t=Un(e);try{const e=await(0,Pt.readdir)(t),n=Date.now(),r=36e5;await Promise.all(e.map(async e=>{const o=Nt.join(t,e),a=await(0,Pt.stat)(o).catch(()=>null);a&&n-a.mtimeMs>r&&(await(0,Pt.unlink)(o).catch(()=>{}),console.log(`[SessionCache] Cleaned up temp file: ${e}`))}))}catch{}})(this.baseDir)}}const zn=async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,t);if(!n.ok){const t=await n.text().catch(()=>"");throw new Error(`Failed to fetch ${e}: ${n.status} ${n.statusText} ${t}`.trim())}return n.json()},Rn=async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,{...t,method:"HEAD"});if(!n.ok)throw new Error(`Failed to fetch headers for ${e}: ${n.status} ${n.statusText}`);return n},Dn=async(e,t,n=_n)=>{const r=JSON.stringify({url:e,headers:t}),a=await Nn(r,"range-metadata",n);if(a)return a;const i=!/^https?:/i.test(e),{metadata:s}=await o(e,{fetch,additionalFetchHeaders:t,allowLocalFile:i});return await On(r,"range-metadata",s,n),s},Ln=async(e,t)=>{try{const n=await(0,Pt.stat)(e);return!t||n.size===t}catch(e){return!1}},Gn=async(e,t,n,r,o)=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");await $n(Nt.dirname(n));const a=await fetch(e,{headers:t});if(!a.ok||!a.body)throw new Error(`Failed to download ${e}: ${a.status} ${a.statusText}`);const i=await(0,Pt.open)(n,"w"),s=Number(a.headers.get("content-length"))||r||0;let l=0,c=.05;try{await a.body.pipeTo(new yn({async write(e){if(await i.write(e),l+=e.byteLength,"function"==typeof o&&s>0){const e=Math.min(1,l/s);for(;e>=c;)o(c),c+=.05}},async close(){await i.close(),"function"==typeof o&&o(1)},async abort(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}}))}catch(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}if(r){const e=await(0,Pt.stat)(n);if(e.size!==r)throw await(0,Pt.unlink)(n).catch(()=>{}),new Error(`Downloaded file size mismatch, expected ${r} got ${e.size}`)}},Jn=async e=>{const t=e.model.repo_id||e.model.repository||e.model.model;if(!t)throw new Error("`model.repo_id` is required in Buttress backend config");const n=e.model.revision||"main",r=e.runtime.cache_dir,o=JSON.stringify({repoId:t,revision:n,filename:e.model.filename,url:e.model.url,quantization:e.model.quantization,preferred_quantizations:e.model.preferred_quantizations}),a=await Nn(o,"artifact-info",r);if(a)return a;const i={...e.runtime.http_headers||{}};if(e.runtime.huggingface_token&&(i.Authorization=`Bearer ${e.runtime.huggingface_token}`),e.model.url){const a=await Rn(e.model.url,{headers:i}),s=Number(a.headers.get("content-length"))||null,l={repoId:t,revision:n,filename:e.model.filename||e.model.url.split("/").pop(),url:e.model.url,size:s,headers:i};return await On(o,"artifact-info",l,r),l}let{filename:s}=e.model,l=e.model.quantization&&String(e.model.quantization).toLowerCase();const c=await zn(`${e.model.api_base}/models/${t}?revision=${n}&blobs=true`,{headers:i}),u=(c?.siblings||c?.files||[]).map(e=>e.rfilename||e.path||e.filename).filter(e=>"string"==typeof e&&e.endsWith(".gguf"));if(0===u.length)throw new Error(`No GGUF artifacts found in repo ${t}`);const d=e.model.preferred_quantizations.length>0?e.model.preferred_quantizations:xn;if(s)l||(l=Mn(s));else{const e=(()=>{const e=d.find(e=>u.find(t=>t.toLowerCase().includes(e)));if(e)return{filename:u.find(t=>t.toLowerCase().includes(e)),quantization:e};return null})()||{filename:u[0],quantization:null},{filename:t,quantization:n}=e;s=t,l=n||Mn(s)}const p=`${e.model.base_url.replace(/\/+$/,"")}/${t}/resolve/${n}/${s}`,m=/-(\d{5})-of-(\d{5})\.gguf$/,f=s.match(m);let h=null;if(f){const[,,r]=f,o=await zn(`${e.model.api_base}/models/${t}?revision=${n}&blobs=true`,{headers:i}),a=o?.siblings||o?.files||[],l=Number(r);h=0;for(let e=1;e<=l;e+=1){const t=String(e).padStart(5,"0"),n=s.replace(m,`-${t}-of-${r}.gguf`),o=a.find(e=>(e.rfilename||e.path||e.filename)===n),i=Number(o?.size);Number.isFinite(i)&&i>0&&(h+=i)}}else{const e=await Rn(p,{headers:i});h=Number(e.headers.get("content-length"))||null}const y={repoId:t,revision:n,filename:s,url:p,size:h,quantization:l,headers:i,isSplit:Boolean(f),splitCount:f?Number(f[2]):0};return await On(o,"artifact-info",y,r),y},Vn=async(e,{modelBytes:t=null,kvCacheBytes:n=null}={})=>{const r=(e=>{const t=[];return e.backend.variant&&t.push(e.backend.variant),e.runtime.prefer_variants.length>0&&t.push(...e.runtime.prefer_variants),t.push(...e.backend.variant_preference),t.push("default"),Array.from(new Set(t.map(En).filter(Boolean)))})(e),[o,...s]=r,l=null!=e.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.gpu_memory_fraction))):kn.backend.gpu_memory_fraction||1,c=null!=e.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.cpu_memory_fraction))):Sn,u=await Xt({platform:process.platform,totalMemoryInBytes:Ot.totalmem(),backend:"ggml-llm",variant:o||null,preferVariants:s,gpuMemoryFraction:l,cpuMemoryFraction:c,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:t,kvCacheBytes:n}),d=e=>({...e,devices:Array.isArray(e.devices)?e.devices:[],ok:e.ok,hasGpu:Boolean(e.hasGpu),totalMemory:e.gpuTotalBytes||e.totalMemory||0,error:e.ok?null:new Error(e.error||`Variant ${e.variant} not available on this platform`)});if(!u.ok||!u.selected){const e=(u.attempts||[]).map(e=>`${e.variant}: ${e.error||"unknown error"}`).join("; ");throw new Error(`Unable to initialize any backend variant (${r.join(", ")}). Errors: ${e}`)}const p=(u.attempts||[]).map(d);return{selected:d(u.selected),attempts:p}},Hn=async e=>{const t=await Jn(e),n=await Dn(t.url,t.headers,e.runtime.cache_dir),{arch:r,nCtxTrain:o,nLayer:a,nEmbd:i,nHead:s,nHeadKv:l,nEmbdHeadK:c,nEmbdHeadV:u,quantVersion:d,fileType:p}=ln(n),m=Number.isFinite(Number(a))?Number(a):0,f=Number.isFinite(Number(i))?Number(i):0,h=Number.isFinite(Number(s))?Number(s):0,y=Number.isFinite(Number(l))?Number(l):h,g=h>0&&f>0?f/h:128,b=Number.isFinite(Number(c))?Number(c):g,v=Number.isFinite(Number(u))?Number(u):g,w=sn({arch:r,metadata:n,nLayer:m}),_=w&&Number.isFinite(Number(w.kvLayers))?Number(w.kvLayers):m,x=Math.max(0,Math.floor(Number(_)||0)),S=e.model.n_ctx?Number(e.model.n_ctx):null;let k=S||o||4096;const C=[],E=[];let B=!0;if(S&&o&&S>o){B=!1;const e=`Requested context length (${S}) exceeds model training context (${o})`;C.push(e),E.push(e),k=o}S&&!o&&C.push("Model metadata missing training context length, using requested value");const M={k:e.model.cache_type_k,v:e.model.cache_type_v},$=t.size>0?t.size:0,T=cn({layerCount:x,headKvCount:y,embdHeadKCount:b,embdHeadVCount:v,cacheTypes:M,swaConfig:w,kvUnified:e.model.kv_unified,nParallel:e.model.n_parallel,swaFull:e.model.swa_full}),N=T(k),O=await Vn(e,{modelBytes:$,kvCacheBytes:N}),P=O.selected.totalMemory||0,I=P*(e.backend.gpu_memory_fraction||1),U=null!=e.backend.cpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.cpu_memory_fraction))):Sn,A=Math.max(0,Ot.totalmem()*U),q=O.selected.hasGpu?I:A,F=un({maxCtx:k,availableMemory:q,modelBytes:$,kvBytesForCtx:T});if(!S&&F){const e=o?Math.min(F,o):F,t=Math.max(32,e);t<k&&C.push(`Context length capped to ${t} by memory limits`),k=t}k>F&&(k=F);const j=Math.floor(F);console.log(`[buttress] Memory-limited context length: ${j}`);const z=T(k),R=$+z,D=m?$/(m+1):$;let L,G=0;O.selected.hasGpu&&D>0&&(G=Math.min(m+1,Math.max(0,Math.floor(I/D)))),console.log(`[buttress] Auto GPU layer capacity (${O.selected.variant}): ${G}/${m+1}`),L="auto"===e.model.n_gpu_layers||null==e.model.n_gpu_layers?G:Math.max(0,Math.min(Number(e.model.n_gpu_layers)||0,m+1));const J=(()=>{const t=e.model.flash_attn&&String(e.model.flash_attn).toLowerCase();return"on"===t||"off"===t?t:O.selected.hasGpu?"auto":"off"})(),V=e.runtime.cache_dir,H=((e,t)=>{if(e.model.local_path)return Nt.resolve(e.model.local_path);const n=t.repoId.split("/"),r=Nt.join(e.runtime.cache_dir,...n,t.revision);return Nt.join(r,t.filename)})(e,t),K=await Ln(H,t.size),Y={ok:B,backend:"ggml-llm",warnings:C,errors:E,model:{repoId:t.repoId,revision:t.revision,filename:t.filename,quantization:t.quantization,url:t.url,sizeBytes:t.size,metadata:{architecture:r,n_ctx_train:o,n_layer:m,n_embd:f,quantization_version:d,file_type:p,kv_layer_count:x,swa:w?.enabled?{window:w.window,pattern:w.pattern,dense_first:w.denseFirst,type:w.type,layers:w.swaLayers}:null}},runtime:{variant:O.selected.variant,n_ctx:k,requested_ctx:S,n_gpu_layers:L,n_parallel:e.model.n_parallel,n_batch:e.model.n_batch,flash_attn_type:J,cache_type_k:M.k,cache_type_v:M.v,ctx_shift:e.model.ctx_shift,kv_unified:e.model.kv_unified,swa_full:e.model.swa_full,estimated_max_n_ctx:j,auto_gpu_layers:G},resources:{modelBytes:$,kvCacheBytes:z,totalEstimatedBytes:R,gpuCapacityBytes:P,gpuUsableBytes:I,cpuUsableBytes:A,fit:O.selected.fit},devices:{selected:O.selected,attempts:O.attempts},download:{cacheDir:V,localPath:H,exists:K},timestamp:(new Date).toISOString()};return{config:e,info:Y,artifact:t,metadata:{arch:r,nCtxTrain:o,nLayer:m,nEmbd:f},devices:O,cacheTypes:M,localPath:H,localExists:K}},Kn=(e,t)=>`event: ${e}\ndata: ${null==t?"":JSON.stringify(t)}\n\n`,Yn=(e,t)=>{let n;return new hn({async start(r){try{const o=await e.parallel.completion(t,(e,t)=>{t&&r.enqueue(gn.encode(Kn("token",{requestId:e,...t})))}),{requestId:a}=o;n=o.stop;const i=await o.promise;console.log("[Completion] Result:",i),r.enqueue(gn.encode(Kn("result",{requestId:a,...i}))),r.close()}catch(e){r.enqueue(gn.encode(Kn("error",{message:e?.message||String(e)}))),r.error(e)}},cancel(){n&&n()}})},Qn=(e,t,n,r,o,a)=>{let i,s="",l=!1;return new hn({async start(c){try{const u=await e.parallel.completion(t,(e,t)=>{t&&(t.token&&(s+=t.token),c.enqueue(gn.encode(Kn("token",{requestId:e,...t}))))}),{requestId:d}=u;i=u.stop;const p=await u.promise;p.text?s=p.text:p.content&&(s=p.content),l=!p.interrupted&&!p.context_full,console.log("[Completion] Result:",p),c.enqueue(gn.encode(Kn("result",{requestId:d,...p}))),c.close(),l&&n.enabled&&s?n.saveCompletionState(r,s,o,a).catch(e=>{console.warn("[SessionCache] Save failed:",e.message)}):o&&(0,Pt.unlink)(o).catch(()=>{})}catch(e){c.enqueue(gn.encode(Kn("error",{message:e?.message||String(e)}))),c.error(e),(0,Pt.unlink)(o).catch(()=>{})}},cancel(){i&&i(),(0,Pt.unlink)(o).catch(()=>{})}})},Wn=e=>{const t={model:e.plan.localPath,runtime:e.plan.info.runtime};return(0,It.createHash)("sha256").update(JSON.stringify(t)).digest("hex").slice(0,24)},Zn=async(e,t)=>{const n=Wn(e);let r=e.contexts.get(n);if(r)return r.refCount+=1,await r.ready,"function"==typeof t&&t(1),r;r={key:n,refCount:1},r.ready=(async()=>{const n=await(async(e,t,n)=>{const{config:r,localPath:o,artifact:a}=e;if(e.localExists&&!t.has(o))return e.info.download.exists=!0,"function"==typeof n&&n(.5),o;if(r.model.local_path&&!r.model.allow_local_file)throw new Error("Local model path provided but `model.allow_local_file` is not enabled");const i=o;t.has(i)||t.set(i,(async()=>{if(a.isSplit&&a.splitCount>0){const e=/-(\d{5})-of-(\d{5})\.gguf$/,t=Nt.dirname(o),i=a.splitCount;let s=0;for(let o=1;o<=i;o+=1){const l=String(o).padStart(5,"0"),c=a.filename.replace(e,`-${l}-of-${String(i).padStart(5,"0")}.gguf`),u=`${r.model.base_url.replace(/\/+$/,"")}/${a.repoId}/resolve/${a.revision}/${c}`,d=Nt.join(t,c);await Ln(d)||await Gn(u,a.headers,d,null,e=>{if(e>=0&&Number.isFinite(e)){const t=(s+e)/i,r=Math.round(100*t);console.log(`Downloading model splits: ${Math.min(100,r)}%`),"function"==typeof n&&n(.5*t)}}),s+=1}}else await Gn(a.url,a.headers,o,a.size,e=>{if(e>=0&&Number.isFinite(e)){const t=Math.round(100*e);console.log(`Downloading model: ${Math.min(100,t)}%`),"function"==typeof n&&n(.5*e)}});e.localExists=!0,e.info.download.exists=!0})());try{await t.get(i)}finally{t.delete(i)}return o})(e.plan,e.downloads,t);"function"==typeof t&&t(.5);const o={model:n,n_ctx:e.plan.info.runtime.n_ctx,n_gpu_layers:e.plan.info.runtime.n_gpu_layers,n_parallel:e.plan.info.runtime.n_parallel,n_batch:e.plan.info.runtime.n_batch,flash_attn_type:e.plan.info.runtime.flash_attn_type,ctx_shift:e.plan.info.runtime.ctx_shift,kv_unified:e.plan.info.runtime.kv_unified,swa_full:e.plan.info.runtime.swa_full,lib_variant:e.plan.info.runtime.variant};let a;"off"!==e.plan.info.runtime.flash_attn_type&&(o.cache_type_k=e.plan.info.runtime.cache_type_k,o.cache_type_v=e.plan.info.runtime.cache_type_v),console.log("[Context] Load Options:",o);try{if(a=await s(o,e=>{"function"==typeof t&&(t(.5+.25*e),e%5==0&&console.log("[Context] Load Model Progress:",e))}),e.plan.info.runtime.n_parallel){if(!await a.parallel.enable({n_parallel:e.plan.info.runtime.n_parallel,n_batch:e.plan.info.runtime.n_batch}))throw new Error("Failed to enable parallel decoding mode for context")}return"function"==typeof t&&t(1),r.context=a,r.modelInfo=a.getModelInfo(),r}catch(e){if(a)try{a.release()}catch(e){}throw e}})(),e.contexts.set(n,r);try{return await r.ready,r}catch(t){throw e.contexts.delete(n),t}},Xn=async(e,t,n=!1)=>{if(n)t.refCount=0;else if(t.refCount=Math.max(0,t.refCount-1),t.refCount>0)return!1;e.contexts.delete(t.key);try{t.context?.parallel?.disable?.()}catch(e){}return await(t.context?.release?.()),!0};async function er(e,t){const n=Bn(t),r=await Hn(n),o=new jn(n,r);await o.initialize();const a={id:e,type:"ggml-llm",config:n,plan:r,info:r.info,contexts:new Map,downloads:new Map,sessionCache:o};return{id:e,type:"ggml-llm",info:r.info,initContext:async(e={})=>{const{onProgress:t}=e,n=await Zn(a,t);return{modelInfo:n.modelInfo?{...n.modelInfo}:null,runtime:{...a.plan.info.runtime},download:{...a.plan.info.download}}},completion:async(e={})=>{const{options:t={},useCache:n=!0}=e,r=Wn(a),o=a.contexts.get(r);if(!o)throw new Error(`Context "${r}" not initialized`);await o.ready;let i=t.prompt||"";if(!i&&t.messages){const e=await o.context.getFormattedChat(t.messages,t.chat_template||t.chatTemplate,{jinja:t.jinja,tools:t.tools,parallel_tool_calls:t.parallel_tool_calls,tool_choice:t.tool_choice,enable_thinking:t.enable_thinking,add_generation_prompt:t.add_generation_prompt,now:t.now,chat_template_kwargs:t.chat_template_kwargs});i=e?.prompt||e||""}if(n&&a.sessionCache.enabled&&i){const{options:e}=await a.sessionCache.prepareCompletionOptions(t,i),n=await a.sessionCache.generateTempStatePath(),r=await o.context.tokenize(i),s=r?.tokens?.length||0,l={...e,save_state_path:n,save_state_size:s};return console.log(`[SessionCache] save_state_size=${s} (prompt tokens)`),Qn(o.context,l,a.sessionCache,i,n,s)}return Yn(o.context,t)},tokenize:async(e={})=>{const{text:t="",params:n={}}=e,r=Wn(a),o=a.contexts.get(r);if(!o)throw new Error(`Context "${r}" not initialized`);await o.ready;const i=await o.context.tokenize(t,n);if(!i)return{tokens:[]};const s=Array.from(i.tokens??[]).map(e=>Number(e));return{...i,tokens:s}},detokenize:async(e={})=>{const{tokens:t=[]}=e,n=Wn(a),r=a.contexts.get(n);if(!r)throw new Error(`Context "${n}" not initialized`);await r.ready;const o=t.map(e=>Number(e));return r.context.detokenize(o)},applyChatTemplate:async(e={})=>{const{messages:t=[],template:n,params:r}=e,o=Wn(a),i=a.contexts.get(o);if(!i)throw new Error(`Context "${o}" not initialized`);return await i.ready,i.context.getFormattedChat(t,n,r)},releaseContext:async(e={})=>{const t=Wn(a),n=a.contexts.get(t);return!!n&&Xn(a,n,Boolean(e.force))},finalize:async()=>{const e=Array.from(a.contexts.values()).map(e=>Xn(a,e,!0));await Promise.allSettled(e),await a.sessionCache.cleanup()}}}const tr=e=>{const t=Bn(e);return t.model.repo_id||t.model.repository||t.model.model||null};const nr=e=>e?"number"==typeof e.score&&Number.isFinite(e.score)?Number(e.score):Dt(e):0;async function rr(e=null,t={}){const{threshold:n=1.1,includeBreakdown:r=!1,config:o,...s}=t;let l=null,c=null,u=null,d=null,p=null,m=null;if(o)try{const{modelBytes:e,kvCacheBytes:t,limitedKvCacheBytes:n,memoryLimitedCtx:r,kvInfo:a,quantization:i}=await async function(e){const t=Bn(e),n=await Jn(t),r=await Dn(n.url,n.headers,t.runtime.cache_dir),{arch:o,nCtxTrain:a,nLayer:i,nEmbd:s,nHead:l,nHeadKv:c,nEmbdHeadK:u,nEmbdHeadV:d,quantVersion:p,fileType:m}=ln(r),f=Number.isFinite(Number(i))?Number(i):0,h=Number.isFinite(Number(s))?Number(s):0,y=Number.isFinite(Number(l))?Number(l):0,g=Number.isFinite(Number(c))?Number(c):y,b=y>0&&h>0?h/y:128,v=Number.isFinite(Number(u))?Number(u):b,w=Number.isFinite(Number(d))?Number(d):b,_=sn({arch:o,metadata:r,nLayer:f}),x=_&&Number.isFinite(Number(_.kvLayers))?Number(_.kvLayers):f,S=Math.max(0,Math.floor(Number(x)||0)),k=(t.model.n_ctx?Number(t.model.n_ctx):null)||a||4096,C={k:t.model.cache_type_k,v:t.model.cache_type_v},E=n.size>0?n.size:0,B=cn({layerCount:S,headKvCount:g,embdHeadKCount:v,embdHeadVCount:w,cacheTypes:C,swaConfig:_,kvUnified:t.model.kv_unified,nParallel:t.model.n_parallel,swaFull:t.model.swa_full}),M=null!=t.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(t.backend.gpu_memory_fraction))):kn.backend.gpu_memory_fraction||1,$=null!=t.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(t.backend.cpu_memory_fraction))):Sn,T=B(k),N=await Vn(t,{modelBytes:E,kvCacheBytes:T}),O=(N.selected.totalMemory||0)*M,P=Math.max(0,Ot.totalmem()*$),I=N.selected.hasGpu?O:P,U=un({maxCtx:k,availableMemory:I,modelBytes:E,kvBytesForCtx:B}),A=B(k),q=B(U);return{kvInfo:{nCtxTrain:a,nLayer:f,nEmbd:h,nHeadKv:g,nEmbdHeadK:v,nEmbdHeadV:w,nHeadCount:y,nHeadKvCount:g,kvLayerCount:S,swa:_?.enabled?{window:_.window,pattern:_.pattern,denseFirst:_.denseFirst,type:_.type,layers:_.swaLayers}:null},modelBytes:E,kvCacheBytes:A,limitedKvCacheBytes:q,memoryLimitedCtx:U,quantization:{name:n.quantization||null,fileType:m,version:p}}}(o);l=e,c=t,u=n,d=r,p=a,m=i}catch(e){}const f=null!=o?.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.gpu_memory_fraction))):void 0,h=null!=o?.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.cpu_memory_fraction))):void 0,y=await Xt({...s,platform:process.platform,totalMemoryInBytes:Ot.totalmem(),backend:"ggml-llm",includeBreakdown:r,gpuMemoryFraction:f,cpuMemoryFraction:h,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:l,kvCacheBytes:c,limitedKvCacheBytes:u}),g=y.selected,b=nr(g);g.modelBytes=l||null,g.kvCacheBytes=c||null,g.memoryLimitedCtx=d||null,g.limitedKvCacheBytes=u||null,g.kvInfo=p||null,g.quantization=m||null;let v=null,w=null;if(e){const t=nr(e);w={...e,score:t};let r="buttress",o="buttress-higher-score";if(y.ok)if(t||0===t){const e=w.fit,a=w.limitedFit,i=g?.fit,s=g?.limitedFit,l=e?.fitsInGpu||e?.fitsInCpu||a?.fitsInGpu||a?.fitsInCpu,c=i?.fitsInGpu||i?.fitsInCpu||s?.fitsInGpu||s?.fitsInCpu;l&&!c?(r="local",o="client-fits-in-memory"):c&&!l?(r="buttress",o="buttress-fits-in-memory"):t>b*n?(r="local",o="client-better"):b>t*n?(r="buttress",o="buttress-better"):(r="either",o="comparable-scores")}else r="buttress",o="missing-client-score";else r="local",o="buttress-unavailable";v={buttressScore:b,clientScore:t,threshold:n,recommendation:r,reason:o}}y.ok||v||(v={buttressScore:b,clientScore:e?.score??null,threshold:n,recommendation:"local",reason:"buttress-unavailable"});let _=null;return o&&(_={repoId:o.model?.repo_id||null,quantization:o.model?.quantization||null,nCtx:o.model?.n_ctx||null,cacheKType:o.model?.cache_type_k||"f16",cacheVType:o.model?.cache_type_v||"f16"}),{type:"ggml-llm",timestamp:(new Date).toISOString(),buttress:y,client:w,comparison:v,modelConfig:_}}const{WritableStream:or}="undefined"!=typeof globalThis&&globalThis.ReadableStream&&globalThis.WritableStream?{ReadableStream:globalThis.ReadableStream,WritableStream:globalThis.WritableStream}:mn,ar=(e={},t={})=>(Object.entries(t||{}).forEach(([t,n])=>{n&&"object"==typeof n&&!Array.isArray(n)?(e[t]&&"object"==typeof e[t]||(e[t]={}),ar(e[t],n)):e[t]=n}),e),ir="https://huggingface.co",sr="https://huggingface.co/api",lr=Nt.join(Ot.homedir(),".buttress","models"),cr=["cuda","vulkan","default"],ur=["q8_0","q5_1","q5_0","q4_1","q4_0","base"],dr={backend:{type:"ggml-stt",variant:null,variant_preference:cr,gpu_memory_fraction:.85,cpu_memory_fraction:.5},model:{repo_id:"BricksDisplay/whisper-ggml",revision:"main",filename:null,url:null,quantization:null,preferred_quantizations:["q5_1","q8_0","base"],allow_local_file:!1,local_path:null,api_base:sr,base_url:ir,use_gpu:!0,use_flash_attn:"auto"},runtime:{cache_dir:lr,prefer_variants:[],huggingface_token:process.env.HUGGINGFACE_TOKEN||null,http_headers:{},max_threads:null}},pr=(e,t=[])=>e||0===e?Array.isArray(e)?e.filter(e=>null!=e):[e]:[...t],mr=e=>{if(!e)return null;const t=String(e).toLowerCase();return["cuda","vulkan","default"].includes(t)?t:null},fr=(e={})=>{const t=JSON.parse(JSON.stringify(dr));if(ar(t,e),t.backend.variant=mr(t.backend.variant),t.backend.variant_preference=Array.from(new Set(pr(t.backend.variant_preference||cr).map(mr).filter(Boolean))),0===t.backend.variant_preference.length&&(t.backend.variant_preference=[...cr]),t.runtime.prefer_variants=Array.from(new Set(pr(t.runtime.prefer_variants).map(mr).filter(Boolean))),t.model.preferred_quantizations=Array.from(new Set(pr(t.model.preferred_quantizations||t.model.quantizations).map(e=>e?String(e).toLowerCase():null).filter(Boolean))),t.model.quantization){const e=String(t.model.quantization).toLowerCase();t.model.preferred_quantizations.includes(e)||t.model.preferred_quantizations.unshift(e)}return t.model.base_url=t.model.base_url||ir,t.model.api_base=t.model.api_base||sr,t.runtime.cache_dir=t.runtime.cache_dir?Nt.resolve(t.runtime.cache_dir):lr,t},hr=e=>{const t=e.toLowerCase();return ur.find(e=>t.includes(e))||null},yr=async e=>{await(0,Pt.mkdir)(e,{recursive:!0})},gr=(e,t,n=lr)=>{const r=(0,It.createHash)("sha256").update(e).digest("hex");return Nt.join(((e=lr)=>Nt.join(e,".metadata-cache"))(n),t,`${r}.json`)},br=async(e,t,n,r=lr)=>{try{const o=gr(e,t,r);await yr(Nt.dirname(o)),await(0,Pt.writeFile)(o,JSON.stringify(n),"utf-8")}catch(e){}},vr=async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,{...t,method:"HEAD"});if(!n.ok)throw new Error(`Failed to fetch headers for ${e}: ${n.status} ${n.statusText}`);return n},wr=async(e,t)=>{try{const n=await(0,Pt.stat)(e);return!t||n.size===t}catch(e){return!1}},_r=async e=>{const t=e.model.repo_id||e.model.repository||e.model.model;if(!t)throw new Error("`model.repo_id` is required in Buttress backend config");const n=e.model.revision||"main",r=e.runtime.cache_dir,o=JSON.stringify({repoId:t,revision:n,filename:e.model.filename,url:e.model.url,quantization:e.model.quantization,preferred_quantizations:e.model.preferred_quantizations}),a=await(async(e,t,n=lr)=>{try{const r=gr(e,t,n),o=await(0,Pt.readFile)(r,"utf-8");return JSON.parse(o)}catch(e){return null}})(o,"artifact-info",r);if(a)return a;const i={...e.runtime.http_headers||{}};if(e.runtime.huggingface_token&&(i.Authorization=`Bearer ${e.runtime.huggingface_token}`),e.model.url){const a=await vr(e.model.url,{headers:i}),s=Number(a.headers.get("content-length"))||null,l=e.model.filename||e.model.url.split("/").pop(),c={repoId:t,revision:n,filename:l,url:e.model.url,size:s,quantization:hr(l||""),headers:i};return await br(o,"artifact-info",c,r),c}let{filename:s}=e.model,l=e.model.quantization&&String(e.model.quantization).toLowerCase();const c=await(async(e,t={})=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");const n=await fetch(e,t);if(!n.ok){const t=await n.text().catch(()=>"");throw new Error(`Failed to fetch ${e}: ${n.status} ${n.statusText} ${t}`.trim())}return n.json()})(`${e.model.api_base}/models/${t}?revision=${n}&blobs=true`,{headers:i}),u=(c?.siblings||c?.files||[]).map(e=>e.rfilename||e.path||e.filename).filter(e=>"string"==typeof e&&e.endsWith(".bin"));if(0===u.length)throw new Error(`No model artifacts found in repo ${t}`);const d=e.model.preferred_quantizations.length>0?e.model.preferred_quantizations:ur;if(s)l||(l=hr(s));else{const e=(()=>{const e=d.find(e=>u.find(t=>t.toLowerCase().includes(e)));if(e)return{filename:u.find(t=>t.toLowerCase().includes(e)),quantization:e};return null})()||{filename:u[0],quantization:null},{filename:t,quantization:n}=e;s=t,l=n||hr(s)}const p=`${e.model.base_url.replace(/\/+$/,"")}/${t}/resolve/${n}/${s}`,m=await vr(p,{headers:i}),f={repoId:t,revision:n,filename:s,url:p,size:Number(m.headers.get("content-length"))||null,quantization:l,headers:i,isSplit:!1,splitCount:0};return await br(o,"artifact-info",f,r),f},xr=async(e,{modelBytes:t=null,processingBytes:n=null}={})=>{const r=(e=>{const t=[];return e.backend.variant&&t.push(e.backend.variant),e.runtime.prefer_variants.length>0&&t.push(...e.runtime.prefer_variants),t.push(...e.backend.variant_preference),t.push("default"),Array.from(new Set(t.map(mr).filter(Boolean)))})(e),[o,...s]=r,l=null!=e.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.gpu_memory_fraction))):dr.backend.gpu_memory_fraction||1,c=null!=e.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(e.backend.cpu_memory_fraction))):.5,u=await Xt({platform:process.platform,totalMemoryInBytes:Ot.totalmem(),backend:"ggml-stt",variant:o||null,preferVariants:s,variantPreference:e.backend.variant_preference,gpuMemoryFraction:l,cpuMemoryFraction:c,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:t,kvCacheBytes:n}),d=e=>({...e,devices:Array.isArray(e.devices)?e.devices:[],ok:e.ok,hasGpu:Boolean(e.hasGpu),totalMemory:e.gpuTotalBytes||e.totalMemory||0,error:e.ok?null:new Error(e.error||`Variant ${e.variant} not available on this platform`)});if(!u.ok||!u.selected){const e=(u.attempts||[]).map(e=>`${e.variant}: ${e.error||"unknown error"}`).join("; ");throw new Error(`Unable to initialize any backend variant (${r.join(", ")}). Errors: ${e}`)}const p=(u.attempts||[]).map(d);return{selected:d(u.selected),attempts:p}},Sr=async e=>{const t=await _r(e),n=nn({modelBytes:t.size>0?t.size:0}),r=await xr(e,{modelBytes:n.modelBytes,processingBytes:n.processingBufferBytes});let o=r.selected.hasGpu&&(void 0===r.selected.fit?.fitsInGpu||r.selected.fit.fitsInGpu);!1===e.model.use_gpu&&(o=!1);const a=e.model.use_flash_attn&&String(e.model.use_flash_attn).toLowerCase();let i;i="on"===a||"true"===a||"off"!==a&&"false"!==a&&o;const s=e.runtime.cache_dir,l=((e,t)=>{if(e.model.local_path)return Nt.resolve(e.model.local_path);const n=t.repoId.split("/"),r=Nt.join(e.runtime.cache_dir,...n,t.revision);return Nt.join(r,t.filename)})(e,t),c=await wr(l,t.size);return{config:e,info:{ok:!0,backend:"ggml-stt",model:{repoId:t.repoId,revision:t.revision,filename:t.filename,quantization:t.quantization,url:t.url,sizeBytes:t.size},runtime:{variant:r.selected.variant,use_gpu:o,use_flash_attn:i,max_threads:e.runtime.max_threads?Number(e.runtime.max_threads):null},resources:{...n,gpuCapacityBytes:r.selected.gpuTotalBytes,gpuUsableBytes:r.selected.gpuUsableBytes,cpuUsableBytes:r.selected.cpuUsableBytes,fit:r.selected.fit},devices:{selected:r.selected,attempts:r.attempts},download:{cacheDir:s,localPath:l,exists:c},timestamp:(new Date).toISOString()},artifact:t,memory:n,devices:r,localPath:l,localExists:c}},kr=async(e,t,n)=>{const{localPath:r,artifact:o,config:a}=e;if(e.localExists)return"function"==typeof n&&n(1),r;const i=t.get(r);if(i)return await i,"function"==typeof n&&n(1),r;const s=(async()=>{if(a.model.allow_local_file){if(!await wr(r,o.size))throw new Error(`Local model file not found: ${r}`);return r}return await(async(e,t,n,r,o)=>{if("function"!=typeof fetch)throw new Error("Global fetch is not available in this runtime");await yr(Nt.dirname(n));const a=await fetch(e,{headers:t});if(!a.ok||!a.body)throw new Error(`Failed to download ${e}: ${a.status} ${a.statusText}`);const i=await(0,Pt.open)(n,"w"),s=Number(a.headers.get("content-length"))||r||0;let l=0,c=.05;try{await a.body.pipeTo(new or({async write(e){if(await i.write(e),l+=e.byteLength,"function"==typeof o&&s>0){const e=Math.min(1,l/s);for(;e>=c;)o(c),c+=.05}},async close(){await i.close(),"function"==typeof o&&o(1)},async abort(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}}))}catch(e){throw await i.close().catch(()=>{}),await(0,Pt.unlink)(n).catch(()=>{}),e}if(r){const e=await(0,Pt.stat)(n);if(e.size!==r)throw await(0,Pt.unlink)(n).catch(()=>{}),new Error(`Downloaded file size mismatch, expected ${r} got ${e.size}`)}})(o.url,o.headers,r,o.size,n),r})();t.set(r,s);try{return await s,r}finally{t.delete(r)}};class Cr{constructor(){this.queue=[],this.processing=!1}async enqueue(e){return new Promise((t,n)=>{this.queue.push({task:e,resolve:t,reject:n}),this.processNext()})}async processNext(){if(this.processing||0===this.queue.length)return;this.processing=!0;const{task:e,resolve:t,reject:n}=this.queue.shift();try{t(await e())}catch(e){n(e)}finally{this.processing=!1,this.processNext()}}}const Er=e=>{if(!e)return null;if(e instanceof ArrayBuffer)return e;if(ArrayBuffer.isView(e))return e.buffer;if("string"==typeof e){const t=e.startsWith("data:")?e.split(",")[1]||"":e,n=Buffer.from(t,"base64");return n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)}throw new Error("Unsupported audioData format, expected base64 string or ArrayBuffer")},Br=async(e,t)=>{if(e.contextRecord)return e.contextRecord.refCount+=1,await e.contextRecord.ready,"function"==typeof t&&t(1),e.contextRecord;const n={refCount:1};n.ready=(async()=>{const r=await kr(e.plan,e.downloads,t),o=await l({filePath:r,useFlashAttn:e.plan.info.runtime.use_flash_attn,useGpu:e.plan.info.runtime.use_gpu},e.plan.info.runtime.variant);n.context=o;try{n.modelInfo=await o.getModelInfo()}catch(e){n.modelInfo=null}return n})(),e.contextRecord=n;try{return await n.ready,"function"==typeof t&&t(1),n}catch(t){throw e.contextRecord=null,t}},Mr=async(e,t,n=!1)=>{if(n)t.refCount=0;else if(t.refCount=Math.max(0,t.refCount-1),t.refCount>0)return!1;return e.contextRecord=null,await(t.context?.release?.()),!0};async function $r(e,t){const n=await Sr(fr(t)),r={id:e,type:"ggml-stt",config:t,plan:n,info:n.info,contextRecord:null,downloads:new Map,queue:new Cr},o=async(e={})=>{const{audioPath:t,audioData:n,options:o={}}=e,a=await Br(r),i={...o};return r.plan.info.runtime.max_threads&&null==i.maxThreads&&(i.maxThreads=r.plan.info.runtime.max_threads),r.queue.enqueue(async()=>{if(await a.ready,n){const e=Er(n),{promise:t}=a.context.transcribeData(e,i);return await t}if(!t)throw new Error("audioPath or audioData is required for transcription");const e=Nt.resolve(t),{promise:r}=a.context.transcribe(e,i);return await r})};return{id:e,type:"ggml-stt",info:n.info,initContext:async(e={})=>{const{onProgress:t}=e,n=await Br(r,t);return{modelInfo:n.modelInfo?{...n.modelInfo}:null,runtime:{...r.plan.info.runtime},download:{...r.plan.info.download}}},transcribe:async(e={})=>o(e),transcribeData:async(e={})=>o(e),releaseContext:async(e={})=>{const t=r.contextRecord;return!!t&&Mr(r,t,Boolean(e.force))},finalize:async()=>{r.contextRecord&&await Mr(r,r.contextRecord,!0)}}}const Tr=e=>{const t=fr(e);return t.model.repo_id||t.model.repository||t.model.model||null},Nr=e=>e?"number"==typeof e.score&&Number.isFinite(e.score)?Number(e.score):Dt(e):0;async function Or(e,t=null,n={}){if("ggml-llm"===e)return rr(t,n);if("ggml-stt"===e)return async function(e=null,t={}){const{threshold:n=1.1,includeBreakdown:r=!1,config:o,...s}=t;let l=null,c=null,u=null;if(o)try{const e=fr(o),t=await _r(e);l=t.size??null,({processingBufferBytes:c}=nn({modelBytes:l})),u=t.quantization||null}catch(e){}const d=null!=o?.backend?.gpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.gpu_memory_fraction))):void 0,p=null!=o?.backend?.cpu_memory_fraction?Math.min(1,Math.max(0,Number(o.backend.cpu_memory_fraction))):void 0,m=await Xt({...s,platform:process.platform,totalMemoryInBytes:Ot.totalmem(),backend:"ggml-stt",includeBreakdown:r,gpuMemoryFraction:d,cpuMemoryFraction:p,dependencies:{getBackendDevicesInfo:a,isLibVariantAvailable:i},modelBytes:l,kvCacheBytes:c}),f=m.selected,h=Nr(f);f&&(f.modelBytes=l||null,f.processingBytes=c||null,f.quantization=u||null);let y=null,g=null;if(e){const t=Nr(e);g={...e,score:t};let r="buttress",o="buttress-higher-score";if(m.ok)if(t||0===t)if(e.fit&&f?.fit){const a=e.fit.fitsInGpu||e.fit.fitsInCpu,i=f.fit.fitsInGpu||f.fit.fitsInCpu;a&&!i?(r="local",o="client-fits-in-memory"):i&&!a?(r="buttress",o="buttress-fits-in-memory"):t>h*n?(r="local",o="client-better"):h>t*n?(r="buttress",o="buttress-better"):(r="either",o="comparable-scores")}else t>h*n?(r="local",o="client-better"):h>t*n?(r="buttress",o="buttress-better"):(r="either",o="comparable-scores");else r="buttress",o="missing-client-score";else r="local",o="buttress-unavailable";y={buttressScore:h,clientScore:t,threshold:n,recommendation:r,reason:o}}m.ok||y||(y={buttressScore:h,clientScore:e?.score??null,threshold:n,recommendation:"local",reason:"buttress-unavailable"});let b=null;return o&&(b={repoId:o.model?.repo_id||null,quantization:o.model?.quantization||null,filename:o.model?.filename||null}),{type:"ggml-stt",timestamp:(new Date).toISOString(),buttress:m,client:g,comparison:y,modelConfig:b}}(t,n);throw new Error(`Unknown backend type: ${e}`)}const Pr=n("node:fs"),Ir=n("node:child_process"),Ur=JSON.parse('{"UU":"@fugood/buttress-backend-core","rE":"2.23.0-beta.28"}'),Ar=e=>{if(!e)return{repoId:null,filename:null};const[t,n]=e.split(":");return{repoId:t,filename:n||null}};async function qr({modelIds:e=[],defaultConfig:t=null}={}){const n=[];console.log(`${Ur.UU} v${Ur.rE}`),console.log("Generating model capabilities comparison...\n"),n.push(`${Ur.UU} v${Ur.rE}`),n.push("## Model Capabilities Comparison\n"),e&&0!==e.length||(console.error("Error: No model IDs provided"),process.exit(1));try{const r=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=r(n[e]||{},t):n[e]=t}),n},o=t||{},{server:a,generators:i=[],...s}=o,l=e=>r(JSON.parse(JSON.stringify(s)),e||{}),u=e=>{if(Array.isArray(i)&&i.length>0){const t=i.filter(e=>"ggml-llm"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return l(n)}}return Object.keys(s).length>0?l({}):null},d=[];for(let t=0;t<e.length;t+=1){const n=e[t];console.log(`[${t+1}/${e.length}] Analyzing ${n}...`);let r=u(n);r={...r||{},model:{...s.runtime,...r?.model||{},repo_id:n}};const o=await Or("ggml-llm",null,{config:r,includeBreakdown:!0});d.push({modelId:n,capabilities:o,modelInfo:o.buttress?.selected||null,modelConfig:o.modelConfig||null})}const p=e=>e?(e/1024/1024/1024).toFixed(2):"N/A",m=e=>e?"✅":"🚫";n.push("| Model ID | Quantization | Size (GB) | Context Size | KV Cache Size (GB) | Total Required Memory (GB) | Fits GPU (Full) | Fits CPU (Full) |"),n.push("|----------|--------------|-----------|--------------|--------------------|-----------------------------|-----------------|-----------------|"),d.forEach(({modelId:e,modelInfo:t,modelConfig:r})=>{const o=t?.quantization?.name?.toUpperCase()||"N/A",a=p(t?.modelBytes),i=r?.nCtx||t?.kvInfo?.nCtxTrain||"N/A",s=cn(t),l=Number(i),c=t?.kvCacheBytes||(s&&Number.isFinite(l)&&l>0?s(l):s&&s(t?.kvInfo?.nCtxTrain||0))||null,u=p(c),d=p(t?.modelBytes&&c?t.modelBytes+c:t?.fit?.totalRequiredBytes),f=m(t?.fit?.fitsInGpu),h=m(t?.fit?.fitsInCpu);n.push(`| ${e} | ${o} | ${a} | ${i} | ${u} | ${d} | ${f} | ${h} |`);if((null!=t?.memoryLimitedCtx||null!=t?.limitedFit)&&(!t?.fit?.fitsInGpu||!t?.fit?.fitsInCpu)){const e=t?.memoryLimitedCtx||i,r=Number(e),o=t?.limitedKvCacheBytes||s&&Number.isFinite(r)&&r>0&&s(r)||null,l=p(o),c=p(t?.modelBytes&&o?t.modelBytes+o:t?.limitedFit?.totalRequiredBytes),f=m(t?.limitedFit?.fitsInGpu),h=m(t?.limitedFit?.fitsInCpu);(e!==i||l!==u||c!==d)&&n.push(`| ↳ Limited | - | ${a} | ${e} | ${l} | ${c} | ${f} | ${h} |`)}}),n.push("\n---"),n.push("\n### System Information");let f=null;if("win32"!==process.platform)try{f=(0,Ir.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}if(f?n.push(`- **System:** ${f}`):(n.push(`- **Hostname:** ${Ot.hostname()}`),n.push(`- **OS:** ${Ot.type()} ${Ot.release()}`)),n.push(`- **Platform:** ${process.platform}`),n.push(`- **CPU Cores:** ${Ot.cpus().length}`),n.push(`- **Total System Memory:** ${(Ot.totalmem()/1024/1024/1024).toFixed(2)} GB`),d.length>0){const e=d[0].capabilities,t=e.buttress?.selected;if(t){const e=t.cpuTotalBytes>0?(t.cpuUsableBytes/t.cpuTotalBytes*100).toFixed(0):0;if(n.push(`- **Usable CPU Memory:** ${(t.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${e}% of ${(t.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.hasGpu){const e=t.devices.filter(e=>"gpu"===e.type);if(e.length>0){const r=e[0];n.push(`- **GPU Backend:** ${r.backend}`),n.push(`- **GPU Name:** ${r.deviceName}`),n.push(`- **GPU Total Memory:** ${(r.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const o=t.gpuTotalBytes>0?(t.gpuUsableBytes/t.gpuTotalBytes*100).toFixed(0):0;n.push(`- **GPU Usable Memory:** ${(t.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${o}% of ${(t.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`)}}else n.push("- **GPU:** Not available")}}n.push("\n### Command Used");const h=process.argv.slice(2).join(" ");if(n.push(`\`\`\`bash\n${process.argv[0]} ${process.argv[1]} ${h}\n\`\`\``),n.push("\n### Package Information"),n.push(`- **Name:** ${Ur.UU}`),n.push(`- **Version:** ${Ur.rE}`),Ur.description&&n.push(`- **Description:** ${Ur.description}`),t&&Object.keys(t).length>0){n.push("\n### Configuration"),n.push("<details>"),n.push("<summary>Click to expand TOML configuration</summary>"),n.push("\n```toml");try{const e=c.stringify(t);n.push(e)}catch(e){n.push("# Error serializing config"),n.push(JSON.stringify(t,null,2))}n.push("```"),n.push("</details>")}const y=`ggml-llm-model-capabilities-${(new Date).toISOString().replace(/[.:]/g,"-").split("T")[0]}.md`,g=Nt.join(process.cwd(),y);Pr.writeFileSync(g,n.join("\n"),"utf8"),console.log(`\nModel capabilities table saved to: ${g}`),process.exit(0)}catch(e){console.error("Failed to generate model table:",e.message),process.exit(1)}}async function Fr({modelId:e=null,defaultConfig:t=null}={}){console.log(`${Ur.UU} v${Ur.rE}`),console.log("Testing capabilities for backend: ggml-llm"),e&&console.log(`Model: ${e}`),console.log("--------------------------------");try{const n=t||{},{server:r,generators:o=[],...a}=n,i=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=i(n[e]||{},t):n[e]=t}),n},s=e=>i(JSON.parse(JSON.stringify(a)),e||{});let l=(e=>{if(Array.isArray(o)&&o.length>0){const t=o.filter(e=>"ggml-llm"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return s(n)}}return Object.keys(a).length>0?s({}):null})(e);e&&(l={...l||{},model:{...l?.model||{},repo_id:e}});const c=await Or("ggml-llm",null,{config:l,includeBreakdown:!0}),u=c.buttress?.selected||null,d=c.modelConfig||null;if(e||d?.repoId){console.log("\n=== Model Information ===");const t=e||d?.repoId;console.log(`Repository ID: ${t}`),d?.quantization&&console.log(`Quantization: ${d.quantization}`),d?.nCtx&&console.log(`Context Length: ${d.nCtx}`),u?.quantization?.name&&console.log(`Model Quantization: ${u.quantization.name.toUpperCase()}`);const n=d?.cache_type_k||"f16",r=d?.cache_type_v||"f16";if(console.log(`KV Cache Type: K=${n}, V=${r}`),u?.modelBytes&&u?.kvCacheBytes){if(console.log(`Model Size: ${(u.modelBytes/1024/1024/1024).toFixed(2)} GB`),u.kvInfo?console.log(`KV Cache Size: ${(u.kvCacheBytes/1024/1024/1024).toFixed(2)} GB (KV info: ${JSON.stringify(u.kvInfo)})`):console.log(`KV Cache Size: ${(u.kvCacheBytes/1024/1024/1024).toFixed(2)} GB`),console.log(`Total Required Memory: ${((u.modelBytes+u.kvCacheBytes)/1024/1024/1024).toFixed(2)} GB`),null!=u.memoryLimitedCtx){const e=u.memoryLimitedCtx,t=u.kvInfo?.nCtxTrain;t?console.log(`\nMemory-Limited Context: ${e} (Train: ${t})`):console.log(`\nMemory-Limited Context: ${e}`),null!=u.limitedKvCacheBytes&&console.log(`Limited KV Cache Size: ${(u.limitedKvCacheBytes/1024/1024/1024).toFixed(2)} GB`)}}else if(c.buttress?.selected?.fit){const{totalRequiredBytes:e}=c.buttress.selected.fit;console.log(`Total Required Memory: ${(e/1024/1024/1024).toFixed(2)} GB`)}}if(c.buttress?.selected){const{selected:e}=c.buttress;console.log("\n=== Hardware Information ===");let t=null;if("win32"!==process.platform)try{t=(0,Ir.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}t?console.log(`System: ${t}`):(console.log(`Hostname: ${Ot.hostname()}`),console.log(`OS: ${Ot.type()} ${Ot.release()}`)),console.log(`Platform: ${e.platform}`),console.log(`CPU Cores: ${Ot.cpus().length}`),console.log(`Total System Memory: ${(Ot.totalmem()/1024/1024/1024).toFixed(2)} GB`);const n=e.cpuTotalBytes>0?(e.cpuUsableBytes/e.cpuTotalBytes*100).toFixed(0):0;if(console.log(`Usable CPU Memory: ${(e.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),e.hasGpu){console.log("\n--- GPU Details ---");e.devices.filter(e=>"gpu"===e.type).forEach(t=>{console.log(`GPU Backend: ${t.backend}`),console.log(`GPU Name: ${t.deviceName}`),console.log(`GPU Total Memory: ${(t.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const n=e.gpuTotalBytes>0?(e.gpuUsableBytes/e.gpuTotalBytes*100).toFixed(0):0;console.log(`GPU Usable Memory: ${(e.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.metadata&&(t.metadata.hasBFloat16&&console.log("Supports BFloat16: Yes"),t.metadata.hasUnifiedMemory&&console.log("Unified Memory: Yes"))})}else console.log("GPU: Not available");console.log(`\nBackend Variant: ${e.variant}`),console.log(`Performance Score: ${e.score}`),e.fit&&(console.log("\n--- Model Fit Analysis ---"),console.log("Fits in GPU: "+(e.fit.fitsInGpu?"Yes":"No")),console.log("Fits in CPU: "+(e.fit.fitsInCpu?"Yes":"No")),console.log(`Limiting Factor: ${e.fit.limiting}`),e.limitedFit&&(console.log("\n--- Memory-Limited Fit Analysis ---"),console.log(`Limited Total Required: ${(e.limitedFit.totalRequiredBytes/1024/1024/1024).toFixed(2)} GB`),console.log("Fits in GPU (Limited): "+(e.limitedFit.fitsInGpu?"Yes":"No")),console.log("Fits in CPU (Limited): "+(e.limitedFit.fitsInCpu?"Yes":"No")),console.log(`Limiting Factor (Limited): ${e.limitedFit.limiting}`)))}console.log("\n=== Full Capabilities JSON ==="),console.log(JSON.stringify(c,null,2)),process.exit(0)}catch(e){console.error("Failed to get capabilities:",e.message),process.exit(1)}}async function jr({modelIds:e=[],defaultConfig:t=null}={}){const n=[];console.log(`${Ur.UU} v${Ur.rE}`),console.log("Generating STT model capabilities comparison...\n"),n.push(`${Ur.UU} v${Ur.rE}`),n.push("## STT Model Capabilities Comparison\n"),e&&0!==e.length||(console.error("Error: No model IDs provided"),process.exit(1));try{const r=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=r(n[e]||{},t):n[e]=t}),n},o=t||{},{server:a,generators:i=[],...s}=o,l=e=>r(JSON.parse(JSON.stringify(s)),e||{}),u=e=>{if(Array.isArray(i)&&i.length>0){const t=i.filter(e=>"ggml-stt"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return l(n)}}return Object.keys(s).length>0?l({}):null},d=[];for(let t=0;t<e.length;t+=1){const n=e[t],{repoId:r,filename:o}=Ar(n);console.log(`[${t+1}/${e.length}] Analyzing ${n}...`);let a=u(r);a={...a||{},model:{...a?.model||{},repo_id:r,...o&&{filename:o}}};const i=await Or("ggml-stt",null,{config:a,includeBreakdown:!0});d.push({modelId:n,repoId:r,filename:o,capabilities:i,modelInfo:i.buttress?.selected||null,modelConfig:i.modelConfig||null})}const p=e=>e?(e/1024/1024).toFixed(1):"N/A",m=e=>e?"✅":"🚫";n.push("| Model | Size (MB) | Processing Buffer (MB) | Total Required (MB) | Fits GPU | Fits CPU |"),n.push("|-------|-----------|------------------------|---------------------|----------|----------|"),d.forEach(({modelId:e,modelInfo:t})=>{const r=p(t?.modelBytes),o=p(t?.processingBytes||t?.kvCacheBytes),a=p(t?.fit?.totalRequiredBytes),i=m(t?.fit?.fitsInGpu),s=m(t?.fit?.fitsInCpu);n.push(`| ${e} | ${r} | ${o} | ${a} | ${i} | ${s} |`)}),n.push("\n---"),n.push("\n### System Information");let f=null;if("win32"!==process.platform)try{f=(0,Ir.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}if(f?n.push(`- **System:** ${f}`):(n.push(`- **Hostname:** ${Ot.hostname()}`),n.push(`- **OS:** ${Ot.type()} ${Ot.release()}`)),n.push(`- **Platform:** ${process.platform}`),n.push(`- **CPU Cores:** ${Ot.cpus().length}`),n.push(`- **Total System Memory:** ${(Ot.totalmem()/1024/1024/1024).toFixed(2)} GB`),d.length>0){const e=d[0].capabilities,t=e.buttress?.selected;if(t){const e=t.cpuTotalBytes>0?(t.cpuUsableBytes/t.cpuTotalBytes*100).toFixed(0):0;if(n.push(`- **Usable CPU Memory:** ${(t.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${e}% of ${(t.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.hasGpu){const e=t.devices.filter(e=>"gpu"===e.type);if(e.length>0){const r=e[0];n.push(`- **GPU Backend:** ${r.backend}`),n.push(`- **GPU Name:** ${r.deviceName}`),n.push(`- **GPU Total Memory:** ${(r.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const o=t.gpuTotalBytes>0?(t.gpuUsableBytes/t.gpuTotalBytes*100).toFixed(0):0;n.push(`- **GPU Usable Memory:** ${(t.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${o}% of ${(t.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`)}}else n.push("- **GPU:** Not available")}}n.push("\n### Command Used");const h=process.argv.slice(2).join(" ");if(n.push(`\`\`\`bash\n${process.argv[0]} ${process.argv[1]} ${h}\n\`\`\``),n.push("\n### Package Information"),n.push(`- **Name:** ${Ur.UU}`),n.push(`- **Version:** ${Ur.rE}`),Ur.description&&n.push(`- **Description:** ${Ur.description}`),t&&Object.keys(t).length>0){n.push("\n### Configuration"),n.push("<details>"),n.push("<summary>Click to expand TOML configuration</summary>"),n.push("\n```toml");try{const e=c.stringify(t);n.push(e)}catch(e){n.push("# Error serializing config"),n.push(JSON.stringify(t,null,2))}n.push("```"),n.push("</details>")}const y=`ggml-stt-model-capabilities-${(new Date).toISOString().replace(/[.:]/g,"-").split("T")[0]}.md`,g=Nt.join(process.cwd(),y);Pr.writeFileSync(g,n.join("\n"),"utf8"),console.log(`\nSTT model capabilities table saved to: ${g}`),process.exit(0)}catch(e){console.error("Failed to generate STT model table:",e.message),process.exit(1)}}async function zr({modelId:e=null,defaultConfig:t=null}={}){console.log(`${Ur.UU} v${Ur.rE}`),console.log("Testing capabilities for backend: ggml-stt"),e&&console.log(`Model: ${e}`),console.log("--------------------------------");try{const{repoId:n,filename:r}=Ar(e),o=t||{},{server:a,generators:i=[],...s}=o,l=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=l(n[e]||{},t):n[e]=t}),n},c=e=>l(JSON.parse(JSON.stringify(s)),e||{});let u=(e=>{if(Array.isArray(i)&&i.length>0){const t=i.filter(e=>"ggml-stt"===e?.type);if(t.length>0&&e){const n=t.find(t=>t.model?.repo_id===e);if(n)return c(n)}}return Object.keys(s).length>0?c({}):null})(n);n&&(u={...u||{},model:{...s.runtime,...u?.model||{},repo_id:n,...r&&{filename:r}}});const d=await Or("ggml-stt",null,{config:u,includeBreakdown:!0}),p=d.buttress?.selected||null,m=d.modelConfig||null;if(n||m?.repoId){console.log("\n=== Model Information ===");const e=n||m?.repoId;console.log(`Repository ID: ${e}`),r&&console.log(`Filename: ${r}`),p?.modelBytes&&console.log(`Model Size: ${(p.modelBytes/1024/1024).toFixed(1)} MB`);const t=p?.processingBytes||p?.kvCacheBytes;if(t&&console.log(`Processing Buffer: ${(t/1024/1024).toFixed(1)} MB`),p?.modelBytes&&t)console.log(`Total Required Memory: ${((p.modelBytes+t)/1024/1024).toFixed(1)} MB`);else if(d.buttress?.selected?.fit){const{totalRequiredBytes:e}=d.buttress.selected.fit;console.log(`Total Required Memory: ${(e/1024/1024).toFixed(1)} MB`)}}if(d.buttress?.selected){const{selected:e}=d.buttress;console.log("\n=== Hardware Information ===");let t=null;if("win32"!==process.platform)try{t=(0,Ir.execSync)("uname -a",{encoding:"utf8"}).trim()}catch{}t?console.log(`System: ${t}`):(console.log(`Hostname: ${Ot.hostname()}`),console.log(`OS: ${Ot.type()} ${Ot.release()}`)),console.log(`Platform: ${e.platform}`),console.log(`CPU Cores: ${Ot.cpus().length}`),console.log(`Total System Memory: ${(Ot.totalmem()/1024/1024/1024).toFixed(2)} GB`);const n=e.cpuTotalBytes>0?(e.cpuUsableBytes/e.cpuTotalBytes*100).toFixed(0):0;if(console.log(`Usable CPU Memory: ${(e.cpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.cpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),e.hasGpu){console.log("\n--- GPU Details ---");e.devices.filter(e=>"gpu"===e.type).forEach(t=>{console.log(`GPU Backend: ${t.backend}`),console.log(`GPU Name: ${t.deviceName}`),console.log(`GPU Total Memory: ${(t.maxMemorySize/1024/1024/1024).toFixed(2)} GB`);const n=e.gpuTotalBytes>0?(e.gpuUsableBytes/e.gpuTotalBytes*100).toFixed(0):0;console.log(`GPU Usable Memory: ${(e.gpuUsableBytes/1024/1024/1024).toFixed(2)} GB (${n}% of ${(e.gpuTotalBytes/1024/1024/1024).toFixed(2)} GB)`),t.metadata&&(t.metadata.hasBFloat16&&console.log("Supports BFloat16: Yes"),t.metadata.hasUnifiedMemory&&console.log("Unified Memory: Yes"))})}else console.log("GPU: Not available");console.log(`\nBackend Variant: ${e.variant}`),console.log(`Performance Score: ${e.score}`),e.fit&&(console.log("\n--- Model Fit Analysis ---"),console.log("Fits in GPU: "+(e.fit.fitsInGpu?"Yes":"No")),console.log("Fits in CPU: "+(e.fit.fitsInCpu?"Yes":"No")),console.log(`Limiting Factor: ${e.fit.limiting}`))}console.log("\n=== Full Capabilities JSON ==="),console.log(JSON.stringify(d,null,2)),process.exit(0)}catch(e){console.error("Failed to get capabilities:",e.message),process.exit(1)}}const Rr=new Map,Dr=(e,t)=>{const n=(e=>{const t=Rr.get(e);if(!t)throw new Error(`Unknown generator id "${e}"`);return t})(e);if(n.type!==t)throw new Error(`Generator "${e}" does not support ${t} backend`);return n.instance};async function Lr(e,t){const n={"ggml-llm":{create:er,getId:tr},"ggml-stt":{create:$r,getId:Tr}}[e];if(!n)throw new Error(`Unsupported backend type: ${e}`);const r=n.getId(t);if(!r)throw new Error("Buttress generator config missing repo identifier");const o=`${e}:${r}`,a=Rr.get(o);if(a)return a.refCount+=1,{id:a.id,info:a.instance.info};const i=await n.create(o,t),s={id:o,type:i.type,instance:i,refCount:1};return Rr.set(o,s),{id:o,info:i.info}}async function Gr(e){const t=Rr.get(e);return!!t&&(t.refCount-=1,t.refCount<=0&&(await t.instance.finalize(),Rr.delete(e)),!0)}const Jr={initContext:async(e,t)=>Dr(e,"ggml-llm").initContext(t),completion:async(e,t)=>Dr(e,"ggml-llm").completion(t),tokenize:async(e,t)=>Dr(e,"ggml-llm").tokenize(t),detokenize:async(e,t)=>Dr(e,"ggml-llm").detokenize(t),applyChatTemplate:async(e,t)=>Dr(e,"ggml-llm").applyChatTemplate(t),releaseContext:async(e,t)=>Dr(e,"ggml-llm").releaseContext(t)},Vr={initContext:async(e,t)=>Dr(e,"ggml-stt").initContext(t),transcribe:async(e,t)=>Dr(e,"ggml-stt").transcribe(t),transcribeData:async(e,t)=>Dr(e,"ggml-stt").transcribeData(t),releaseContext:async(e,t)=>Dr(e,"ggml-stt").releaseContext(t)};function Hr(e,t){return"ggml-llm"===e?tr(t):"ggml-stt"===e?Tr(t):null}const{version:Kr,name:Yr}={version:"2.23.0-beta.28",name:"@fugood/buttress-server-poc"},Qr=async()=>{const e=`https://registry.npmjs.org/${Yr}/latest`;try{const t=new AbortController,n=setTimeout(()=>t.abort(),3e3),r=await fetch(e,{headers:{Accept:"application/json"},signal:t.signal});if(clearTimeout(n),!r.ok)return null;return(await r.json()).version||null}catch{return null}},Wr=(e,t)=>{if(!t)return!1;const n=e.split(/[.-]/),r=t.split(/[.-]/);for(let e=0;e<Math.max(n.length,r.length);e+=1){const t=parseInt(n[e])||0,o=parseInt(r[e])||0;if(o>t)return!0;if(o<t)return!1}return!1},Zr=async()=>{try{const e=await Qr();e&&Wr(Kr,e)&&(e=>{console.log(""),console.log("[33mâ•─────────────────────────────────────────────────╮[0m"),console.log("[33m│[0m Update available! [2m%s[0m → [32m%s[0m",Kr.padEnd(12),e.padEnd(12),"[33m│[0m"),console.log("[33m│[0m [33m│[0m"),console.log("[33m│[0m Run to upgrade: [33m│[0m"),console.log("[33m│[0m [36mnpm install -g %s[0m [33m│[0m",Yr.padEnd(27)),console.log("[33m╰─────────────────────────────────────────────────╯[0m"),console.log("")})(e)}catch(e){}},Xr=new TextDecoder,eo=e.context().create(),to=r.record(r.any()).optional(),no=r.object({id:r.string()}),ro=r.object({id:r.string(),property:r.any().optional()}),oo=new Map,ao=r.object({type:r.string(),config:to}),io=r.object({type:r.string().optional().default("ggml-llm"),config:to,currentClientCapabilities:r.record(r.any()).optional(),options:r.record(r.any()).optional()}).optional(),so=(e={},t={})=>{const n=Array.isArray(e)?[...e]:{...e};return Object.entries(t||{}).forEach(([e,t])=>{t&&"object"==typeof t&&!Array.isArray(t)?n[e]=so(n[e]||{},t):n[e]=t}),n},lo=e=>e&&"object"==typeof e?JSON.parse(JSON.stringify(e)):null,co=(e,t)=>{const n=lo(e)||{},r=lo(t)||{};return so(n,r)},uo=(e=h,{defaultConfig:t}={})=>{const n=lo(t)||{},o=Array.isArray(n.generators)?n.generators:[],{server:a,generators:i,...s}=n,l=e=>so(JSON.parse(JSON.stringify(s)),e||{}),c=(e,t)=>{if(o.length>0){const n=o.filter(t=>t?.type===e);if(n.length>0&&t){const e=n.find(e=>e.model?.repo_id===t);if(e)return l(e)}}return Object.keys(s).length>0?l({}):null};return eo.router({getCapabilities:eo.procedure.input(io).query(async({input:t})=>{console.log("[Server] Get Capabilities:",t);const n=t||{type:"ggml-llm"},{type:r="ggml-llm",config:o,currentClientCapabilities:a=null,options:i={}}=n,s=lo(o),l=e.getModelIdentifier(r,s),u=c(r,l),d=co(u,o);if(0===Object.keys(d).length)throw new Error("Buttress server missing generator configuration");return d.backend=d.backend||{},d.backend.type||(d.backend.type=r),e.getCapabilities(r,a,{...i,config:d})}),startGenerator:eo.procedure.input(ao).mutation(async({input:t})=>{console.log("[Server] Start Generator:",t);const{type:n,config:r}=t,o=lo(r),a=e.getModelIdentifier(n,o),i=c(n,a),s=co(i,r);if(0===Object.keys(s).length)throw new Error("Buttress server missing generator configuration");return s.backend=s.backend||{},s.backend.type||(s.backend.type=n),e.startGenerator(n,s)}),finalizeGenerator:eo.procedure.input(no).mutation(async({input:t})=>(console.log("[Server] Finalize Generator:",t),e.finalizeGenerator(t.id))),ggmlLlm:eo.router({initContext:eo.procedure.input(ro).subscription(({input:t})=>Z(n=>{console.log("[Server] Init Context:",t);let r=!0;return(async()=>{try{const o={...t.property,onProgress:e=>{r&&n.next({progress:e})}};await new Promise(e=>setTimeout(e));const a=await e.ggmlLlm.initContext(t.id,o);if(r){const{download:e,...t}=a||{};n.next({result:t}),n.complete()}}catch(e){r&&n.error(e)}})(),()=>{r=!1}})),createCompletion:eo.procedure.input(ro).mutation(async({input:t})=>{console.log("[Server] createCompletion:",t);const n=`completion-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;try{const r=await e.ggmlLlm.completion(t.id,t.property);if(!r)throw new Error("Failed to create completion stream");return oo.set(n,{stream:r,cancel:null,generatorId:t.id}),{completionId:n}}catch(e){throw console.error("[Server] createCompletion error:",e),e}}),completion:eo.procedure.input(ro).subscription(({input:e})=>Z(t=>{const n=e.property;console.log("[Server] completion subscription:",n);const r=oo.get(n);if(!r)return t.error(new Error(`Unknown completion ID: ${n}`)),()=>{};const{stream:o}=r,a=((e,t)=>{const n=e.getReader();let r=!0;return(async()=>{try{for(;r;){const{value:e,done:o}=await n.read();if(o||!r)break;if(e){const n=Xr.decode(e,{stream:!0});t.next(n)}}t.complete()}catch(e){t.error(e)}finally{n.cancel().catch(()=>{})}})(),()=>{r=!1,n.cancel().catch(()=>{})}})(o,t);return r.cancel=a,()=>{console.log("[Server] completion subscription closed:",n),a(),oo.delete(n)}})),cancelCompletion:eo.procedure.input(ro).mutation(async({input:e})=>{const t=e.property;console.log("[Server] cancelCompletion:",t);const n=oo.get(t);return n?(n.cancel&&n.cancel(),oo.delete(t),{success:!0}):{success:!1,error:"Unknown completion ID"}}),tokenize:eo.procedure.input(ro).query(async({input:t})=>(console.log("[Server] Tokenize:",t),e.ggmlLlm.tokenize(t.id,t.property))),detokenize:eo.procedure.input(ro).mutation(async({input:t})=>(console.log("[Server] Detokenize:",t),e.ggmlLlm.detokenize(t.id,t.property))),applyChatTemplate:eo.procedure.input(ro).query(async({input:t})=>(console.log("[Server] Apply Chat Template:",t),e.ggmlLlm.applyChatTemplate(t.id,t.property))),releaseContext:eo.procedure.input(ro).mutation(async({input:t})=>(console.log("[Server] Release Context:",t),e.ggmlLlm.releaseContext(t.id,t.property)))}),ggmlStt:eo.router({initContext:eo.procedure.input(ro).subscription(({input:t})=>Z(n=>{console.log("[Server] Init STT Context:",t);let r=!0;return(async()=>{try{const o={...t.property,onProgress:e=>{r&&n.next({progress:e})}};await new Promise(e=>setTimeout(e));const a=await e.ggmlStt.initContext(t.id,o);if(r){const{download:e,...t}=a||{};n.next({result:t}),n.complete()}}catch(e){r&&n.error(e)}})(),()=>{r=!1}})),transcribeData:eo.procedure.input(r.instanceof(FormData)).mutation(async({input:t})=>{const n=t,r=n.get("id"),o=n.get("options"),a=n.get("audioData"),i=o?JSON.parse(o):{};let s;if(a instanceof Blob||a&&"function"==typeof a.arrayBuffer){const e=await a.arrayBuffer();s=Buffer.from(e)}else s=Buffer.isBuffer(a)?a:a instanceof ArrayBuffer?Buffer.from(a):a;return console.log("[Server] Transcribe Data:",{id:r,audioDataLength:s?.length||0,options:i}),e.ggmlStt.transcribeData(r,{audioData:s,options:i})}),releaseContext:eo.procedure.input(ro).mutation(async({input:t})=>(console.log("[Server] Release STT Context:",t),e.ggmlStt.releaseContext(t.id,t.property)))})})},po=({backend:e=h,router:t,createContext:n=()=>({}),defaultConfig:r}={})=>{const o=t||uo(e,{defaultConfig:r});return{server:Tt({router:o,createContext:n,basePath:"/trpc/"}),router:o,backend:e}},mo=async({port:e=2080,backend:t,router:n,createContext:r,defaultConfig:o}={})=>{const{server:a,router:i}=po({backend:t,router:n,createContext:r,defaultConfig:o});return await new Promise(t=>a.listen(e,t)),{server:a,router:i,port:e}},{testGgmlLlmCapabilities:fo,testGgmlSttCapabilities:ho,showModelsTable:yo,showSttModelsTable:go}=h;export{Zr as checkAndNotifyUpdates,Qr as checkForUpdates,Wr as compareVersions,uo as createRouter,po as createServer,Kr as currentVersion,yo as showModelsTable,go as showSttModelsTable,mo as startServer,fo as testGgmlLlmCapabilities,ho as testGgmlSttCapabilities};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fugood/buttress-server-poc",
|
|
3
|
-
"version": "2.23.0-beta.
|
|
3
|
+
"version": "2.23.0-beta.28",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"start": "bun bin/start.mjs"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@fugood/llama.node": "^1.4.
|
|
20
|
+
"@fugood/llama.node": "^1.4.9",
|
|
21
21
|
"@huggingface/gguf": "^0.3.2",
|
|
22
22
|
"@iarna/toml": "^3.0.0",
|
|
23
23
|
"@trpc/server": "^11.6.0",
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"terser-webpack-plugin": "^5.0.3"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "70dc90287c23f791bc1ed079b80586071e439d15"
|
|
30
30
|
}
|