interscript 2.4.1 → 3.0.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 +30 -0
- package/dist/ml/imf/registry.d.ts.map +1 -0
- package/dist/ml/imf/registry.js +140 -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-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-per-Arab-Latn-1997.js +0 -11
- 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,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attention masks for the Secryst transformer.
|
|
3
|
+
*
|
|
4
|
+
* Port of the mask construction logic from
|
|
5
|
+
* `secryst/lib/secryst/translator.rb`.
|
|
6
|
+
*
|
|
7
|
+
* The transformer needs three mask types:
|
|
8
|
+
* - tgt_mask: causal mask (lower-triangular) prevents attending to future positions
|
|
9
|
+
* - src_key_padding_mask: marks padding tokens in the source
|
|
10
|
+
* - tgt_key_padding_mask: marks padding tokens in the target
|
|
11
|
+
* - memory_key_padding_mask: same as src_key_padding_mask
|
|
12
|
+
*/
|
|
13
|
+
import type { Tensor } from "../../types.js";
|
|
14
|
+
/**
|
|
15
|
+
* Build a causal (lower-triangular) attention mask.
|
|
16
|
+
* Shape: [seq_len, seq_len]. 1 = allowed, 0 = masked.
|
|
17
|
+
*
|
|
18
|
+
* Port of: Numo::DFloat.ones(n,n).triu.transpose.eq(0)
|
|
19
|
+
* → upper triangular of ones → transpose → lower triangular → negate
|
|
20
|
+
*/
|
|
21
|
+
export declare function causalMask(seqLen: number): Uint8Array;
|
|
22
|
+
/**
|
|
23
|
+
* Build a padding mask from a token ID sequence.
|
|
24
|
+
* Pad ID = 1 in secryst (matching the Ruby code).
|
|
25
|
+
* Shape: [batch, seq_len]. 1 = real token, 0 = padding.
|
|
26
|
+
*/
|
|
27
|
+
export declare function paddingMask(tokens: readonly number[], padId?: number): Uint8Array;
|
|
28
|
+
/**
|
|
29
|
+
* Construct all masks needed for one inference step.
|
|
30
|
+
* Returns tensors in the format the ONNX model expects.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildMasks(srcLen: number, tgtLen: number, srcIds: readonly number[], tgtIds: readonly number[]): Record<string, Tensor>;
|
|
33
|
+
//# sourceMappingURL=masks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masks.d.ts","sourceRoot":"","sources":["../../../../src/ml/models/secryst/masks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CASrD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,GAAE,MAAU,GAAG,UAAU,CAEpF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA+BxB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attention masks for the Secryst transformer.
|
|
3
|
+
*
|
|
4
|
+
* Port of the mask construction logic from
|
|
5
|
+
* `secryst/lib/secryst/translator.rb`.
|
|
6
|
+
*
|
|
7
|
+
* The transformer needs three mask types:
|
|
8
|
+
* - tgt_mask: causal mask (lower-triangular) prevents attending to future positions
|
|
9
|
+
* - src_key_padding_mask: marks padding tokens in the source
|
|
10
|
+
* - tgt_key_padding_mask: marks padding tokens in the target
|
|
11
|
+
* - memory_key_padding_mask: same as src_key_padding_mask
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Build a causal (lower-triangular) attention mask.
|
|
15
|
+
* Shape: [seq_len, seq_len]. 1 = allowed, 0 = masked.
|
|
16
|
+
*
|
|
17
|
+
* Port of: Numo::DFloat.ones(n,n).triu.transpose.eq(0)
|
|
18
|
+
* → upper triangular of ones → transpose → lower triangular → negate
|
|
19
|
+
*/
|
|
20
|
+
export function causalMask(seqLen) {
|
|
21
|
+
const mask = new Uint8Array(seqLen * seqLen);
|
|
22
|
+
for (let i = 0; i < seqLen; i++) {
|
|
23
|
+
for (let j = 0; j < seqLen; j++) {
|
|
24
|
+
// Allow attention to positions ≤ current position (causal)
|
|
25
|
+
mask[i * seqLen + j] = j <= i ? 1 : 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return mask;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build a padding mask from a token ID sequence.
|
|
32
|
+
* Pad ID = 1 in secryst (matching the Ruby code).
|
|
33
|
+
* Shape: [batch, seq_len]. 1 = real token, 0 = padding.
|
|
34
|
+
*/
|
|
35
|
+
export function paddingMask(tokens, padId = 1) {
|
|
36
|
+
return new Uint8Array(tokens.map((t) => (t === padId ? 0 : 1)));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Construct all masks needed for one inference step.
|
|
40
|
+
* Returns tensors in the format the ONNX model expects.
|
|
41
|
+
*/
|
|
42
|
+
export function buildMasks(srcLen, tgtLen, srcIds, tgtIds) {
|
|
43
|
+
const tgt = causalMask(tgtLen);
|
|
44
|
+
const srcPad = paddingMask(srcIds);
|
|
45
|
+
const tgtPad = paddingMask(tgtIds);
|
|
46
|
+
return {
|
|
47
|
+
tgt_mask: {
|
|
48
|
+
name: "tgt_mask",
|
|
49
|
+
type: "int8",
|
|
50
|
+
data: tgt,
|
|
51
|
+
dims: [tgtLen, tgtLen],
|
|
52
|
+
},
|
|
53
|
+
src_key_padding_mask: {
|
|
54
|
+
name: "src_key_padding_mask",
|
|
55
|
+
type: "int8",
|
|
56
|
+
data: srcPad,
|
|
57
|
+
dims: [1, srcLen],
|
|
58
|
+
},
|
|
59
|
+
tgt_key_padding_mask: {
|
|
60
|
+
name: "tgt_key_padding_mask",
|
|
61
|
+
type: "int8",
|
|
62
|
+
data: tgtPad,
|
|
63
|
+
dims: [1, tgtLen],
|
|
64
|
+
},
|
|
65
|
+
memory_key_padding_mask: {
|
|
66
|
+
name: "memory_key_padding_mask",
|
|
67
|
+
type: "int8",
|
|
68
|
+
data: srcPad,
|
|
69
|
+
dims: [1, srcLen],
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=masks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masks.js","sourceRoot":"","sources":["../../../../src/ml/models/secryst/masks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,2DAA2D;YAC3D,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyB,EAAE,QAAgB,CAAC;IACtE,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,MAAc,EACd,MAAyB,EACzB,MAAyB;IAEzB,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAElC,OAAO;QACL,QAAQ,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SACvB;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;SAClB;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;SAClB;QACD,uBAAuB,EAAE;YACvB,IAAI,EAAE,yBAAyB;YAC/B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;SAClB;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secryst translator — autoregressive seq2seq decode loop.
|
|
3
|
+
*
|
|
4
|
+
* Port of `secryst/lib/secryst/translator.rb:translate`.
|
|
5
|
+
*
|
|
6
|
+
* The transformer generates output one token at a time:
|
|
7
|
+
* 1. Encode input: chars → vocab IDs, wrap with <sos>/<eos>
|
|
8
|
+
* 2. Initialize output: [<sos>]
|
|
9
|
+
* 3. Loop (max_seq_length times):
|
|
10
|
+
* a. Build masks for current src + tgt lengths
|
|
11
|
+
* b. Run ONNX inference
|
|
12
|
+
* c. Argmax → next token ID
|
|
13
|
+
* d. If <eos>: break
|
|
14
|
+
* e. Append to output
|
|
15
|
+
* 4. Decode output IDs → string
|
|
16
|
+
*/
|
|
17
|
+
import type { InferenceSession, MLModel, ModelArtifacts, ModelKind } from "../../types.js";
|
|
18
|
+
export interface SecrystModel extends MLModel {
|
|
19
|
+
readonly kind: ModelKind;
|
|
20
|
+
translate(text: string, maxSeqLength?: number): Promise<string>;
|
|
21
|
+
transform(input: string): Promise<string>;
|
|
22
|
+
dispose(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Factory: builds a SecrystModel from a session + artifacts.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createSecrystModel(params: {
|
|
28
|
+
readonly session: InferenceSession;
|
|
29
|
+
readonly artifacts: ModelArtifacts;
|
|
30
|
+
}): Promise<SecrystModel>;
|
|
31
|
+
//# sourceMappingURL=translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../../../../src/ml/models/secryst/translator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAU,MAAM,gBAAgB,CAAA;AAKlG,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AA+FD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CACnC,GAAG,OAAO,CAAC,YAAY,CAAC,CASxB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secryst translator — autoregressive seq2seq decode loop.
|
|
3
|
+
*
|
|
4
|
+
* Port of `secryst/lib/secryst/translator.rb:translate`.
|
|
5
|
+
*
|
|
6
|
+
* The transformer generates output one token at a time:
|
|
7
|
+
* 1. Encode input: chars → vocab IDs, wrap with <sos>/<eos>
|
|
8
|
+
* 2. Initialize output: [<sos>]
|
|
9
|
+
* 3. Loop (max_seq_length times):
|
|
10
|
+
* a. Build masks for current src + tgt lengths
|
|
11
|
+
* b. Run ONNX inference
|
|
12
|
+
* c. Argmax → next token ID
|
|
13
|
+
* d. If <eos>: break
|
|
14
|
+
* e. Append to output
|
|
15
|
+
* 4. Decode output IDs → string
|
|
16
|
+
*/
|
|
17
|
+
import { buildVocabs, parseVocabYaml } from "./vocab.js";
|
|
18
|
+
import { buildMasks } from "./masks.js";
|
|
19
|
+
const DEFAULT_MAX_SEQ = 100;
|
|
20
|
+
const SOS_TOKEN = "<sos>";
|
|
21
|
+
const EOS_TOKEN = "<eos>";
|
|
22
|
+
class SecrystModelImpl {
|
|
23
|
+
kind = "secryst";
|
|
24
|
+
session;
|
|
25
|
+
inputVocab;
|
|
26
|
+
targetVocab;
|
|
27
|
+
constructor(session, inputVocab, targetVocab) {
|
|
28
|
+
this.session = session;
|
|
29
|
+
this.inputVocab = inputVocab;
|
|
30
|
+
this.targetVocab = targetVocab;
|
|
31
|
+
}
|
|
32
|
+
async translate(text, maxSeqLength = DEFAULT_MAX_SEQ) {
|
|
33
|
+
// Encode input: <sos> + chars + <eos>
|
|
34
|
+
const srcIds = [
|
|
35
|
+
this.inputVocab.encode(SOS_TOKEN),
|
|
36
|
+
...this.inputVocab.encodeSequence(text),
|
|
37
|
+
this.inputVocab.encode(EOS_TOKEN),
|
|
38
|
+
].filter((id) => id >= 0);
|
|
39
|
+
// Initialize output with <sos>
|
|
40
|
+
const tgtIds = [this.targetVocab.encode(SOS_TOKEN)];
|
|
41
|
+
const eosId = this.targetVocab.encode(EOS_TOKEN);
|
|
42
|
+
for (let step = 0; step < maxSeqLength; step++) {
|
|
43
|
+
const masks = buildMasks(srcIds.length, tgtIds.length, srcIds, tgtIds);
|
|
44
|
+
const feeds = {
|
|
45
|
+
src: {
|
|
46
|
+
name: "src",
|
|
47
|
+
type: "int64",
|
|
48
|
+
data: new BigInt64Array(srcIds.map((n) => BigInt(n))),
|
|
49
|
+
dims: [1, srcIds.length],
|
|
50
|
+
},
|
|
51
|
+
tgt: {
|
|
52
|
+
name: "tgt",
|
|
53
|
+
type: "int64",
|
|
54
|
+
data: new BigInt64Array(tgtIds.map((n) => BigInt(n))),
|
|
55
|
+
dims: [1, tgtIds.length],
|
|
56
|
+
},
|
|
57
|
+
...masks,
|
|
58
|
+
};
|
|
59
|
+
const outputs = await this.session.run(feeds);
|
|
60
|
+
const out = outputs[this.session.outputNames[0]];
|
|
61
|
+
if (!out)
|
|
62
|
+
throw new Error("Secryst model produced no output");
|
|
63
|
+
// Argmax over the last position's class dimension
|
|
64
|
+
const dims = out.dims;
|
|
65
|
+
const classCount = dims[dims.length - 1];
|
|
66
|
+
const data = out.data;
|
|
67
|
+
const lastPosBase = step * classCount;
|
|
68
|
+
let bestId = 0;
|
|
69
|
+
let bestVal = -Infinity;
|
|
70
|
+
for (let c = 0; c < classCount; c++) {
|
|
71
|
+
const v = typeof data[lastPosBase + c] === "bigint"
|
|
72
|
+
? Number(data[lastPosBase + c])
|
|
73
|
+
: data[lastPosBase + c];
|
|
74
|
+
if (v > bestVal) {
|
|
75
|
+
bestVal = v;
|
|
76
|
+
bestId = c;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (bestId === eosId)
|
|
80
|
+
break;
|
|
81
|
+
tgtIds.push(bestId);
|
|
82
|
+
}
|
|
83
|
+
// Drop the <sos> and return decoded text
|
|
84
|
+
return this.targetVocab.decodeSequence(tgtIds.slice(1));
|
|
85
|
+
}
|
|
86
|
+
/** Unified MLModel interface — processes line by line (matching Ruby). */
|
|
87
|
+
async transform(input) {
|
|
88
|
+
const lines = input.split("\n");
|
|
89
|
+
const results = [];
|
|
90
|
+
for (const line of lines) {
|
|
91
|
+
results.push(await this.translate(line));
|
|
92
|
+
}
|
|
93
|
+
return results.join("\n");
|
|
94
|
+
}
|
|
95
|
+
async dispose() {
|
|
96
|
+
await this.session.dispose();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Factory: builds a SecrystModel from a session + artifacts.
|
|
101
|
+
*/
|
|
102
|
+
export async function createSecrystModel(params) {
|
|
103
|
+
const vocabsRaw = params.artifacts["vocabs.yaml"];
|
|
104
|
+
if (!vocabsRaw) {
|
|
105
|
+
throw new Error("Secryst model missing vocabs.yaml");
|
|
106
|
+
}
|
|
107
|
+
const yamlStr = typeof vocabsRaw === "string" ? vocabsRaw : new TextDecoder().decode(vocabsRaw);
|
|
108
|
+
const data = parseVocabYaml(yamlStr);
|
|
109
|
+
const { input, target } = buildVocabs(data);
|
|
110
|
+
return new SecrystModelImpl(params.session, input, target);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translator.js","sourceRoot":"","sources":["../../../../src/ml/models/secryst/translator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AASvC,MAAM,eAAe,GAAG,GAAG,CAAA;AAC3B,MAAM,SAAS,GAAG,OAAO,CAAA;AACzB,MAAM,SAAS,GAAG,OAAO,CAAA;AAEzB,MAAM,gBAAgB;IACX,IAAI,GAAc,SAAS,CAAA;IACnB,OAAO,CAAkB;IACzB,UAAU,CAAO;IACjB,WAAW,CAAO;IAEnC,YAAY,OAAyB,EAAE,UAAiB,EAAE,WAAkB;QAC1E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,eAAuB,eAAe;QAClE,sCAAsC;QACtC,MAAM,MAAM,GAAG;YACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;YACjC,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;SAClC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;QAEzB,+BAA+B;QAC/B,MAAM,MAAM,GAAa,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAEhD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;YAEtE,MAAM,KAAK,GAA2B;gBACpC,GAAG,EAAE;oBACH,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;iBACzB;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;iBACzB;gBACD,GAAG,KAAK;aACT,CAAA;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAA;YACjD,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;YAE7D,kDAAkD;YAClD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;YACzC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAiD,CAAA;YAClE,MAAM,WAAW,GAAG,IAAI,GAAG,UAAU,CAAA;YAErC,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAA;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,MAAM,CAAC,GACL,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,QAAQ;oBACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;oBAC/B,CAAC,CAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAY,CAAA;gBACvC,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;oBAChB,OAAO,GAAG,CAAC,CAAA;oBACX,MAAM,GAAG,CAAC,CAAA;gBACZ,CAAC;YACH,CAAC;YAED,IAAI,MAAM,KAAK,KAAK;gBAAE,MAAK;YAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAED,yCAAyC;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1C,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAGxC;IACC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC/F,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC3C,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secryst vocabulary — port of `secryst/lib/secryst/vocab.rb`.
|
|
3
|
+
*
|
|
4
|
+
* Maps tokens to integer IDs (stoi) and back (itos). Supports
|
|
5
|
+
* special tokens (<sos>, <eos>, <pad>) alongside character-level
|
|
6
|
+
* vocab.
|
|
7
|
+
*/
|
|
8
|
+
export interface VocabData {
|
|
9
|
+
readonly input: readonly string[];
|
|
10
|
+
readonly target: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
export declare class Vocab {
|
|
13
|
+
readonly stoi: Readonly<Record<string, number>>;
|
|
14
|
+
readonly itos: readonly string[];
|
|
15
|
+
readonly length: number;
|
|
16
|
+
constructor(tokens: readonly string[], specials?: readonly string[]);
|
|
17
|
+
/** String to ID. Returns -1 for unknown tokens. */
|
|
18
|
+
encode(token: string): number;
|
|
19
|
+
/** ID to string. Returns "" for unknown IDs. */
|
|
20
|
+
decode(id: number): string;
|
|
21
|
+
/** Encode a string into a sequence of token IDs. */
|
|
22
|
+
encodeSequence(text: string): number[];
|
|
23
|
+
/** Decode a sequence of token IDs back into a string. */
|
|
24
|
+
decodeSequence(ids: readonly number[]): string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse vocab data from YAML format (as stored in the model zip).
|
|
28
|
+
* Uses js-yaml if available, otherwise a minimal YAML parser for
|
|
29
|
+
* the simple list format secryst uses.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseVocabYaml(yaml: string): VocabData;
|
|
32
|
+
/**
|
|
33
|
+
* Build Vocab instances from parsed data.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildVocabs(data: VocabData): {
|
|
36
|
+
input: Vocab;
|
|
37
|
+
target: Vocab;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=vocab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vocab.d.ts","sourceRoot":"","sources":["../../../../src/ml/models/secryst/vocab.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAED,qBAAa,KAAK;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAEX,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO;IAOvE,mDAAmD;IACnD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7B,gDAAgD;IAChD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI1B,oDAAoD;IACpD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAItC,yDAAyD;IACzD,cAAc,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM;CAG/C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAmCtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAK5E"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secryst vocabulary — port of `secryst/lib/secryst/vocab.rb`.
|
|
3
|
+
*
|
|
4
|
+
* Maps tokens to integer IDs (stoi) and back (itos). Supports
|
|
5
|
+
* special tokens (<sos>, <eos>, <pad>) alongside character-level
|
|
6
|
+
* vocab.
|
|
7
|
+
*/
|
|
8
|
+
export class Vocab {
|
|
9
|
+
stoi;
|
|
10
|
+
itos;
|
|
11
|
+
length;
|
|
12
|
+
constructor(tokens, specials = []) {
|
|
13
|
+
const all = [...specials, ...tokens];
|
|
14
|
+
this.itos = all;
|
|
15
|
+
this.stoi = Object.freeze(Object.fromEntries(all.map((t, i) => [t, i])));
|
|
16
|
+
this.length = all.length;
|
|
17
|
+
}
|
|
18
|
+
/** String to ID. Returns -1 for unknown tokens. */
|
|
19
|
+
encode(token) {
|
|
20
|
+
return this.stoi[token] ?? -1;
|
|
21
|
+
}
|
|
22
|
+
/** ID to string. Returns "" for unknown IDs. */
|
|
23
|
+
decode(id) {
|
|
24
|
+
return this.itos[id] ?? "";
|
|
25
|
+
}
|
|
26
|
+
/** Encode a string into a sequence of token IDs. */
|
|
27
|
+
encodeSequence(text) {
|
|
28
|
+
return Array.from(text).map((c) => this.encode(c));
|
|
29
|
+
}
|
|
30
|
+
/** Decode a sequence of token IDs back into a string. */
|
|
31
|
+
decodeSequence(ids) {
|
|
32
|
+
return ids.map((id) => this.decode(id)).join("");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Parse vocab data from YAML format (as stored in the model zip).
|
|
37
|
+
* Uses js-yaml if available, otherwise a minimal YAML parser for
|
|
38
|
+
* the simple list format secryst uses.
|
|
39
|
+
*/
|
|
40
|
+
export function parseVocabYaml(yaml) {
|
|
41
|
+
// Secryst vocabs are simple YAML:
|
|
42
|
+
// input:
|
|
43
|
+
// - "<sos>"
|
|
44
|
+
// - "<eos>"
|
|
45
|
+
// - "a"
|
|
46
|
+
// target:
|
|
47
|
+
// - "<sos>"
|
|
48
|
+
// - ...
|
|
49
|
+
//
|
|
50
|
+
// We use a minimal parser instead of requiring js-yaml as a dep.
|
|
51
|
+
const lines = yaml.split("\n");
|
|
52
|
+
let section = null;
|
|
53
|
+
const input = [];
|
|
54
|
+
const target = [];
|
|
55
|
+
for (const line of lines) {
|
|
56
|
+
const trimmed = line.trimEnd();
|
|
57
|
+
if (trimmed === "input:") {
|
|
58
|
+
section = "input";
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (trimmed === "target:") {
|
|
62
|
+
section = "target";
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const match = trimmed.match(/^\s+-\s+"?(.+?)"?\s*$/);
|
|
66
|
+
if (match && section) {
|
|
67
|
+
const token = match[1];
|
|
68
|
+
if (section === "input")
|
|
69
|
+
input.push(token);
|
|
70
|
+
else
|
|
71
|
+
target.push(token);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return { input, target };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Build Vocab instances from parsed data.
|
|
78
|
+
*/
|
|
79
|
+
export function buildVocabs(data) {
|
|
80
|
+
return {
|
|
81
|
+
input: new Vocab(data.input),
|
|
82
|
+
target: new Vocab(data.target),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=vocab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vocab.js","sourceRoot":"","sources":["../../../../src/ml/models/secryst/vocab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base URL for model artifacts. Owned here so every provisioner
|
|
3
|
+
* (HTTP fetcher, manifest loader, future IPFS/Bittorrent) reads
|
|
4
|
+
* from the same source. No circular deps.
|
|
5
|
+
*
|
|
6
|
+
* Default points at the jsDelivr mirror of `interscript/ml-models`
|
|
7
|
+
* — works without npm install, edge-cached globally.
|
|
8
|
+
*
|
|
9
|
+
* Override at runtime with `setModelBase()` for self-hosted mirrors,
|
|
10
|
+
* air-gapped envs, or staging deployments.
|
|
11
|
+
*/
|
|
12
|
+
export declare function setModelBase(url: string): void;
|
|
13
|
+
export declare function getModelBase(): string;
|
|
14
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base URL for model artifacts. Owned here so every provisioner
|
|
3
|
+
* (HTTP fetcher, manifest loader, future IPFS/Bittorrent) reads
|
|
4
|
+
* from the same source. No circular deps.
|
|
5
|
+
*
|
|
6
|
+
* Default points at the jsDelivr mirror of `interscript/ml-models`
|
|
7
|
+
* — works without npm install, edge-cached globally.
|
|
8
|
+
*
|
|
9
|
+
* Override at runtime with `setModelBase()` for self-hosted mirrors,
|
|
10
|
+
* air-gapped envs, or staging deployments.
|
|
11
|
+
*/
|
|
12
|
+
let modelBase = "https://cdn.jsdelivr.net/gh/interscript/ml-models@main/npm/models";
|
|
13
|
+
export function setModelBase(url) {
|
|
14
|
+
modelBase = url.replace(/\/$/, "");
|
|
15
|
+
}
|
|
16
|
+
export function getModelBase() {
|
|
17
|
+
return modelBase;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/ml/provision/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,IAAI,SAAS,GAAG,mEAAmE,CAAA;AAEnF,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model provisioner — fetch + cache model files.
|
|
3
|
+
*
|
|
4
|
+
* Used by the registry to materialize a ModelRef into a session +
|
|
5
|
+
* auxiliary artifacts. Reuses fetch (works in Node 18+ and modern
|
|
6
|
+
* browsers); falls back to filesystem reads in Node when given a
|
|
7
|
+
* `file:` or relative URL.
|
|
8
|
+
*
|
|
9
|
+
* The manifest (version → URL mapping) lives in `./manifest.ts`.
|
|
10
|
+
* The base URL (CDN mirror override) lives in `./base.ts`.
|
|
11
|
+
*
|
|
12
|
+
* Adding a new provision source (e.g. IPFS, BitTorrent) = adding a
|
|
13
|
+
* new provisioner file. Existing code never changes (OCP).
|
|
14
|
+
*/
|
|
15
|
+
import type { ModelArtifacts, ModelRef } from "../types.js";
|
|
16
|
+
import type { InferenceSession } from "../session/index.js";
|
|
17
|
+
import { type AssetFormat, type AssetVariant } from "./manifest.js";
|
|
18
|
+
export interface ProvisionedModel {
|
|
19
|
+
readonly session: InferenceSession;
|
|
20
|
+
readonly artifacts: ModelArtifacts;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Which ONNX variant to download. `q8` is the browser default —
|
|
24
|
+
* 8-bit quantized, ~25% the size of fp32 with negligible accuracy
|
|
25
|
+
* loss for character-level transformers. Override per-call via
|
|
26
|
+
* `provisionModel(ref, { variant: "fp32" })`.
|
|
27
|
+
*/
|
|
28
|
+
export interface ProvisionOptions {
|
|
29
|
+
readonly variant?: AssetVariant;
|
|
30
|
+
/**
|
|
31
|
+
* Model serialization format. `onnx` (default) selects the
|
|
32
|
+
* Microsoft runtime path; `tflite` selects Google's LiteRT.js.
|
|
33
|
+
* Both formats can be shipped for the same model — provisioner
|
|
34
|
+
* picks based on this option.
|
|
35
|
+
*/
|
|
36
|
+
readonly format?: AssetFormat;
|
|
37
|
+
/** Browser only: enable WebGPU with WASM fallback. Default: true. */
|
|
38
|
+
readonly webgpu?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* LiteRT only: accelerator preference. Default: "webgpu".
|
|
41
|
+
* No-op for ONNX runtime.
|
|
42
|
+
*/
|
|
43
|
+
readonly litertAccelerator?: "webgpu" | "webnn" | "wasm";
|
|
44
|
+
/**
|
|
45
|
+
* LiteRT only: input/output tensor names. ONNX reads these from
|
|
46
|
+
* the model graph; LiteRT needs them supplied by the caller.
|
|
47
|
+
* Defaults are correct for rababa models.
|
|
48
|
+
*/
|
|
49
|
+
readonly inputNames?: readonly string[];
|
|
50
|
+
readonly outputNames?: readonly string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Provision a model from the manifest. Resolves the task version,
|
|
54
|
+
* downloads the model file from the CDN (falls back to GitHub
|
|
55
|
+
* Releases), opens an inference session, and fetches sidecar
|
|
56
|
+
* artifacts (vocab, config, checksum) in parallel.
|
|
57
|
+
*
|
|
58
|
+
* In Node, can read from the filesystem if `url` starts with `file:`
|
|
59
|
+
* or is a relative path.
|
|
60
|
+
*/
|
|
61
|
+
export declare function provisionModel(ref: ModelRef, opts?: ProvisionOptions): Promise<ProvisionedModel>;
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAA;AAEtB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACxD;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,QAAQ,EACb,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAwC3B"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model provisioner — fetch + cache model files.
|
|
3
|
+
*
|
|
4
|
+
* Used by the registry to materialize a ModelRef into a session +
|
|
5
|
+
* auxiliary artifacts. Reuses fetch (works in Node 18+ and modern
|
|
6
|
+
* browsers); falls back to filesystem reads in Node when given a
|
|
7
|
+
* `file:` or relative URL.
|
|
8
|
+
*
|
|
9
|
+
* The manifest (version → URL mapping) lives in `./manifest.ts`.
|
|
10
|
+
* The base URL (CDN mirror override) lives in `./base.ts`.
|
|
11
|
+
*
|
|
12
|
+
* Adding a new provision source (e.g. IPFS, BitTorrent) = adding a
|
|
13
|
+
* new provisioner file. Existing code never changes (OCP).
|
|
14
|
+
*/
|
|
15
|
+
import { createSession } from "../session/index.js";
|
|
16
|
+
import { artifactUrls, resolveManifestEntry, sidecarFilenames, } from "./manifest.js";
|
|
17
|
+
/**
|
|
18
|
+
* Provision a model from the manifest. Resolves the task version,
|
|
19
|
+
* downloads the model file from the CDN (falls back to GitHub
|
|
20
|
+
* Releases), opens an inference session, and fetches sidecar
|
|
21
|
+
* artifacts (vocab, config, checksum) in parallel.
|
|
22
|
+
*
|
|
23
|
+
* In Node, can read from the filesystem if `url` starts with `file:`
|
|
24
|
+
* or is a relative path.
|
|
25
|
+
*/
|
|
26
|
+
export async function provisionModel(ref, opts = {}) {
|
|
27
|
+
const variant = opts.variant ?? "q8";
|
|
28
|
+
const format = opts.format ?? "onnx";
|
|
29
|
+
const webgpu = opts.webgpu ?? true;
|
|
30
|
+
const modelUrl = ref.url ?? (await resolveModelUrl(ref, variant, format));
|
|
31
|
+
const modelBuffer = await fetchBytesWithFallback(modelUrl);
|
|
32
|
+
const sidecars = await resolveSidecarUrls(ref, variant, format);
|
|
33
|
+
const artifacts = {};
|
|
34
|
+
await Promise.all(sidecars.map(async ({ filename, url }) => {
|
|
35
|
+
try {
|
|
36
|
+
const bytes = await fetchBytesWithFallback(url);
|
|
37
|
+
if (filename.endsWith(".json") ||
|
|
38
|
+
filename.endsWith(".yaml") ||
|
|
39
|
+
filename.endsWith(".yml") ||
|
|
40
|
+
filename.endsWith(".sha256")) {
|
|
41
|
+
artifacts[filename] = new TextDecoder().decode(bytes);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
artifacts[filename] = bytes;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Sidecars are optional; missing ones are skipped.
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
const sessionOpts = { webgpu };
|
|
52
|
+
if (format === "tflite") {
|
|
53
|
+
sessionOpts.runtime = "litert";
|
|
54
|
+
if (opts.litertAccelerator !== undefined)
|
|
55
|
+
sessionOpts.litertAccelerator = opts.litertAccelerator;
|
|
56
|
+
if (opts.inputNames !== undefined)
|
|
57
|
+
sessionOpts.inputNames = opts.inputNames;
|
|
58
|
+
if (opts.outputNames !== undefined)
|
|
59
|
+
sessionOpts.outputNames = opts.outputNames;
|
|
60
|
+
}
|
|
61
|
+
const session = await createSession(modelBuffer, sessionOpts);
|
|
62
|
+
return { session, artifacts };
|
|
63
|
+
}
|
|
64
|
+
async function resolveModelUrl(ref, variant, format) {
|
|
65
|
+
const entry = await resolveManifestEntry(ref.kind, ref.id);
|
|
66
|
+
if (!entry) {
|
|
67
|
+
throw new Error(`No manifest entry for kind=${ref.kind} id=${ref.id}. ` +
|
|
68
|
+
`Pass an explicit \`url\` on the ModelRef or pin a task version in the manifest.`);
|
|
69
|
+
}
|
|
70
|
+
const { primary } = artifactUrls(entry, variant, format);
|
|
71
|
+
return primary;
|
|
72
|
+
}
|
|
73
|
+
async function resolveSidecarUrls(ref, variant, format) {
|
|
74
|
+
// If the caller provided an explicit URL, skip manifest-based sidecar
|
|
75
|
+
// resolution — they've taken control of provisioning.
|
|
76
|
+
if (ref.url)
|
|
77
|
+
return [];
|
|
78
|
+
const entry = await resolveManifestEntry(ref.kind, ref.id);
|
|
79
|
+
if (!entry)
|
|
80
|
+
return [];
|
|
81
|
+
const { primary, assetName } = artifactUrls(entry, variant, format);
|
|
82
|
+
const base = primary.slice(0, primary.lastIndexOf("/") + 1);
|
|
83
|
+
return sidecarFilenames(entry, variant, format).map((filename) => ({
|
|
84
|
+
filename,
|
|
85
|
+
url: `${base}${filename.startsWith(assetName) ? filename : filename}`,
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Fetch bytes from a URL. Tries the URL as-given; if it's the CDN
|
|
90
|
+
* primary and fails, the caller can supply a fallback URL via the
|
|
91
|
+
* `url` field on the ModelRef.
|
|
92
|
+
*/
|
|
93
|
+
async function fetchBytesWithFallback(url) {
|
|
94
|
+
// Node filesystem path
|
|
95
|
+
if (url.startsWith("file:") ||
|
|
96
|
+
(url.startsWith(".") && typeof process !== "undefined" && process.versions?.node)) {
|
|
97
|
+
const { readFile } = await import("node:fs/promises");
|
|
98
|
+
const path = url.startsWith("file:") ? url.slice(5) : url;
|
|
99
|
+
return new Uint8Array(await readFile(path));
|
|
100
|
+
}
|
|
101
|
+
const res = await fetch(url);
|
|
102
|
+
if (!res.ok) {
|
|
103
|
+
throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
|
|
104
|
+
}
|
|
105
|
+
return new Uint8Array(await res.arrayBuffer());
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ml/provision/index.ts"],"names":[],"mappings":"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"}
|