ÇĐÑ àššéţ öƒƒļöàđîñĝ (Š3 + ÇļöüđƑŕöñţ)
Ţĥé đöçüḿéñţàţîöñ šîţéš đéþļöý ţö ĜîţĤüƃ Þàĝéš ƃý þüšĥîñĝ ţĥé ƃüîļţ šţàţîç
öüţþüţ ţö neokapi.github.io. À ƒéŵ àššéţ ƒàḿîļîéš àŕé ļàŕĝé, îḿḿüţàƃļé, àñđ
ƒéţçĥéđ àţ ŕüñţîḿé ŕàţĥéŕ ţĥàñ ñééđéđ ţö ŕéñđéŕ à þàĝé:
| Ƒàḿîļý | Àþþŕöẋ. šîžé | Ŵĥéŕé îţ'š üšéđ |
|---|---|---|
Þļàýĝŕöüñđ ŴÀŠḾ (kapi-cli.wasm + .gz, kapi.wasm, pdfium.wasm, wasm_exec.js) | ~125 ḾƂ | Ţĥé Ļàƃ / KBF þļàýĝŕöüñđ, ÞĐƑ Ļàƃ |
| Ṽîšîöñ ÖÑÑẊ ḿöđéļš (ÞÞ-ÖÇŔṽ5 + ÞÞ-ĐöçĻàýöüţṼ3) | ~155 ḾƂ | Ţĥé Ṽîšîöñ Ļàƃ |
Ŵàļķţĥŕöüĝĥ ṽîđéöš (.webm ļîĝĥţ/đàŕķ + .jpg þöšţéŕš) | ~85 ḾƂ kapi / ~55 ḾƂ bowrain | ThemedVideo éḿƃéđš |
Ƃüñđļîñĝ ţĥéšé îñţö ţĥé Þàĝéš àŕţîƒàçţ ḿàķéš éṽéŕý đéþļöý šļöŵ àñđ ƒöŕçéđ àñ
àŵķŵàŕđ ŵöŕķàŕöüñđ ƒöŕ ţĥé ~132 ḾƂ ļàýöüţ ḿöđéļ (šþļîţ îñţö šüƃ-100 ḾƂ þàŕţš ţö
ƒîţ ţĥé ĜîţĤüƃ Þàĝéš þéŕ-ƒîļé ļîḿîţ). Öƒƒļöàđîñĝ ţĥéḿ ţö àñ Š3 öŕîĝîñ ƒŕöñţéđ
ƃý ÇļöüđƑŕöñţ (cdn.<domain>) ŕéḿöṽéš ţĥé ƃüļķ ƒŕöḿ ţĥé Þàĝéš àŕţîƒàçţ àñđ
ļéţš ţĥé ḿöđéļš šĥîþ ŵĥöļé.
Ţĥé ÇĐÑ ƃüçķéţ + đîšţŕîƃüţîöñ àŕé þŕöṽîšîöñéđ ƃý bowrain-îñƒŕà (modules/cdn,
îñšţàñţîàţéđ îñ ţĥé 50-edge ļàýéŕ); ÇÖŔŠ àñđ ţĥé îḿḿüţàƃļé çàçĥé ƃéĥàṽîöŕ ļîṽé
ţĥéŕé, ñöţ îñ ţĥîš ŕéþö.
Öþţ-îñ ƃý đéšîĝñ
Éṽéŕýţĥîñĝ ĥéŕé îš îñéŕţ üñţîļ çöñƒîĝüŕéđ. Ţĥé šîţé ŕéàđš ţĥé ÇĐÑ öŕîĝîñ
ƒŕöḿ à ƃüîļđ-ţîḿé éñṽ ṽàŕ, DOCS_CDN_URL, šüŕƒàçéđ ţö ţĥé ƒŕöñţéñđ àš ţĥé
cdnBaseUrl Đöçüšàüŕüš çüšţöḿƑîéļđ. Ŵĥéñ îţ îš éḿþţý (ţĥé đéƒàüļţ, àñđ ţĥé
ļöçàļ-đéṽ çàšé) éṽéŕý àššéţ ŕéšöļṽéš šàḿé-öŕîĝîñ éẋàçţļý àš ƃéƒöŕé. Ñöţĥîñĝ
çĥàñĝéš üñţîļ ţĥé DOCS_CDN_URL ŕéþö ṽàŕîàƃļé îš šéţ.
Ţĥé ƒŕöñţéñđ ŕöüţîñĝ ļîṽéš îñ öñé šĥàŕéđ ĥéļþéŕ, @neokapi/docs-shared'š
cdn.ts (readCdnConfig / cdnEnabled / cdnHref), çöñšüḿéđ ƃý:
packages/docs-shared/src/ThemedVideo.tsx: ṽîđéö + þöšţéŕ šöüŕçéšweb/src/components/KapiPlayground/config.ts:wasmUrl/wasmExecUrlweb/src/pages/lab/vision.tsx: ţĥé Ṽîšîöñ ĻàƃmodelBase
Ƃüçķéţ ļàýöüţ
Öñé ƃüçķéţ ƃàçķš ƃöţĥ šîţéš; öƃĵéçţš àŕé šçöþéđ þéŕ-šîţé ţö àṽöîđ çöļļîšîöñš. Ţĥé ŴÀŠḾ îš ṽéŕšîöñéđ ƃý çöḿḿîţ šĥà šö îţ çàñ ƃé çàçĥéđ îḿḿüţàƃļý ŵîţĥöüţ à ñéŵ đéþļöý šéŕṽîñĝ à šţàļé ƃîñàŕý.
<bucket>/
kapi/
wasm/<git-sha>/{kapi-cli.wasm, kapi-cli.wasm.gz, kapi.wasm, pdfium.wasm, wasm_exec.js}
models/vision/<version>/{ppocrv5_det.onnx, ppocrv5_rec.onnx, ppocrv5_dict.txt, ppdoclayoutv3.onnx}
icu/<icu-version>/icu_capi.wasm # ICU4X (Segmentation Lab), served application/wasm
img/... # screenshots referenced by ThemedImage
video/... # .webm + .jpg posters, mirroring web/static/video/
bowrain/
img/... # mirroring bowrain/web/docs/static/img/
video/... # mirroring bowrain/web/docs/static/video/
Šéŕṽéđ ÜŔĻš: ${DOCS_CDN_URL}/kapi/wasm/<sha>/kapi-cli.wasm, éţç.
Çŕéđéñţîàļš
Ţĥé ÇĐÑ öŕîĝîñ îš à þŕîṽàţé Š3 ƃüçķéţ; ŵŕîţéš üšé ţĥé ÀŴŠ çŕéđéñţîàļ çĥàîñ, ŵîţĥ ñö šţàţîç àççéšš ķéýš:
- ÇÎ (
docs-kapi.ymlöñ þüšĥ ţö ḿàîñ): ţĥé ĜîţĤüƃ Àçţîöñš ÖÎĐÇ đéþļöý ŕöļé (AWS_DEPLOY_ROLE_ARN), ŵĥöšé ţŕüšţ îš þîññéđ ţömain/ ţĥé þŕöţéçţéđprodéñṽîŕöñḿéñţ. bowrain-îñƒŕà'šdeploy-iamḿöđüļé šçöþéš îţ ţös3:Put/Get/Delete/ListBucketöñ ţĥé ÇĐÑ ƃüçķéţ þļüšcloudfront:CreateInvalidationöñ îţš đîšţŕîƃüţîöñ. ÞŔš çàññöţ àššüḿé îţ. - Ļöçàļļý (đéšķţöþ þüƃļîšĥ öƒ ṽîđéöš/ḿöđéļš/îḿàĝéš): àñ
aws sso loginþŕöƒîļé ŵîţĥ ŵŕîţé àççéšš ţö ţĥé ƃüçķéţ.
Ţĥé þüƃļîšĥ šçŕîþţ ŕéàđš öñļý:
| Éñṽ ṽàŕ | Ṽàļüé |
|---|---|
CDN_BUCKET | Š3 ÇĐÑ öŕîĝîñ ƃüçķéţ (bowrain-<env>-cdn-<region>-<acct>) |
AWS_REGION | ƃüçķéţ ŕéĝîöñ (đéƒàüļţ eu-north-1) |
| ÀŴŠ çŕéđéñţîàļš | ƒŕöḿ ţĥé éñṽîŕöñḿéñţ (ÖÎĐÇ ŕöļé îñ ÇÎ, ŠŠÖ þŕöƒîļé ļöçàļļý) |
Îñ ĜîţĤüƃ: DOCS_CDN_URL, CDN_BUCKET, AWS_DEPLOY_ROLE_ARN, àñđ AWS_REGION
àŕé ŕéþöšîţöŕý ṽàŕîàƃļéš. Ñö ŕéþöšîţöŕý šéçŕéţš àŕé ñééđéđ ƒöŕ ţĥé ÇĐÑ.
Þüƃļîšĥîñĝ
ŴÀŠḾ îš ŕéƃüîļţ öñ éṽéŕý đöçš ƃüîļđ, šö ÇÎ þüƃļîšĥéš îţ àüţöḿàţîçàļļý, ƃüţ
öñļý öñ þüšĥ ţö ḿàîñ: ţĥé docs-kapi.yml ƃüîļđ ĵöƃ àššüḿéš ţĥé ÖÎĐÇ ŕöļé,
šýñçš kapi/wasm/<sha>/ ţö ţĥé ÇĐÑ, àñđ đŕöþš îţ ƒŕöḿ ţĥé àŕţîƒàçţ. ÞŔš çàññöţ
àššüḿé ţĥé đéþļöý ŕöļé, šö ÞŔ þŕéṽîéŵš šéŕṽé ţĥéîŕ öŵñ ŵàšḿ šàḿé-öŕîĝîñ (ţĥé
ṽéŕšîöñ îš üñšéţ → KapiPlayground/config.ts ƒàļļš ƃàçķ), ŵĥîļé ṽîđéöš, ḿöđéļš,
àñđ îḿàĝéš šţîļļ ŕéšöļṽé ƒŕöḿ ţĥé ÇĐÑ ƃý ÜŔĻ.
Ţĥé öţĥéŕ ƒàḿîļîéš àŕé þüƃļîšĥéđ öüţ-öƒ-ƃàñđ ƒŕöḿ ţĥé đéšķţöþ, ŵĥéŕé ţĥé ĥàŕñéšš
ŕéñđéŕš ţĥé ṽîđéöš/šçŕééñšĥöţš àñđ make fetch-vision-models šţàĝéš ţĥé ḿöđéļ
šéţ (ţĥé ṽîšîöñ ḿöđéļš àŕé þîññéđ îñ ţĥé vision-models-v1 ĜîţĤüƃ ŕéļéàšé, šö
ţĥé þüƃļîšĥ ţàŕĝéţ ĵüšţ ŕé-üþļöàđš ţĥéḿ). Ñééđš ţĥé aws ÇĻÎ (àñ aws sso login
šéššîöñ) + CDN_BUCKET:
make publish-cdn-all # videos + images + vision models, kapi & bowrain → CDN
Öŕđéŕ ḿàţţéŕš: þüƃļîšĥ (öŕ ŕüñ ţĥé îñđîṽîđüàļ ţàŕĝéţš ƃéļöŵ) ƃéƒöŕé
šéţţîñĝ ţĥé DOCS_CDN_URL ŕéþö ṽàŕîàƃļé. Öñçé ţĥé ṽàŕîàƃļé îš šéţ, ÇÎ ƃüîļđš
ţĥé šîţéš þöîñţîñĝ àţ ţĥé ÇĐÑ (ƒöŕ þüšĥ àñđ šàḿé-ŕéþö ÞŔš), šö ţĥé đéþļöýéđ àñđ
þŕéṽîéŵ šîţéš éẋþéçţ ţĥöšé àššéţš öñ ţĥé ÇĐÑ, šö þüƃļîšĥ ƒîŕšţ öŕ ţĥéý 404. (ŴÀŠḾ
îš ţĥé éẋçéþţîöñ: ÇÎ ƃüîļđš àñđ þüƃļîšĥéš îţ, ṽéŕšîöñéđ ƃý šĥà, îñ ţĥé šàḿé
þüšĥ-ţö-ḿàîñ ŕüñ.)
Îñđîṽîđüàļ ţàŕĝéţš
# when assets change (needs CDN_BUCKET + an aws SSO session):
make publish-cdn-vision-models # ONNX models → kapi/models/vision/<web/models.version>/
make publish-cdn-icu # ICU4X seg wasm → kapi/icu/<ver>/icu_capi.wasm
make publish-cdn-videos # web/static/video → kapi/video/
make publish-cdn-bowrain-videos # bowrain videos → bowrain/video/
make publish-cdn-images # web/static/img → kapi/img/
make publish-cdn-bowrain-images # bowrain images → bowrain/img/
make publish-cdn-wasm # optional manual wasm push (CI does this on push to main)
Ţĥé ṽîšîöñ ḿöđéļ šéţ îš ṽéŕšîöñéđ: kapi/models/vision/<version>/, ŵîţĥ ţĥé
ṽéŕšîöñ þîññéđ îñ ţĥé çöḿḿîţţéđ web/models.version. Ţö šĥîþ à ñéŵ ḿöđéļ šéţ,
þüƃļîšĥ îţ üñđéŕ à ñéŵ ṽéŕšîöñ àñđ ƃüḿþ ţĥàţ ƒîļé. À ÞŔ đöîñĝ šö þŕéṽîéŵš ţĥé
ñéŵ ḿöđéļš àüţöḿàţîçàļļý (ţĥé Ṽîšîöñ Ļàƃ ŕéàđš ţĥé ṽéŕšîöñ ƒŕöḿ ţĥé ƃüîļđ).
Àļļ öƒ ţĥéšé çàļļ scripts/publish-cdn-assets.sh <family>, ŵĥîçĥ šéţš ţĥé ŕîĝĥţ
Content-Type àñđ Cache-Control þéŕ ƒàḿîļý. Ţĥé þŕé-ĝžîþþéđ kapi-cli.wasm.gz
îš üþļöàđéđ àš àñ öþàǫüé application/wasm ƃļöƃ ŵîţĥ ñö Content-Encoding.
Ţĥé ŕüñţîḿé šéļƒ-îñƒļàţéš îţ ṽîà DecompressionStream, šö à
Content-Encoding: gzip ĥéàđéŕ ŵöüļđ ḿàķé ţĥé ƃŕöŵšéŕ đöüƃļé-îñƒļàţé àñđ ƒàļļ
ƃàçķ ţö ţĥé ~76 ḾƂ ŕàŵ ƃîñàŕý.
ÇÎ ƃéĥàṽîöŕ
docs-kapi.yml / docs-bowrain.yml çöḿþüţé à ĵöƃ-ļéṽéļ CDN_URL =
DOCS_CDN_URL ƒöŕ þüšĥ àñđ šàḿé-ŕéþö ÞŔš (ƒöŕķ ÞŔš šţàý šàḿé-öŕîĝîñ). Ŵĥéñ
CDN_URL îš šéţ, ţĥé ṽîđéö/ḿöđéļ/îḿàĝé àššéţš ŕéšöļṽé ƒŕöḿ ţĥé ÇĐÑ ƃý ÜŔĻ. ŴÀŠḾ
îš ñàŕŕöŵéŕ: öñļý þüšĥ ţö ḿàîñ þüƃļîšĥéš îţ (ṽîà ţĥé ÖÎĐÇ ŕöļé) àñđ šéţš
DOCS_CDN_VERSION (= çöḿḿîţ šĥà); öñ ÞŔš DOCS_CDN_VERSION îš éḿþţý, šö ţĥé
þļàýĝŕöüñđ šéŕṽéš ŵàšḿ šàḿé-öŕîĝîñ ŵĥîļé ţĥé öţĥéŕ ÇĐÑ àššéţš àŕé šţîļļ üšéđ.