interscript 2.4.5 → 3.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 +25 -0
- package/README.md +90 -41
- package/dist/cli.d.ts +25 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +327 -0
- package/dist/cli.js.map +1 -0
- package/dist/detector.d.ts +22 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +73 -0
- package/dist/detector.js.map +1 -0
- package/dist/errors.d.ts +26 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/http-loader.d.ts +42 -0
- package/dist/http-loader.d.ts.map +1 -0
- package/dist/http-loader.js +95 -0
- package/dist/http-loader.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/isc/converter.d.ts +11 -0
- package/dist/isc/converter.d.ts.map +1 -0
- package/dist/isc/converter.js +177 -0
- package/dist/isc/converter.js.map +1 -0
- package/dist/isc/index.d.ts +16 -0
- package/dist/isc/index.d.ts.map +1 -0
- package/dist/isc/index.js +15 -0
- package/dist/isc/index.js.map +1 -0
- package/dist/isc/loader.d.ts +22 -0
- package/dist/isc/loader.d.ts.map +1 -0
- package/dist/isc/loader.js +47 -0
- package/dist/isc/loader.js.map +1 -0
- package/dist/isc/parser.d.ts +14 -0
- package/dist/isc/parser.d.ts.map +1 -0
- package/dist/isc/parser.js +734 -0
- package/dist/isc/parser.js.map +1 -0
- package/dist/isc/types.d.ts +110 -0
- package/dist/isc/types.d.ts.map +1 -0
- package/dist/isc/types.js +19 -0
- package/dist/isc/types.js.map +1 -0
- package/dist/loader.d.ts +49 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +93 -0
- package/dist/loader.js.map +1 -0
- package/dist/loaders.d.ts +23 -0
- package/dist/loaders.d.ts.map +1 -0
- package/dist/loaders.js +40 -0
- package/dist/loaders.js.map +1 -0
- package/dist/loaders.node.d.ts +25 -0
- package/dist/loaders.node.d.ts.map +1 -0
- package/dist/loaders.node.js +42 -0
- package/dist/loaders.node.js.map +1 -0
- package/dist/ml/imf/index.d.ts +6 -0
- package/dist/ml/imf/index.d.ts.map +1 -0
- package/dist/ml/imf/index.js +6 -0
- package/dist/ml/imf/index.js.map +1 -0
- package/dist/ml/imf/loader.d.ts +19 -0
- package/dist/ml/imf/loader.d.ts.map +1 -0
- package/dist/ml/imf/loader.js +59 -0
- package/dist/ml/imf/loader.js.map +1 -0
- package/dist/ml/imf/model.d.ts +28 -0
- package/dist/ml/imf/model.d.ts.map +1 -0
- package/dist/ml/imf/model.js +181 -0
- package/dist/ml/imf/model.js.map +1 -0
- package/dist/ml/imf/registry.d.ts +34 -0
- package/dist/ml/imf/registry.d.ts.map +1 -0
- package/dist/ml/imf/registry.js +167 -0
- package/dist/ml/imf/registry.js.map +1 -0
- package/dist/ml/imf/tokens.d.ts +13 -0
- package/dist/ml/imf/tokens.d.ts.map +1 -0
- package/dist/ml/imf/tokens.js +32 -0
- package/dist/ml/imf/tokens.js.map +1 -0
- package/dist/ml/index.d.ts +24 -0
- package/dist/ml/index.d.ts.map +1 -0
- package/dist/ml/index.js +25 -0
- package/dist/ml/index.js.map +1 -0
- package/dist/ml/models/rababa/cleaner.d.ts +11 -0
- package/dist/ml/models/rababa/cleaner.d.ts.map +1 -0
- package/dist/ml/models/rababa/cleaner.js +21 -0
- package/dist/ml/models/rababa/cleaner.js.map +1 -0
- package/dist/ml/models/rababa/diacritizer.d.ts +37 -0
- package/dist/ml/models/rababa/diacritizer.d.ts.map +1 -0
- package/dist/ml/models/rababa/diacritizer.js +172 -0
- package/dist/ml/models/rababa/diacritizer.js.map +1 -0
- package/dist/ml/models/rababa/encoder.d.ts +40 -0
- package/dist/ml/models/rababa/encoder.d.ts.map +1 -0
- package/dist/ml/models/rababa/encoder.js +57 -0
- package/dist/ml/models/rababa/encoder.js.map +1 -0
- package/dist/ml/models/rababa/haraqat.d.ts +49 -0
- package/dist/ml/models/rababa/haraqat.d.ts.map +1 -0
- package/dist/ml/models/rababa/haraqat.js +89 -0
- package/dist/ml/models/rababa/haraqat.js.map +1 -0
- package/dist/ml/models/rababa/index.d.ts +12 -0
- package/dist/ml/models/rababa/index.d.ts.map +1 -0
- package/dist/ml/models/rababa/index.js +14 -0
- package/dist/ml/models/rababa/index.js.map +1 -0
- package/dist/ml/models/rababa/reconciler.d.ts +29 -0
- package/dist/ml/models/rababa/reconciler.d.ts.map +1 -0
- package/dist/ml/models/rababa/reconciler.js +81 -0
- package/dist/ml/models/rababa/reconciler.js.map +1 -0
- package/dist/ml/models/secryst/index.d.ts +10 -0
- package/dist/ml/models/secryst/index.d.ts.map +1 -0
- package/dist/ml/models/secryst/index.js +12 -0
- package/dist/ml/models/secryst/index.js.map +1 -0
- package/dist/ml/models/secryst/masks.d.ts +33 -0
- package/dist/ml/models/secryst/masks.d.ts.map +1 -0
- package/dist/ml/models/secryst/masks.js +73 -0
- package/dist/ml/models/secryst/masks.js.map +1 -0
- package/dist/ml/models/secryst/translator.d.ts +31 -0
- package/dist/ml/models/secryst/translator.d.ts.map +1 -0
- package/dist/ml/models/secryst/translator.js +112 -0
- package/dist/ml/models/secryst/translator.js.map +1 -0
- package/dist/ml/models/secryst/vocab.d.ts +39 -0
- package/dist/ml/models/secryst/vocab.d.ts.map +1 -0
- package/dist/ml/models/secryst/vocab.js +85 -0
- package/dist/ml/models/secryst/vocab.js.map +1 -0
- package/dist/ml/provision/base.d.ts +14 -0
- package/dist/ml/provision/base.d.ts.map +1 -0
- package/dist/ml/provision/base.js +19 -0
- package/dist/ml/provision/base.js.map +1 -0
- package/dist/ml/provision/index.d.ts +62 -0
- package/dist/ml/provision/index.d.ts.map +1 -0
- package/dist/ml/provision/index.js +107 -0
- package/dist/ml/provision/index.js.map +1 -0
- package/dist/ml/provision/manifest.d.ts +79 -0
- package/dist/ml/provision/manifest.d.ts.map +1 -0
- package/dist/ml/provision/manifest.js +122 -0
- package/dist/ml/provision/manifest.js.map +1 -0
- package/dist/ml/registry.d.ts +35 -0
- package/dist/ml/registry.d.ts.map +1 -0
- package/dist/ml/registry.js +76 -0
- package/dist/ml/registry.js.map +1 -0
- package/dist/ml/session/index.d.ts +55 -0
- package/dist/ml/session/index.d.ts.map +1 -0
- package/dist/ml/session/index.js +57 -0
- package/dist/ml/session/index.js.map +1 -0
- package/dist/ml/session/litert-web.d.ts +50 -0
- package/dist/ml/session/litert-web.d.ts.map +1 -0
- package/dist/ml/session/litert-web.js +146 -0
- package/dist/ml/session/litert-web.js.map +1 -0
- package/dist/ml/session/onnx-node.d.ts +10 -0
- package/dist/ml/session/onnx-node.d.ts.map +1 -0
- package/dist/ml/session/onnx-node.js +62 -0
- package/dist/ml/session/onnx-node.js.map +1 -0
- package/dist/ml/session/onnx-web.d.ts +23 -0
- package/dist/ml/session/onnx-web.d.ts.map +1 -0
- package/dist/ml/session/onnx-web.js +74 -0
- package/dist/ml/session/onnx-web.js.map +1 -0
- package/dist/ml/types.d.ts +113 -0
- package/dist/ml/types.d.ts.map +1 -0
- package/dist/ml/types.js +7 -0
- package/dist/ml/types.js.map +1 -0
- package/dist/runtime/compile-item.d.ts +53 -0
- package/dist/runtime/compile-item.d.ts.map +1 -0
- package/dist/runtime/compile-item.js +278 -0
- package/dist/runtime/compile-item.js.map +1 -0
- package/dist/runtime/context.d.ts +33 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +67 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/executor.d.ts +18 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +228 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/interpreter.d.ts +30 -0
- package/dist/runtime/interpreter.d.ts.map +1 -0
- package/dist/runtime/interpreter.js +130 -0
- package/dist/runtime/interpreter.js.map +1 -0
- package/dist/stdlib/ml.d.ts +55 -0
- package/dist/stdlib/ml.d.ts.map +1 -0
- package/dist/stdlib/ml.js +114 -0
- package/dist/stdlib/ml.js.map +1 -0
- package/dist/stdlib.d.ts +96 -0
- package/dist/stdlib.d.ts.map +1 -0
- package/dist/stdlib.js +160 -0
- package/dist/stdlib.js.map +1 -0
- package/dist/types.d.ts +167 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/package.json +78 -18
- package/LICENSE.md +0 -31
- package/README.adoc +0 -78
- package/src/maps/acadsin-zho-Hani-Latn-2002.js +0 -9
- package/src/maps/alalc-amh-Ethi-Latn-1997.js +0 -8
- package/src/maps/alalc-amh-Ethi-Latn-2011.js +0 -7
- package/src/maps/alalc-ara-Arab-Latn-1997.js +0 -8
- package/src/maps/alalc-asm-Deva-Latn-1997.js +0 -50
- package/src/maps/alalc-asm-Deva-Latn-2012.js +0 -7
- package/src/maps/alalc-aze-Arab-Latn-1997.js +0 -11
- package/src/maps/alalc-aze-Cyrl-Latn-1997.js +0 -9
- package/src/maps/alalc-bel-Cyrl-Latn-1997.js +0 -8
- package/src/maps/alalc-ben-Beng-Latn-1997.js +0 -52
- package/src/maps/alalc-ben-Beng-Latn-2017.js +0 -9
- package/src/maps/alalc-bul-Cyrl-Latn-1997.js +0 -10
- package/src/maps/alalc-div-Thaa-Latn-1997.js +0 -38
- package/src/maps/alalc-div-Thaa-Latn-2012.js +0 -7
- package/src/maps/alalc-ell-Grek-Latn-1997.js +0 -25
- package/src/maps/alalc-ell-Grek-Latn-2010.js +0 -27
- package/src/maps/alalc-fas-Arab-Latn-1997.js +0 -11
- package/src/maps/alalc-guj-Gujr-Latn-1997.js +0 -50
- package/src/maps/alalc-guj-Gujr-Latn-2011.js +0 -7
- package/src/maps/alalc-hin-Deva-Latn-1997.js +0 -60
- package/src/maps/alalc-hin-Deva-Latn-2011.js +0 -7
- package/src/maps/alalc-kan-Kana-Latn-1997.js +0 -51
- package/src/maps/alalc-kan-Kana-Latn-2011.js +0 -7
- package/src/maps/alalc-kat-Geok-Latn-1997.js +0 -8
- package/src/maps/alalc-kat-Geok-Latn-2011.js +0 -7
- package/src/maps/alalc-kat-Geor-Latn-1997.js +0 -8
- package/src/maps/alalc-kat-Geor-Latn-2011.js +0 -7
- package/src/maps/alalc-kor-Hang-Latn-1997.js +0 -9
- package/src/maps/alalc-mal-Mlym-Latn-1997.js +0 -52
- package/src/maps/alalc-mal-Mlym-Latn-2012.js +0 -7
- package/src/maps/alalc-mar-Deva-Latn-1997.js +0 -13
- package/src/maps/alalc-mar-Deva-Latn-2011.js +0 -7
- package/src/maps/alalc-mkd-Cyrl-Latn-1997.js +0 -17
- package/src/maps/alalc-mkd-Cyrl-Latn-2013.js +0 -17
- package/src/maps/alalc-mon-Cyrl-Latn-1997.js +0 -8
- package/src/maps/alalc-ori-Orya-Latn-1997.js +0 -55
- package/src/maps/alalc-ori-Orya-Latn-2011.js +0 -7
- package/src/maps/alalc-pan-Guru-Latn-1997.js +0 -17
- package/src/maps/alalc-pan-Guru-Latn-2011.js +0 -7
- package/src/maps/alalc-pli-Deva-Latn-2012.js +0 -13
- package/src/maps/alalc-pra-Deva-Latn-2012.js +0 -7
- package/src/maps/alalc-rus-Cyrl-Latn-1997.js +0 -9
- package/src/maps/alalc-rus-Cyrl-Latn-2012.js +0 -9
- package/src/maps/alalc-san-Deva-Latn-2012.js +0 -49
- package/src/maps/alalc-sin-Sinh-Latn-1997.js +0 -54
- package/src/maps/alalc-sin-Sinh-Latn-2011.js +0 -7
- package/src/maps/alalc-srp-Cyrl-Latn-1997.js +0 -17
- package/src/maps/alalc-srp-Cyrl-Latn-2013.js +0 -15
- package/src/maps/alalc-tam-Taml-Latn-1997.js +0 -9
- package/src/maps/alalc-tam-Taml-Latn-2011.js +0 -7
- package/src/maps/alalc-tel-Telu-Latn-1997.js +0 -54
- package/src/maps/alalc-tel-Telu-Latn-2011.js +0 -7
- package/src/maps/alalc-tir-Ethi-Latn-1997.js +0 -8
- package/src/maps/alalc-tir-Ethi-Latn-2011.js +0 -7
- package/src/maps/alalc-ukr-Cyrl-Latn-1997.js +0 -9
- package/src/maps/alalc-ukr-Cyrl-Latn-2011.js +0 -7
- package/src/maps/apcbg-bul-Cyrl-Latn-1995.js +0 -8
- package/src/maps/az-aze-Cyrl-Latn-1939.js +0 -8
- package/src/maps/az-aze-Cyrl-Latn-1958.js +0 -11
- package/src/maps/bas-rus-Cyrl-Latn-2017-bss.js +0 -10
- package/src/maps/bas-rus-Cyrl-Latn-2017-oss.js +0 -10
- package/src/maps/bgn-jpn-Hrkt-Latn-1962.js +0 -10
- package/src/maps/bgn-kor-Hang-Latn-1943.js +0 -9
- package/src/maps/bgn-kor-Kore-Latn-1943.js +0 -10
- package/src/maps/bgna-bul-Cyrl-Latn-2006.js +0 -7
- package/src/maps/bgna-bul-Cyrl-Latn-2009.js +0 -7
- package/src/maps/bgnpcgn-amh-Ethi-Latn-1967.js +0 -8
- package/src/maps/bgnpcgn-ara-Arab-Latn-1956.js +0 -25
- package/src/maps/bgnpcgn-arm-Armn-Latn-1981.js +0 -8
- package/src/maps/bgnpcgn-aze-Cyrl-Latn-1993.js +0 -8
- package/src/maps/bgnpcgn-bak-Cyrl-Latn-2007.js +0 -16
- package/src/maps/bgnpcgn-bal-Arab-Latn-2008.js +0 -9
- package/src/maps/bgnpcgn-bel-Cyrl-Latn-1979.js +0 -12
- package/src/maps/bgnpcgn-bul-Cyrl-Latn-1952.js +0 -12
- package/src/maps/bgnpcgn-bul-Cyrl-Latn-2013.js +0 -10
- package/src/maps/bgnpcgn-che-Cyrl-Latn-2008.js +0 -15
- package/src/maps/bgnpcgn-deu-Latn-Latn-2000.js +0 -12
- package/src/maps/bgnpcgn-div-Thaa-Latn-1972.js +0 -13
- package/src/maps/bgnpcgn-div-Thaa-Latn-1988.js +0 -9
- package/src/maps/bgnpcgn-ell-Grek-Latn-1962.js +0 -52
- package/src/maps/bgnpcgn-ell-Grek-Latn-1996.js +0 -7
- package/src/maps/bgnpcgn-fao-Latn-Latn-1964.js +0 -11
- package/src/maps/bgnpcgn-fao-Latn-Latn-1968.js +0 -7
- package/src/maps/bgnpcgn-fas-Arab-Latn-1956.js +0 -8
- package/src/maps/bgnpcgn-isl-Latn-Latn-1964.js +0 -10
- package/src/maps/bgnpcgn-isl-Latn-Latn-1968.js +0 -7
- package/src/maps/bgnpcgn-jpn-Hrkt-Latn-1976.js +0 -10
- package/src/maps/bgnpcgn-kat-Geor-Latn-1981.js +0 -8
- package/src/maps/bgnpcgn-kat-Geor-Latn-2009.js +0 -7
- package/src/maps/bgnpcgn-kaz-Cyrl-Latn-1979.js +0 -8
- package/src/maps/bgnpcgn-kir-Cyrl-Latn-1979.js +0 -8
- package/src/maps/bgnpcgn-kor-Hang-Latn-kn-1945.js +0 -52
- package/src/maps/bgnpcgn-kor-Hang-Latn-rok-2011.js +0 -8
- package/src/maps/bgnpcgn-kor-Kore-Latn-rok-2011.js +0 -8
- package/src/maps/bgnpcgn-kur-Arab-Latn-2007.js +0 -9
- package/src/maps/bgnpcgn-mkd-Cyrl-Latn-1981.js +0 -15
- package/src/maps/bgnpcgn-mkd-Cyrl-Latn-2013.js +0 -17
- package/src/maps/bgnpcgn-mon-Cyrl-Latn-1964.js +0 -12
- package/src/maps/bgnpcgn-nep-Deva-Latn-2011.js +0 -13
- package/src/maps/bgnpcgn-per-Arab-Latn-1958.js +0 -10
- package/src/maps/bgnpcgn-prs-Arab-Latn-2007.js +0 -25
- package/src/maps/bgnpcgn-prs-Arab-Latn-yaghoubi.js +0 -8
- package/src/maps/bgnpcgn-pus-Arab-Latn-1968.js +0 -26
- package/src/maps/bgnpcgn-ron-Cyrl-Latn-2002.js +0 -23
- package/src/maps/bgnpcgn-rue-Cyrl-Latn-2016.js +0 -8
- package/src/maps/bgnpcgn-rus-Cyrl-Latn-1947.js +0 -52
- package/src/maps/bgnpcgn-sme-Latn-Latn-1984.js +0 -8
- package/src/maps/bgnpcgn-srp-Cyrl-Latn-1962.js +0 -7
- package/src/maps/bgnpcgn-srp-Cyrl-Latn-2005.js +0 -15
- package/src/maps/bgnpcgn-tat-Cyrl-Latn-2007.js +0 -27
- package/src/maps/bgnpcgn-tgk-Cyrl-Latn-1994.js +0 -12
- package/src/maps/bgnpcgn-tir-Ethi-Latn-2007.js +0 -8
- package/src/maps/bgnpcgn-ukr-Cyrl-Latn-1965.js +0 -9
- package/src/maps/bgnpcgn-ukr-Cyrl-Latn-2019.js +0 -9
- package/src/maps/bgnpcgn-urd-Arab-Latn-2007.js +0 -25
- package/src/maps/bgnpcgn-uzb-Cyrl-Latn-1979.js +0 -12
- package/src/maps/bgnpcgn-uzb-Cyrl-Latn-2000.js +0 -11
- package/src/maps/bgnpcgn-zho-Hans-Latn-1979.js +0 -8
- package/src/maps/bis-asm-Beng-Latn-13194-1991.js +0 -14
- package/src/maps/bis-ben-Beng-Latn-13194-1991.js +0 -14
- package/src/maps/bis-dev-Deva-Latn-13194-1991.js +0 -14
- package/src/maps/bis-guj-Gujr-Latn-13194-1991.js +0 -14
- package/src/maps/bis-kan-Kana-Latn-13194-1991.js +0 -14
- package/src/maps/bis-mlm-Mlym-Latn-13194-1991.js +0 -14
- package/src/maps/bis-ori-Orya-Latn-13194-1991.js +0 -14
- package/src/maps/bis-pnj-Guru-Latn-13194-1991.js +0 -14
- package/src/maps/bis-tel-Telu-Latn-13194-1991.js +0 -14
- package/src/maps/bis-tml-Taml-Latn-13194-1991.js +0 -14
- package/src/maps/by-bel-Cyrl-Latn-1998.js +0 -19
- package/src/maps/by-bel-Cyrl-Latn-2007.js +0 -7
- package/src/maps/din-grc-Grek-Latn-31634-2011-t1.js +0 -23
- package/src/maps/din-hin-Deva-Latn-33904-2018.js +0 -9
- package/src/maps/din-kat-Geor-Latn-32707-2010.js +0 -8
- package/src/maps/din-mar-Deva-Latn-33904-2018.js +0 -9
- package/src/maps/din-nep-Deva-Latn-33904-2018.js +0 -9
- package/src/maps/din-pli-Deva-Latn-33904-2018.js +0 -7
- package/src/maps/din-pra-Deva-Latn-33904-2018.js +0 -7
- package/src/maps/din-san-Deva-Latn-33904-2018.js +0 -51
- package/src/maps/din-tam-Taml-Latn-33903-2016.js +0 -34
- package/src/maps/dos-nep-Deva-Latn-1997.js +0 -9
- package/src/maps/elot-ell-Grek-Latn-743-1982-tl.js +0 -53
- package/src/maps/elot-ell-Grek-Latn-743-1982-ts.js +0 -53
- package/src/maps/elot-ell-Grek-Latn-743-2001-tl.js +0 -7
- package/src/maps/elot-ell-Grek-Latn-743-2001-ts.js +0 -7
- package/src/maps/ggg-kat-Geor-Latn-2002.js +0 -8
- package/src/maps/gki-bel-Cyrl-Latn-1992.js +0 -9
- package/src/maps/gki-bel-Cyrl-Latn-2000.js +0 -18
- package/src/maps/gost-rus-Cyrl-Latn-16876-71-1983.js +0 -10
- package/src/maps/gost-rus-Cyrl-Latn-7.79-2000-2002.js +0 -9
- package/src/maps/hk-yue-Hani-Latn-1888.js +0 -10
- package/src/maps/icao-bel-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-bul-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-fas-Arab-Latn-9303.js +0 -8
- package/src/maps/icao-heb-Hebr-Latn-9303.js +0 -8
- package/src/maps/icao-mkd-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-rus-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-srp-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-ukr-Cyrl-Latn-9303.js +0 -8
- package/src/maps/index.json +0 -1
- package/src/maps/iso-ara-Arab-Latn-233-1984.js +0 -24
- package/src/maps/iso-ara-Arab-Latn-233-2-1993.js +0 -12
- package/src/maps/iso-asm-Beng-Latn-15919-2001.js +0 -9
- package/src/maps/iso-ben-Beng-Latn-15919-2001.js +0 -9
- package/src/maps/iso-ell-Grek-Latn-843-1997-t1.js +0 -15
- package/src/maps/iso-ell-Grek-Latn-843-1997-t2.js +0 -9
- package/src/maps/iso-guj-Gujr-Latn-15919-2001.js +0 -9
- package/src/maps/iso-hin-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-inc-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-jpn-Hrkt-Latn-3602-1989.js +0 -10
- package/src/maps/iso-kan-Kana-Latn-15919-2001.js +0 -9
- package/src/maps/iso-kat-Geor-Latn-9984-1996.js +0 -8
- package/src/maps/iso-kor-Hang-Latn-1996-method1.js +0 -14
- package/src/maps/iso-kor-Hang-Latn-1996-method2.js +0 -13
- package/src/maps/iso-mal-Mlym-Latn-15919-2001.js +0 -12
- package/src/maps/iso-mar-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-nep-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-ori-Orya-Latn-15919-2001.js +0 -9
- package/src/maps/iso-pan-Guru-Latn-15919-2001.js +0 -9
- package/src/maps/iso-pli-Beng-Latn-15919-2001.js +0 -7
- package/src/maps/iso-pli-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-pli-Sinh-Latn-15919-2001.js +0 -9
- package/src/maps/iso-pli-Thai-Latn-15919-2001.js +0 -7
- package/src/maps/iso-pra-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-prs-Arab-Latn-233-3-1999.js +0 -8
- package/src/maps/iso-rus-Cyrl-Latn-9-1995.js +0 -8
- package/src/maps/iso-san-Deva-Latn-15919-2001.js +0 -9
- package/src/maps/iso-tam-Taml-Latn-15919-2001.js +0 -9
- package/src/maps/iso-tel-Telu-Latn-15919-2001.js +0 -9
- package/src/maps/iso-tha-Thai-Latn-11940-1998.js +0 -9
- package/src/maps/kp-kor-Hang-Latn-2002.js +0 -78
- package/src/maps/lshk-yue-Hani-Latn-jyutping-1993.js +0 -8
- package/src/maps/masm-mon-Cyrl-Latn-5217-2012.js +0 -8
- package/src/maps/masm-mon-Latn-Cyrl-5217-2012.js +0 -18
- package/src/maps/mext-jpn-Hrkt-Latn-1954.js +0 -16
- package/src/maps/moct-kor-Hang-Latn-2000.js +0 -112
- package/src/maps/mofa-jpn-Hrkt-Latn-1989.js +0 -14
- package/src/maps/mv-div-Thaa-Latn-1987.js +0 -58
- package/src/maps/mvd-bel-Cyrl-Latn-2008.js +0 -36
- package/src/maps/mvd-bel-Cyrl-Latn-2010.js +0 -11
- package/src/maps/mvd-rus-Cyrl-Latn-2008.js +0 -19
- package/src/maps/mvd-rus-Cyrl-Latn-2010.js +0 -9
- package/src/maps/odni-ara-Arab-Latn-2004.js +0 -7
- package/src/maps/odni-ara-Arab-Latn-2015.js +0 -10
- package/src/maps/odni-aze-Cyrl-Latn-2015.js +0 -18
- package/src/maps/odni-bel-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-bul-Cyrl-Latn-2005.js +0 -8
- package/src/maps/odni-bul-Cyrl-Latn-2015.js +0 -13
- package/src/maps/odni-che-Cyrl-Latn-2015.js +0 -13
- package/src/maps/odni-fas-Arab-Latn-2004.js +0 -8
- package/src/maps/odni-fas-Arab-Latn-2015.js +0 -8
- package/src/maps/odni-hin-Deva-Latn-2004.js +0 -8
- package/src/maps/odni-hin-Deva-Latn-2015.js +0 -8
- package/src/maps/odni-kat-Geor-Latn-2015.js +0 -8
- package/src/maps/odni-kaz-Cyrl-Latn-2015.js +0 -20
- package/src/maps/odni-kir-Cyrl-Latn-2015.js +0 -18
- package/src/maps/odni-kor-Hang-Latn-2015.js +0 -92
- package/src/maps/odni-mkd-Cyrl-Latn-2005.js +0 -7
- package/src/maps/odni-mkd-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-prs-Arab-Latn-2004.js +0 -9
- package/src/maps/odni-prs-Arab-Latn-2015.js +0 -9
- package/src/maps/odni-pus-Arab-Latn-2011.js +0 -10
- package/src/maps/odni-rus-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-srp-Cyrl-Latn-2005.js +0 -7
- package/src/maps/odni-srp-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-tat-Cyrl-Latn-2015.js +0 -19
- package/src/maps/odni-tgk-Cyrl-Latn-2015.js +0 -21
- package/src/maps/odni-tuk-Cyrl-Latn-2015.js +0 -13
- package/src/maps/odni-uig-Cyrl-Latn-2015.js +0 -17
- package/src/maps/odni-ukr-Cyrl-Latn-2015.js +0 -9
- package/src/maps/odni-urd-Arab-Latn-2015.js +0 -8
- package/src/maps/odni-uzb-Cyrl-Latn-2015.js +0 -13
- package/src/maps/posix.js +0 -5
- package/src/maps/sac-zho-Hans-Latn-1979.js +0 -8
- package/src/maps/sasm-mon-Mong-Latn-general-1978.js +0 -8
- package/src/maps/sasm-mon-Mong-Latn-phonetic-1978.js +0 -9
- package/src/maps/ses-ara-Arab-Latn-1930.js +0 -10
- package/src/maps/stategeocadastre-ukr-Cyrl-Latn-1993.js +0 -19
- package/src/maps/ua-ukr-Cyrl-Latn-1996.js +0 -21
- package/src/maps/ua-ukr-Cyrl-Latn-2007.js +0 -16
- package/src/maps/ua-ukr-Cyrl-Latn-2010.js +0 -11
- package/src/maps/un-amh-Ethi-Latn-2016.js +0 -9
- package/src/maps/un-ara-Arab-Latn-1971.js +0 -13
- package/src/maps/un-ara-Arab-Latn-1972.js +0 -13
- package/src/maps/un-ara-Arab-Latn-2017.js +0 -24
- package/src/maps/un-asm-Beng-Latn-1972.js +0 -50
- package/src/maps/un-bel-Cyrl-Latn-2007.js +0 -7
- package/src/maps/un-ben-Beng-Latn-2016.js +0 -8
- package/src/maps/un-bul-Cyrl-Latn-1977.js +0 -14
- package/src/maps/un-ell-Grek-Latn-1987-phonetic.js +0 -83
- package/src/maps/un-ell-Grek-Latn-1987-tl.js +0 -7
- package/src/maps/un-ell-Grek-Latn-1987-ts.js +0 -7
- package/src/maps/un-guj-Gujr-Latn-1972.js +0 -45
- package/src/maps/un-hin-Deva-Latn-2016.js +0 -91
- package/src/maps/un-kan-Kana-Latn-2016.js +0 -45
- package/src/maps/un-mal-Mlym-Latn-1972.js +0 -48
- package/src/maps/un-mar-Deva-Latn-2016.js +0 -11
- package/src/maps/un-mkd-Cyrl-Latn-1977.js +0 -21
- package/src/maps/un-mon-Mong-Latn-general-2013.js +0 -7
- package/src/maps/un-mon-Mong-Latn-phonetic-2013.js +0 -7
- package/src/maps/un-nep-Deva-Latn-1972.js +0 -91
- package/src/maps/un-nep-Deva-Latn-2013.js +0 -7
- package/src/maps/un-ori-Orya-Latn-1972.js +0 -48
- package/src/maps/un-pan-Guru-Latn-1972.js +0 -87
- package/src/maps/un-prs-Arab-Latn-1967.js +0 -11
- package/src/maps/un-rus-Cyrl-Latn-1987.js +0 -9
- package/src/maps/un-sin-Sinh-Latn-1972.js +0 -46
- package/src/maps/un-srp-Cyrl-Latn-1997.js +0 -7
- package/src/maps/un-tam-Taml-Latn-1972.js +0 -34
- package/src/maps/un-tel-Telu-Latn-1972.js +0 -46
- package/src/maps/un-ukr-Cyrl-Latn-1998.js +0 -10
- package/src/maps/un-ukr-Cyrl-Latn-2012.js +0 -7
- package/src/maps/un-urd-Arab-Latn-1972.js +0 -25
- package/src/maps/unicode.js +0 -7
- package/src/maps/var-Cyrl.js +0 -7
- package/src/maps/var-amh-Ethi-Latn-eae-2003.js +0 -8
- package/src/maps/var-gez-Ethi-Latn-eae-2003.js +0 -7
- package/src/maps/var-hin-Deva-Latn-hunterian-1872.js +0 -12
- package/src/maps/var-jpn-Hrkt-Latn-hepburn-1886.js +0 -18
- package/src/maps/var-jpn-Hrkt-Latn-hepburn-1954.js +0 -17
- package/src/maps/var-kor-Hang-Hang-jamo.js +0 -8
- package/src/maps/var-kor-Hang-Latn-mr-1939.js +0 -355
- package/src/maps/var-kor-Kore-Hang-2013.js +0 -8
- package/src/maps/var-kor-Kore-Latn-mr-1939.js +0 -10
- package/src/maps/var-kor.js +0 -19
- package/src/maps/var-mar-Deva-Latn-hunterian-1872.js +0 -7
- package/src/maps/var-mon-Mong-Latn-1930.js +0 -8
- package/src/maps/var-mon-Mong-Latn-lessing.js +0 -14
- package/src/maps/var-mon-Mong-Latn-vpmc.js +0 -10
- package/src/maps/var-pra-Deva-Latn-iast-1912.js +0 -7
- package/src/maps/var-san-Deva-Latn-iast-1912.js +0 -9
- package/src/maps/var-zho-Hani-Latn-wd-1979.js +0 -13
- package/src/stdlib.js +0 -294
- package/test/test.js +0 -26
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest-driven model resolution.
|
|
3
|
+
*
|
|
4
|
+
* The source of truth for "what model version is current" lives in
|
|
5
|
+
* the `@interscript/models` npm package (a tiny JSON manifest kept
|
|
6
|
+
* in lockstep with GH Releases in `interscript/ml-models`).
|
|
7
|
+
*
|
|
8
|
+
* Resolution order for the manifest itself:
|
|
9
|
+
* 1. Programmatically injected via `setManifestUrl()` or
|
|
10
|
+
* `setInlineManifest()` (tests, air-gapped envs).
|
|
11
|
+
* 2. The `@interscript/models` package, when installed.
|
|
12
|
+
* 3. A remote JSON URL on the CDN (`manifest.json` next to the
|
|
13
|
+
* release assets).
|
|
14
|
+
*
|
|
15
|
+
* See `ml-models/TODO.distribution/04-npm-packages.md` for the
|
|
16
|
+
* full MECE breakdown of who owns what.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Per-task manifest entry. Matches `npm/models/manifest.json` shape.
|
|
20
|
+
*/
|
|
21
|
+
export interface ManifestModelEntry {
|
|
22
|
+
readonly status: "preview" | "stable" | "deprecated";
|
|
23
|
+
readonly version: string;
|
|
24
|
+
readonly note?: string;
|
|
25
|
+
readonly cdn_base: string;
|
|
26
|
+
readonly github_base: string;
|
|
27
|
+
}
|
|
28
|
+
export interface Manifest {
|
|
29
|
+
readonly schema_version: number;
|
|
30
|
+
readonly models: Readonly<Record<string, ManifestModelEntry>>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Asset variants a release may ship. `fp32` (no suffix) is the
|
|
34
|
+
* default; q8 is the browser-optimized default.
|
|
35
|
+
*/
|
|
36
|
+
export type AssetVariant = "fp32" | "q8" | "q4" | "fp16";
|
|
37
|
+
/**
|
|
38
|
+
* Serialization format. ONNX is the historical default; LiteRT (.tflite)
|
|
39
|
+
* is the 2026 alternative backed by Google's LiteRT.js runtime.
|
|
40
|
+
*
|
|
41
|
+
* The two formats are orthogonal to `AssetVariant` — both can be
|
|
42
|
+
* quantized to q8, both can be fp32. The runtime that loads the file
|
|
43
|
+
* is what differs.
|
|
44
|
+
*/
|
|
45
|
+
export type AssetFormat = "onnx" | "tflite";
|
|
46
|
+
export declare function setInlineManifest(m: Manifest | null): void;
|
|
47
|
+
export declare function setManifestUrl(url: string | null): void;
|
|
48
|
+
/**
|
|
49
|
+
* Load the manifest. Cached after first call; bust the cache with
|
|
50
|
+
* `setInlineManifest()` or `setManifestUrl()`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function loadManifest(): Promise<Manifest>;
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a `(kind, id)` ref to a manifest entry. The `id` field on
|
|
55
|
+
* a ModelRef carries the task name (e.g. "rababa_arabic"); the kind
|
|
56
|
+
* is redundant but kept for backwards compatibility.
|
|
57
|
+
*
|
|
58
|
+
* Returns `null` if the task isn't in the manifest. Callers decide
|
|
59
|
+
* whether that's an error or a "use bundled fallback" signal.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveManifestEntry(kind: string, id: string): Promise<ManifestModelEntry | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Build concrete artifact URLs for a model. Prefers the CDN base;
|
|
64
|
+
* GitHub Releases base is the fallback (slower, but no CDN cache).
|
|
65
|
+
*
|
|
66
|
+
* Both URLs use the same asset naming convention so a downloader
|
|
67
|
+
* can verify checksums identically against either source.
|
|
68
|
+
*/
|
|
69
|
+
export declare function artifactUrls(entry: ManifestModelEntry, variant?: AssetVariant, format?: AssetFormat): {
|
|
70
|
+
primary: string;
|
|
71
|
+
fallback: string;
|
|
72
|
+
assetName: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Sidecar artifacts that ship with every release. These names match
|
|
76
|
+
* the release pipeline in `ml-models/.github/workflows/release.yml`.
|
|
77
|
+
*/
|
|
78
|
+
export declare function sidecarFilenames(entry: ManifestModelEntry, variant?: AssetVariant, format?: AssetFormat): readonly string[];
|
|
79
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAA;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;CAC9D;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAA;AAExD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAA;AAkB3C,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAG1D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGvD;AAWD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAetD;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAIpC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,YAAmB,EAC5B,MAAM,GAAE,WAAoB,GAC3B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAS1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,YAAmB,EAC5B,MAAM,GAAE,WAAoB,GAC3B,SAAS,MAAM,EAAE,CAGnB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest-driven model resolution.
|
|
3
|
+
*
|
|
4
|
+
* The source of truth for "what model version is current" lives in
|
|
5
|
+
* the `@interscript/models` npm package (a tiny JSON manifest kept
|
|
6
|
+
* in lockstep with GH Releases in `interscript/ml-models`).
|
|
7
|
+
*
|
|
8
|
+
* Resolution order for the manifest itself:
|
|
9
|
+
* 1. Programmatically injected via `setManifestUrl()` or
|
|
10
|
+
* `setInlineManifest()` (tests, air-gapped envs).
|
|
11
|
+
* 2. The `@interscript/models` package, when installed.
|
|
12
|
+
* 3. A remote JSON URL on the CDN (`manifest.json` next to the
|
|
13
|
+
* release assets).
|
|
14
|
+
*
|
|
15
|
+
* See `ml-models/TODO.distribution/04-npm-packages.md` for the
|
|
16
|
+
* full MECE breakdown of who owns what.
|
|
17
|
+
*/
|
|
18
|
+
import { getModelBase } from "./base.js";
|
|
19
|
+
const VARIANT_SUFFIX = {
|
|
20
|
+
fp32: "",
|
|
21
|
+
q8: "-q8",
|
|
22
|
+
q4: "-q4",
|
|
23
|
+
fp16: "-fp16",
|
|
24
|
+
};
|
|
25
|
+
const FORMAT_EXTENSION = {
|
|
26
|
+
onnx: ".onnx",
|
|
27
|
+
tflite: ".tflite",
|
|
28
|
+
};
|
|
29
|
+
let cachedManifest = null;
|
|
30
|
+
let inlineManifest = null;
|
|
31
|
+
let manifestUrlOverride = null;
|
|
32
|
+
export function setInlineManifest(m) {
|
|
33
|
+
inlineManifest = m;
|
|
34
|
+
cachedManifest = null;
|
|
35
|
+
}
|
|
36
|
+
export function setManifestUrl(url) {
|
|
37
|
+
manifestUrlOverride = url;
|
|
38
|
+
cachedManifest = null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Default manifest URL — sits next to release assets on the CDN.
|
|
42
|
+
* Points at the jsDelivr mirror of the ml-models repo so it works
|
|
43
|
+
* with zero npm install.
|
|
44
|
+
*/
|
|
45
|
+
function defaultManifestUrl() {
|
|
46
|
+
return `${getModelBase()}/npm/models/manifest.json`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load the manifest. Cached after first call; bust the cache with
|
|
50
|
+
* `setInlineManifest()` or `setManifestUrl()`.
|
|
51
|
+
*/
|
|
52
|
+
export async function loadManifest() {
|
|
53
|
+
if (cachedManifest)
|
|
54
|
+
return cachedManifest;
|
|
55
|
+
if (inlineManifest) {
|
|
56
|
+
cachedManifest = inlineManifest;
|
|
57
|
+
return cachedManifest;
|
|
58
|
+
}
|
|
59
|
+
const url = manifestUrlOverride ?? defaultManifestUrl();
|
|
60
|
+
const res = await fetch(url);
|
|
61
|
+
if (!res.ok) {
|
|
62
|
+
throw new Error(`Failed to load model manifest from ${url}: ${res.status} ${res.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
const json = (await res.json());
|
|
65
|
+
cachedManifest = json;
|
|
66
|
+
return json;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a `(kind, id)` ref to a manifest entry. The `id` field on
|
|
70
|
+
* a ModelRef carries the task name (e.g. "rababa_arabic"); the kind
|
|
71
|
+
* is redundant but kept for backwards compatibility.
|
|
72
|
+
*
|
|
73
|
+
* Returns `null` if the task isn't in the manifest. Callers decide
|
|
74
|
+
* whether that's an error or a "use bundled fallback" signal.
|
|
75
|
+
*/
|
|
76
|
+
export async function resolveManifestEntry(kind, id) {
|
|
77
|
+
const manifest = await loadManifest();
|
|
78
|
+
const taskKey = id.startsWith(`${kind}_`) ? id : `${kind}_${id}`;
|
|
79
|
+
return manifest.models[taskKey] ?? manifest.models[id] ?? null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build concrete artifact URLs for a model. Prefers the CDN base;
|
|
83
|
+
* GitHub Releases base is the fallback (slower, but no CDN cache).
|
|
84
|
+
*
|
|
85
|
+
* Both URLs use the same asset naming convention so a downloader
|
|
86
|
+
* can verify checksums identically against either source.
|
|
87
|
+
*/
|
|
88
|
+
export function artifactUrls(entry, variant = "q8", format = "onnx") {
|
|
89
|
+
const assetName = assetNameFor(entry, variant, format);
|
|
90
|
+
const versionedCdn = entry.cdn_base.replace("{version}", entry.version);
|
|
91
|
+
const versionedGithub = entry.github_base.replace("{version}", entry.version);
|
|
92
|
+
return {
|
|
93
|
+
primary: `${versionedCdn}${assetName}`,
|
|
94
|
+
fallback: `${versionedGithub}${assetName}`,
|
|
95
|
+
assetName,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Sidecar artifacts that ship with every release. These names match
|
|
100
|
+
* the release pipeline in `ml-models/.github/workflows/release.yml`.
|
|
101
|
+
*/
|
|
102
|
+
export function sidecarFilenames(entry, variant = "q8", format = "onnx") {
|
|
103
|
+
const asset = assetNameFor(entry, variant, format);
|
|
104
|
+
return [`${asset}.sha256`, "vocab.json", "config.json"];
|
|
105
|
+
}
|
|
106
|
+
function assetNameFor(entry, variant, format = "onnx") {
|
|
107
|
+
const task = taskNameFromBases(entry);
|
|
108
|
+
return `${task}${VARIANT_SUFFIX[variant]}${FORMAT_EXTENSION[format]}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Best-effort task name extraction from `cdn_base`/`github_base`.
|
|
112
|
+
* Both bases end with `<task>-v{version}/`, so we slice off the
|
|
113
|
+
* trailing version segment.
|
|
114
|
+
*/
|
|
115
|
+
function taskNameFromBases(entry) {
|
|
116
|
+
const lastSegment = entry.github_base.split("/").filter(Boolean).pop() ?? "";
|
|
117
|
+
const suffix = "-v{version}";
|
|
118
|
+
if (lastSegment.endsWith(suffix))
|
|
119
|
+
return lastSegment.slice(0, -suffix.length);
|
|
120
|
+
throw new Error(`Cannot extract task name from manifest entry. github_base=${entry.github_base}`);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/ml/provision/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model registry — adding a new ML model kind is purely additive.
|
|
3
|
+
*
|
|
4
|
+
* Adding ByT5 / Mamba / etc. later = new file in `src/ml/models/<name>/`
|
|
5
|
+
* that calls `registerModel`. Existing code never changes.
|
|
6
|
+
*
|
|
7
|
+
* MECE: every model kind lives in exactly one factory function.
|
|
8
|
+
* OCP: registry is open for extension, closed for modification.
|
|
9
|
+
* DRY: shared infrastructure (session creation, provisioning) is
|
|
10
|
+
* reused by every model.
|
|
11
|
+
*/
|
|
12
|
+
import type { MLModel, ModelFactory, ModelKind, ModelRef } from "./types.js";
|
|
13
|
+
/**
|
|
14
|
+
* Register a factory for a model kind. Call once per kind at module
|
|
15
|
+
* load time.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerModel(kind: ModelKind, factory: ModelFactory): void;
|
|
18
|
+
/**
|
|
19
|
+
* Load (or return cached) model for a given ref. The factory is
|
|
20
|
+
* dispatched by `kind`; the session and artifacts are provisioned
|
|
21
|
+
* by the provisioner.
|
|
22
|
+
*
|
|
23
|
+
* Lazy: models load only when first requested. Subsequent calls
|
|
24
|
+
* return the cached instance.
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadModel(ref: ModelRef): Promise<MLModel>;
|
|
27
|
+
/**
|
|
28
|
+
* List registered model kinds (useful for diagnostics).
|
|
29
|
+
*/
|
|
30
|
+
export declare function registeredKinds(): readonly ModelKind[];
|
|
31
|
+
/**
|
|
32
|
+
* Free all cached models. Used in tests.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resetModels(): Promise<void>;
|
|
35
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/ml/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAK5E;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAK1E;AAQD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB/D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,SAAS,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAajD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model registry — adding a new ML model kind is purely additive.
|
|
3
|
+
*
|
|
4
|
+
* Adding ByT5 / Mamba / etc. later = new file in `src/ml/models/<name>/`
|
|
5
|
+
* that calls `registerModel`. Existing code never changes.
|
|
6
|
+
*
|
|
7
|
+
* MECE: every model kind lives in exactly one factory function.
|
|
8
|
+
* OCP: registry is open for extension, closed for modification.
|
|
9
|
+
* DRY: shared infrastructure (session creation, provisioning) is
|
|
10
|
+
* reused by every model.
|
|
11
|
+
*/
|
|
12
|
+
import { provisionModel } from "./provision/index.js";
|
|
13
|
+
const factories = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Register a factory for a model kind. Call once per kind at module
|
|
16
|
+
* load time.
|
|
17
|
+
*/
|
|
18
|
+
export function registerModel(kind, factory) {
|
|
19
|
+
if (factories.has(kind)) {
|
|
20
|
+
throw new Error(`Model kind "${kind}" is already registered`);
|
|
21
|
+
}
|
|
22
|
+
factories.set(kind, factory);
|
|
23
|
+
}
|
|
24
|
+
const cache = new Map();
|
|
25
|
+
function cacheKey(ref) {
|
|
26
|
+
return `${ref.kind}/${ref.id}/${ref.url ?? "_default"}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Load (or return cached) model for a given ref. The factory is
|
|
30
|
+
* dispatched by `kind`; the session and artifacts are provisioned
|
|
31
|
+
* by the provisioner.
|
|
32
|
+
*
|
|
33
|
+
* Lazy: models load only when first requested. Subsequent calls
|
|
34
|
+
* return the cached instance.
|
|
35
|
+
*/
|
|
36
|
+
export async function loadModel(ref) {
|
|
37
|
+
const key = cacheKey(ref);
|
|
38
|
+
const cached = cache.get(key);
|
|
39
|
+
if (cached)
|
|
40
|
+
return cached;
|
|
41
|
+
const factory = factories.get(ref.kind);
|
|
42
|
+
if (!factory) {
|
|
43
|
+
throw new Error(`Unknown model kind: "${ref.kind}". Register a factory via registerModel("${ref.kind}", factory).`);
|
|
44
|
+
}
|
|
45
|
+
const promise = (async () => {
|
|
46
|
+
const { session, artifacts } = await provisionModel(ref);
|
|
47
|
+
return factory({ session, artifacts });
|
|
48
|
+
})();
|
|
49
|
+
cache.set(key, promise);
|
|
50
|
+
// On failure, drop the cached rejection so callers can retry.
|
|
51
|
+
promise.catch(() => cache.delete(key));
|
|
52
|
+
return promise;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* List registered model kinds (useful for diagnostics).
|
|
56
|
+
*/
|
|
57
|
+
export function registeredKinds() {
|
|
58
|
+
return [...factories.keys()];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Free all cached models. Used in tests.
|
|
62
|
+
*/
|
|
63
|
+
export async function resetModels() {
|
|
64
|
+
const pending = [...cache.values()];
|
|
65
|
+
cache.clear();
|
|
66
|
+
await Promise.allSettled(pending.map(async (p) => {
|
|
67
|
+
try {
|
|
68
|
+
const m = await p;
|
|
69
|
+
await m.dispose();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// already rejected; ignore
|
|
73
|
+
}
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/ml/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAA;AAEpD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAe,EAAE,OAAqB;IAClE,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,yBAAyB,CAAC,CAAA;IAC/D,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAA;AAEjD,SAAS,QAAQ,CAAC,GAAa;IAC7B,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,UAAU,EAAE,CAAA;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAa;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,IAAI,4CAA4C,GAAG,CAAC,IAAI,cAAc,CACnG,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;QACxD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;IACxC,CAAC,CAAC,EAAE,CAAA;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACvB,8DAA8D;IAC9D,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACtC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACnC,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,MAAM,OAAO,CAAC,UAAU,CACtB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA;YACjB,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InferenceSession — abstract interface for running ML models.
|
|
3
|
+
*
|
|
4
|
+
* Three backends implement this:
|
|
5
|
+
* - onnx-node: native ONNX Runtime via onnxruntime-node (Node.js only)
|
|
6
|
+
* - onnx-web: WASM/WebGPU ONNX Runtime via onnxruntime-web (browser)
|
|
7
|
+
* - litert-web: LiteRT.js for .tflite models (browser)
|
|
8
|
+
*
|
|
9
|
+
* Adding a new backend = adding a new file here + exporting a factory.
|
|
10
|
+
* Existing code never changes (OCP).
|
|
11
|
+
*
|
|
12
|
+
* Backends are loaded lazily — only the one needed is imported, keeping
|
|
13
|
+
* the bundle size minimal.
|
|
14
|
+
*/
|
|
15
|
+
import type { InferenceSession, InferenceInputs, InferenceOutputs } from "../types.js";
|
|
16
|
+
export type { InferenceSession, InferenceInputs, InferenceOutputs };
|
|
17
|
+
export type { WebSessionOptions } from "./onnx-web.js";
|
|
18
|
+
export type { LitertSessionOptions } from "./litert-web.js";
|
|
19
|
+
/**
|
|
20
|
+
* Detect environment. Browser backends work in `window`, Node backends
|
|
21
|
+
* work in `process.versions.node`. Some environments (Cloudflare
|
|
22
|
+
* Workers, Deno) might prefer Web.
|
|
23
|
+
*/
|
|
24
|
+
export declare function detectBackend(): "node" | "web" | "unknown";
|
|
25
|
+
/**
|
|
26
|
+
* Options for `createSession`.
|
|
27
|
+
*/
|
|
28
|
+
export interface SessionOptions {
|
|
29
|
+
/** Force a specific backend. Auto-detected by default. */
|
|
30
|
+
backend?: "node" | "web";
|
|
31
|
+
/**
|
|
32
|
+
* Which runtime to use. ONNX is the default; "litert" selects
|
|
33
|
+
* Google's LiteRT.js for .tflite models. The runtime choice must
|
|
34
|
+
* match the model artifact being loaded (.onnx vs .tflite).
|
|
35
|
+
*/
|
|
36
|
+
runtime?: "onnx" | "litert";
|
|
37
|
+
/** ONNX-web only: enable WebGPU with WASM fallback. Default: true. */
|
|
38
|
+
webgpu?: boolean;
|
|
39
|
+
/** LiteRT-web only: accelerator preference. Default: "webgpu". */
|
|
40
|
+
litertAccelerator?: "webgpu" | "webnn" | "wasm";
|
|
41
|
+
/**
|
|
42
|
+
* LiteRT-web only: input/output tensor names. ONNX reads these from
|
|
43
|
+
* the model graph; LiteRT's auto-generated names are not user-facing,
|
|
44
|
+
* so the caller must supply them.
|
|
45
|
+
*/
|
|
46
|
+
inputNames?: readonly string[];
|
|
47
|
+
outputNames?: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create an InferenceSession from a model file. Auto-picks the backend.
|
|
51
|
+
* Backend choice can be overridden via opts.backend; runtime choice
|
|
52
|
+
* via opts.runtime.
|
|
53
|
+
*/
|
|
54
|
+
export declare function createSession(modelData: ArrayBuffer | Uint8Array, opts?: SessionOptions): Promise<InferenceSession>;
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ml/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEtF,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAA;AACnE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE3D;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,KAAK,GAAG,SAAS,CAS1D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC3B,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IAC/C;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,WAAW,GAAG,UAAU,EACnC,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAoB3B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InferenceSession — abstract interface for running ML models.
|
|
3
|
+
*
|
|
4
|
+
* Three backends implement this:
|
|
5
|
+
* - onnx-node: native ONNX Runtime via onnxruntime-node (Node.js only)
|
|
6
|
+
* - onnx-web: WASM/WebGPU ONNX Runtime via onnxruntime-web (browser)
|
|
7
|
+
* - litert-web: LiteRT.js for .tflite models (browser)
|
|
8
|
+
*
|
|
9
|
+
* Adding a new backend = adding a new file here + exporting a factory.
|
|
10
|
+
* Existing code never changes (OCP).
|
|
11
|
+
*
|
|
12
|
+
* Backends are loaded lazily — only the one needed is imported, keeping
|
|
13
|
+
* the bundle size minimal.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Detect environment. Browser backends work in `window`, Node backends
|
|
17
|
+
* work in `process.versions.node`. Some environments (Cloudflare
|
|
18
|
+
* Workers, Deno) might prefer Web.
|
|
19
|
+
*/
|
|
20
|
+
export function detectBackend() {
|
|
21
|
+
const g = globalThis;
|
|
22
|
+
if (g.process?.versions?.node) {
|
|
23
|
+
return "node";
|
|
24
|
+
}
|
|
25
|
+
if (g.self !== undefined) {
|
|
26
|
+
return "web";
|
|
27
|
+
}
|
|
28
|
+
return "unknown";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create an InferenceSession from a model file. Auto-picks the backend.
|
|
32
|
+
* Backend choice can be overridden via opts.backend; runtime choice
|
|
33
|
+
* via opts.runtime.
|
|
34
|
+
*/
|
|
35
|
+
export async function createSession(modelData, opts = {}) {
|
|
36
|
+
const runtime = opts.runtime ?? "onnx";
|
|
37
|
+
// LiteRT runs in the browser only (for now — no Node.js build).
|
|
38
|
+
if (runtime === "litert") {
|
|
39
|
+
const litertOpts = {};
|
|
40
|
+
if (opts.litertAccelerator !== undefined)
|
|
41
|
+
litertOpts.accelerator = opts.litertAccelerator;
|
|
42
|
+
if (opts.inputNames !== undefined)
|
|
43
|
+
litertOpts.inputNames = opts.inputNames;
|
|
44
|
+
if (opts.outputNames !== undefined)
|
|
45
|
+
litertOpts.outputNames = opts.outputNames;
|
|
46
|
+
return (await import("./litert-web.js")).createLitertSession(modelData, litertOpts);
|
|
47
|
+
}
|
|
48
|
+
const backend = (opts.backend ?? detectBackend() === "node") ? "node" : "web";
|
|
49
|
+
if (backend === "node") {
|
|
50
|
+
return (await import("./onnx-node.js")).createNodeSession(modelData);
|
|
51
|
+
}
|
|
52
|
+
// Pass through webgpu only when explicitly set — exactOptionalPropertyTypes
|
|
53
|
+
// distinguishes missing vs undefined, and we want missing = use default.
|
|
54
|
+
const webOpts = opts.webgpu === undefined ? {} : { webgpu: opts.webgpu };
|
|
55
|
+
return (await import("./onnx-web.js")).createWebSession(modelData, webOpts);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ml/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,UAA4E,CAAA;IACtF,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AA2BD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAmC,EACnC,OAAuB,EAAE;IAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAA;IAEtC,gEAAgE;IAChE,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,UAAU,GAA4B,EAAE,CAAA;QAC9C,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;YAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAA;QACzF,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAC1E,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QAC7E,OAAO,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IAC7E,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACtE,CAAC;IACD,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IACxE,OAAO,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LiteRT.js backend — runs .tflite models via Google's runtime.
|
|
3
|
+
*
|
|
4
|
+
* Parallel to onnx-web.ts. Same InferenceSession interface. Lazy-loaded
|
|
5
|
+
* so bundlers exclude it from builds that don't use LiteRT.
|
|
6
|
+
*
|
|
7
|
+
* `@litertjs/core` is a peer dep — users install it if they want the
|
|
8
|
+
* LiteRT runtime. Without it, calling with `runtime: 'litert'` throws
|
|
9
|
+
* a clear error.
|
|
10
|
+
*
|
|
11
|
+
* Note: as of v2.5.2 (released July 9, 2026), the LiteRT.js API is
|
|
12
|
+
* still settling. This wrapper isolates users from API churn — when
|
|
13
|
+
* Google ships breaking changes, we absorb them here.
|
|
14
|
+
*
|
|
15
|
+
* Known API gaps to verify with real models (deferred until v0.1.0
|
|
16
|
+
* produces a real .tflite artifact):
|
|
17
|
+
* - Multi-input: example shows `model.run(singleTensor)`. We pass an
|
|
18
|
+
* array when inputNames.length > 1; will adjust if API differs.
|
|
19
|
+
* - Multi-output: result object shape unknown until we have a real
|
|
20
|
+
* multi-head .tflite.
|
|
21
|
+
* - Int64 inputs: our model has int64 src/lengths. Tensor constructor
|
|
22
|
+
* accepts TypedArray; BigInt64Array should work but untested.
|
|
23
|
+
*/
|
|
24
|
+
import type { InferenceSession } from "../types.js";
|
|
25
|
+
export interface LitertSessionOptions {
|
|
26
|
+
/**
|
|
27
|
+
* Accelerator preference. Default: 'webgpu' (falls back to 'wasm'
|
|
28
|
+
* automatically inside LiteRT.js if WebGPU is unavailable).
|
|
29
|
+
*/
|
|
30
|
+
accelerator?: "webgpu" | "webnn" | "wasm";
|
|
31
|
+
/**
|
|
32
|
+
* URL prefix serving the LiteRT.js WASM files. Default: jsdelivr CDN.
|
|
33
|
+
* Override for self-hosted deployments or offline use.
|
|
34
|
+
*/
|
|
35
|
+
wasmPath?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a LiteRT.js session from a .tflite model blob.
|
|
39
|
+
*
|
|
40
|
+
* Caller supplies input/output names because the .tflite default
|
|
41
|
+
* signature names are auto-generated (e.g. "args_0"). For our rababa
|
|
42
|
+
* models, use:
|
|
43
|
+
* - single-head: inputNames=["src","lengths"], outputNames=["output"]
|
|
44
|
+
* - multi-head: inputNames=["src","lengths"], outputNames=["niqqud","dagesh","sin"]
|
|
45
|
+
*/
|
|
46
|
+
export declare function createLitertSession(modelData: ArrayBuffer | Uint8Array, opts?: LitertSessionOptions & {
|
|
47
|
+
inputNames?: readonly string[];
|
|
48
|
+
outputNames?: readonly string[];
|
|
49
|
+
}): Promise<InferenceSession>;
|
|
50
|
+
//# sourceMappingURL=litert-web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litert-web.d.ts","sourceRoot":"","sources":["../../../src/ml/session/litert-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAKjB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACzC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AA+CD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,WAAW,GAAG,UAAU,EACnC,IAAI,GAAE,oBAAoB,GAAG;IAC3B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B,GACL,OAAO,CAAC,gBAAgB,CAAC,CAuB3B"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LiteRT.js backend — runs .tflite models via Google's runtime.
|
|
3
|
+
*
|
|
4
|
+
* Parallel to onnx-web.ts. Same InferenceSession interface. Lazy-loaded
|
|
5
|
+
* so bundlers exclude it from builds that don't use LiteRT.
|
|
6
|
+
*
|
|
7
|
+
* `@litertjs/core` is a peer dep — users install it if they want the
|
|
8
|
+
* LiteRT runtime. Without it, calling with `runtime: 'litert'` throws
|
|
9
|
+
* a clear error.
|
|
10
|
+
*
|
|
11
|
+
* Note: as of v2.5.2 (released July 9, 2026), the LiteRT.js API is
|
|
12
|
+
* still settling. This wrapper isolates users from API churn — when
|
|
13
|
+
* Google ships breaking changes, we absorb them here.
|
|
14
|
+
*
|
|
15
|
+
* Known API gaps to verify with real models (deferred until v0.1.0
|
|
16
|
+
* produces a real .tflite artifact):
|
|
17
|
+
* - Multi-input: example shows `model.run(singleTensor)`. We pass an
|
|
18
|
+
* array when inputNames.length > 1; will adjust if API differs.
|
|
19
|
+
* - Multi-output: result object shape unknown until we have a real
|
|
20
|
+
* multi-head .tflite.
|
|
21
|
+
* - Int64 inputs: our model has int64 src/lengths. Tensor constructor
|
|
22
|
+
* accepts TypedArray; BigInt64Array should work but untested.
|
|
23
|
+
*/
|
|
24
|
+
const DEFAULT_WASM_PATH = "https://cdn.jsdelivr.net/npm/@litertjs/core@2.5.2/wasm/";
|
|
25
|
+
let cached;
|
|
26
|
+
async function loadLitertCore() {
|
|
27
|
+
if (!cached) {
|
|
28
|
+
cached = (async () => {
|
|
29
|
+
try {
|
|
30
|
+
return (await import("@litertjs/core"));
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
cached = undefined;
|
|
34
|
+
throw new Error("@litertjs/core is required for LiteRT inference. Install with: npm install @litertjs/core", { cause: e });
|
|
35
|
+
}
|
|
36
|
+
})();
|
|
37
|
+
}
|
|
38
|
+
return cached;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a LiteRT.js session from a .tflite model blob.
|
|
42
|
+
*
|
|
43
|
+
* Caller supplies input/output names because the .tflite default
|
|
44
|
+
* signature names are auto-generated (e.g. "args_0"). For our rababa
|
|
45
|
+
* models, use:
|
|
46
|
+
* - single-head: inputNames=["src","lengths"], outputNames=["output"]
|
|
47
|
+
* - multi-head: inputNames=["src","lengths"], outputNames=["niqqud","dagesh","sin"]
|
|
48
|
+
*/
|
|
49
|
+
export async function createLitertSession(modelData, opts = {}) {
|
|
50
|
+
const accelerator = opts.accelerator ?? "webgpu";
|
|
51
|
+
const wasmPath = opts.wasmPath ?? DEFAULT_WASM_PATH;
|
|
52
|
+
const inputNames = opts.inputNames ?? ["src", "lengths"];
|
|
53
|
+
const outputNames = opts.outputNames ?? ["output"];
|
|
54
|
+
const core = await loadLitertCore();
|
|
55
|
+
await core.loadLiteRt(wasmPath, { jspi: accelerator === "webnn" });
|
|
56
|
+
// LiteRT.js takes a URL; create a blob URL from the bytes.
|
|
57
|
+
// (In Node 18+, Blob + URL.createObjectURL are available globally.)
|
|
58
|
+
const blob = new Blob([new Uint8Array(modelData)], { type: "application/octet-stream" });
|
|
59
|
+
const url = URL.createObjectURL(blob);
|
|
60
|
+
let model;
|
|
61
|
+
try {
|
|
62
|
+
model = await core.loadAndCompile(url, { accelerator });
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
// Model is compiled; the URL can be revoked. If LiteRT keeps lazy
|
|
66
|
+
// references to the URL, we'd need to defer this to dispose(). Be
|
|
67
|
+
// conservative and revoke on dispose instead.
|
|
68
|
+
}
|
|
69
|
+
return new LitertInferenceSession(model, core, inputNames, outputNames, url);
|
|
70
|
+
}
|
|
71
|
+
class LitertInferenceSession {
|
|
72
|
+
inputNames;
|
|
73
|
+
outputNames;
|
|
74
|
+
model;
|
|
75
|
+
core;
|
|
76
|
+
blobUrl;
|
|
77
|
+
disposed = false;
|
|
78
|
+
constructor(model, core, inputNames, outputNames, blobUrl) {
|
|
79
|
+
this.model = model;
|
|
80
|
+
this.core = core;
|
|
81
|
+
this.inputNames = inputNames;
|
|
82
|
+
this.outputNames = outputNames;
|
|
83
|
+
this.blobUrl = blobUrl;
|
|
84
|
+
}
|
|
85
|
+
async run(inputs) {
|
|
86
|
+
if (this.disposed)
|
|
87
|
+
throw new Error("Session disposed");
|
|
88
|
+
// Convert named inputs to LiteRT Tensors, in inputNames order.
|
|
89
|
+
const tensors = [];
|
|
90
|
+
for (const name of this.inputNames) {
|
|
91
|
+
const t = inputs[name];
|
|
92
|
+
if (!t)
|
|
93
|
+
throw new Error(`Missing LiteRT input: ${name}`);
|
|
94
|
+
tensors.push(new this.core.Tensor(t.data, t.dims));
|
|
95
|
+
}
|
|
96
|
+
// Pass single tensor directly; pass array for multi-input. The
|
|
97
|
+
// LiteRT.js v2.5.2 example shows single-tensor `run()`, but the
|
|
98
|
+
// underlying signature accepts either form. Empirical verification
|
|
99
|
+
// pending a real multi-input model.
|
|
100
|
+
const results = await this.model.run(tensors.length === 1 ? tensors[0] : tensors);
|
|
101
|
+
const out = {};
|
|
102
|
+
try {
|
|
103
|
+
for (let i = 0; i < this.outputNames.length; i++) {
|
|
104
|
+
const name = this.outputNames[i];
|
|
105
|
+
const resultTensor = results[i];
|
|
106
|
+
if (!resultTensor) {
|
|
107
|
+
throw new Error(`LiteRT produced no output at index ${i} (expected ${name})`);
|
|
108
|
+
}
|
|
109
|
+
// Move to wasm-backed readable buffer; safe regardless of where
|
|
110
|
+
// the tensor currently lives (webgpu or wasm).
|
|
111
|
+
const moved = await resultTensor.moveTo("wasm");
|
|
112
|
+
const data = await moved.toTypedArray();
|
|
113
|
+
out[name] = {
|
|
114
|
+
name,
|
|
115
|
+
type: dtypeFromTypedArray(data),
|
|
116
|
+
data,
|
|
117
|
+
dims: [...resultTensor.dims],
|
|
118
|
+
};
|
|
119
|
+
await moved.delete();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
await results.delete();
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
async dispose() {
|
|
128
|
+
if (this.disposed)
|
|
129
|
+
return;
|
|
130
|
+
this.disposed = true;
|
|
131
|
+
await this.model.delete();
|
|
132
|
+
URL.revokeObjectURL(this.blobUrl);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function dtypeFromTypedArray(arr) {
|
|
136
|
+
if (arr instanceof Float32Array)
|
|
137
|
+
return "float32";
|
|
138
|
+
if (arr instanceof Int32Array)
|
|
139
|
+
return "int32";
|
|
140
|
+
if (arr instanceof BigInt64Array)
|
|
141
|
+
return "int64";
|
|
142
|
+
if (arr instanceof Uint8Array)
|
|
143
|
+
return "uint8";
|
|
144
|
+
return "float32";
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=litert-web.js.map
|