@czap/astro 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/Satellite.d.ts +42 -0
- package/dist/Satellite.d.ts.map +1 -0
- package/dist/Satellite.js +55 -0
- package/dist/Satellite.js.map +1 -0
- package/dist/client-directives/gpu.d.ts +3 -0
- package/dist/client-directives/gpu.d.ts.map +1 -0
- package/dist/client-directives/gpu.js +5 -0
- package/dist/client-directives/gpu.js.map +1 -0
- package/dist/client-directives/llm.d.ts +3 -0
- package/dist/client-directives/llm.d.ts.map +1 -0
- package/dist/client-directives/llm.js +5 -0
- package/dist/client-directives/llm.js.map +1 -0
- package/dist/client-directives/satellite.d.ts +3 -0
- package/dist/client-directives/satellite.d.ts.map +1 -0
- package/dist/client-directives/satellite.js +5 -0
- package/dist/client-directives/satellite.js.map +1 -0
- package/dist/client-directives/stream.d.ts +3 -0
- package/dist/client-directives/stream.d.ts.map +1 -0
- package/dist/client-directives/stream.js +5 -0
- package/dist/client-directives/stream.js.map +1 -0
- package/dist/client-directives/wasm.d.ts +3 -0
- package/dist/client-directives/wasm.d.ts.map +1 -0
- package/dist/client-directives/wasm.js +6 -0
- package/dist/client-directives/wasm.js.map +1 -0
- package/dist/client-directives/worker.d.ts +3 -0
- package/dist/client-directives/worker.d.ts.map +1 -0
- package/dist/client-directives/worker.js +5 -0
- package/dist/client-directives/worker.js.map +1 -0
- package/dist/detect-upgrade.d.ts +16 -0
- package/dist/detect-upgrade.d.ts.map +1 -0
- package/dist/detect-upgrade.js +105 -0
- package/dist/detect-upgrade.js.map +1 -0
- package/dist/headers.d.ts +45 -0
- package/dist/headers.d.ts.map +1 -0
- package/dist/headers.js +64 -0
- package/dist/headers.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +76 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +240 -0
- package/dist/integration.js.map +1 -0
- package/dist/middleware.d.ts +69 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +75 -0
- package/dist/middleware.js.map +1 -0
- package/dist/quantize.d.ts +50 -0
- package/dist/quantize.d.ts.map +1 -0
- package/dist/quantize.js +122 -0
- package/dist/quantize.js.map +1 -0
- package/dist/runtime/boundary.d.ts +123 -0
- package/dist/runtime/boundary.d.ts.map +1 -0
- package/dist/runtime/boundary.js +164 -0
- package/dist/runtime/boundary.js.map +1 -0
- package/dist/runtime/globals.d.ts +32 -0
- package/dist/runtime/globals.d.ts.map +1 -0
- package/dist/runtime/globals.js +45 -0
- package/dist/runtime/globals.js.map +1 -0
- package/dist/runtime/gpu.d.ts +15 -0
- package/dist/runtime/gpu.d.ts.map +1 -0
- package/dist/runtime/gpu.js +266 -0
- package/dist/runtime/gpu.js.map +1 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/llm-receipt-tracker.d.ts +21 -0
- package/dist/runtime/llm-receipt-tracker.d.ts.map +1 -0
- package/dist/runtime/llm-receipt-tracker.js +60 -0
- package/dist/runtime/llm-receipt-tracker.js.map +1 -0
- package/dist/runtime/llm-render-pipeline.d.ts +89 -0
- package/dist/runtime/llm-render-pipeline.d.ts.map +1 -0
- package/dist/runtime/llm-render-pipeline.js +241 -0
- package/dist/runtime/llm-render-pipeline.js.map +1 -0
- package/dist/runtime/llm-session.d.ts +126 -0
- package/dist/runtime/llm-session.d.ts.map +1 -0
- package/dist/runtime/llm-session.js +385 -0
- package/dist/runtime/llm-session.js.map +1 -0
- package/dist/runtime/llm.d.ts +16 -0
- package/dist/runtime/llm.d.ts.map +1 -0
- package/dist/runtime/llm.js +273 -0
- package/dist/runtime/llm.js.map +1 -0
- package/dist/runtime/policy.d.ts +100 -0
- package/dist/runtime/policy.d.ts.map +1 -0
- package/dist/runtime/policy.js +147 -0
- package/dist/runtime/policy.js.map +1 -0
- package/dist/runtime/receipt-chain.d.ts +22 -0
- package/dist/runtime/receipt-chain.d.ts.map +1 -0
- package/dist/runtime/receipt-chain.js +80 -0
- package/dist/runtime/receipt-chain.js.map +1 -0
- package/dist/runtime/runtime-session.d.ts +34 -0
- package/dist/runtime/runtime-session.d.ts.map +1 -0
- package/dist/runtime/runtime-session.js +102 -0
- package/dist/runtime/runtime-session.js.map +1 -0
- package/dist/runtime/satellite.d.ts +13 -0
- package/dist/runtime/satellite.d.ts.map +1 -0
- package/dist/runtime/satellite.js +59 -0
- package/dist/runtime/satellite.js.map +1 -0
- package/dist/runtime/slots.d.ts +34 -0
- package/dist/runtime/slots.d.ts.map +1 -0
- package/dist/runtime/slots.js +108 -0
- package/dist/runtime/slots.js.map +1 -0
- package/dist/runtime/stream-session.d.ts +47 -0
- package/dist/runtime/stream-session.d.ts.map +1 -0
- package/dist/runtime/stream-session.js +82 -0
- package/dist/runtime/stream-session.js.map +1 -0
- package/dist/runtime/stream.d.ts +9 -0
- package/dist/runtime/stream.d.ts.map +1 -0
- package/dist/runtime/stream.js +308 -0
- package/dist/runtime/stream.js.map +1 -0
- package/dist/runtime/url-policy.d.ts +28 -0
- package/dist/runtime/url-policy.d.ts.map +1 -0
- package/dist/runtime/url-policy.js +87 -0
- package/dist/runtime/url-policy.js.map +1 -0
- package/dist/runtime/wasm.d.ts +20 -0
- package/dist/runtime/wasm.d.ts.map +1 -0
- package/dist/runtime/wasm.js +70 -0
- package/dist/runtime/wasm.js.map +1 -0
- package/dist/runtime/worker.d.ts +11 -0
- package/dist/runtime/worker.d.ts.map +1 -0
- package/dist/runtime/worker.js +249 -0
- package/dist/runtime/worker.js.map +1 -0
- package/package.json +106 -0
- package/src/Satellite.astro +39 -0
- package/src/Satellite.ts +84 -0
- package/src/client-directives/gpu.ts +5 -0
- package/src/client-directives/llm.ts +5 -0
- package/src/client-directives/satellite.ts +5 -0
- package/src/client-directives/stream.ts +5 -0
- package/src/client-directives/wasm.ts +6 -0
- package/src/client-directives/worker.ts +5 -0
- package/src/detect-upgrade.ts +105 -0
- package/src/headers.ts +84 -0
- package/src/index.ts +30 -0
- package/src/integration.ts +309 -0
- package/src/middleware.ts +133 -0
- package/src/quantize.ts +173 -0
- package/src/runtime/boundary.ts +263 -0
- package/src/runtime/globals.ts +57 -0
- package/src/runtime/gpu.ts +291 -0
- package/src/runtime/index.ts +12 -0
- package/src/runtime/llm-receipt-tracker.ts +88 -0
- package/src/runtime/llm-render-pipeline.ts +366 -0
- package/src/runtime/llm-session.ts +548 -0
- package/src/runtime/llm.ts +344 -0
- package/src/runtime/policy.ts +229 -0
- package/src/runtime/receipt-chain.ts +106 -0
- package/src/runtime/runtime-session.ts +139 -0
- package/src/runtime/satellite.ts +80 -0
- package/src/runtime/slots.ts +136 -0
- package/src/runtime/stream-session.ts +125 -0
- package/src/runtime/stream.ts +407 -0
- package/src/runtime/url-policy.ts +107 -0
- package/src/runtime/wasm.ts +85 -0
- package/src/runtime/worker.ts +307 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu.js","sourceRoot":"","sources":["../../src/runtime/gpu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,qBAAqB,GAAG;;;;;;;EAO5B,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAErF,SAAS,aAAa,CAAC,EAA0B,EAAE,IAAY,EAAE,MAAc;IAC7E,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;QACtD,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,4BAA4B;YACrC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,EAA0B,EAAE,OAAe,EAAE,OAAe;IACjF,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAExB,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,gCAAgC;YACzC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC;SACtC,CAAC,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA4B,EAAE,EAAe;IAC5E,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC;IACtE,MAAM,SAAS,GAAG,uBAAuB,CACvC,EAAE,CAAC,YAAY,CAAC,sBAAsB,CAAC,EACvC,YAAY,EACZ,gBAAgB,EAChB;QACE,mBAAmB,EAAE,kCAAkC;QACvD,YAAY,EAAE,+BAA+B;QAC7C,gBAAgB,EAAE,2BAA2B;QAC7C,wBAAwB,EAAE,oCAAoC;KAC/D,EACD,yBAAyB,EAAE,CAC5B,CAAC;IAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC;IACnF,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3C,IAAI,EAAE,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,WAAW,CAAC,QAAQ,CAAC;YACnB,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EACL,iHAAiH;SACpH,CAAC,CAAC;QACH,IAAI,EAAE,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,MAAyB,CAAC;IAC9B,IAAI,EAAE,YAAY,iBAAiB,EAAE,CAAC;QACpC,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,IAAI,qBAAqB,CAAC;QACvD,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,YAAY,IAAI,sBAAsB,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC7B,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,WAAW,CAAC,QAAQ,CAAC;YACnB,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,uDAAuD;SACjE,CAAC,CAAC;QACH,IAAI,EAAE,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,KAAK,UAAU,UAAU;QACvB,IAAI,UAAkB,CAAC;QAEvB,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,WAAW,CAAC,IAAI,CAAC;wBACf,MAAM,EAAE,gBAAgB;wBACxB,IAAI,EAAE,qBAAqB;wBAC3B,OAAO,EAAE,gCAAgC;wBACzC,MAAM,EAAE,QAAQ,CAAC,UAAU;qBAC5B,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,WAAW,CAAC,IAAI,CAAC;oBACf,MAAM,EAAE,gBAAgB;oBACxB,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,wCAAwC;oBACjD,KAAK,EAAE,GAAG;iBACX,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,UAAU,GAAG;;;;;;;;;;;EAWjB,CAAC;QACC,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACtC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QACpC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC9D,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;QACzD,MAAM,WAAW,GAAG,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,GAAG;oBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,SAAS,MAAM;YACb,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBACjB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5C,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC;YAED,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,sBAAsB,GAAG,CAAC,KAAY,EAAQ,EAAE;YACpD;0GAC8F;YAC9F,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;gBAAE,OAAO;YAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;YAC3D,IAAI,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;oBAC5D,IAAI,SAAS,EAAE,CAAC;wBACd,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBACzC,IAAI,QAAQ,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;4BACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3E,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,WAAW,CAAC,QAAQ,CAAC;wBACnB,MAAM,EAAE,gBAAgB;wBACxB,IAAI,EAAE,6BAA6B;wBACnC,OAAO,EAAE,sDAAsD;qBAChE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;gBACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACpE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACtC,IAAI,GAAG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACrC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;wBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;4BACvB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,CAAC,KAAY,EAAQ,EAAE;YACrD;0GAC8F;YAC9F,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;gBAAE,OAAO;YAC5C,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,GAAG,EAAE,CAAC;oBACR,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;QACnE,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;QAE1E,EAAE,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,EAAE,CAAC;QAET,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE;YACtC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAChC,EAAE,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;YACtE,QAAQ,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;YAC7E,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,EAAE,CAAC;IAClB,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { bootstrapSlots, getSlotRegistry, installSwapReinit, reinitializeDirectives, rescanSlots } from './slots.js';
|
|
2
|
+
export { configureWasmRuntime, loadWasmRuntime, resolveWasmUrl } from './wasm.js';
|
|
3
|
+
export { allowRuntimeEndpointUrl, allowSameOriginRuntimeUrl, isSameOriginRuntimeUrl } from './url-policy.js';
|
|
4
|
+
export { configureRuntimePolicy, normalizeRuntimeSecurityPolicy, readRuntimeEndpointPolicy, readRuntimeHtmlPolicy, readRuntimePolicy, } from './policy.js';
|
|
5
|
+
export type { RuntimeEndpointKind, RuntimeEndpointPolicy, HtmlPolicy } from '@czap/web';
|
|
6
|
+
export type { RuntimeHtmlPolicy, RuntimeSecurityPolicy, NormalizedRuntimeSecurityPolicy } from './policy.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC7G,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxF,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { bootstrapSlots, getSlotRegistry, installSwapReinit, reinitializeDirectives, rescanSlots } from './slots.js';
|
|
2
|
+
export { configureWasmRuntime, loadWasmRuntime, resolveWasmUrl } from './wasm.js';
|
|
3
|
+
export { allowRuntimeEndpointUrl, allowSameOriginRuntimeUrl, isSameOriginRuntimeUrl } from './url-policy.js';
|
|
4
|
+
export { configureRuntimePolicy, normalizeRuntimeSecurityPolicy, readRuntimeEndpointPolicy, readRuntimeHtmlPolicy, readRuntimePolicy, } from './policy.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC7G,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Receipt, UIFrame } from '@czap/core';
|
|
2
|
+
import { createReceiptChain } from './receipt-chain.js';
|
|
3
|
+
import type { LLMRenderPipeline, LLMRenderHost } from './llm-render-pipeline.js';
|
|
4
|
+
/** Tracks receipt chain, pending frames, envelope ingestion, and gap replay. */
|
|
5
|
+
export interface LLMReceiptTracker {
|
|
6
|
+
readonly receiptChain: ReturnType<typeof createReceiptChain> | null;
|
|
7
|
+
readonly lastAckReceiptId: UIFrame['receiptId'] | null;
|
|
8
|
+
recordFrame(frame: UIFrame): void;
|
|
9
|
+
rememberEnvelope(envelope: Receipt.Envelope): void;
|
|
10
|
+
replayGap(pipeline: LLMRenderPipeline, host: LLMRenderHost): {
|
|
11
|
+
readonly type: string;
|
|
12
|
+
};
|
|
13
|
+
reset(): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build a fresh {@link LLMReceiptTracker}. Internally lazy-initialises
|
|
17
|
+
* the receipt chain on the first envelope or gap replay, so idle LLM
|
|
18
|
+
* sessions pay no storage cost.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createLLMReceiptTracker(): LLMReceiptTracker;
|
|
21
|
+
//# sourceMappingURL=llm-receipt-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-receipt-tracker.d.ts","sourceRoot":"","sources":["../../src/runtime/llm-receipt-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEjF,gFAAgF;AAChF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAEvD,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACnD,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvF,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAkE3D"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { GenFrame } from '@czap/core';
|
|
2
|
+
import { createReceiptChain } from './receipt-chain.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build a fresh {@link LLMReceiptTracker}. Internally lazy-initialises
|
|
5
|
+
* the receipt chain on the first envelope or gap replay, so idle LLM
|
|
6
|
+
* sessions pay no storage cost.
|
|
7
|
+
*/
|
|
8
|
+
export function createLLMReceiptTracker() {
|
|
9
|
+
let _receiptChain = null;
|
|
10
|
+
let _pendingFrames = null;
|
|
11
|
+
let _lastAckReceiptId = null;
|
|
12
|
+
function getReceiptChain() {
|
|
13
|
+
if (!_receiptChain) {
|
|
14
|
+
_receiptChain = createReceiptChain();
|
|
15
|
+
for (const frame of _pendingFrames ?? []) {
|
|
16
|
+
_receiptChain.rememberFrame(frame);
|
|
17
|
+
}
|
|
18
|
+
_pendingFrames = null;
|
|
19
|
+
}
|
|
20
|
+
return _receiptChain;
|
|
21
|
+
}
|
|
22
|
+
const tracker = {
|
|
23
|
+
get receiptChain() {
|
|
24
|
+
return _receiptChain;
|
|
25
|
+
},
|
|
26
|
+
get lastAckReceiptId() {
|
|
27
|
+
return _lastAckReceiptId;
|
|
28
|
+
},
|
|
29
|
+
recordFrame(frame) {
|
|
30
|
+
_lastAckReceiptId = frame.receiptId;
|
|
31
|
+
if (_receiptChain) {
|
|
32
|
+
_receiptChain.rememberFrame(frame);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
(_pendingFrames ??= []).push(frame);
|
|
36
|
+
},
|
|
37
|
+
rememberEnvelope(envelope) {
|
|
38
|
+
getReceiptChain().ingestEnvelope(envelope);
|
|
39
|
+
},
|
|
40
|
+
replayGap(pipeline, host) {
|
|
41
|
+
pipeline.flushPendingText(host, tracker.recordFrame);
|
|
42
|
+
const strategy = GenFrame.resolveGap(_lastAckReceiptId, pipeline.llmRuntime?.tokenBuffer.length ?? 0, getReceiptChain(), {
|
|
43
|
+
canResume: false,
|
|
44
|
+
});
|
|
45
|
+
if (strategy.type === 'replay') {
|
|
46
|
+
for (const frame of strategy.frames) {
|
|
47
|
+
pipeline.renderFrame(frame, host);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return strategy;
|
|
51
|
+
},
|
|
52
|
+
reset() {
|
|
53
|
+
_lastAckReceiptId = null;
|
|
54
|
+
_receiptChain = null;
|
|
55
|
+
_pendingFrames = null;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
return tracker;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=llm-receipt-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-receipt-tracker.js","sourceRoot":"","sources":["../../src/runtime/llm-receipt-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAcxD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACrC,IAAI,aAAa,GAAiD,IAAI,CAAC;IACvE,IAAI,cAAc,GAAqB,IAAI,CAAC;IAC5C,IAAI,iBAAiB,GAAgC,IAAI,CAAC;IAE1D,SAAS,eAAe;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,kBAAkB,EAAE,CAAC;YACrC,KAAK,MAAM,KAAK,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;gBACzC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;YACD,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAsB;QACjC,IAAI,YAAY;YACd,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,IAAI,gBAAgB;YAClB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,WAAW,CAAC,KAAc;YACxB,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC;YACpC,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,gBAAgB,CAAC,QAA0B;YACzC,eAAe,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,SAAS,CAAC,QAA2B,EAAE,IAAmB;YACxD,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAClC,iBAAiB,EACjB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC,EAC5C,eAAe,EAAE,EACjB;gBACE,SAAS,EAAE,KAAK;aACjB,CACF,CAAC;YACF,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,KAAK;YACH,iBAAiB,GAAG,IAAI,CAAC;YACzB,aAAa,GAAG,IAAI,CAAC;YACrB,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;KACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal render-pipeline building block used by the `client:llm`
|
|
3
|
+
* directive. Owns the token buffer, the `GenFrame` scheduler, the
|
|
4
|
+
* quality controller, and the fast-lane state machine.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { GenFrame, TokenBuffer, UIQuality } from '@czap/core';
|
|
9
|
+
import type { UIFrame } from '@czap/core';
|
|
10
|
+
type DeviceTier = 'none' | 'transitions' | 'animations' | 'physics' | 'compute';
|
|
11
|
+
/**
|
|
12
|
+
* Bundle of runtime objects one LLM session owns: the token buffer,
|
|
13
|
+
* the adaptive quality controller, and the frame scheduler.
|
|
14
|
+
*/
|
|
15
|
+
export interface LLMRenderRuntime {
|
|
16
|
+
/** Ring of incoming text fragments feeding the scheduler. */
|
|
17
|
+
readonly tokenBuffer: TokenBuffer.Shape<string>;
|
|
18
|
+
/** Adaptive quality controller. Reassigned on each reset. */
|
|
19
|
+
quality: ReturnType<typeof UIQuality.make>;
|
|
20
|
+
/** Frame scheduler bound to `tokenBuffer` + `quality`. */
|
|
21
|
+
scheduler: ReturnType<typeof GenFrame.make>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Host callbacks the pipeline invokes when it wants to render a text
|
|
25
|
+
* delta or a finalised `UIFrame`. Callbacks return `true` when the
|
|
26
|
+
* frame/text was actually rendered so the pipeline can advance state.
|
|
27
|
+
*/
|
|
28
|
+
export interface LLMRenderHost {
|
|
29
|
+
renderText(text: string, accumulated: string, mode: string): boolean;
|
|
30
|
+
renderFrame(frame: UIFrame, accumulated: string, mode: string): boolean;
|
|
31
|
+
emitToken(text: string, accumulated: string): void;
|
|
32
|
+
emitFrame(frame: UIFrame): void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Pipeline construction options. `mode` is the LLM render mode label;
|
|
36
|
+
* `getDeviceTier` is called on every quality evaluation so tier
|
|
37
|
+
* changes flow into the scheduler without explicit re-wiring.
|
|
38
|
+
*/
|
|
39
|
+
export interface LLMRenderPipelineConfig {
|
|
40
|
+
/** User-provided render mode label (e.g. `"fast"`, `"stream"`). */
|
|
41
|
+
readonly mode: string;
|
|
42
|
+
/** Current device tier getter; consulted per evaluation. */
|
|
43
|
+
readonly getDeviceTier: () => DeviceTier;
|
|
44
|
+
}
|
|
45
|
+
/** Manages render runtime pooling, token buffering, frame flushing, and fast lane logic. */
|
|
46
|
+
export interface LLMRenderPipeline {
|
|
47
|
+
readonly fastLanePrimed: boolean;
|
|
48
|
+
readonly flushQueued: boolean;
|
|
49
|
+
readonly queuedTextFragments: string[];
|
|
50
|
+
readonly llmRuntime: LLMRenderRuntime | null;
|
|
51
|
+
accumulated: string;
|
|
52
|
+
isRenderTierEnabled(): boolean;
|
|
53
|
+
canQueueRenderBurst(): boolean;
|
|
54
|
+
shouldUseFastLane(toolCallBufferIsNull: boolean, receiptChainIsNull: boolean, runtimeState: string): boolean;
|
|
55
|
+
getLLMRuntime(): LLMRenderRuntime;
|
|
56
|
+
promoteFastLane(): void;
|
|
57
|
+
resetRenderRuntime(): void;
|
|
58
|
+
renderImmediateText(text: string, host: LLMRenderHost): boolean;
|
|
59
|
+
renderFrame(frame: UIFrame, host: LLMRenderHost): boolean;
|
|
60
|
+
flushFrames(activeRuntime: LLMRenderRuntime, canRender: boolean, host: LLMRenderHost, recordFrame: (frame: UIFrame) => void, shouldRecordFrame?: boolean): boolean;
|
|
61
|
+
flushQueuedText(host: LLMRenderHost, recordFrame: (frame: UIFrame) => void, shouldRecordFrame?: boolean): void;
|
|
62
|
+
enqueueFlush(host: LLMRenderHost, recordFrame: (frame: UIFrame) => void, shouldRecordFrame?: boolean): void;
|
|
63
|
+
flushPendingText(host: LLMRenderHost, recordFrame: (frame: UIFrame) => void): void;
|
|
64
|
+
pushText(fragment: string): void;
|
|
65
|
+
clearQueuedText(): void;
|
|
66
|
+
setFastLanePrimed(value: boolean): void;
|
|
67
|
+
resetPipelineState(): void;
|
|
68
|
+
releaseRuntime(): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Claim the standby LLM runtime (if any) or mint a fresh one. The
|
|
72
|
+
* standby pool holds at most one runtime so cold-start cost is
|
|
73
|
+
* amortised across successive `client:llm` mounts on the same page.
|
|
74
|
+
*/
|
|
75
|
+
export declare function claimStandbyLLMRuntime(config: Pick<LLMRenderPipelineConfig, 'getDeviceTier'>): LLMRenderRuntime;
|
|
76
|
+
/**
|
|
77
|
+
* Return a no-longer-needed LLM runtime to the standby pool. Resets
|
|
78
|
+
* the runtime in place so the next claimer observes a clean slate.
|
|
79
|
+
* If the pool is already occupied the runtime is simply discarded.
|
|
80
|
+
*/
|
|
81
|
+
export declare function releaseStandbyLLMRuntime(runtime: LLMRenderRuntime): void;
|
|
82
|
+
/**
|
|
83
|
+
* Build a fresh {@link LLMRenderPipeline}. The pipeline lazily claims
|
|
84
|
+
* a runtime from the standby pool on first use and exposes every hook
|
|
85
|
+
* the `client:llm` directive needs to drive its render loop.
|
|
86
|
+
*/
|
|
87
|
+
export declare function createLLMRenderPipeline(config: LLMRenderPipelineConfig): LLMRenderPipeline;
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=llm-render-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-render-pipeline.d.ts","sourceRoot":"","sources":["../../src/runtime/llm-render-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal render-pipeline building block used by the `client:llm`
|
|
3
|
+
* directive. Owns the token buffer, the `GenFrame` scheduler, the
|
|
4
|
+
* quality controller, and the fast-lane state machine.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { GenFrame, TokenBuffer, UIQuality } from '@czap/core';
|
|
9
|
+
// -- Standby runtime pool (module-level singleton) --
|
|
10
|
+
let standbyLLMRuntime = null;
|
|
11
|
+
function resetLLMRuntime(runtime) {
|
|
12
|
+
runtime.tokenBuffer.reset();
|
|
13
|
+
runtime.quality = UIQuality.make();
|
|
14
|
+
runtime.scheduler.reset();
|
|
15
|
+
}
|
|
16
|
+
function createSessionRenderRuntime(config) {
|
|
17
|
+
const tokenBuffer = TokenBuffer.make({ capacity: 128 });
|
|
18
|
+
const llmRuntime = {
|
|
19
|
+
tokenBuffer,
|
|
20
|
+
quality: UIQuality.make(),
|
|
21
|
+
scheduler: null,
|
|
22
|
+
};
|
|
23
|
+
llmRuntime.scheduler = GenFrame.make({
|
|
24
|
+
tokenBuffer,
|
|
25
|
+
getQualityTier: () => llmRuntime.quality.evaluate(tokenBuffer.occupancy, config.getDeviceTier()),
|
|
26
|
+
});
|
|
27
|
+
return llmRuntime;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Claim the standby LLM runtime (if any) or mint a fresh one. The
|
|
31
|
+
* standby pool holds at most one runtime so cold-start cost is
|
|
32
|
+
* amortised across successive `client:llm` mounts on the same page.
|
|
33
|
+
*/
|
|
34
|
+
export function claimStandbyLLMRuntime(config) {
|
|
35
|
+
const claimed = standbyLLMRuntime;
|
|
36
|
+
standbyLLMRuntime = null;
|
|
37
|
+
if (claimed) {
|
|
38
|
+
resetLLMRuntime(claimed);
|
|
39
|
+
return claimed;
|
|
40
|
+
}
|
|
41
|
+
return createSessionRenderRuntime(config);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Return a no-longer-needed LLM runtime to the standby pool. Resets
|
|
45
|
+
* the runtime in place so the next claimer observes a clean slate.
|
|
46
|
+
* If the pool is already occupied the runtime is simply discarded.
|
|
47
|
+
*/
|
|
48
|
+
export function releaseStandbyLLMRuntime(runtime) {
|
|
49
|
+
resetLLMRuntime(runtime);
|
|
50
|
+
if (standbyLLMRuntime === null) {
|
|
51
|
+
standbyLLMRuntime = runtime;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// -- Pipeline implementation --
|
|
55
|
+
/**
|
|
56
|
+
* Build a fresh {@link LLMRenderPipeline}. The pipeline lazily claims
|
|
57
|
+
* a runtime from the standby pool on first use and exposes every hook
|
|
58
|
+
* the `client:llm` directive needs to drive its render loop.
|
|
59
|
+
*/
|
|
60
|
+
export function createLLMRenderPipeline(config) {
|
|
61
|
+
let _accumulated = '';
|
|
62
|
+
let _queuedTextFragments = [];
|
|
63
|
+
let _flushQueued = false;
|
|
64
|
+
let _fastLanePrimed = false;
|
|
65
|
+
let _llmRuntime = null;
|
|
66
|
+
let _disposed = false;
|
|
67
|
+
let _queuedTextCount = 0;
|
|
68
|
+
let _queuedRecordFrame = false;
|
|
69
|
+
let _queuedHost = null;
|
|
70
|
+
let _queuedRecordFrameHandler = null;
|
|
71
|
+
const flushTask = () => {
|
|
72
|
+
if (!_flushQueued) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
_flushQueued = false;
|
|
76
|
+
const host = _queuedHost;
|
|
77
|
+
const recordFrame = _queuedRecordFrameHandler;
|
|
78
|
+
const shouldRecordFrame = _queuedRecordFrame;
|
|
79
|
+
_queuedHost = null;
|
|
80
|
+
_queuedRecordFrameHandler = null;
|
|
81
|
+
_queuedRecordFrame = false;
|
|
82
|
+
if (_disposed || !host || !recordFrame) {
|
|
83
|
+
_queuedTextFragments = [];
|
|
84
|
+
_queuedTextCount = 0;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
pipeline.flushQueuedText(host, recordFrame, shouldRecordFrame);
|
|
88
|
+
};
|
|
89
|
+
const pipeline = {
|
|
90
|
+
get fastLanePrimed() {
|
|
91
|
+
return _fastLanePrimed;
|
|
92
|
+
},
|
|
93
|
+
get flushQueued() {
|
|
94
|
+
return _flushQueued;
|
|
95
|
+
},
|
|
96
|
+
get queuedTextFragments() {
|
|
97
|
+
return _queuedTextFragments;
|
|
98
|
+
},
|
|
99
|
+
get llmRuntime() {
|
|
100
|
+
return _llmRuntime;
|
|
101
|
+
},
|
|
102
|
+
get accumulated() {
|
|
103
|
+
return _accumulated;
|
|
104
|
+
},
|
|
105
|
+
set accumulated(value) {
|
|
106
|
+
_accumulated = value;
|
|
107
|
+
},
|
|
108
|
+
isRenderTierEnabled() {
|
|
109
|
+
return config.getDeviceTier() !== 'none';
|
|
110
|
+
},
|
|
111
|
+
canQueueRenderBurst() {
|
|
112
|
+
return pipeline.isRenderTierEnabled();
|
|
113
|
+
},
|
|
114
|
+
shouldUseFastLane(toolCallBufferIsNull, receiptChainIsNull, runtimeState) {
|
|
115
|
+
return (!_fastLanePrimed &&
|
|
116
|
+
!_llmRuntime &&
|
|
117
|
+
_queuedTextCount === 0 &&
|
|
118
|
+
!_flushQueued &&
|
|
119
|
+
toolCallBufferIsNull &&
|
|
120
|
+
receiptChainIsNull &&
|
|
121
|
+
_accumulated.length === 0 &&
|
|
122
|
+
runtimeState !== 'reconnecting' &&
|
|
123
|
+
pipeline.isRenderTierEnabled());
|
|
124
|
+
},
|
|
125
|
+
getLLMRuntime() {
|
|
126
|
+
if (_llmRuntime) {
|
|
127
|
+
return _llmRuntime;
|
|
128
|
+
}
|
|
129
|
+
_llmRuntime = claimStandbyLLMRuntime(config);
|
|
130
|
+
return _llmRuntime;
|
|
131
|
+
},
|
|
132
|
+
promoteFastLane() {
|
|
133
|
+
if (!_fastLanePrimed || _llmRuntime) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
pipeline.getLLMRuntime();
|
|
137
|
+
},
|
|
138
|
+
resetRenderRuntime() {
|
|
139
|
+
if (_llmRuntime) {
|
|
140
|
+
resetLLMRuntime(_llmRuntime);
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
renderImmediateText(text, host) {
|
|
144
|
+
_accumulated += text;
|
|
145
|
+
return host.renderText(text, _accumulated, config.mode);
|
|
146
|
+
},
|
|
147
|
+
renderFrame(frame, host) {
|
|
148
|
+
const text = frame.tokens.join('');
|
|
149
|
+
if (!text) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
_accumulated += text;
|
|
153
|
+
return host.renderFrame(frame, _accumulated, config.mode);
|
|
154
|
+
},
|
|
155
|
+
flushFrames(activeRuntime, canRender, host, recordFrame, shouldRecordFrame = true) {
|
|
156
|
+
let renderedFrames = false;
|
|
157
|
+
while (true) {
|
|
158
|
+
const frame = activeRuntime.scheduler.tick();
|
|
159
|
+
if (!frame || frame.tokens.length === 0) {
|
|
160
|
+
return renderedFrames;
|
|
161
|
+
}
|
|
162
|
+
if (shouldRecordFrame) {
|
|
163
|
+
recordFrame(frame);
|
|
164
|
+
}
|
|
165
|
+
if (!canRender || !pipeline.renderFrame(frame, host)) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
renderedFrames = true;
|
|
169
|
+
host.emitFrame(frame);
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
flushQueuedText(host, recordFrame, shouldRecordFrame = true) {
|
|
173
|
+
const fragments = _queuedTextFragments;
|
|
174
|
+
_queuedTextFragments = [];
|
|
175
|
+
_queuedTextCount = 0;
|
|
176
|
+
const canRender = pipeline.isRenderTierEnabled();
|
|
177
|
+
if (!canRender) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const activeRuntime = pipeline.getLLMRuntime();
|
|
181
|
+
for (const fragment of fragments) {
|
|
182
|
+
activeRuntime.tokenBuffer.push(fragment);
|
|
183
|
+
}
|
|
184
|
+
if (pipeline.flushFrames(activeRuntime, canRender, host, recordFrame, shouldRecordFrame)) {
|
|
185
|
+
host.emitToken(fragments.length === 1 ? fragments[0] : fragments.join(''), _accumulated);
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
enqueueFlush(host, recordFrame, shouldRecordFrame = true) {
|
|
189
|
+
_queuedHost = host;
|
|
190
|
+
_queuedRecordFrameHandler = recordFrame;
|
|
191
|
+
_queuedRecordFrame ||= shouldRecordFrame;
|
|
192
|
+
if (_flushQueued) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
_flushQueued = true;
|
|
196
|
+
queueMicrotask(flushTask);
|
|
197
|
+
},
|
|
198
|
+
flushPendingText(host, recordFrame) {
|
|
199
|
+
if (!_flushQueued && _queuedTextCount === 0) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
_flushQueued = false;
|
|
203
|
+
_queuedHost = null;
|
|
204
|
+
_queuedRecordFrameHandler = null;
|
|
205
|
+
const shouldRecordFrame = _queuedRecordFrame;
|
|
206
|
+
_queuedRecordFrame = false;
|
|
207
|
+
pipeline.flushQueuedText(host, recordFrame, shouldRecordFrame);
|
|
208
|
+
},
|
|
209
|
+
pushText(fragment) {
|
|
210
|
+
_queuedTextFragments.push(fragment);
|
|
211
|
+
_queuedTextCount += 1;
|
|
212
|
+
},
|
|
213
|
+
clearQueuedText() {
|
|
214
|
+
_queuedTextFragments = [];
|
|
215
|
+
_queuedTextCount = 0;
|
|
216
|
+
},
|
|
217
|
+
setFastLanePrimed(value) {
|
|
218
|
+
_fastLanePrimed = value;
|
|
219
|
+
},
|
|
220
|
+
resetPipelineState() {
|
|
221
|
+
_accumulated = '';
|
|
222
|
+
_queuedTextFragments = [];
|
|
223
|
+
_queuedTextCount = 0;
|
|
224
|
+
_flushQueued = false;
|
|
225
|
+
_queuedRecordFrame = false;
|
|
226
|
+
_queuedHost = null;
|
|
227
|
+
_queuedRecordFrameHandler = null;
|
|
228
|
+
_fastLanePrimed = false;
|
|
229
|
+
pipeline.resetRenderRuntime();
|
|
230
|
+
},
|
|
231
|
+
releaseRuntime() {
|
|
232
|
+
if (_llmRuntime) {
|
|
233
|
+
releaseStandbyLLMRuntime(_llmRuntime);
|
|
234
|
+
_llmRuntime = null;
|
|
235
|
+
}
|
|
236
|
+
_disposed = true;
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
return pipeline;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=llm-render-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-render-pipeline.js","sourceRoot":"","sources":["../../src/runtime/llm-render-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA8E9D,sDAAsD;AAEtD,IAAI,iBAAiB,GAA4B,IAAI,CAAC;AAEtD,SAAS,eAAe,CAAC,OAAyB;IAChD,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC5B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAsD;IACxF,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAqB;QACnC,WAAW;QACX,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE;QACzB,SAAS,EAAE,IAAa;KACzB,CAAC;IACF,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;QACnC,WAAW;QACX,cAAc,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;KACjG,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAsD;IAC3F,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAClC,iBAAiB,GAAG,IAAI,CAAC;IACzB,IAAI,OAAO,EAAE,CAAC;QACZ,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAyB;IAChE,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,iBAAiB,GAAG,OAAO,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,gCAAgC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,oBAAoB,GAAa,EAAE,CAAC;IACxC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,WAAW,GAA4B,IAAI,CAAC;IAChD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,WAAW,GAAyB,IAAI,CAAC;IAC7C,IAAI,yBAAyB,GAAsC,IAAI,CAAC;IAExE,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,YAAY,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,MAAM,WAAW,GAAG,yBAAyB,CAAC;QAC9C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;QAC7C,WAAW,GAAG,IAAI,CAAC;QACnB,yBAAyB,GAAG,IAAI,CAAC;QACjC,kBAAkB,GAAG,KAAK,CAAC;QAE3B,IAAI,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,oBAAoB,GAAG,EAAE,CAAC;YAC1B,gBAAgB,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAsB;QAClC,IAAI,cAAc;YAChB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,WAAW;YACb,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,IAAI,mBAAmB;YACrB,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,IAAI,WAAW;YACb,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,IAAI,WAAW,CAAC,KAAa;YAC3B,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;QAED,mBAAmB;YACjB,OAAO,MAAM,CAAC,aAAa,EAAE,KAAK,MAAM,CAAC;QAC3C,CAAC;QAED,mBAAmB;YACjB,OAAO,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACxC,CAAC;QAED,iBAAiB,CAAC,oBAA6B,EAAE,kBAA2B,EAAE,YAAoB;YAChG,OAAO,CACL,CAAC,eAAe;gBAChB,CAAC,WAAW;gBACZ,gBAAgB,KAAK,CAAC;gBACtB,CAAC,YAAY;gBACb,oBAAoB;gBACpB,kBAAkB;gBAClB,YAAY,CAAC,MAAM,KAAK,CAAC;gBACzB,YAAY,KAAK,cAAc;gBAC/B,QAAQ,CAAC,mBAAmB,EAAE,CAC/B,CAAC;QACJ,CAAC;QAED,aAAa;YACX,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,eAAe;YACb,IAAI,CAAC,eAAe,IAAI,WAAW,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QAED,kBAAkB;YAChB,IAAI,WAAW,EAAE,CAAC;gBAChB,eAAe,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,mBAAmB,CAAC,IAAY,EAAE,IAAmB;YACnD,YAAY,IAAI,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;QAED,WAAW,CAAC,KAAc,EAAE,IAAmB;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;YAED,YAAY,IAAI,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,WAAW,CACT,aAA+B,EAC/B,SAAkB,EAClB,IAAmB,EACnB,WAAqC,EACrC,iBAAiB,GAAG,IAAI;YAExB,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC7C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxC,OAAO,cAAc,CAAC;gBACxB,CAAC;gBAED,IAAI,iBAAiB,EAAE,CAAC;oBACtB,WAAW,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;gBACD,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;oBACrD,SAAS;gBACX,CAAC;gBAED,cAAc,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,eAAe,CAAC,IAAmB,EAAE,WAAqC,EAAE,iBAAiB,GAAG,IAAI;YAClG,MAAM,SAAS,GAAG,oBAAoB,CAAC;YACvC,oBAAoB,GAAG,EAAE,CAAC;YAC1B,gBAAgB,GAAG,CAAC,CAAC;YAErB,MAAM,SAAS,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YACjD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC/C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAmB,EAAE,WAAqC,EAAE,iBAAiB,GAAG,IAAI;YAC/F,WAAW,GAAG,IAAI,CAAC;YACnB,yBAAyB,GAAG,WAAW,CAAC;YACxC,kBAAkB,KAAK,iBAAiB,CAAC;YACzC,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,YAAY,GAAG,IAAI,CAAC;YACpB,cAAc,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,gBAAgB,CAAC,IAAmB,EAAE,WAAqC;YACzE,IAAI,CAAC,YAAY,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,YAAY,GAAG,KAAK,CAAC;YACrB,WAAW,GAAG,IAAI,CAAC;YACnB,yBAAyB,GAAG,IAAI,CAAC;YACjC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;YAC7C,kBAAkB,GAAG,KAAK,CAAC;YAC3B,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;QACjE,CAAC;QAED,QAAQ,CAAC,QAAgB;YACvB,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,gBAAgB,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,eAAe;YACb,oBAAoB,GAAG,EAAE,CAAC;YAC1B,gBAAgB,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,iBAAiB,CAAC,KAAc;YAC9B,eAAe,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,kBAAkB;YAChB,YAAY,GAAG,EAAE,CAAC;YAClB,oBAAoB,GAAG,EAAE,CAAC;YAC1B,gBAAgB,GAAG,CAAC,CAAC;YACrB,YAAY,GAAG,KAAK,CAAC;YACrB,kBAAkB,GAAG,KAAK,CAAC;YAC3B,WAAW,GAAG,IAAI,CAAC;YACnB,yBAAyB,GAAG,IAAI,CAAC;YACjC,eAAe,GAAG,KAAK,CAAC;YACxB,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAChC,CAAC;QAED,cAAc;YACZ,IAAI,WAAW,EAAE,CAAC;gBAChB,wBAAwB,CAAC,WAAW,CAAC,CAAC;gBACtC,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { Receipt, UIFrame } from '@czap/core';
|
|
2
|
+
import { type HtmlPolicy, type LLMChunk } from '@czap/web';
|
|
3
|
+
import type { RuntimeSessionState } from './runtime-session.js';
|
|
4
|
+
type DeviceTier = 'none' | 'transitions' | 'animations' | 'physics' | 'compute';
|
|
5
|
+
/**
|
|
6
|
+
* Config accepted by {@link createLLMSession}. Drives a DOM-bound LLM
|
|
7
|
+
* session: `element` is the root the `client:llm` directive attaches
|
|
8
|
+
* to, `target` is where text is appended, and `mode` selects render
|
|
9
|
+
* strategy.
|
|
10
|
+
*/
|
|
11
|
+
export interface LLMSessionConfig {
|
|
12
|
+
/** Host element (directive root). Receives `czap:llm-*` events. */
|
|
13
|
+
readonly element: HTMLElement;
|
|
14
|
+
/** Text-sink element (typically a child of `element`). */
|
|
15
|
+
readonly target: HTMLElement;
|
|
16
|
+
/** Render mode label forwarded to the pipeline. */
|
|
17
|
+
readonly mode: string;
|
|
18
|
+
/** Device-tier getter used by the quality controller. */
|
|
19
|
+
readonly getDeviceTier: () => DeviceTier;
|
|
20
|
+
/** HTML trust policy governing text-sink writes. Defaults to `text`. */
|
|
21
|
+
readonly htmlPolicy?: HtmlPolicy;
|
|
22
|
+
/** Opt-in to `trusted-html` (pairs with `htmlPolicy`). */
|
|
23
|
+
readonly allowTrustedHtml?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Controller surface of an LLM session. Tracks runtime state, ingests
|
|
27
|
+
* chunks from a stream adapter, and releases resources on
|
|
28
|
+
* {@link LLMSessionShape.dispose}.
|
|
29
|
+
*/
|
|
30
|
+
export interface LLMSessionShape {
|
|
31
|
+
/** Current session state (`idle` / `active` / `reconnecting` / `disposed`). */
|
|
32
|
+
readonly state: RuntimeSessionState;
|
|
33
|
+
/** Transition from idle to active. */
|
|
34
|
+
activate(): void;
|
|
35
|
+
/** Enter the reconnecting state so incoming chunks are gated. */
|
|
36
|
+
beginReconnect(): void;
|
|
37
|
+
/** Consume one chunk; returns `done` on stream end. */
|
|
38
|
+
ingest(chunk: LLMChunk): 'continue' | 'done';
|
|
39
|
+
/** Replay receipts after a gap; returns the chosen strategy type. */
|
|
40
|
+
replayGap(): {
|
|
41
|
+
readonly type: string;
|
|
42
|
+
};
|
|
43
|
+
/** Remember a server-emitted receipt envelope for later replay. */
|
|
44
|
+
rememberEnvelope(envelope: Receipt.Envelope): void;
|
|
45
|
+
/** Reset accumulated state; optionally re-bind the target element. */
|
|
46
|
+
reset(target?: HTMLElement): void;
|
|
47
|
+
/** Terminate the session and release pooled runtimes. */
|
|
48
|
+
dispose(): void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pluggable callbacks a session uses to render text/frames and emit
|
|
52
|
+
* observability events. Implementations either write to the DOM
|
|
53
|
+
* ({@link createDOMLLMSessionHost}) or funnel data into external
|
|
54
|
+
* observers ({@link createSupportLLMSessionHost}).
|
|
55
|
+
*/
|
|
56
|
+
export interface LLMSessionHost {
|
|
57
|
+
setTarget(target?: HTMLElement): void;
|
|
58
|
+
renderText(text: string, accumulated: string, mode: string): boolean;
|
|
59
|
+
renderFrame(frame: UIFrame, accumulated: string, mode: string): boolean;
|
|
60
|
+
emitToken(text: string, accumulated: string): void;
|
|
61
|
+
emitFrame(frame: UIFrame): void;
|
|
62
|
+
emitToolStart(name: string): void;
|
|
63
|
+
emitToolEnd(name: string, args: unknown): void;
|
|
64
|
+
emitDone(accumulated: string): void;
|
|
65
|
+
}
|
|
66
|
+
interface SupportLLMSessionHostHandlers {
|
|
67
|
+
readonly onToken?: (detail: {
|
|
68
|
+
readonly text: string;
|
|
69
|
+
readonly accumulated: string;
|
|
70
|
+
}) => void;
|
|
71
|
+
readonly onTokenValue?: (text: string, accumulated: string) => void;
|
|
72
|
+
readonly onFrame?: (frame: UIFrame) => void;
|
|
73
|
+
readonly onToolStart?: (detail: {
|
|
74
|
+
readonly name: string;
|
|
75
|
+
}) => void;
|
|
76
|
+
readonly onToolStartValue?: (name: string) => void;
|
|
77
|
+
readonly onToolEnd?: (detail: {
|
|
78
|
+
readonly name: string;
|
|
79
|
+
readonly args: unknown;
|
|
80
|
+
}) => void;
|
|
81
|
+
readonly onToolEndValue?: (name: string, args: unknown) => void;
|
|
82
|
+
readonly onDone?: (detail: {
|
|
83
|
+
readonly accumulated: string;
|
|
84
|
+
}) => void;
|
|
85
|
+
readonly onDoneValue?: (accumulated: string) => void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build an {@link LLMSessionHost} that writes text/frames directly to
|
|
89
|
+
* the DOM and dispatches `czap:llm-*` custom events on `element`.
|
|
90
|
+
* Default host used by {@link createLLMSession}.
|
|
91
|
+
*/
|
|
92
|
+
export declare function createDOMLLMSessionHost(element: HTMLElement, initialTarget: HTMLElement, options?: {
|
|
93
|
+
readonly htmlPolicy?: HtmlPolicy;
|
|
94
|
+
readonly allowTrustedHtml?: boolean;
|
|
95
|
+
}): LLMSessionHost;
|
|
96
|
+
/**
|
|
97
|
+
* Build an {@link LLMSessionHost} that forwards events to the given
|
|
98
|
+
* handler callbacks instead of touching the DOM. Useful for tests,
|
|
99
|
+
* benchmarks, and any caller that wants to observe LLM output
|
|
100
|
+
* programmatically.
|
|
101
|
+
*/
|
|
102
|
+
export declare function createSupportLLMSessionHost(handlers?: SupportLLMSessionHostHandlers): LLMSessionHost;
|
|
103
|
+
/**
|
|
104
|
+
* Minimal {@link LLMSessionHost} that only surfaces the token
|
|
105
|
+
* boundary, skipping the branching composition in
|
|
106
|
+
* {@link createSupportLLMSessionHost}. Exposed for startup benchmarks
|
|
107
|
+
* that need the cheapest possible host.
|
|
108
|
+
*/
|
|
109
|
+
export declare function createSupportLLMTokenBoundaryHost(onTokenValue: (text: string, accumulated: string) => void): LLMSessionHost;
|
|
110
|
+
/**
|
|
111
|
+
* Build an {@link LLMSessionShape} backed by a caller-supplied
|
|
112
|
+
* {@link LLMSessionHost}. Tests and bench harnesses prefer this
|
|
113
|
+
* variant over {@link createLLMSession} so they can observe output
|
|
114
|
+
* without a DOM.
|
|
115
|
+
*/
|
|
116
|
+
export declare function createLLMSessionWithHost(config: Pick<LLMSessionConfig, 'mode' | 'getDeviceTier'> & {
|
|
117
|
+
readonly target?: HTMLElement;
|
|
118
|
+
}, host: LLMSessionHost): LLMSessionShape;
|
|
119
|
+
/**
|
|
120
|
+
* Default `client:llm` factory: builds a session wired to the DOM.
|
|
121
|
+
* Equivalent to composing {@link createDOMLLMSessionHost} with
|
|
122
|
+
* {@link createLLMSessionWithHost}.
|
|
123
|
+
*/
|
|
124
|
+
export declare function createLLMSession(config: LLMSessionConfig): LLMSessionShape;
|
|
125
|
+
export {};
|
|
126
|
+
//# sourceMappingURL=llm-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-session.d.ts","sourceRoot":"","sources":["../../src/runtime/llm-session.ts"],"names":[],"mappings":"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"}
|