kakaotalk-chat-analyzer 0.21.0 → 0.22.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/README.md +5 -1
- package/dist/src/analysis-budget.js +3 -1
- package/dist/src/analysis-budget.js.map +1 -1
- package/dist/src/analysis-capability.js +11 -1
- package/dist/src/analysis-capability.js.map +1 -1
- package/dist/src/analysis-preset.js +5 -0
- package/dist/src/analysis-preset.js.map +1 -1
- package/dist/src/llm-resolve.d.ts +1 -1
- package/dist/src/llm-resolve.js +49 -8
- package/dist/src/llm-resolve.js.map +1 -1
- package/dist/src/ml/model-ids.d.ts +10 -2
- package/dist/src/ml/model-ids.js +10 -2
- package/dist/src/ml/model-ids.js.map +1 -1
- package/dist/src/ml/registry.js +2 -2
- package/dist/src/ml/tasks/index.js +6 -2
- package/dist/src/ml/tasks/index.js.map +1 -1
- package/dist/src/ml-bundle-cache.d.ts +5 -1
- package/dist/src/ml-bundle-cache.js +109 -70
- package/dist/src/ml-bundle-cache.js.map +1 -1
- package/dist/src/ml-bundle-ids.d.ts +2 -0
- package/dist/src/ml-bundle-ids.js +2 -0
- package/dist/src/ml-bundle-ids.js.map +1 -1
- package/dist/src/ml-bundled-models.d.ts +7 -3
- package/dist/src/ml-bundled-models.js +53 -25
- package/dist/src/ml-bundled-models.js.map +1 -1
- package/dist/src/ml-hub-access.d.ts +5 -3
- package/dist/src/ml-hub-access.js +20 -6
- package/dist/src/ml-hub-access.js.map +1 -1
- package/dist/src/ml-runtime.d.ts +6 -4
- package/dist/src/ml-runtime.js +5 -19
- package/dist/src/ml-runtime.js.map +1 -1
- package/dist/src/ml-transformers-env.d.ts +6 -1
- package/dist/src/ml-transformers-env.js +18 -4
- package/dist/src/ml-transformers-env.js.map +1 -1
- package/dist/src/semantic-keywords.js +34 -14
- package/dist/src/semantic-keywords.js.map +1 -1
- package/dist/src/semantic-model-resolve.d.ts +7 -5
- package/dist/src/semantic-model-resolve.js +56 -29
- package/dist/src/semantic-model-resolve.js.map +1 -1
- package/dist/src/sentiment-analyze.js +26 -11
- package/dist/src/sentiment-analyze.js.map +1 -1
- package/dist/src/sentiment-policy.d.ts +1 -1
- package/dist/src/sentiment-policy.js +5 -3
- package/dist/src/sentiment-policy.js.map +1 -1
- package/dist/src/toxicity-analyze.js +34 -7
- package/dist/src/toxicity-analyze.js.map +1 -1
- package/dist/src/version.d.ts +2 -2
- package/dist/src/version.js +1 -1
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -215,7 +215,7 @@ KCA_LLM_BACKEND=ollama kca ./chat.csv --preset custom
|
|
|
215
215
|
|
|
216
216
|
환경 변수: `KCA_PRESET`, `KCA_SEMANTIC_MODEL`(Hub id 오버라이드), `KCA_PREFER_BUNDLED_SEMANTIC`(기본 on), `KCA_NO_KURE_DOWNLOAD`(quality/ultra KURE zip lazy 끔), `KCA_SENTIMENT_MODEL`, `KCA_LLM`(기본 on, `0`만 끔), `KCA_LLM_MODEL`(0.8B|2B|4B|9B), `KCA_LLM_BACKEND`, `KCA_LLM_GPU`(`auto`|`metal`|`none`, macOS Metal 호환), `KCA_LLM_GRAMMAR`(기본 on, `0`=prompt-only), `KCA_LLM_MIN_FREE_GB`(LLM 재시도 free RAM 하한, 기본 1.5), `KCA_OLLAMA_MODEL`, `KCA_LLM_MOCK`, `KCA_ONNX_GPU`, `KCA_EMBED_BATCH`, `KCA_SENTIMENT_BATCH`, `KCA_KIWI_WORKERS`, `KCA_NO_KIWI_WORKERS`, `KCA_PROFILE_PHASES`, `KCA_BENCH_CSV`, `KCA_KEYWORD_SUMMARY_TOP`, `KCA_SHOP_SEARCH_TOP`, `KCA_NO_ML_AUTO_INSTALL`, `KCA_SKIP_ML_POSTINSTALL`. (macOS 26 Metal tensor 이슈 시 `GGML_METAL_TENSOR_DISABLE=1` — `auto`에서 기본 설정)
|
|
217
217
|
|
|
218
|
-
**ML ONNX:** `npm install`·첫 분석 시 `kakaotalk-chat-analyzer-models`(감정 NSMC·KoELECTRA 임베딩) 자동 설치. **quality/ultra
|
|
218
|
+
**ML ONNX:** `npm install`·첫 분석 시 `kakaotalk-chat-analyzer-models`(감정 NSMC·KoELECTRA 임베딩) 자동 설치. **quality/ultra**·RAM≥14GB면 **KURE-v1**(~2.1GB)·독성 ONNX도 첫 필요 시 GitHub Release에서 **자동 다운로드**(`~/.cache/kakaotalk-chat-analyzer/ml-models`). 수동 export 불필요. 끄기: `KCA_NO_KURE_DOWNLOAD=1`, `KCA_NO_TOXICITY_DOWNLOAD=1`. zip 미배포 시 KURE는 KoELECTRA embed로 폴백.
|
|
219
219
|
|
|
220
220
|
**속도(품질 유지):** 대용량 CSV는 Kiwi worker pool(`KCA_KIWI_WORKERS`, RAM≥8GB 기본 2–4)·시맨틱/감정을 키워드 패스와 겹쳐 실행. `KCA_PROFILE_PHASES=1`로 단계별 ms. quality에서 GPU 가속: `onnxruntime-node` 설치 후 `KCA_ONNX_GPU=metal`(macOS)·`cuda`(Linux)·`dml`(Windows).
|
|
221
221
|
|
|
@@ -261,6 +261,10 @@ cd kakaotalk-chat-analyzer && npm install && npm run build && npm test
|
|
|
261
261
|
|
|
262
262
|
| 버전 | 요약 |
|
|
263
263
|
|------|------|
|
|
264
|
+
| **0.22.0** | **IBM Granite 97M multilingual R2** 임베딩·**kcELECTRA-toxic-detector** 독성 모델·transformers.js **v4 마이그레이션**·`@huggingface/transformers`·`dtype` API·ONNX 번들 캐시 무결성 검증 |
|
|
265
|
+
| **0.21.3** | macOS **inactive memory 완화**·48GB+ **ultra 자동**·분석 예산 600s·로컬 번들 **HF Hub 폰백 차단**·모델 루트 병합·HF token 이중 전략 |
|
|
266
|
+
| **0.21.2** | KURE ONNX **ml-models-v0.2.1** 우선 다운로드(API→pinned)·models **0.2.1** lock — v0.2.0 404 수정 |
|
|
267
|
+
| **0.21.1** | **KURE·독성 ONNX** 첫 사용 시 Release **자동 다운로드**(CI 업로드)·GitHub API 폴백 URL |
|
|
264
268
|
| **0.21.0** | **`ultra` preset**·quality/ultra **KURE-v1** 로컬 ONNX lazy(Release zip)·KoELECTRA embed 폴백·preset별 시맨틱·독성 ML on(ultra) |
|
|
265
269
|
| **0.20.0** | **LLM child 프로세스 격리** — Metal/GGUF SIGSEGV도 리포트 완료·CPU·소형 모델 자동 재시도·post-ML free RAM GPU 정책 |
|
|
266
270
|
| **0.19.12** | **LLM Story Deck**(아키타입·에피소드·캐릭터·올해의 순간·관계 드라마·방 밈·공유 문구)·**슬림 ① 핵심 숫자**·중복 차트·규칙 페르소나 제거·섹션 ⓪~⑥ 내비 |
|
|
@@ -9,9 +9,11 @@ export function phaseReserveMs(phase, preset, profile, llmSize) {
|
|
|
9
9
|
const headroom = memoryHeadroomGb(profile);
|
|
10
10
|
if (phase === "semantic") {
|
|
11
11
|
if (preset === "ultra" && headroom >= 20)
|
|
12
|
-
return
|
|
12
|
+
return 90_000;
|
|
13
13
|
if (preset === "ultra" && headroom >= 14)
|
|
14
14
|
return 110_000;
|
|
15
|
+
if (preset === "quality" && headroom >= 20)
|
|
16
|
+
return 60_000;
|
|
15
17
|
if (preset === "quality" && headroom >= 16)
|
|
16
18
|
return 70_000;
|
|
17
19
|
if (preset === "quality" && headroom >= 12)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-budget.js","sourceRoot":"","sources":["../../src/analysis-budget.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAuB,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAKrD,MAAM,eAAe,GAAuE;IAC1F,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,MAAM;CAClB,CAAC;AAEF,iCAAiC;AACjC,MAAM,UAAU,cAAc,CAC5B,KAA2B,EAC3B,MAA0B,EAC1B,OAAuB,EACvB,OAAoB;IAEpB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,OAAO,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"analysis-budget.js","sourceRoot":"","sources":["../../src/analysis-budget.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAuB,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAKrD,MAAM,eAAe,GAAuE;IAC1F,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,MAAM;CAClB,CAAC;AAEF,iCAAiC;AACjC,MAAM,UAAU,cAAc,CAC5B,KAA2B,EAC3B,MAA0B,EAC1B,OAAuB,EACvB,OAAoB;IAEpB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,OAAO,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QACxD,IAAI,MAAM,KAAK,OAAO,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,OAAO,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAC1D,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAClC,OAAO,eAAe,CAAC,QAAQ,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAClC,OAAO,eAAe,CAAC,SAAS,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC,OAAO,IAAI,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,eAAe,CAAC,KAA2D,CAAC,CAAC;AACtF,CAAC;AAED,iCAAiC;AACjC,MAAM,OAAO,qBAAqB;IAKb;IAEA;IACT;IAPO,QAAQ,CAAS;IACjB,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAE7C,YACmB,MAA0B,EAC3C,YAAoB,EACH,OAAuB,EAChC,OAAoB;QAHX,WAAM,GAAN,MAAM,CAAoB;QAE1B,YAAO,GAAP,OAAO,CAAgB;QAChC,YAAO,GAAP,OAAO,CAAa;QAE5B,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,iCAAiC;IACjC,aAAa,CAAC,IAA4B;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,UAAU,CAAC,KAA2B;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1E,IACE,KAAK,KAAK,UAAU;YACpB,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;YACtD,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACpC,MAAM,IAAI,MAAM;YAChB,MAAM,GAAG,IAAI,EACb,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,IACE,KAAK,KAAK,KAAK;YACf,IAAI,CAAC,OAAO;YACZ,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;YAClD,MAAM,IAAI,MAAM;YAChB,MAAM,GAAG,IAAI,EACb,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,KAAK,eAAe,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CACjG,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -37,7 +37,17 @@ export function analysisBudgetMs(preset, _messageCount, profile) {
|
|
|
37
37
|
: preset === "ultra"
|
|
38
38
|
? 480_000
|
|
39
39
|
: 300_000;
|
|
40
|
-
if (headroom >=
|
|
40
|
+
if (headroom >= 20 && profile.totalMemGb >= 48) {
|
|
41
|
+
if (preset === "ultra")
|
|
42
|
+
cap = 600_000;
|
|
43
|
+
else if (preset === "quality")
|
|
44
|
+
cap = 480_000;
|
|
45
|
+
else if (preset === "balanced")
|
|
46
|
+
cap = 420_000;
|
|
47
|
+
else if (preset === "speed")
|
|
48
|
+
cap = 240_000;
|
|
49
|
+
}
|
|
50
|
+
else if (headroom >= 16) {
|
|
41
51
|
if (preset === "ultra")
|
|
42
52
|
cap = 540_000;
|
|
43
53
|
else if (preset === "quality")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-capability.js","sourceRoot":"","sources":["../../src/analysis-capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAgB/C,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,OAAO,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,UAAU,GAAG,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,oBAAoB,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,yBAAyB,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAC/D,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,EAAE;QAC5C,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE;QAC1C,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,GAAG,EAAE;QACpD,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,EAAE;QACpB,IAAI,EAAE,IAAI,EAAE;QACZ,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,YAAY,EAAE,CAAC;IACjC,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,aAAqB,EACrB,OAAuB;IAEvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,GAAG,GACL,MAAM,KAAK,OAAO;QAChB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,MAAM,KAAK,UAAU;YACrB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,MAAM,KAAK,SAAS;gBACpB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,MAAM,KAAK,OAAO;oBAClB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,OAAO,CAAC;IACpB,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"analysis-capability.js","sourceRoot":"","sources":["../../src/analysis-capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAgB/C,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,OAAO,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,UAAU,GAAG,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,oBAAoB,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,yBAAyB,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAC/D,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,EAAE;QAC5C,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE;QAC1C,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,GAAG,EAAE;QACpD,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,EAAE;QACpB,IAAI,EAAE,IAAI,EAAE;QACZ,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,YAAY,EAAE,CAAC;IACjC,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,aAAqB,EACrB,OAAuB;IAEvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,GAAG,GACL,MAAM,KAAK,OAAO;QAChB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,MAAM,KAAK,UAAU;YACrB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,MAAM,KAAK,SAAS;gBACpB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,MAAM,KAAK,OAAO;oBAClB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,OAAO,CAAC;IACpB,IAAI,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QAC/C,IAAI,MAAM,KAAK,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC;aACjC,IAAI,MAAM,KAAK,SAAS;YAAE,GAAG,GAAG,OAAO,CAAC;aACxC,IAAI,MAAM,KAAK,UAAU;YAAE,GAAG,GAAG,OAAO,CAAC;aACzC,IAAI,MAAM,KAAK,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC;IAC7C,CAAC;SAAM,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC1B,IAAI,MAAM,KAAK,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC;aACjC,IAAI,MAAM,KAAK,SAAS;YAAE,GAAG,GAAG,OAAO,CAAC;aACxC,IAAI,MAAM,KAAK,UAAU;YAAE,GAAG,GAAG,OAAO,CAAC;aACzC,IAAI,MAAM,KAAK,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC;IAC7C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,YAAoB,EACpB,OAAuB;IAEvB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;IACrB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,YAAY,GAChB,MAAM,KAAK,OAAO;QAChB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,KAAK,UAAU;YACrB,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,MAAM,KAAK,SAAS;gBACpB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,MAAM,KAAK,OAAO;oBAClB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,GAAG,CAAC;IAChB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAAuB,EACvB,IAAiD;IAEjD,MAAM,KAAK,GAAG;QACZ,gBAAgB,CAAC,OAAO,CAAC;QACzB,QAAQ,OAAO,CAAC,QAAQ,YAAY,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;QACtE,eAAe,OAAO,CAAC,GAAG,EAAE;KAC7B,CAAC;IACF,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,iBAAiB,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,MAA+D;YAC5E,OAAO;YACP,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,QAAQ,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CACR,wBAAwB,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CACpJ,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -27,6 +27,11 @@ export function autoPresetFromMachine(profile, messageCount) {
|
|
|
27
27
|
const n = messageCount ?? 0;
|
|
28
28
|
if (headroom < 4 || (headroom < 6 && total < 16))
|
|
29
29
|
return "speed";
|
|
30
|
+
// 48GB+는 메시지 수 관계없이 풀퀄리티 우선
|
|
31
|
+
if (total >= 48 && headroom >= 20)
|
|
32
|
+
return "ultra";
|
|
33
|
+
if (total >= 48 && headroom >= 14)
|
|
34
|
+
return n >= 150_000 ? "quality" : "ultra";
|
|
30
35
|
if (total >= 32 && headroom >= 18) {
|
|
31
36
|
if (n >= 130_000)
|
|
32
37
|
return "balanced";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-preset.js","sourceRoot":"","sources":["../../src/analysis-preset.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analysis-preset.js","sourceRoot":"","sources":["../../src/analysis-preset.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export declare function llmRamReserveGb(profile: MachineProfile): number;
|
|
|
7
7
|
* GGUF 로드 시점 가용 RAM — available−예약 우선, free+회수 가능분으로 OOM만 완화.
|
|
8
8
|
*/
|
|
9
9
|
export declare function memoryHeadroomForLlmLoad(profile: MachineProfile): number;
|
|
10
|
-
/** ML dispose 직후 GGUF 로드용 headroom —
|
|
10
|
+
/** ML dispose 직후 GGUF 로드용 headroom — macOS에서 freeMemGb 함정 완화, availableMemGb 우선 */
|
|
11
11
|
export declare function effectiveLlmHeadroomGb(profile: MachineProfile): number;
|
|
12
12
|
export interface LlmRunPlan {
|
|
13
13
|
enabled: boolean;
|
package/dist/src/llm-resolve.js
CHANGED
|
@@ -35,23 +35,64 @@ export function memoryHeadroomForLlmLoad(profile) {
|
|
|
35
35
|
}
|
|
36
36
|
return Math.round(headroom * 10) / 10;
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
/** macOS 등에서 inactive memory를 포함한 실제 가용량 — 환경 변수로 덮어쓰기 가능 */
|
|
39
|
+
function postMlOsSlackGb(profile) {
|
|
40
|
+
const env = Number(process.env.KCA_LLM_POST_ML_SLACK_GB);
|
|
41
|
+
if (Number.isFinite(env) && env >= 0)
|
|
42
|
+
return env;
|
|
43
|
+
// macOS: freeMemGb가 inactive를 포함하지 않아 과소 추정됨.
|
|
44
|
+
// availableMemGb가 충분히 크면(≥total*0.4) OS slack을 줄여 freeMemGb 함정 완화
|
|
45
|
+
if (profile.platform === "darwin") {
|
|
46
|
+
const available = profile.availableMemGb ?? profile.freeMemGb;
|
|
47
|
+
const total = profile.totalMemGb;
|
|
48
|
+
if (total >= 32 && available >= total * 0.4)
|
|
49
|
+
return 0.5;
|
|
50
|
+
if (total >= 16 && available >= total * 0.35)
|
|
51
|
+
return 1;
|
|
52
|
+
return 1.5;
|
|
53
|
+
}
|
|
54
|
+
return 2;
|
|
55
|
+
}
|
|
56
|
+
/** macOS에서 freeMemGb가 inactive memory를 제외해 과소 추정될 때 완화 */
|
|
57
|
+
function isDarwinFreeMemUnderstated(profile) {
|
|
58
|
+
if (profile.platform !== "darwin")
|
|
59
|
+
return false;
|
|
60
|
+
const available = profile.availableMemGb ?? profile.freeMemGb;
|
|
61
|
+
const free = profile.freeMemGb;
|
|
62
|
+
// available이 free보다 3배 이상 크면 inactive memory가 많다는 의미
|
|
63
|
+
return available > free * 3 && available >= 10;
|
|
64
|
+
}
|
|
65
|
+
/** ML dispose 직후 GGUF 로드용 headroom — macOS에서 freeMemGb 함정 완화, availableMemGb 우선 */
|
|
40
66
|
export function effectiveLlmHeadroomGb(profile) {
|
|
41
67
|
const loadHeadroom = memoryHeadroomForLlmLoad(profile);
|
|
68
|
+
const available = profile.availableMemGb ?? profile.freeMemGb;
|
|
42
69
|
const free = profile.freeMemGb;
|
|
43
70
|
const minFree = minFreeGbForLlmRetry();
|
|
71
|
+
const slack = postMlOsSlackGb(profile);
|
|
72
|
+
const isUnderstated = isDarwinFreeMemUnderstated(profile);
|
|
44
73
|
let effective = loadHeadroom;
|
|
45
|
-
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
|
|
74
|
+
// macOS에서 inactive memory가 많으면 freeMemGb 대신 availableMemGb 기반 제한 사용
|
|
75
|
+
if (isUnderstated) {
|
|
76
|
+
const availableCap = Math.max(0, available - slack);
|
|
77
|
+
if (availableCap < effective)
|
|
78
|
+
effective = availableCap;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const freeCap = Math.max(0, free - slack);
|
|
82
|
+
if (freeCap < effective)
|
|
83
|
+
effective = freeCap;
|
|
84
|
+
}
|
|
85
|
+
// free가 극도로 낮으면 최소 모델만 허용
|
|
86
|
+
if (free < minFree && !isUnderstated) {
|
|
87
|
+
effective = Math.min(effective, qwen35Entry("0.8B").minHeadroomGb);
|
|
88
|
+
}
|
|
89
|
+
else if (free < minFree && isUnderstated && available < 6) {
|
|
49
90
|
effective = Math.min(effective, qwen35Entry("0.8B").minHeadroomGb);
|
|
50
91
|
}
|
|
51
|
-
else if (free < 4) {
|
|
92
|
+
else if (free < 4 && !isUnderstated) {
|
|
52
93
|
effective = Math.min(effective, qwen35Entry("2B").minHeadroomGb);
|
|
53
94
|
}
|
|
54
|
-
else if (free < 6) {
|
|
95
|
+
else if (free < 6 && !isUnderstated) {
|
|
55
96
|
effective = Math.min(effective, qwen35Entry("4B").minHeadroomGb - 0.1);
|
|
56
97
|
}
|
|
57
98
|
return Math.round(Math.max(0, effective) * 10) / 10;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-resolve.js","sourceRoot":"","sources":["../../src/llm-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,0BAA0B,CAAC;AAEjF,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AACzB,MAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,iCAAiC,GAAG,GAAG,CAAC;AAE9C,mDAAmD;AACnD,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IACjC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;IAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IAEnC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,GAAG,gBAAgB,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC;QAC3B,QAAQ,GAAG,WAAW,CAAC;IACzB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"llm-resolve.js","sourceRoot":"","sources":["../../src/llm-resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,16 @@ export declare const SEMANTIC_HEADROOM_KURE_GB = 14;
|
|
|
18
18
|
export declare const SEMANTIC_HEADROOM_BGE_GB = 20;
|
|
19
19
|
/** balanced에서 KURE Hub — 번들 유지 하한 */
|
|
20
20
|
export declare const SEMANTIC_HEADROOM_KURE_BALANCED_GB = 16;
|
|
21
|
-
/**
|
|
22
|
-
export declare const
|
|
21
|
+
/** 다국어 임베딩 SOTA — IBM Granite R2 (97M, 384dim, 200+ 언어, 32K ctx) */
|
|
22
|
+
export declare const HUB_GRANITE_EMBED_97M = "ibm-granite/granite-embedding-97m-multilingual-r2";
|
|
23
|
+
/** 다국어 임베딩 flagship — IBM Granite R2 (311M, 768dim, Matryoshka) */
|
|
24
|
+
export declare const HUB_GRANITE_EMBED_311M = "ibm-granite/granite-embedding-311m-multilingual-r2";
|
|
25
|
+
/** 감정 분석 — KR-ELECTRA-small (2024, NSMC fine-tuned) */
|
|
26
|
+
export declare const HUB_KRELECTRA_NSMC = "snunlp/KR-ELECTRA-small";
|
|
27
|
+
/** 독성·공격 톤 — KcELECTRA toxic detector (fine-tuned) */
|
|
28
|
+
export declare const HUB_KCELECTRA_TOXICITY = "jinkyeongk/kcELECTRA-toxic-detector";
|
|
29
|
+
/** 레거시 독성·공격 톤 (base discriminator, 비권장) */
|
|
30
|
+
export declare const HUB_KCELECTRA_TOXICITY_LEGACY = "monologg/koelectra-base-v3-discriminator";
|
|
23
31
|
/** 익명 Hub 401 또는 정책상 금지 — `KCA_*_MODEL` 로만 시도 */
|
|
24
32
|
export declare const DEPRECATED_SENTIMENT_HUB_IDS: readonly ["Xenova/bert-base-multilingual-uncased-sentiment", "Xenova/distilbert-base-multilingual-cased-sentiment", "Xenova/klue-roberta-small-sentiment", "Xenova/klue-roberta-base", "Xenova/twitter-xlm-roberta-base-sentiment", "smilegate-ai/kor_unified_sentiment", "cringepnh/koelectra-korean-sentiment"];
|
|
25
33
|
export declare const DEPRECATED_SEMANTIC_HUB_IDS: readonly ["Xenova/multilingual-e5-small", "dragonkue/multilingual-e5-small-ko-v2", "Xenova/paraphrase-multilingual-MiniLM-L12-v2"];
|
package/dist/src/ml/model-ids.js
CHANGED
|
@@ -18,8 +18,16 @@ export const SEMANTIC_HEADROOM_KURE_GB = 14;
|
|
|
18
18
|
export const SEMANTIC_HEADROOM_BGE_GB = 20;
|
|
19
19
|
/** balanced에서 KURE Hub — 번들 유지 하한 */
|
|
20
20
|
export const SEMANTIC_HEADROOM_KURE_BALANCED_GB = 16;
|
|
21
|
-
/**
|
|
22
|
-
export const
|
|
21
|
+
/** 다국어 임베딩 SOTA — IBM Granite R2 (97M, 384dim, 200+ 언어, 32K ctx) */
|
|
22
|
+
export const HUB_GRANITE_EMBED_97M = "ibm-granite/granite-embedding-97m-multilingual-r2";
|
|
23
|
+
/** 다국어 임베딩 flagship — IBM Granite R2 (311M, 768dim, Matryoshka) */
|
|
24
|
+
export const HUB_GRANITE_EMBED_311M = "ibm-granite/granite-embedding-311m-multilingual-r2";
|
|
25
|
+
/** 감정 분석 — KR-ELECTRA-small (2024, NSMC fine-tuned) */
|
|
26
|
+
export const HUB_KRELECTRA_NSMC = "snunlp/KR-ELECTRA-small";
|
|
27
|
+
/** 독성·공격 톤 — KcELECTRA toxic detector (fine-tuned) */
|
|
28
|
+
export const HUB_KCELECTRA_TOXICITY = "jinkyeongk/kcELECTRA-toxic-detector";
|
|
29
|
+
/** 레거시 독성·공격 톤 (base discriminator, 비권장) */
|
|
30
|
+
export const HUB_KCELECTRA_TOXICITY_LEGACY = "monologg/koelectra-base-v3-discriminator";
|
|
23
31
|
/** 익명 Hub 401 또는 정책상 금지 — `KCA_*_MODEL` 로만 시도 */
|
|
24
32
|
export const DEPRECATED_SENTIMENT_HUB_IDS = [
|
|
25
33
|
"Xenova/bert-base-multilingual-uncased-sentiment",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-ids.js","sourceRoot":"","sources":["../../../src/ml/model-ids.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,oCAAoC,CAAC;AAEvE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,2CAA2C,CAAC;AAE/E,gCAAgC;AAChC,MAAM,CAAC,MAAM,oBAAoB,GAAG,sCAAsC,CAAC;AAE3E,gDAAgD;AAChD,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD,kCAAkC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AAExC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,qCAAqC;AACrC,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAErD,qBAAqB;
|
|
1
|
+
{"version":3,"file":"model-ids.js","sourceRoot":"","sources":["../../../src/ml/model-ids.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,oCAAoC,CAAC;AAEvE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,2CAA2C,CAAC;AAE/E,gCAAgC;AAChC,MAAM,CAAC,MAAM,oBAAoB,GAAG,sCAAsC,CAAC;AAE3E,gDAAgD;AAChD,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD,kCAAkC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AAExC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,qCAAqC;AACrC,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAErD,oEAAoE;AACpE,MAAM,CAAC,MAAM,qBAAqB,GAAG,mDAAmD,CAAC;AAEzF,mEAAmE;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,oDAAoD,CAAC;AAE3F,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAE5D,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,qCAAqC,CAAC;AAE5E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,6BAA6B,GAAG,0CAA0C,CAAC;AAExF,iDAAiD;AACjD,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,iDAAiD;IACjD,qDAAqD;IACrD,qCAAqC;IACrC,0BAA0B;IAC1B,2CAA2C;IAC3C,oCAAoC;IACpC,sCAAsC;CAC9B,CAAC;AAEX,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,8BAA8B;IAC9B,uCAAuC;IACvC,8CAA8C;CACtC,CAAC"}
|
package/dist/src/ml/registry.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { BUNDLED_EMBED_MODEL_ID, BUNDLED_SENTIMENT_MODEL_ID, BUNDLED_TOXICITY_MODEL_ID, isBundledEmbedModelReady, isBundledSentimentModelReady, isBundledToxicityModelReady, resolveBundledSentimentModelId, } from "../ml-bundled-models.js";
|
|
2
2
|
import { memoryHeadroomGb, probeMachineProfileSync } from "../analysis-capability.js";
|
|
3
3
|
import { resolveDefaultSemanticHubId, shouldPreferBundledSemantic, } from "../semantic-model-resolve.js";
|
|
4
|
-
import { HUB_KCELECTRA_TOXICITY, HUB_KOELECTRA_EMBED,
|
|
4
|
+
import { HUB_KCELECTRA_TOXICITY, HUB_KOELECTRA_EMBED, HUB_KRELECTRA_NSMC, } from "./model-ids.js";
|
|
5
5
|
export const ML_MODEL_REGISTRY = {
|
|
6
6
|
sentiment: {
|
|
7
7
|
task: "sentiment",
|
|
8
8
|
bundledId: BUNDLED_SENTIMENT_MODEL_ID,
|
|
9
|
-
hubFallback:
|
|
9
|
+
hubFallback: HUB_KRELECTRA_NSMC,
|
|
10
10
|
hubTask: "text-classification",
|
|
11
11
|
},
|
|
12
12
|
embedding: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { memoryHeadroomGb, probeMachineProfileSync } from "../../analysis-capability.js";
|
|
2
2
|
import { ensureCoreMlBundles } from "../../ml-bundle-install.js";
|
|
3
3
|
import { ensureKureBundle, ensureToxicityBundle } from "../../ml-bundle-cache.js";
|
|
4
|
-
import { BUNDLED_KURE_MODEL_ID } from "../../ml-bundle-ids.js";
|
|
4
|
+
import { BUNDLED_GRANITE_EMBED_MODEL_ID, BUNDLED_KURE_MODEL_ID } from "../../ml-bundle-ids.js";
|
|
5
5
|
import { semanticEmbeddingModelId } from "../../semantic-policy.js";
|
|
6
6
|
import { preloadSentimentPipeline } from "./sentiment.js";
|
|
7
7
|
import { preloadSemanticPipeline } from "./embedding.js";
|
|
@@ -30,9 +30,13 @@ export async function preloadUtteranceMlTasks(opts) {
|
|
|
30
30
|
if (semanticModel === BUNDLED_KURE_MODEL_ID) {
|
|
31
31
|
await ensureKureBundle().catch((error) => {
|
|
32
32
|
const msg = error instanceof Error ? error.message : String(error);
|
|
33
|
-
process.stderr.write(`[kca] KURE 번들 준비
|
|
33
|
+
process.stderr.write(`[kca] KURE 번들 준비 걸너뜀: ${msg}\n`);
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
+
if (semanticModel === BUNDLED_GRANITE_EMBED_MODEL_ID) {
|
|
37
|
+
// Granite 번들은 npm 패키지 또는 data/ml-models에 포함
|
|
38
|
+
// 별도 lazy download 불필요
|
|
39
|
+
}
|
|
36
40
|
}
|
|
37
41
|
const sequential = memoryHeadroomGb(probeMachineProfileSync()) < 12;
|
|
38
42
|
const runners = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ml/tasks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ml/tasks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,17 @@ export declare const TOXICITY_ONNX_ASSET = "kca-kcelectra-base-toxicity-onnx.zip
|
|
|
2
2
|
export declare const KURE_ONNX_ASSET = "kca-kure-v1-onnx.zip";
|
|
3
3
|
export declare function mlBundleCacheDir(): string;
|
|
4
4
|
export declare function readModelsPackageVersion(): string;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function mlModelsReleaseTag(): string;
|
|
6
|
+
/** @deprecated */ export declare const toxicityReleaseTag: typeof mlModelsReleaseTag;
|
|
6
7
|
export declare function toxicityReleaseAssetUrl(): string;
|
|
7
8
|
export declare function kureReleaseAssetUrl(): string;
|
|
9
|
+
/** GitHub API(최신 ml-models-v* asset) → pinned tag — v0.2.0에는 KURE zip 없음 */
|
|
10
|
+
export declare function listReleaseAssetUrls(assetName: string): Promise<string[]>;
|
|
8
11
|
export declare function isSentimentBundleReady(): boolean;
|
|
9
12
|
export declare function isEmbedBundleReady(): boolean;
|
|
10
13
|
export declare function isToxicityBundleReady(): boolean;
|
|
11
14
|
export declare function isKureBundleReady(): boolean;
|
|
15
|
+
export declare function isGraniteEmbedBundleReady(): boolean;
|
|
12
16
|
export declare function isCoreBundleReady(): boolean;
|
|
13
17
|
/** npm models 패키지 → monorepo data → user cache */
|
|
14
18
|
export declare function listMlModelRoots(): string[];
|
|
@@ -23,28 +23,77 @@ export function readModelsPackageVersion() {
|
|
|
23
23
|
return JSON.parse(readFileSync(pkg, "utf8")).version;
|
|
24
24
|
}
|
|
25
25
|
catch {
|
|
26
|
-
return process.env.KCA_ML_MODELS_VERSION?.trim() || "0.2.
|
|
26
|
+
return process.env.KCA_ML_MODELS_VERSION?.trim() || "0.2.1";
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
export function
|
|
29
|
+
export function mlModelsReleaseTag() {
|
|
30
30
|
const env = process.env.KCA_ML_MODELS_RELEASE?.trim();
|
|
31
31
|
if (env)
|
|
32
32
|
return env;
|
|
33
33
|
return `ml-models-v${readModelsPackageVersion()}`;
|
|
34
34
|
}
|
|
35
|
-
export
|
|
35
|
+
/** @deprecated */ export const toxicityReleaseTag = mlModelsReleaseTag;
|
|
36
|
+
function pinnedReleaseAssetUrl(assetName) {
|
|
36
37
|
const repo = process.env.KCA_ML_MODELS_REPO?.trim() || DEFAULT_REPO;
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
return `https://github.com/${repo}/releases/download/${mlModelsReleaseTag()}/${assetName}`;
|
|
39
|
+
}
|
|
40
|
+
export function toxicityReleaseAssetUrl() {
|
|
41
|
+
return pinnedReleaseAssetUrl(TOXICITY_ONNX_ASSET);
|
|
39
42
|
}
|
|
40
43
|
export function kureReleaseAssetUrl() {
|
|
44
|
+
return pinnedReleaseAssetUrl(KURE_ONNX_ASSET);
|
|
45
|
+
}
|
|
46
|
+
/** GitHub API(최신 ml-models-v* asset) → pinned tag — v0.2.0에는 KURE zip 없음 */
|
|
47
|
+
export async function listReleaseAssetUrls(assetName) {
|
|
48
|
+
const pinned = pinnedReleaseAssetUrl(assetName);
|
|
49
|
+
const fromApi = [];
|
|
41
50
|
const repo = process.env.KCA_ML_MODELS_REPO?.trim() || DEFAULT_REPO;
|
|
42
|
-
const
|
|
43
|
-
|
|
51
|
+
const slash = repo.indexOf("/");
|
|
52
|
+
if (slash > 0) {
|
|
53
|
+
const owner = repo.slice(0, slash);
|
|
54
|
+
const name = repo.slice(slash + 1);
|
|
55
|
+
try {
|
|
56
|
+
for (let page = 1; page <= 5; page += 1) {
|
|
57
|
+
const api = `https://api.github.com/repos/${owner}/${name}/releases?per_page=100&page=${page}`;
|
|
58
|
+
const res = await fetch(api, {
|
|
59
|
+
redirect: "follow",
|
|
60
|
+
headers: {
|
|
61
|
+
Accept: "application/vnd.github+json",
|
|
62
|
+
"User-Agent": "kakaotalk-chat-analyzer",
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
if (!res.ok)
|
|
66
|
+
break;
|
|
67
|
+
const releases = (await res.json());
|
|
68
|
+
if (releases.length === 0)
|
|
69
|
+
break;
|
|
70
|
+
for (const rel of releases) {
|
|
71
|
+
const tag = rel.tag_name?.trim();
|
|
72
|
+
if (!tag?.startsWith("ml-models-v"))
|
|
73
|
+
continue;
|
|
74
|
+
const asset = rel.assets?.find((a) => a.name === assetName);
|
|
75
|
+
const href = asset?.browser_download_url?.trim();
|
|
76
|
+
if (href)
|
|
77
|
+
fromApi.push(href);
|
|
78
|
+
}
|
|
79
|
+
if (releases.length < 100)
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
/* API 실패 시 pinned만 */
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return [...new Set([...fromApi, pinned])];
|
|
44
88
|
}
|
|
45
89
|
function modelOnnxReady(root, modelId) {
|
|
46
|
-
|
|
47
|
-
|
|
90
|
+
const modelDir = join(root, modelId);
|
|
91
|
+
const hasConfig = existsSync(join(modelDir, "config.json"));
|
|
92
|
+
const hasOnnx = existsSync(join(modelDir, "onnx", "model.onnx"));
|
|
93
|
+
// tokenizer_config.json 또는 tokenizer.json 중 하나는 필수 (transformers.js가 tokenizer 로딩에 필요)
|
|
94
|
+
const hasTokenizer = existsSync(join(modelDir, "tokenizer.json")) ||
|
|
95
|
+
existsSync(join(modelDir, "tokenizer_config.json"));
|
|
96
|
+
return hasConfig && hasOnnx && hasTokenizer;
|
|
48
97
|
}
|
|
49
98
|
function kureOnnxReady(root) {
|
|
50
99
|
return (modelOnnxReady(root, BUNDLED_KURE_MODEL_ID) &&
|
|
@@ -62,6 +111,9 @@ export function isToxicityBundleReady() {
|
|
|
62
111
|
export function isKureBundleReady() {
|
|
63
112
|
return listMlModelRoots().some((r) => kureOnnxReady(r));
|
|
64
113
|
}
|
|
114
|
+
export function isGraniteEmbedBundleReady() {
|
|
115
|
+
return listMlModelRoots().some((r) => modelOnnxReady(r, "kca-granite-embed-97m"));
|
|
116
|
+
}
|
|
65
117
|
export function isCoreBundleReady() {
|
|
66
118
|
return isSentimentBundleReady() && isEmbedBundleReady();
|
|
67
119
|
}
|
|
@@ -118,52 +170,19 @@ export async function ensureToxicityBundle() {
|
|
|
118
170
|
return toxicityDownloadPromise;
|
|
119
171
|
}
|
|
120
172
|
async function downloadToxicityBundle() {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
await pipeline(Readable.fromWeb(res.body), createWriteStream(zipPath));
|
|
135
|
-
if (existsSync(tmpExtract))
|
|
136
|
-
rmSync(tmpExtract, { recursive: true, force: true });
|
|
137
|
-
mkdirSync(tmpExtract, { recursive: true });
|
|
138
|
-
if (!extractZip(zipPath, tmpExtract)) {
|
|
139
|
-
process.stderr.write("[kca] 독성 번들 압축 해제 실패 (tar/unzip 필요)\n");
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
const nested = join(tmpExtract, BUNDLED_TOXICITY_MODEL_ID);
|
|
143
|
-
const src = existsSync(join(nested, "config.json"))
|
|
144
|
-
? nested
|
|
145
|
-
: findModelDir(tmpExtract, BUNDLED_TOXICITY_MODEL_ID);
|
|
146
|
-
if (!src) {
|
|
147
|
-
process.stderr.write("[kca] 독성 번들 zip 구조가 예상과 다릅니다\n");
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
const dest = join(cache, BUNDLED_TOXICITY_MODEL_ID);
|
|
151
|
-
mkdirSync(cache, { recursive: true });
|
|
152
|
-
if (existsSync(dest))
|
|
153
|
-
rmSync(dest, { recursive: true, force: true });
|
|
154
|
-
cpSync(src, dest, { recursive: true });
|
|
155
|
-
process.stderr.write(`[kca] 독성 ML 번들 설치됨: ${dest}\n`);
|
|
156
|
-
return isToxicityBundleReady();
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
160
|
-
process.stderr.write(`[kca] 독성 번들 다운로드 오류: ${msg}\n`);
|
|
161
|
-
return false;
|
|
162
|
-
}
|
|
163
|
-
finally {
|
|
164
|
-
if (existsSync(tmpExtract))
|
|
165
|
-
rmSync(tmpExtract, { recursive: true, force: true });
|
|
166
|
-
}
|
|
173
|
+
return installLazyOnnxZip({
|
|
174
|
+
label: "독성 ML",
|
|
175
|
+
assetName: TOXICITY_ONNX_ASSET,
|
|
176
|
+
extractDirName: "_toxicity_extract",
|
|
177
|
+
resolveSrc: (tmpExtract) => {
|
|
178
|
+
const nested = join(tmpExtract, BUNDLED_TOXICITY_MODEL_ID);
|
|
179
|
+
if (existsSync(join(nested, "config.json")))
|
|
180
|
+
return nested;
|
|
181
|
+
return findModelDir(tmpExtract, BUNDLED_TOXICITY_MODEL_ID);
|
|
182
|
+
},
|
|
183
|
+
destModelId: BUNDLED_TOXICITY_MODEL_ID,
|
|
184
|
+
isReady: isToxicityBundleReady,
|
|
185
|
+
});
|
|
167
186
|
}
|
|
168
187
|
/** GitHub Release 에서 KURE ONNX zip 다운로드 → cache */
|
|
169
188
|
export async function ensureKureBundle() {
|
|
@@ -180,43 +199,63 @@ export async function ensureKureBundle() {
|
|
|
180
199
|
return kureDownloadPromise;
|
|
181
200
|
}
|
|
182
201
|
async function downloadKureBundle() {
|
|
183
|
-
|
|
202
|
+
return installLazyOnnxZip({
|
|
203
|
+
label: "KURE 임베딩",
|
|
204
|
+
assetName: KURE_ONNX_ASSET,
|
|
205
|
+
extractDirName: "_kure_extract",
|
|
206
|
+
resolveSrc: resolveKureExtractSrc,
|
|
207
|
+
destModelId: BUNDLED_KURE_MODEL_ID,
|
|
208
|
+
isReady: isKureBundleReady,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
async function installLazyOnnxZip(opts) {
|
|
212
|
+
const urls = await listReleaseAssetUrls(opts.assetName);
|
|
184
213
|
const cache = mlBundleCacheDir();
|
|
185
214
|
const dlDir = join(cache, "..", "downloads");
|
|
186
215
|
mkdirSync(dlDir, { recursive: true });
|
|
187
|
-
const zipPath = join(dlDir,
|
|
188
|
-
const tmpExtract = join(dlDir,
|
|
216
|
+
const zipPath = join(dlDir, opts.assetName);
|
|
217
|
+
const tmpExtract = join(dlDir, opts.extractDirName);
|
|
189
218
|
try {
|
|
190
|
-
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
219
|
+
let fetched = false;
|
|
220
|
+
for (const url of urls) {
|
|
221
|
+
process.stderr.write(`[kca] ${opts.label} 번들 다운로드 중… ${url}\n`);
|
|
222
|
+
const res = await fetch(url, { redirect: "follow" });
|
|
223
|
+
if (!res.ok || !res.body) {
|
|
224
|
+
process.stderr.write(`[kca] ${opts.label} 다운로드 실패 (${res.status})\n`);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
await pipeline(Readable.fromWeb(res.body), createWriteStream(zipPath));
|
|
228
|
+
fetched = true;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
if (!fetched) {
|
|
232
|
+
process.stderr.write(`[kca] ${opts.label} Release zip(${opts.assetName})을 찾지 못했습니다. ` +
|
|
233
|
+
`잠시 후 재시도하거나 CI publish-ml-models 완료를 확인하세요.\n`);
|
|
194
234
|
return false;
|
|
195
235
|
}
|
|
196
|
-
await pipeline(Readable.fromWeb(res.body), createWriteStream(zipPath));
|
|
197
236
|
if (existsSync(tmpExtract))
|
|
198
237
|
rmSync(tmpExtract, { recursive: true, force: true });
|
|
199
238
|
mkdirSync(tmpExtract, { recursive: true });
|
|
200
239
|
if (!extractZip(zipPath, tmpExtract)) {
|
|
201
|
-
process.stderr.write(
|
|
240
|
+
process.stderr.write(`[kca] ${opts.label} 압축 해제 실패 (tar/unzip 필요)\n`);
|
|
202
241
|
return false;
|
|
203
242
|
}
|
|
204
|
-
const src =
|
|
243
|
+
const src = opts.resolveSrc(tmpExtract);
|
|
205
244
|
if (!src) {
|
|
206
|
-
process.stderr.write(
|
|
245
|
+
process.stderr.write(`[kca] ${opts.label} zip 구조가 예상과 다릅니다\n`);
|
|
207
246
|
return false;
|
|
208
247
|
}
|
|
209
|
-
const dest = join(cache,
|
|
248
|
+
const dest = join(cache, opts.destModelId);
|
|
210
249
|
mkdirSync(cache, { recursive: true });
|
|
211
250
|
if (existsSync(dest))
|
|
212
251
|
rmSync(dest, { recursive: true, force: true });
|
|
213
252
|
cpSync(src, dest, { recursive: true });
|
|
214
|
-
process.stderr.write(`[kca]
|
|
215
|
-
return
|
|
253
|
+
process.stderr.write(`[kca] ${opts.label} 번들 설치됨: ${dest}\n`);
|
|
254
|
+
return opts.isReady();
|
|
216
255
|
}
|
|
217
256
|
catch (error) {
|
|
218
257
|
const msg = error instanceof Error ? error.message : String(error);
|
|
219
|
-
process.stderr.write(`[kca]
|
|
258
|
+
process.stderr.write(`[kca] ${opts.label} 다운로드 오류: ${msg}\n`);
|
|
220
259
|
return false;
|
|
221
260
|
}
|
|
222
261
|
finally {
|