kakaotalk-chat-analyzer 0.18.3 → 0.18.7
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/dist/src/analysis-capability.d.ts +4 -0
- package/dist/src/analysis-capability.js +11 -4
- package/dist/src/analysis-capability.js.map +1 -1
- package/dist/src/analysis-effective-config.d.ts +67 -0
- package/dist/src/analysis-effective-config.js +311 -0
- package/dist/src/analysis-effective-config.js.map +1 -0
- package/dist/src/analysis-preset.d.ts +1 -1
- package/dist/src/analysis-preset.js +15 -5
- package/dist/src/analysis-preset.js.map +1 -1
- package/dist/src/analysis-profile.d.ts +2 -2
- package/dist/src/analysis-profile.js +4 -4
- package/dist/src/analysis-profile.js.map +1 -1
- package/dist/src/analysis.js +7 -7
- package/dist/src/analysis.js.map +1 -1
- package/dist/src/cli.js +55 -62
- package/dist/src/cli.js.map +1 -1
- package/dist/src/keyword-seed-topics.js +46 -9
- package/dist/src/keyword-seed-topics.js.map +1 -1
- package/dist/src/kiwi-worker-config.js +4 -3
- package/dist/src/kiwi-worker-config.js.map +1 -1
- package/dist/src/llm-policy.d.ts +1 -1
- package/dist/src/llm-policy.js +5 -3
- package/dist/src/llm-policy.js.map +1 -1
- package/dist/src/memory-probe.d.ts +18 -0
- package/dist/src/memory-probe.js +115 -0
- package/dist/src/memory-probe.js.map +1 -0
- package/dist/src/ml-batch-size.js +7 -4
- package/dist/src/ml-batch-size.js.map +1 -1
- package/dist/src/report-charts.d.ts +1 -1
- package/dist/src/report-charts.js +72 -46
- package/dist/src/report-charts.js.map +1 -1
- package/dist/src/report-provenance.d.ts +11 -0
- package/dist/src/report-provenance.js +49 -8
- package/dist/src/report-provenance.js.map +1 -1
- package/dist/src/report-styles.d.ts +1 -1
- package/dist/src/report-styles.js +105 -34
- package/dist/src/report-styles.js.map +1 -1
- package/dist/src/report.js +27 -5
- package/dist/src/report.js.map +1 -1
- package/dist/src/topic-map.js +5 -1
- package/dist/src/topic-map.js.map +1 -1
- package/dist/src/topic-merge.js +102 -55
- package/dist/src/topic-merge.js.map +1 -1
- package/dist/src/topic-normalize.d.ts +8 -0
- package/dist/src/topic-normalize.js +110 -0
- package/dist/src/topic-normalize.js.map +1 -0
- package/dist/src/types.d.ts +10 -0
- package/dist/src/version.d.ts +2 -2
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
export type GpuKind = "none" | "cuda" | "dml" | "metal" | "webgpu";
|
|
2
2
|
export interface MachineProfile {
|
|
3
3
|
totalMemGb: number;
|
|
4
|
+
/** os.freemem() — 즉시 해제 가능( macOS에서 과소 ) */
|
|
4
5
|
freeMemGb: number;
|
|
6
|
+
/** OS별 가용 추정 — preset·배치·LLM 판단 */
|
|
7
|
+
availableMemGb: number;
|
|
5
8
|
cpuCores: number;
|
|
6
9
|
platform: NodeJS.Platform;
|
|
7
10
|
arch: string;
|
|
8
11
|
gpu: GpuKind;
|
|
9
12
|
}
|
|
13
|
+
export declare function memoryHeadroomGb(profile: MachineProfile): number;
|
|
10
14
|
export declare function probeMachineProfileSync(): MachineProfile;
|
|
11
15
|
export declare function probeMachineProfile(): Promise<MachineProfile>;
|
|
12
16
|
/** preset·코퍼스·RAM 기준 분석 예산(ms) — 5분 SLA 휴리스틱 */
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { totalmem, cpus, platform, arch } from "node:os";
|
|
2
|
+
import { formatMemoryLine, probeAvailableMemoryBytes, probeFreeMemoryBytes, } from "./memory-probe.js";
|
|
2
3
|
import { probeOnnxGpu } from "./ml-runtime.js";
|
|
4
|
+
export function memoryHeadroomGb(profile) {
|
|
5
|
+
return profile.availableMemGb ?? profile.freeMemGb;
|
|
6
|
+
}
|
|
3
7
|
export function probeMachineProfileSync() {
|
|
4
8
|
const totalMemGb = totalmem() / 1024 ** 3;
|
|
5
|
-
const freeMemGb =
|
|
9
|
+
const freeMemGb = probeFreeMemoryBytes() / 1024 ** 3;
|
|
10
|
+
const availableMemGb = probeAvailableMemoryBytes() / 1024 ** 3;
|
|
6
11
|
return {
|
|
7
12
|
totalMemGb: Math.round(totalMemGb * 10) / 10,
|
|
8
13
|
freeMemGb: Math.round(freeMemGb * 10) / 10,
|
|
14
|
+
availableMemGb: Math.round(availableMemGb * 10) / 10,
|
|
9
15
|
cpuCores: cpus().length,
|
|
10
16
|
platform: platform(),
|
|
11
17
|
arch: arch(),
|
|
@@ -27,13 +33,14 @@ export function analysisBudgetMs(preset, messageCount, profile) {
|
|
|
27
33
|
export function estimateAnalysisSeconds(preset, messageCount, profile) {
|
|
28
34
|
const n = Math.max(messageCount, 1);
|
|
29
35
|
const base = n / 900;
|
|
30
|
-
const
|
|
36
|
+
const headroom = memoryHeadroomGb(profile);
|
|
37
|
+
const memFactor = headroom < 6 ? 1.4 : headroom < 12 ? 1.1 : 1;
|
|
31
38
|
const presetFactor = preset === "speed" ? 0.55 : preset === "balanced" ? 1 : preset === "quality" ? 1.45 : 1.1;
|
|
32
39
|
return Math.max(1, Math.round(base * memFactor * presetFactor));
|
|
33
40
|
}
|
|
34
41
|
export function formatCapabilitiesReport(profile, opts) {
|
|
35
42
|
const lines = [
|
|
36
|
-
|
|
43
|
+
formatMemoryLine(profile),
|
|
37
44
|
`CPU: ${profile.cpuCores} cores · ${profile.platform}/${profile.arch}`,
|
|
38
45
|
`GPU (ONNX): ${profile.gpu}`,
|
|
39
46
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-capability.js","sourceRoot":"","sources":["../../src/analysis-capability.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"analysis-capability.js","sourceRoot":"","sources":["../../src/analysis-capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type MachineProfile } from "./analysis-capability.js";
|
|
2
|
+
import { type AnalysisPresetName } from "./analysis-preset.js";
|
|
3
|
+
import { type LlmTier } from "./llm-policy.js";
|
|
4
|
+
import type { BuildReportProvenanceOptions } from "./report-provenance.js";
|
|
5
|
+
import type { PrivacyMode, ReportData } from "./types.js";
|
|
6
|
+
export type PresetSource = "cli" | "env" | "auto-ram" | "auto-corpus" | "legacy-fast";
|
|
7
|
+
export interface PhaseEffectiveState {
|
|
8
|
+
requested: boolean | "auto";
|
|
9
|
+
used: boolean;
|
|
10
|
+
model?: string;
|
|
11
|
+
sampleCap?: number;
|
|
12
|
+
skippedReason?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AnalysisEffectiveConfig {
|
|
15
|
+
preset: AnalysisPresetName;
|
|
16
|
+
presetSource: PresetSource;
|
|
17
|
+
profile: "quality" | "fast";
|
|
18
|
+
privacy: PrivacyMode;
|
|
19
|
+
top: number;
|
|
20
|
+
since?: string;
|
|
21
|
+
workerRequested: boolean | "auto";
|
|
22
|
+
workerUsed: boolean;
|
|
23
|
+
semantic: PhaseEffectiveState;
|
|
24
|
+
sentiment: PhaseEffectiveState;
|
|
25
|
+
llm: {
|
|
26
|
+
tier: LlmTier;
|
|
27
|
+
used: boolean;
|
|
28
|
+
modelId?: string;
|
|
29
|
+
skippedReason?: string;
|
|
30
|
+
};
|
|
31
|
+
topicModel: "graph" | "embedding" | "hybrid";
|
|
32
|
+
embeddingTopics: boolean;
|
|
33
|
+
budgetMs: number;
|
|
34
|
+
envOverrides: string[];
|
|
35
|
+
invokedVia?: {
|
|
36
|
+
name: "kcachat";
|
|
37
|
+
version: string;
|
|
38
|
+
};
|
|
39
|
+
messageCount: number;
|
|
40
|
+
machine: Pick<MachineProfile, "freeMemGb" | "availableMemGb" | "totalMemGb" | "gpu">;
|
|
41
|
+
}
|
|
42
|
+
export interface CliPipelineOptions {
|
|
43
|
+
privacy: PrivacyMode;
|
|
44
|
+
top: number;
|
|
45
|
+
since?: string;
|
|
46
|
+
preset?: AnalysisPresetName;
|
|
47
|
+
worker?: boolean;
|
|
48
|
+
semanticKeywords?: boolean;
|
|
49
|
+
sentiment?: boolean;
|
|
50
|
+
}
|
|
51
|
+
export declare function resolvePresetSource(cliPreset: AnalysisPresetName | undefined, worker: boolean | undefined, messageCount: number, machine: MachineProfile): PresetSource;
|
|
52
|
+
/** 집계 완료 후 실제 적용 설정 */
|
|
53
|
+
export declare function buildAnalysisEffectiveConfig(data: ReportData, cli: CliPipelineOptions, machine?: MachineProfile): AnalysisEffectiveConfig;
|
|
54
|
+
export declare function withWorkerUsed(config: AnalysisEffectiveConfig, workerUsed: boolean): AnalysisEffectiveConfig;
|
|
55
|
+
/** 집계 전 예상 preset (stderr 힌트) */
|
|
56
|
+
export declare function estimatePresetBeforeParse(cli: Pick<CliPipelineOptions, "preset" | "worker">, messageEstimate?: number): {
|
|
57
|
+
preset: AnalysisPresetName;
|
|
58
|
+
source: PresetSource;
|
|
59
|
+
};
|
|
60
|
+
export declare function formatEstimatedPresetHint(cli: Pick<CliPipelineOptions, "preset" | "worker">, messageEstimate?: number): string;
|
|
61
|
+
export declare function formatConfigSummaryKo(config: AnalysisEffectiveConfig): string;
|
|
62
|
+
export declare function configToJson(config: AnalysisEffectiveConfig): string;
|
|
63
|
+
export declare function toProvenanceOptions(config: AnalysisEffectiveConfig, data: ReportData, extras: {
|
|
64
|
+
kiwiAvailable: boolean;
|
|
65
|
+
buildTiming?: BuildReportProvenanceOptions["buildTiming"];
|
|
66
|
+
htmlBytes?: number;
|
|
67
|
+
}): BuildReportProvenanceOptions;
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { analysisBudgetMs, memoryHeadroomGb, probeMachineProfileSync, } from "./analysis-capability.js";
|
|
2
|
+
import { formatMemoryLine } from "./memory-probe.js";
|
|
3
|
+
import { autoPresetFromMachine, presetForcesSemanticOff, presetForcesSentimentOff, resolvePresetName, resolvePresetNameWithAuto, } from "./analysis-preset.js";
|
|
4
|
+
import { getAnalysisProfileSettings } from "./analysis-profile.js";
|
|
5
|
+
import { resolveLlmTier, qwenModelIdForTier } from "./llm-policy.js";
|
|
6
|
+
import { parseKcaInvokerEnv } from "./report-provenance.js";
|
|
7
|
+
import { resolveTopicModel } from "./report-provenance.js";
|
|
8
|
+
import { effectiveSemanticSampleCap, semanticEmbeddingModelId, } from "./semantic-policy.js";
|
|
9
|
+
import { sentimentModelId } from "./sentiment-policy.js";
|
|
10
|
+
function collectEnvOverrides() {
|
|
11
|
+
const keys = [
|
|
12
|
+
"KCA_PRESET",
|
|
13
|
+
"KCA_PROFILE",
|
|
14
|
+
"KCA_NO_SEMANTIC",
|
|
15
|
+
"KCA_SEMANTIC",
|
|
16
|
+
"KCA_SEMANTIC_DEFAULT",
|
|
17
|
+
"KCA_SEMANTIC_MODEL",
|
|
18
|
+
"KCA_NO_SENTIMENT",
|
|
19
|
+
"KCA_SENTIMENT",
|
|
20
|
+
"KCA_SENTIMENT_DEFAULT",
|
|
21
|
+
"KCA_SENTIMENT_MODEL",
|
|
22
|
+
"KCA_LLM",
|
|
23
|
+
"KCA_LLM_MODEL",
|
|
24
|
+
"KCA_LLM_MOCK",
|
|
25
|
+
"KCA_LLM_BACKEND",
|
|
26
|
+
"KCA_EMBEDDING_TOPICS",
|
|
27
|
+
"KCA_INVOKER",
|
|
28
|
+
"KCA_MEMORY_PROBE",
|
|
29
|
+
];
|
|
30
|
+
const out = [];
|
|
31
|
+
for (const key of keys) {
|
|
32
|
+
const v = process.env[key];
|
|
33
|
+
if (v !== undefined && v !== "")
|
|
34
|
+
out.push(`${key}=${v}`);
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
export function resolvePresetSource(cliPreset, worker, messageCount, machine) {
|
|
39
|
+
if (cliPreset)
|
|
40
|
+
return "cli";
|
|
41
|
+
const env = process.env.KCA_PRESET?.trim().toLowerCase();
|
|
42
|
+
if (env === "speed" || env === "balanced" || env === "quality" || env === "custom")
|
|
43
|
+
return "env";
|
|
44
|
+
if (worker === true || process.env.KCA_PROFILE === "fast")
|
|
45
|
+
return "legacy-fast";
|
|
46
|
+
const auto = autoPresetFromMachine(machine, messageCount);
|
|
47
|
+
const ramOnly = autoPresetFromMachine(machine, 0);
|
|
48
|
+
if (auto !== ramOnly)
|
|
49
|
+
return "auto-corpus";
|
|
50
|
+
return "auto-ram";
|
|
51
|
+
}
|
|
52
|
+
function presetSourceLabel(source) {
|
|
53
|
+
const labels = {
|
|
54
|
+
cli: "CLI --preset",
|
|
55
|
+
env: "환경 변수 KCA_PRESET",
|
|
56
|
+
"auto-ram": "RAM 기준 자동",
|
|
57
|
+
"auto-corpus": "RAM·메시지 수 기준 자동",
|
|
58
|
+
"legacy-fast": "CLI --fast / KCA_PROFILE=fast",
|
|
59
|
+
};
|
|
60
|
+
return labels[source];
|
|
61
|
+
}
|
|
62
|
+
function resolveWorkerRequested(worker) {
|
|
63
|
+
if (worker === false)
|
|
64
|
+
return false;
|
|
65
|
+
if (worker === true)
|
|
66
|
+
return true;
|
|
67
|
+
return "auto";
|
|
68
|
+
}
|
|
69
|
+
function resolveSemanticRequested(semanticKeywords) {
|
|
70
|
+
if (semanticKeywords === false)
|
|
71
|
+
return false;
|
|
72
|
+
if (semanticKeywords === true)
|
|
73
|
+
return true;
|
|
74
|
+
return "auto";
|
|
75
|
+
}
|
|
76
|
+
function resolveSentimentRequested(sentiment) {
|
|
77
|
+
if (sentiment === false)
|
|
78
|
+
return false;
|
|
79
|
+
if (sentiment === true)
|
|
80
|
+
return true;
|
|
81
|
+
return "auto";
|
|
82
|
+
}
|
|
83
|
+
function inferSemanticSkipReason(options, preset, used) {
|
|
84
|
+
if (used)
|
|
85
|
+
return undefined;
|
|
86
|
+
if (process.env.KCA_NO_SEMANTIC === "1")
|
|
87
|
+
return "KCA_NO_SEMANTIC=1";
|
|
88
|
+
if (options?.semanticKeywords === false)
|
|
89
|
+
return "CLI --no-semantic-keywords";
|
|
90
|
+
if (presetForcesSemanticOff(options))
|
|
91
|
+
return `${preset} preset`;
|
|
92
|
+
if (process.env.KCA_SEMANTIC === "0")
|
|
93
|
+
return "KCA_SEMANTIC=0";
|
|
94
|
+
if (process.env.KCA_SEMANTIC_DEFAULT === "opt-in")
|
|
95
|
+
return "KCA_SEMANTIC_DEFAULT=opt-in";
|
|
96
|
+
if (options?.semanticKeywords !== true && process.env.KCA_SEMANTIC !== "1") {
|
|
97
|
+
return "auto: 한국어 비중·샘플 조건 미충족 또는 실행 중 오류";
|
|
98
|
+
}
|
|
99
|
+
return "실행 중 오류 또는 샘플 부족";
|
|
100
|
+
}
|
|
101
|
+
function inferSentimentSkipReason(options, preset, used) {
|
|
102
|
+
if (used)
|
|
103
|
+
return undefined;
|
|
104
|
+
if (process.env.KCA_NO_SENTIMENT === "1")
|
|
105
|
+
return "KCA_NO_SENTIMENT=1";
|
|
106
|
+
if (options?.sentiment === false)
|
|
107
|
+
return "CLI --no-sentiment";
|
|
108
|
+
if (presetForcesSentimentOff(options))
|
|
109
|
+
return `${preset} preset`;
|
|
110
|
+
if (process.env.KCA_SENTIMENT === "0")
|
|
111
|
+
return "KCA_SENTIMENT=0";
|
|
112
|
+
if (process.env.KCA_SENTIMENT_DEFAULT === "opt-in")
|
|
113
|
+
return "KCA_SENTIMENT_DEFAULT=opt-in";
|
|
114
|
+
if (options?.sentiment !== true && process.env.KCA_SENTIMENT !== "1") {
|
|
115
|
+
return "auto: 한국어 비중·샘플 조건 미충족 또는 실행 중 오류";
|
|
116
|
+
}
|
|
117
|
+
return "실행 중 오류 또는 샘플 부족";
|
|
118
|
+
}
|
|
119
|
+
function inferLlmSkipReason(preset, tier, used, profile) {
|
|
120
|
+
if (used)
|
|
121
|
+
return undefined;
|
|
122
|
+
if (process.env.KCA_LLM === "0")
|
|
123
|
+
return "KCA_LLM=0";
|
|
124
|
+
if (tier !== "off") {
|
|
125
|
+
return "GGUF 없음·예산 부족·추론 실패 또는 JSON 파싱 실패";
|
|
126
|
+
}
|
|
127
|
+
if (preset === "speed" || preset === "balanced") {
|
|
128
|
+
return `${preset} preset (KCA_LLM=1 없음)`;
|
|
129
|
+
}
|
|
130
|
+
if (preset === "custom" && process.env.KCA_LLM !== "1")
|
|
131
|
+
return "custom preset (KCA_LLM=1 필요)";
|
|
132
|
+
const headroom = memoryHeadroomGb(profile);
|
|
133
|
+
if (headroom < 8)
|
|
134
|
+
return `가용 RAM ${headroom}GB (< 8GB)`;
|
|
135
|
+
return "LLM tier off";
|
|
136
|
+
}
|
|
137
|
+
/** 집계 완료 후 실제 적용 설정 */
|
|
138
|
+
export function buildAnalysisEffectiveConfig(data, cli, machine) {
|
|
139
|
+
const profileMachine = machine ?? probeMachineProfileSync();
|
|
140
|
+
const buildOpts = {
|
|
141
|
+
preset: cli.preset,
|
|
142
|
+
worker: cli.worker,
|
|
143
|
+
semanticKeywords: cli.semanticKeywords,
|
|
144
|
+
sentiment: cli.sentiment,
|
|
145
|
+
since: cli.since,
|
|
146
|
+
};
|
|
147
|
+
const messageCount = data.summary.totalMessages;
|
|
148
|
+
const preset = resolvePresetNameWithAuto(buildOpts, messageCount);
|
|
149
|
+
const presetSource = resolvePresetSource(cli.preset, cli.worker, messageCount, profileMachine);
|
|
150
|
+
const profileSettings = getAnalysisProfileSettings(buildOpts, messageCount);
|
|
151
|
+
const semanticModel = semanticEmbeddingModelId(buildOpts, messageCount);
|
|
152
|
+
const sentimentModel = sentimentModelId(preset);
|
|
153
|
+
const semanticCap = effectiveSemanticSampleCap(messageCount, buildOpts);
|
|
154
|
+
const llmTier = resolveLlmTier(preset, profileMachine);
|
|
155
|
+
const semanticUsed = data.summary.usedSemanticKeywords === true;
|
|
156
|
+
const sentimentUsed = data.summary.usedSentimentAnalysis === true;
|
|
157
|
+
const llmUsed = data.summary.usedLlmAnalysis === true;
|
|
158
|
+
return {
|
|
159
|
+
preset,
|
|
160
|
+
presetSource,
|
|
161
|
+
profile: profileSettings.profile,
|
|
162
|
+
privacy: cli.privacy,
|
|
163
|
+
top: cli.top,
|
|
164
|
+
since: cli.since,
|
|
165
|
+
workerRequested: resolveWorkerRequested(cli.worker),
|
|
166
|
+
workerUsed: false,
|
|
167
|
+
semantic: {
|
|
168
|
+
requested: resolveSemanticRequested(cli.semanticKeywords),
|
|
169
|
+
used: semanticUsed,
|
|
170
|
+
model: semanticModel,
|
|
171
|
+
sampleCap: semanticCap,
|
|
172
|
+
skippedReason: inferSemanticSkipReason(buildOpts, preset, semanticUsed),
|
|
173
|
+
},
|
|
174
|
+
sentiment: {
|
|
175
|
+
requested: resolveSentimentRequested(cli.sentiment),
|
|
176
|
+
used: sentimentUsed,
|
|
177
|
+
model: sentimentModel,
|
|
178
|
+
skippedReason: inferSentimentSkipReason(buildOpts, preset, sentimentUsed),
|
|
179
|
+
},
|
|
180
|
+
llm: {
|
|
181
|
+
tier: llmTier,
|
|
182
|
+
used: llmUsed,
|
|
183
|
+
modelId: qwenModelIdForTier(llmTier),
|
|
184
|
+
skippedReason: inferLlmSkipReason(preset, llmTier, llmUsed, profileMachine),
|
|
185
|
+
},
|
|
186
|
+
topicModel: resolveTopicModel(data),
|
|
187
|
+
embeddingTopics: profileSettings.useEmbeddingTopics,
|
|
188
|
+
budgetMs: analysisBudgetMs(preset, messageCount, profileMachine),
|
|
189
|
+
envOverrides: collectEnvOverrides(),
|
|
190
|
+
invokedVia: parseKcaInvokerEnv(process.env.KCA_INVOKER),
|
|
191
|
+
messageCount,
|
|
192
|
+
machine: {
|
|
193
|
+
freeMemGb: profileMachine.freeMemGb,
|
|
194
|
+
availableMemGb: profileMachine.availableMemGb,
|
|
195
|
+
totalMemGb: profileMachine.totalMemGb,
|
|
196
|
+
gpu: profileMachine.gpu,
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
export function withWorkerUsed(config, workerUsed) {
|
|
201
|
+
return { ...config, workerUsed };
|
|
202
|
+
}
|
|
203
|
+
/** 집계 전 예상 preset (stderr 힌트) */
|
|
204
|
+
export function estimatePresetBeforeParse(cli, messageEstimate) {
|
|
205
|
+
const machine = probeMachineProfileSync();
|
|
206
|
+
if (cli.preset) {
|
|
207
|
+
return {
|
|
208
|
+
preset: cli.preset,
|
|
209
|
+
source: "cli",
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
const env = process.env.KCA_PRESET?.trim().toLowerCase();
|
|
213
|
+
if (env === "speed" || env === "balanced" || env === "quality" || env === "custom") {
|
|
214
|
+
return { preset: env, source: "env" };
|
|
215
|
+
}
|
|
216
|
+
if (cli.worker === true || process.env.KCA_PROFILE === "fast") {
|
|
217
|
+
return {
|
|
218
|
+
preset: resolvePresetName({ worker: cli.worker }),
|
|
219
|
+
source: "legacy-fast",
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const n = messageEstimate ?? 0;
|
|
223
|
+
return {
|
|
224
|
+
preset: autoPresetFromMachine(machine, n),
|
|
225
|
+
source: resolvePresetSource(undefined, undefined, n, machine),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export function formatEstimatedPresetHint(cli, messageEstimate) {
|
|
229
|
+
const machine = probeMachineProfileSync();
|
|
230
|
+
const { preset, source } = estimatePresetBeforeParse(cli, messageEstimate);
|
|
231
|
+
const n = messageEstimate !== undefined
|
|
232
|
+
? ` · 메시지 ~${messageEstimate.toLocaleString("ko-KR")}건`
|
|
233
|
+
: "";
|
|
234
|
+
const ram = Math.abs(machine.availableMemGb - machine.freeMemGb) < 0.3
|
|
235
|
+
? `가용 RAM ${machine.availableMemGb}GB`
|
|
236
|
+
: `가용 RAM ${machine.availableMemGb}GB (free ${machine.freeMemGb}GB)`;
|
|
237
|
+
return `[kca] 예상 preset: ${preset} (${presetSourceLabel(source)} · ${ram}${n})`;
|
|
238
|
+
}
|
|
239
|
+
function formatRequested(req) {
|
|
240
|
+
if (req === "auto")
|
|
241
|
+
return "auto";
|
|
242
|
+
return req ? "on" : "off";
|
|
243
|
+
}
|
|
244
|
+
export function formatConfigSummaryKo(config) {
|
|
245
|
+
const lines = [
|
|
246
|
+
"=== kca 분석 설정 ===",
|
|
247
|
+
`preset: ${config.preset} (${presetSourceLabel(config.presetSource)})`,
|
|
248
|
+
`프로필: ${config.profile} · 프라이버시: ${config.privacy} · 상위 목록: ${config.top}`,
|
|
249
|
+
`메시지: ${config.messageCount.toLocaleString("ko-KR")}건 · ${formatMemoryLine(config.machine).replace(/^RAM: /, "")} · GPU ${config.machine.gpu}`,
|
|
250
|
+
`Worker: 요청 ${formatRequested(config.workerRequested)} · 실제 ${config.workerUsed ? "사용" : "미사용"}`,
|
|
251
|
+
];
|
|
252
|
+
if (config.since)
|
|
253
|
+
lines.push(`기간 필터: ${config.since} 이후`);
|
|
254
|
+
const sem = config.semantic;
|
|
255
|
+
lines.push(`시맨틱: 요청 ${formatRequested(sem.requested)} · 실제 ${sem.used ? "사용" : "미사용"} · 모델 ${sem.model}${sem.sampleCap ? ` · 상한 ${sem.sampleCap}` : ""}`);
|
|
256
|
+
if (!sem.used && sem.skippedReason)
|
|
257
|
+
lines.push(` ↳ 미사용 사유: ${sem.skippedReason}`);
|
|
258
|
+
const sent = config.sentiment;
|
|
259
|
+
lines.push(`감정: 요청 ${formatRequested(sent.requested)} · 실제 ${sent.used ? "사용" : "미사용"} · 모델 ${sent.model}`);
|
|
260
|
+
if (!sent.used && sent.skippedReason)
|
|
261
|
+
lines.push(` ↳ 미사용 사유: ${sent.skippedReason}`);
|
|
262
|
+
const llm = config.llm;
|
|
263
|
+
lines.push(`LLM: tier ${llm.tier} · 실제 ${llm.used ? "사용" : "미사용"}${llm.modelId ? ` · ${llm.modelId}` : ""}`);
|
|
264
|
+
if (!llm.used && llm.skippedReason)
|
|
265
|
+
lines.push(` ↳ 미사용 사유: ${llm.skippedReason}`);
|
|
266
|
+
lines.push(`주제: ${config.topicModel} · 임베딩 주제 레인: ${config.embeddingTopics ? "on" : "off"} · 분석 예산 ~${Math.round(config.budgetMs / 1000)}s`);
|
|
267
|
+
if (config.invokedVia) {
|
|
268
|
+
lines.push(`실행 경로: ${config.invokedVia.name} ${config.invokedVia.version} → kca`);
|
|
269
|
+
}
|
|
270
|
+
if (config.envOverrides.length > 0) {
|
|
271
|
+
lines.push(`환경 변수: ${config.envOverrides.join(", ")}`);
|
|
272
|
+
}
|
|
273
|
+
return lines.join("\n");
|
|
274
|
+
}
|
|
275
|
+
export function configToJson(config) {
|
|
276
|
+
return JSON.stringify(config, null, 2);
|
|
277
|
+
}
|
|
278
|
+
export function toProvenanceOptions(config, data, extras) {
|
|
279
|
+
return {
|
|
280
|
+
privacy: config.privacy,
|
|
281
|
+
top: config.top,
|
|
282
|
+
since: config.since,
|
|
283
|
+
workerRequested: config.workerRequested,
|
|
284
|
+
workerUsed: config.workerUsed,
|
|
285
|
+
semanticRequested: config.semantic.requested,
|
|
286
|
+
sentimentRequested: config.sentiment.requested,
|
|
287
|
+
kiwiAvailable: extras.kiwiAvailable,
|
|
288
|
+
preset: config.preset,
|
|
289
|
+
presetSource: config.presetSource,
|
|
290
|
+
semanticModel: config.semantic.model,
|
|
291
|
+
semanticCap: config.semantic.sampleCap,
|
|
292
|
+
semanticSkippedReason: !config.semantic.used && config.semantic.skippedReason
|
|
293
|
+
? config.semantic.skippedReason
|
|
294
|
+
: undefined,
|
|
295
|
+
sentimentModel: config.sentiment.model,
|
|
296
|
+
sentimentSkippedReason: !config.sentiment.used && config.sentiment.skippedReason
|
|
297
|
+
? config.sentiment.skippedReason
|
|
298
|
+
: undefined,
|
|
299
|
+
llmTier: config.llm.tier,
|
|
300
|
+
llmUsed: config.llm.used,
|
|
301
|
+
llmSkippedReason: !config.llm.used && config.llm.skippedReason ? config.llm.skippedReason : undefined,
|
|
302
|
+
llmModelId: config.llm.modelId,
|
|
303
|
+
gpu: config.machine.gpu,
|
|
304
|
+
budgetMs: config.budgetMs,
|
|
305
|
+
envOverrides: config.envOverrides.length > 0 ? config.envOverrides : undefined,
|
|
306
|
+
embeddingTopics: config.embeddingTopics,
|
|
307
|
+
buildTiming: extras.buildTiming,
|
|
308
|
+
htmlBytes: extras.htmlBytes,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=analysis-effective-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis-effective-config.js","sourceRoot":"","sources":["../../src/analysis-effective-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export interface PresetEffectiveFlags {
|
|
|
10
10
|
preferWorker: boolean;
|
|
11
11
|
}
|
|
12
12
|
export declare function resolvePresetName(options?: BuildReportOptions): AnalysisPresetName;
|
|
13
|
-
/** CLI 인자 없을 때 RAM·메시지 수 기반 자동 preset */
|
|
13
|
+
/** CLI 인자 없을 때 가용 RAM·총 RAM·메시지 수 기반 자동 preset (품질 우선) */
|
|
14
14
|
export declare function autoPresetFromMachine(profile: MachineProfile, messageCount?: number): AnalysisPresetName;
|
|
15
15
|
export declare function resolvePresetNameWithAuto(options?: BuildReportOptions, messageCount?: number): AnalysisPresetName;
|
|
16
16
|
export declare function getPresetEffectiveFlags(options?: BuildReportOptions, messageCount?: number): PresetEffectiveFlags;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { probeMachineProfileSync } from "./analysis-capability.js";
|
|
1
|
+
import { memoryHeadroomGb, probeMachineProfileSync, } from "./analysis-capability.js";
|
|
2
2
|
function presetFromEnv() {
|
|
3
3
|
const raw = process.env.KCA_PRESET?.trim().toLowerCase();
|
|
4
4
|
if (raw === "speed" || raw === "balanced" || raw === "quality" || raw === "custom")
|
|
@@ -15,13 +15,23 @@ export function resolvePresetName(options) {
|
|
|
15
15
|
return "speed";
|
|
16
16
|
return "balanced";
|
|
17
17
|
}
|
|
18
|
-
/** CLI 인자 없을 때 RAM·메시지 수 기반 자동 preset */
|
|
18
|
+
/** CLI 인자 없을 때 가용 RAM·총 RAM·메시지 수 기반 자동 preset (품질 우선) */
|
|
19
19
|
export function autoPresetFromMachine(profile, messageCount) {
|
|
20
|
-
|
|
20
|
+
const headroom = memoryHeadroomGb(profile);
|
|
21
|
+
const total = profile.totalMemGb;
|
|
22
|
+
const n = messageCount ?? 0;
|
|
23
|
+
if (headroom < 4 || (headroom < 6 && total < 16))
|
|
21
24
|
return "speed";
|
|
22
|
-
if (
|
|
25
|
+
if (total >= 32 && headroom >= 12) {
|
|
26
|
+
return n >= 80_000 ? "balanced" : "quality";
|
|
27
|
+
}
|
|
28
|
+
if (total >= 16 && headroom >= 10) {
|
|
29
|
+
return n >= 40_000 ? "balanced" : "quality";
|
|
30
|
+
}
|
|
31
|
+
if (headroom < 8)
|
|
32
|
+
return "speed";
|
|
33
|
+
if (headroom < 12)
|
|
23
34
|
return "balanced";
|
|
24
|
-
const n = messageCount ?? 0;
|
|
25
35
|
if (n >= 30_000)
|
|
26
36
|
return "balanced";
|
|
27
37
|
return "quality";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-preset.js","sourceRoot":"","sources":["../../src/analysis-preset.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"analysis-preset.js","sourceRoot":"","sources":["../../src/analysis-preset.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,5 +6,5 @@ export interface AnalysisProfileSettings {
|
|
|
6
6
|
semanticSupplementRrfWeight: number;
|
|
7
7
|
semanticClusterMinCoherence: number;
|
|
8
8
|
}
|
|
9
|
-
export declare function resolveAnalysisProfile(options?: BuildReportOptions): AnalysisProfile;
|
|
10
|
-
export declare function getAnalysisProfileSettings(options?: BuildReportOptions): AnalysisProfileSettings;
|
|
9
|
+
export declare function resolveAnalysisProfile(options?: BuildReportOptions, messageCount?: number): AnalysisProfile;
|
|
10
|
+
export declare function getAnalysisProfileSettings(options?: BuildReportOptions, messageCount?: number): AnalysisProfileSettings;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { getPresetEffectiveFlags } from "./analysis-preset.js";
|
|
2
|
-
export function resolveAnalysisProfile(options) {
|
|
3
|
-
const preset = getPresetEffectiveFlags(options);
|
|
2
|
+
export function resolveAnalysisProfile(options, messageCount) {
|
|
3
|
+
const preset = getPresetEffectiveFlags(options, messageCount);
|
|
4
4
|
if (preset.profile === "fast")
|
|
5
5
|
return "fast";
|
|
6
6
|
if (options?.worker === true || process.env.KCA_PROFILE === "fast")
|
|
7
7
|
return "fast";
|
|
8
8
|
return "quality";
|
|
9
9
|
}
|
|
10
|
-
export function getAnalysisProfileSettings(options) {
|
|
11
|
-
const profile = resolveAnalysisProfile(options);
|
|
10
|
+
export function getAnalysisProfileSettings(options, messageCount) {
|
|
11
|
+
const profile = resolveAnalysisProfile(options, messageCount);
|
|
12
12
|
if (profile === "fast") {
|
|
13
13
|
return {
|
|
14
14
|
profile,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-profile.js","sourceRoot":"","sources":["../../src/analysis-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAW/D,MAAM,UAAU,sBAAsB,
|
|
1
|
+
{"version":3,"file":"analysis-profile.js","sourceRoot":"","sources":["../../src/analysis-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAW/D,MAAM,UAAU,sBAAsB,CACpC,OAA4B,EAC5B,YAAqB;IAErB,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAC7C,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAClF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAA4B,EAC5B,YAAqB;IAErB,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO;YACL,OAAO;YACP,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG;YAC5D,2BAA2B,EAAE,IAAI;YACjC,2BAA2B,EAAE,IAAI;SAClC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO;QACP,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG;QAC5D,2BAA2B,EAAE,GAAG;QAChC,2BAA2B,EAAE,IAAI;KAClC,CAAC;AACJ,CAAC"}
|
package/dist/src/analysis.js
CHANGED
|
@@ -25,8 +25,8 @@ import { stat } from "node:fs/promises";
|
|
|
25
25
|
import { estimateKakaoMessageCount, streamKakaoExport } from "./stream-parser.js";
|
|
26
26
|
import { recordOnOrAfter } from "./report-date-filter.js";
|
|
27
27
|
const DEFAULT_TOP = 30;
|
|
28
|
-
function finalizeProfileOpts(options, extra) {
|
|
29
|
-
const settings = getAnalysisProfileSettings(options);
|
|
28
|
+
function finalizeProfileOpts(options, extra, messageCount) {
|
|
29
|
+
const settings = getAnalysisProfileSettings(options, messageCount);
|
|
30
30
|
return {
|
|
31
31
|
...extra,
|
|
32
32
|
useEmbeddingTopics: settings.useEmbeddingTopics,
|
|
@@ -60,7 +60,7 @@ async function applySemanticKeywords(agg, enabled, showProgress, options) {
|
|
|
60
60
|
const samples = agg.drainSemanticSamples(options);
|
|
61
61
|
if (samples.length < 48)
|
|
62
62
|
return false;
|
|
63
|
-
const profileSettings = getAnalysisProfileSettings(options);
|
|
63
|
+
const profileSettings = getAnalysisProfileSettings(options, corpusMessages);
|
|
64
64
|
if (showProgress)
|
|
65
65
|
logReportProgress({ phase: "시맨틱 키워드", current: 0 });
|
|
66
66
|
try {
|
|
@@ -135,7 +135,7 @@ export function buildReportData(result, options) {
|
|
|
135
135
|
encoding: result.encoding,
|
|
136
136
|
physicalLines: result.physicalLines,
|
|
137
137
|
warningCount: result.warnings.length,
|
|
138
|
-
}, finalizeProfileOpts(options, { koreanPrimary: korean })));
|
|
138
|
+
}, finalizeProfileOpts(options, { koreanPrimary: korean }, result.records.length)));
|
|
139
139
|
}
|
|
140
140
|
export async function buildReportDataAsync(result, options) {
|
|
141
141
|
await prepareReportEngine();
|
|
@@ -167,7 +167,7 @@ export async function buildReportDataAsync(result, options) {
|
|
|
167
167
|
usedSemanticKeywords: usedSemantic,
|
|
168
168
|
usedSentimentAnalysis: usedSentiment,
|
|
169
169
|
koreanPrimary: prepass.isPrimarilyKorean(),
|
|
170
|
-
})));
|
|
170
|
+
}, result.records.length)));
|
|
171
171
|
}
|
|
172
172
|
function messageTextFromRecord(record) {
|
|
173
173
|
return record.message;
|
|
@@ -359,7 +359,7 @@ export async function buildReportFromExportSync(filePath, options) {
|
|
|
359
359
|
usedSemanticKeywords: usedSemanticOverlap,
|
|
360
360
|
usedSentimentAnalysis: usedSentimentOverlap,
|
|
361
361
|
koreanPrimary: prepass.isPrimarilyKorean(),
|
|
362
|
-
}));
|
|
362
|
+
}, prepass.messageCount));
|
|
363
363
|
const llmTier = resolveLlmTier(preset, probeMachineProfileSync());
|
|
364
364
|
phaseProfiler.start("llm");
|
|
365
365
|
if (llmTier !== "off" && !budget.shouldSkip("llm")) {
|
|
@@ -432,7 +432,7 @@ export async function buildReportFromExportSync(filePath, options) {
|
|
|
432
432
|
usedSemanticKeywords: usedSemantic,
|
|
433
433
|
usedSentimentAnalysis: usedSentiment,
|
|
434
434
|
koreanPrimary: prepass.isPrimarilyKorean(),
|
|
435
|
-
}));
|
|
435
|
+
}, prepass.messageCount));
|
|
436
436
|
const llmTier = resolveLlmTier(preset, probeMachineProfileSync());
|
|
437
437
|
phaseProfiler.start("llm");
|
|
438
438
|
if (llmTier !== "off" && !budget.shouldSkip("llm")) {
|