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.
Files changed (49) hide show
  1. package/README.md +5 -1
  2. package/dist/src/analysis-budget.js +3 -1
  3. package/dist/src/analysis-budget.js.map +1 -1
  4. package/dist/src/analysis-capability.js +11 -1
  5. package/dist/src/analysis-capability.js.map +1 -1
  6. package/dist/src/analysis-preset.js +5 -0
  7. package/dist/src/analysis-preset.js.map +1 -1
  8. package/dist/src/llm-resolve.d.ts +1 -1
  9. package/dist/src/llm-resolve.js +49 -8
  10. package/dist/src/llm-resolve.js.map +1 -1
  11. package/dist/src/ml/model-ids.d.ts +10 -2
  12. package/dist/src/ml/model-ids.js +10 -2
  13. package/dist/src/ml/model-ids.js.map +1 -1
  14. package/dist/src/ml/registry.js +2 -2
  15. package/dist/src/ml/tasks/index.js +6 -2
  16. package/dist/src/ml/tasks/index.js.map +1 -1
  17. package/dist/src/ml-bundle-cache.d.ts +5 -1
  18. package/dist/src/ml-bundle-cache.js +109 -70
  19. package/dist/src/ml-bundle-cache.js.map +1 -1
  20. package/dist/src/ml-bundle-ids.d.ts +2 -0
  21. package/dist/src/ml-bundle-ids.js +2 -0
  22. package/dist/src/ml-bundle-ids.js.map +1 -1
  23. package/dist/src/ml-bundled-models.d.ts +7 -3
  24. package/dist/src/ml-bundled-models.js +53 -25
  25. package/dist/src/ml-bundled-models.js.map +1 -1
  26. package/dist/src/ml-hub-access.d.ts +5 -3
  27. package/dist/src/ml-hub-access.js +20 -6
  28. package/dist/src/ml-hub-access.js.map +1 -1
  29. package/dist/src/ml-runtime.d.ts +6 -4
  30. package/dist/src/ml-runtime.js +5 -19
  31. package/dist/src/ml-runtime.js.map +1 -1
  32. package/dist/src/ml-transformers-env.d.ts +6 -1
  33. package/dist/src/ml-transformers-env.js +18 -4
  34. package/dist/src/ml-transformers-env.js.map +1 -1
  35. package/dist/src/semantic-keywords.js +34 -14
  36. package/dist/src/semantic-keywords.js.map +1 -1
  37. package/dist/src/semantic-model-resolve.d.ts +7 -5
  38. package/dist/src/semantic-model-resolve.js +56 -29
  39. package/dist/src/semantic-model-resolve.js.map +1 -1
  40. package/dist/src/sentiment-analyze.js +26 -11
  41. package/dist/src/sentiment-analyze.js.map +1 -1
  42. package/dist/src/sentiment-policy.d.ts +1 -1
  43. package/dist/src/sentiment-policy.js +5 -3
  44. package/dist/src/sentiment-policy.js.map +1 -1
  45. package/dist/src/toxicity-analyze.js +34 -7
  46. package/dist/src/toxicity-analyze.js.map +1 -1
  47. package/dist/src/version.d.ts +2 -2
  48. package/dist/src/version.js +1 -1
  49. 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**는 가용 RAM≥14GB **KURE-v1** 로컬 ONNX(~2.1GB) GitHub Release zip으로 lazy 받음(`npm run sync:ml-models`로 export·`kca-kure-v1-onnx.zip` 업로드). 없으면 KoELECTRA embed로 폴백. 독성 ONNX도 Release zip lazy(`KCA_NO_TOXICITY_DOWNLOAD=1`, `KCA_NO_KURE_DOWNLOAD=1`).
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 100_000;
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":"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"}
1
+ {"version":3,"file":"analysis-budget.js","sourceRoot":"","sources":["../../src/analysis-budget.ts"],"names":[],"mappings":"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"}
@@ -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 >= 16) {
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;QACnB,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"}
1
+ {"version":3,"file":"analysis-capability.js","sourceRoot":"","sources":["../../src/analysis-capability.ts"],"names":[],"mappings":"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"}
@@ -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 — free RAM을 보수적으로 반영 */
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;
@@ -35,23 +35,64 @@ export function memoryHeadroomForLlmLoad(profile) {
35
35
  }
36
36
  return Math.round(headroom * 10) / 10;
37
37
  }
38
- const POST_ML_OS_SLACK_GB = 2;
39
- /** ML dispose 직후 GGUF 로드용 headroom — free RAM을 더 보수적으로 반영 */
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
- const freeCap = Math.max(0, free - POST_ML_OS_SLACK_GB);
46
- if (freeCap < effective)
47
- effective = freeCap;
48
- if (free < minFree) {
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":"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"}
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
- /** 독성·공격 (base) */
22
- export declare const HUB_KCELECTRA_TOXICITY = "monologg/koelectra-base-v3-discriminator";
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"];
@@ -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
- /** 독성·공격 (base) */
22
- export const HUB_KCELECTRA_TOXICITY = "monologg/koelectra-base-v3-discriminator";
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;AACrB,MAAM,CAAC,MAAM,sBAAsB,GAAG,0CAA0C,CAAC;AAEjF,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"}
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"}
@@ -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, HUB_KOELECTRA_NSMC, } from "./model-ids.js";
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: HUB_KOELECTRA_NSMC,
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 번들 준비 건너뜀: ${msg}\n`);
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":"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"}
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,8BAA8B,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAUzE,SAAS,aAAa,CAAC,KAAa,EAAE,KAAc;IAClD,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,aAAa,GAAG,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAoC;IAChF,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;QAC/F,MAAM,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACrF,IAAI,aAAa,KAAK,qBAAqB,EAAE,CAAC;YAC5C,MAAM,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvC,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,aAAa,KAAK,8BAA8B,EAAE,CAAC;YACrD,4CAA4C;YAC5C,uBAAuB;QACzB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,GAAG,EAAE,CAAC;IACpE,MAAM,OAAO,GAAkC,EAAE,CAAC;IAElD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAChB,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7E,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAChB,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5E,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAChB,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACxC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,MAAM,GAAG,EAAE,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -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 toxicityReleaseTag(): string;
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.0";
26
+ return process.env.KCA_ML_MODELS_VERSION?.trim() || "0.2.1";
27
27
  }
28
28
  }
29
- export function toxicityReleaseTag() {
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 function toxicityReleaseAssetUrl() {
35
+ /** @deprecated */ export const toxicityReleaseTag = mlModelsReleaseTag;
36
+ function pinnedReleaseAssetUrl(assetName) {
36
37
  const repo = process.env.KCA_ML_MODELS_REPO?.trim() || DEFAULT_REPO;
37
- const tag = toxicityReleaseTag();
38
- return `https://github.com/${repo}/releases/download/${tag}/${TOXICITY_ONNX_ASSET}`;
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 tag = toxicityReleaseTag();
43
- return `https://github.com/${repo}/releases/download/${tag}/${KURE_ONNX_ASSET}`;
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
- return (existsSync(join(root, modelId, "config.json")) &&
47
- existsSync(join(root, modelId, "onnx", "model.onnx")));
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
- const url = toxicityReleaseAssetUrl();
122
- const cache = mlBundleCacheDir();
123
- const dlDir = join(cache, "..", "downloads");
124
- mkdirSync(dlDir, { recursive: true });
125
- const zipPath = join(dlDir, TOXICITY_ONNX_ASSET);
126
- const tmpExtract = join(dlDir, "_toxicity_extract");
127
- try {
128
- process.stderr.write(`[kca] 독성 ML 번들 다운로드 중… ${url}\n`);
129
- const res = await fetch(url, { redirect: "follow" });
130
- if (!res.ok || !res.body) {
131
- process.stderr.write(`[kca] 독성 번들 다운로드 실패 (${res.status}): ${url}\n`);
132
- return false;
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
- const url = kureReleaseAssetUrl();
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, KURE_ONNX_ASSET);
188
- const tmpExtract = join(dlDir, "_kure_extract");
216
+ const zipPath = join(dlDir, opts.assetName);
217
+ const tmpExtract = join(dlDir, opts.extractDirName);
189
218
  try {
190
- process.stderr.write(`[kca] KURE 임베딩 번들 다운로드 중… ${url}\n`);
191
- const res = await fetch(url, { redirect: "follow" });
192
- if (!res.ok || !res.body) {
193
- process.stderr.write(`[kca] KURE 번들 다운로드 실패 (${res.status}): ${url}\n`);
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("[kca] KURE 번들 압축 해제 실패 (tar/unzip 필요)\n");
240
+ process.stderr.write(`[kca] ${opts.label} 압축 해제 실패 (tar/unzip 필요)\n`);
202
241
  return false;
203
242
  }
204
- const src = resolveKureExtractSrc(tmpExtract);
243
+ const src = opts.resolveSrc(tmpExtract);
205
244
  if (!src) {
206
- process.stderr.write("[kca] KURE 번들 zip 구조가 예상과 다릅니다\n");
245
+ process.stderr.write(`[kca] ${opts.label} zip 구조가 예상과 다릅니다\n`);
207
246
  return false;
208
247
  }
209
- const dest = join(cache, BUNDLED_KURE_MODEL_ID);
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] KURE 임베딩 번들 설치됨: ${dest}\n`);
215
- return isKureBundleReady();
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] KURE 번들 다운로드 오류: ${msg}\n`);
258
+ process.stderr.write(`[kca] ${opts.label} 다운로드 오류: ${msg}\n`);
220
259
  return false;
221
260
  }
222
261
  finally {