ai-i18n-tools 1.5.1 → 1.6.1
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 +7 -2
- package/bin/ai-i18n-tools.mjs +20 -0
- package/dist/build-info.generated.d.ts +1 -1
- package/dist/build-info.generated.js +1 -1
- package/dist/cli/doc-translate-quality-retry.d.ts +81 -0
- package/dist/cli/doc-translate-quality-retry.d.ts.map +1 -0
- package/dist/cli/doc-translate-quality-retry.js +223 -0
- package/dist/cli/doc-translate-quality-retry.js.map +1 -0
- package/dist/cli/doc-translate.d.ts +13 -1
- package/dist/cli/doc-translate.d.ts.map +1 -1
- package/dist/cli/doc-translate.js +256 -324
- package/dist/cli/doc-translate.js.map +1 -1
- package/dist/cli/index.js +170 -139
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/log-output.d.ts.map +1 -1
- package/dist/cli/log-output.js +2 -8
- package/dist/cli/log-output.js.map +1 -1
- package/dist/cli/translate-json-run.d.ts.map +1 -1
- package/dist/cli/translate-json-run.js +43 -2
- package/dist/cli/translate-json-run.js.map +1 -1
- package/dist/cli/translate-svg.d.ts.map +1 -1
- package/dist/cli/translate-svg.js +98 -57
- package/dist/cli/translate-svg.js.map +1 -1
- package/dist/cli/translate-ui-strings.d.ts +2 -0
- package/dist/cli/translate-ui-strings.d.ts.map +1 -1
- package/dist/cli/translate-ui-strings.js +263 -230
- package/dist/cli/translate-ui-strings.js.map +1 -1
- package/dist/core/cache.d.ts +6 -0
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +59 -0
- package/dist/core/cache.js.map +1 -1
- package/dist/core/types.d.ts +8 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -1
- package/dist/extractors/markdown-extractor.js +1 -1
- package/dist/extractors/markdown-extractor.js.map +1 -1
- package/dist/extractors/markdown-quality-split.d.ts +7 -0
- package/dist/extractors/markdown-quality-split.d.ts.map +1 -0
- package/dist/extractors/markdown-quality-split.js +153 -0
- package/dist/extractors/markdown-quality-split.js.map +1 -0
- package/dist/extractors/markdown-segment-split.d.ts +3 -0
- package/dist/extractors/markdown-segment-split.d.ts.map +1 -1
- package/dist/extractors/markdown-segment-split.js +2 -2
- package/dist/extractors/markdown-segment-split.js.map +1 -1
- package/dist/markdown/write-heading-ids-core.js +1 -1
- package/dist/markdown/write-heading-ids-core.js.map +1 -1
- package/dist/processors/bold-code-placeholders.d.ts.map +1 -1
- package/dist/processors/bold-code-placeholders.js +12 -8
- package/dist/processors/bold-code-placeholders.js.map +1 -1
- package/dist/processors/doc-postprocess.js +1 -1
- package/dist/processors/doc-postprocess.js.map +1 -1
- package/dist/processors/emphasis-placeholders.d.ts +6 -2
- package/dist/processors/emphasis-placeholders.d.ts.map +1 -1
- package/dist/processors/emphasis-placeholders.js +75 -17
- package/dist/processors/emphasis-placeholders.js.map +1 -1
- package/dist/processors/markdown-source-diagnostics.d.ts +0 -2
- package/dist/processors/markdown-source-diagnostics.d.ts.map +1 -1
- package/dist/processors/markdown-source-diagnostics.js +0 -81
- package/dist/processors/markdown-source-diagnostics.js.map +1 -1
- package/dist/processors/validator.d.ts +2 -0
- package/dist/processors/validator.d.ts.map +1 -1
- package/dist/processors/validator.js +7 -0
- package/dist/processors/validator.js.map +1 -1
- package/dist/utils/concurrency.d.ts +2 -1
- package/dist/utils/concurrency.d.ts.map +1 -1
- package/dist/utils/concurrency.js +41 -5
- package/dist/utils/concurrency.js.map +1 -1
- package/dist/utils/run-interrupt.d.ts +31 -0
- package/dist/utils/run-interrupt.d.ts.map +1 -0
- package/dist/utils/run-interrupt.js +106 -0
- package/dist/utils/run-interrupt.js.map +1 -0
- package/docs/GETTING_STARTED.md +9 -6
- package/docs/PACKAGE_OVERVIEW.md +34 -7
- package/docs/ai-i18n-tools-context.md +3 -3
- package/package.json +19 -16
- package/dist/cli/strip-md-bold-inline.d.ts +0 -15
- package/dist/cli/strip-md-bold-inline.d.ts.map +0 -1
- package/dist/cli/strip-md-bold-inline.js +0 -77
- package/dist/cli/strip-md-bold-inline.js.map +0 -1
- package/dist/utils/stripBoldAroundInlineCode.d.ts +0 -6
- package/dist/utils/stripBoldAroundInlineCode.d.ts.map +0 -1
- package/dist/utils/stripBoldAroundInlineCode.js +0 -52
- package/dist/utils/stripBoldAroundInlineCode.js.map +0 -1
package/README.md
CHANGED
|
@@ -95,8 +95,11 @@ npx ai-i18n-tools sync # or: pnpm exec ai-i18n-tools sync
|
|
|
95
95
|
"i18n:extract": "ai-i18n-tools extract",
|
|
96
96
|
"i18n:sync": "ai-i18n-tools sync",
|
|
97
97
|
"i18n:translate:ui": "ai-i18n-tools translate-ui",
|
|
98
|
+
"i18n:translate:svg": "ai-i18n-tools translate-svg",
|
|
98
99
|
"i18n:translate:docs": "ai-i18n-tools translate-docs",
|
|
99
|
-
"i18n:translate": "ai-i18n-tools translate-
|
|
100
|
+
"i18n:translate:json": "ai-i18n-tools translate-json",
|
|
101
|
+
"i18n:translate": "ai-i18n-tools translate-docs",
|
|
102
|
+
"i18n:dashboard": "ai-i18n-tools dashboard"
|
|
100
103
|
}
|
|
101
104
|
```
|
|
102
105
|
|
|
@@ -205,6 +208,9 @@ The following helpers are exported from `'ai-i18n-tools/runtime'` and work in an
|
|
|
205
208
|
|------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
|
|
206
209
|
| `defaultI18nInitOptions(sourceLocale)` | Standard i18next init options for key-as-default setups. |
|
|
207
210
|
| `setupKeyAsDefaultT(i18n, { stringsJson, sourcePluralFlatBundle? })` | Recommended wiring: key-trim + plural `wrapT` from `strings.json`, optionally merges `translate-ui` `{sourceLocale}.json` plural keys. |
|
|
211
|
+
| `wrapT(i18n, options)` | Lower-level plural-aware `t()` wrapper (usually installed by `setupKeyAsDefaultT`). |
|
|
212
|
+
| `buildPluralIndexFromStringsJson(entries)` | Builds the plural group index `wrapT` uses from catalog rows with `"plural": true`. |
|
|
213
|
+
| `extractInterpolationNamesForWrap(key)` | Parses `{{var}}` names from a source key for `wrapT` / key-trim fallback. |
|
|
208
214
|
| `wrapI18nWithKeyTrim(i18n)` | Lower-level key-trim wrapper only (deprecated for app wiring; prefer `setupKeyAsDefaultT`). |
|
|
209
215
|
| `makeLocaleLoadersFromManifest(uiLanguages, sourceLocale, makeLoader)` | Builds the `localeLoaders` map for `makeLoadLocale` from `ui-languages.json` (every `code` except `sourceLocale`). |
|
|
210
216
|
| `makeLoadLocale(i18n, loaders, sourceLocale)` | Factory for async locale file loading. |
|
|
@@ -225,7 +231,6 @@ ai-i18n-tools version
|
|
|
225
231
|
ai-i18n-tools check-models
|
|
226
232
|
ai-i18n-tools init [-t ui-markdown|ui-docusaurus|ui-starlight|ui-astro-website|ui-json-bundles] [-o path] [--with-translate-ignore]
|
|
227
233
|
ai-i18n-tools write-heading-ids …
|
|
228
|
-
ai-i18n-tools strip-md-bold-inline …
|
|
229
234
|
ai-i18n-tools extract
|
|
230
235
|
ai-i18n-tools translate-docs …
|
|
231
236
|
ai-i18n-tools translate-json …
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Stable package.json "bin" entry. pnpm links this file during install before
|
|
4
|
+
* dist/ exists; the compiled CLI is emitted to dist/cli/index.js by `pnpm build`.
|
|
5
|
+
*/
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
|
|
10
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
11
|
+
const cliEntry = path.join(root, "dist", "cli", "index.js");
|
|
12
|
+
|
|
13
|
+
if (!fs.existsSync(cliEntry)) {
|
|
14
|
+
console.error(
|
|
15
|
+
"ai-i18n-tools is not built yet. From the repository root, run:\n pnpm run build",
|
|
16
|
+
);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
await import(cliEntry);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { DocumentPromptContentType } from "../core/prompt-builder.js";
|
|
2
|
+
import type { Segment, TranslationFailureInsert } from "../core/types.js";
|
|
3
|
+
import { PlaceholderHandler } from "../processors/placeholder-handler.js";
|
|
4
|
+
import type { Glossary } from "../glossary/glossary.js";
|
|
5
|
+
import type { OpenRouterClient } from "../api/openrouter.js";
|
|
6
|
+
type ProtectState = {
|
|
7
|
+
glossaryForceReplacements?: string[];
|
|
8
|
+
} & ReturnType<PlaceholderHandler["protectForTranslation"]>;
|
|
9
|
+
export type DocQualityLogOutcome = "retrying_next_model" | "fatal" | "individual_success";
|
|
10
|
+
export type DocQualityLogWriter = (opts: {
|
|
11
|
+
segmentsLabel: string;
|
|
12
|
+
outcome: DocQualityLogOutcome;
|
|
13
|
+
failedModel: string;
|
|
14
|
+
nextModel?: string;
|
|
15
|
+
qualityErrors: string[];
|
|
16
|
+
perSegmentLines: string[];
|
|
17
|
+
systemPrompt: string;
|
|
18
|
+
userContent: string;
|
|
19
|
+
rawAssistantContent: string;
|
|
20
|
+
mode: "failed" | "debug";
|
|
21
|
+
}) => string | undefined;
|
|
22
|
+
export type ProtectSegmentFn = (raw: string) => {
|
|
23
|
+
text: string;
|
|
24
|
+
state: ProtectState;
|
|
25
|
+
};
|
|
26
|
+
export type TranslateOneSegmentQualityRetryParams = {
|
|
27
|
+
client: OpenRouterClient;
|
|
28
|
+
locale: string;
|
|
29
|
+
glossary: Glossary;
|
|
30
|
+
contentType: DocumentPromptContentType;
|
|
31
|
+
models: readonly string[];
|
|
32
|
+
/** Original segment (pre-placeholder source text in `content`). */
|
|
33
|
+
original: Segment;
|
|
34
|
+
/** Protected text sent to the API for the top-level segment (unused when splitDepth > 0). */
|
|
35
|
+
protectedContent: string;
|
|
36
|
+
/** Placeholder state for the top-level segment (unused when splitDepth > 0). */
|
|
37
|
+
protectState: ProtectState | undefined;
|
|
38
|
+
/** Model index to start trying from (0-based). */
|
|
39
|
+
startModelIndex: number;
|
|
40
|
+
splitDepth: number;
|
|
41
|
+
qualityRetrySplit: boolean;
|
|
42
|
+
maxQualityRetrySplitDepth: number;
|
|
43
|
+
protectForTranslation: ProtectSegmentFn;
|
|
44
|
+
segmentHash: string;
|
|
45
|
+
failureFp: string | null;
|
|
46
|
+
recordFailures: (rows: TranslationFailureInsert[]) => Promise<void>;
|
|
47
|
+
buildQualityFailureRows: (model: string, modelOrder: number | null, errors: readonly string[], fatal: boolean) => TranslationFailureInsert[];
|
|
48
|
+
buildRuntimeFailureRow: (model: string | null, modelOrder: number | null, message: string, fatal: boolean) => TranslationFailureInsert;
|
|
49
|
+
modelOrder1Based: (model: string | null) => number | null;
|
|
50
|
+
segLabelSingle: string;
|
|
51
|
+
batchSegIndex?: number;
|
|
52
|
+
docIdx0?: number;
|
|
53
|
+
docLog?: {
|
|
54
|
+
relativePath: string;
|
|
55
|
+
totalSegments: number;
|
|
56
|
+
};
|
|
57
|
+
failureLogDirAbs?: string | null;
|
|
58
|
+
writeFailureLog?: DocQualityLogWriter;
|
|
59
|
+
writeDebugLog?: DocQualityLogWriter;
|
|
60
|
+
warnModelSwitch?: (failedModel: string, nextModel: string, detail: string, nextModelOrdinal: {
|
|
61
|
+
index1Based: number;
|
|
62
|
+
total: number;
|
|
63
|
+
}) => void;
|
|
64
|
+
abortSignal?: AbortSignal;
|
|
65
|
+
};
|
|
66
|
+
export type TranslateOneSegmentQualityRetryResult = {
|
|
67
|
+
text: string;
|
|
68
|
+
modelUsed: string;
|
|
69
|
+
inTok: number;
|
|
70
|
+
outTok: number;
|
|
71
|
+
cost: number;
|
|
72
|
+
validationFailures: number;
|
|
73
|
+
individualCalls: number;
|
|
74
|
+
qualitySplitRetries: number;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Translate one markdown segment with model cycling and progressive split-on-AST-failure fallback.
|
|
78
|
+
*/
|
|
79
|
+
export declare function translateOneSegmentWithQualityRetry(params: TranslateOneSegmentQualityRetryParams): Promise<TranslateOneSegmentQualityRetryResult>;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=doc-translate-quality-retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-translate-quality-retry.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate-quality-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { splitSegmentForQualityRetry } from "../extractors/markdown-quality-split.js";
|
|
3
|
+
import { PlaceholderHandler } from "../processors/placeholder-handler.js";
|
|
4
|
+
import { restoreGlossaryForcedTerms } from "../processors/glossary-force-placeholders.js";
|
|
5
|
+
import { errorsIncludeAstMismatch, validateDocTranslatePair } from "../processors/validator.js";
|
|
6
|
+
import { throwIfAbortSignal } from "../utils/run-interrupt.js";
|
|
7
|
+
function restoreSegmentTranslation(ph, raw, st) {
|
|
8
|
+
if (!st) {
|
|
9
|
+
return raw;
|
|
10
|
+
}
|
|
11
|
+
let out = ph.restoreAfterTranslation(raw, st);
|
|
12
|
+
out = restoreGlossaryForcedTerms(out, st.glossaryForceReplacements ?? []);
|
|
13
|
+
return out;
|
|
14
|
+
}
|
|
15
|
+
function isModelRetryFailure(result) {
|
|
16
|
+
return result.ok === false;
|
|
17
|
+
}
|
|
18
|
+
function perSegLine(params, ok, errors, partLabel) {
|
|
19
|
+
const hashLabel = partLabel ? `${params.segmentHash} part ${partLabel}` : params.segmentHash;
|
|
20
|
+
if (params.docLog && params.docIdx0 !== undefined && params.batchSegIndex !== undefined) {
|
|
21
|
+
return `doc #${params.docIdx0 + 1}/${params.docLog.totalSegments} seg id=${params.batchSegIndex} (hash ${hashLabel}): ${ok ? "OK" : errors.join("; ")}`;
|
|
22
|
+
}
|
|
23
|
+
if (params.batchSegIndex !== undefined) {
|
|
24
|
+
return `batch seg id=${params.batchSegIndex} (hash ${hashLabel}): ${ok ? "OK" : errors.join("; ")}`;
|
|
25
|
+
}
|
|
26
|
+
return `(hash ${hashLabel}): ${ok ? "OK" : errors.join("; ")}`;
|
|
27
|
+
}
|
|
28
|
+
async function translateProtectedContent(params, originalContent, protectedContent, protectState, startModelIndex, partLabel) {
|
|
29
|
+
const { client, locale, glossary, contentType, models, original, recordFailures, buildQualityFailureRows, buildRuntimeFailureRow, modelOrder1Based, segLabelSingle, failureLogDirAbs, docLog, writeFailureLog, writeDebugLog, warnModelSwitch, } = params;
|
|
30
|
+
const hints = glossary.findTermsInText(protectedContent, locale);
|
|
31
|
+
const ph = new PlaceholderHandler();
|
|
32
|
+
let startIdx = startModelIndex;
|
|
33
|
+
let remainingErrors = [];
|
|
34
|
+
let inTok = 0;
|
|
35
|
+
let outTok = 0;
|
|
36
|
+
let cost = 0;
|
|
37
|
+
let validationFailures = 0;
|
|
38
|
+
let individualCalls = 0;
|
|
39
|
+
while (startIdx < models.length) {
|
|
40
|
+
throwIfAbortSignal(params.abortSignal);
|
|
41
|
+
individualCalls++;
|
|
42
|
+
const startModel = models[startIdx] ?? null;
|
|
43
|
+
let single;
|
|
44
|
+
try {
|
|
45
|
+
single = await client.translateDocumentSegment(protectedContent, locale, hints, {
|
|
46
|
+
contentType,
|
|
47
|
+
startModelIndex: startIdx,
|
|
48
|
+
docLogContext: docLog?.relativePath
|
|
49
|
+
? { locale, relativePath: docLog.relativePath }
|
|
50
|
+
: undefined,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
await recordFailures([
|
|
55
|
+
buildRuntimeFailureRow(startModel, modelOrder1Based(startModel), String(err), true),
|
|
56
|
+
]);
|
|
57
|
+
throw err;
|
|
58
|
+
}
|
|
59
|
+
throwIfAbortSignal(params.abortSignal);
|
|
60
|
+
inTok += single.usage.inputTokens;
|
|
61
|
+
outTok += single.usage.outputTokens;
|
|
62
|
+
cost += single.cost ?? 0;
|
|
63
|
+
const restored = restoreSegmentTranslation(ph, single.content, protectState);
|
|
64
|
+
const origSeg = { ...original, content: originalContent };
|
|
65
|
+
const v = await validateDocTranslatePair(origSeg, restored);
|
|
66
|
+
const nextIdx = models.indexOf(single.model) + 1;
|
|
67
|
+
const line = perSegLine(params, v.ok, v.errors, partLabel);
|
|
68
|
+
if (failureLogDirAbs && docLog && writeDebugLog) {
|
|
69
|
+
const debugLogPath = writeDebugLog({
|
|
70
|
+
segmentsLabel: segLabelSingle || "(segment range unknown)",
|
|
71
|
+
outcome: v.ok
|
|
72
|
+
? "individual_success"
|
|
73
|
+
: nextIdx >= models.length
|
|
74
|
+
? "fatal"
|
|
75
|
+
: "retrying_next_model",
|
|
76
|
+
failedModel: single.model,
|
|
77
|
+
nextModel: nextIdx < models.length ? models[nextIdx] : undefined,
|
|
78
|
+
qualityErrors: v.errors,
|
|
79
|
+
perSegmentLines: [line],
|
|
80
|
+
systemPrompt: single.debugPrompt?.systemPrompt ?? "",
|
|
81
|
+
userContent: single.debugPrompt?.userContent ?? "",
|
|
82
|
+
rawAssistantContent: single.rawAssistantContent ?? "(missing raw response; rebuild ai-i18n-tools)",
|
|
83
|
+
mode: "debug",
|
|
84
|
+
});
|
|
85
|
+
if (debugLogPath) {
|
|
86
|
+
console.warn(chalk.gray(` 🧪 Debug log: ${debugLogPath}`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (v.ok) {
|
|
90
|
+
return {
|
|
91
|
+
ok: true,
|
|
92
|
+
text: restored,
|
|
93
|
+
modelUsed: single.model,
|
|
94
|
+
inTok,
|
|
95
|
+
outTok,
|
|
96
|
+
cost,
|
|
97
|
+
validationFailures,
|
|
98
|
+
individualCalls,
|
|
99
|
+
qualitySplitRetries: 0,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
validationFailures++;
|
|
103
|
+
remainingErrors = v.errors;
|
|
104
|
+
await recordFailures(buildQualityFailureRows(single.model, modelOrder1Based(single.model), v.errors, nextIdx >= models.length));
|
|
105
|
+
if (failureLogDirAbs && docLog && writeFailureLog) {
|
|
106
|
+
const failureLogPath = writeFailureLog({
|
|
107
|
+
segmentsLabel: segLabelSingle || "(segment range unknown)",
|
|
108
|
+
outcome: nextIdx >= models.length ? "fatal" : "retrying_next_model",
|
|
109
|
+
failedModel: single.model,
|
|
110
|
+
nextModel: nextIdx < models.length ? models[nextIdx] : undefined,
|
|
111
|
+
qualityErrors: v.errors,
|
|
112
|
+
perSegmentLines: [line],
|
|
113
|
+
systemPrompt: single.debugPrompt?.systemPrompt ?? "",
|
|
114
|
+
userContent: single.debugPrompt?.userContent ?? "",
|
|
115
|
+
rawAssistantContent: single.rawAssistantContent ?? "(missing raw response; rebuild ai-i18n-tools)",
|
|
116
|
+
mode: "failed",
|
|
117
|
+
});
|
|
118
|
+
if (failureLogPath) {
|
|
119
|
+
console.warn(chalk.gray(` 📝 Failure log: ${failureLogPath}`));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (nextIdx >= models.length) {
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
warnModelSwitch?.(single.model, models[nextIdx], v.errors.join("; "), {
|
|
126
|
+
index1Based: nextIdx + 1,
|
|
127
|
+
total: models.length,
|
|
128
|
+
});
|
|
129
|
+
startIdx = nextIdx;
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
ok: false,
|
|
133
|
+
remainingErrors,
|
|
134
|
+
inTok,
|
|
135
|
+
outTok,
|
|
136
|
+
cost,
|
|
137
|
+
validationFailures,
|
|
138
|
+
individualCalls,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function throwQualityFatal(params, errors) {
|
|
142
|
+
const loc = params.docLog?.relativePath ?? "?";
|
|
143
|
+
throw new Error(`Doc translation quality failed (${params.locale}, ${loc}): ${params.segLabelSingle ? `${params.segLabelSingle}: ` : ""}${errors.join("; ")}`);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Translate one markdown segment with model cycling and progressive split-on-AST-failure fallback.
|
|
147
|
+
*/
|
|
148
|
+
export async function translateOneSegmentWithQualityRetry(params) {
|
|
149
|
+
const { original, protectedContent, protectState, startModelIndex, splitDepth, qualityRetrySplit, maxQualityRetrySplitDepth, protectForTranslation, docLog, segLabelSingle, locale, } = params;
|
|
150
|
+
const direct = await translateProtectedContent(params, original.content, protectedContent, protectState, startModelIndex);
|
|
151
|
+
if (!isModelRetryFailure(direct)) {
|
|
152
|
+
const { ok: _ok, ...result } = direct;
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
const { remainingErrors } = direct;
|
|
156
|
+
const splittable = qualityRetrySplit &&
|
|
157
|
+
errorsIncludeAstMismatch(remainingErrors) &&
|
|
158
|
+
splitSegmentForQualityRetry(original.content, original.type, splitDepth, maxQualityRetrySplitDepth) !== null;
|
|
159
|
+
if (!splittable) {
|
|
160
|
+
throwQualityFatal(params, remainingErrors);
|
|
161
|
+
}
|
|
162
|
+
const parts = splitSegmentForQualityRetry(original.content, original.type, splitDepth, maxQualityRetrySplitDepth);
|
|
163
|
+
if (!parts || parts.length <= 1) {
|
|
164
|
+
throwQualityFatal(params, remainingErrors);
|
|
165
|
+
}
|
|
166
|
+
const baseLoc = docLog?.relativePath ? `${locale} ${docLog.relativePath}` : locale;
|
|
167
|
+
console.warn(chalk.magenta(` ✂️ ${baseLoc}: splitting segment into ${parts.length} part(s) after model exhaustion (depth ${splitDepth + 1}/${maxQualityRetrySplitDepth}) — ${segLabelSingle || `hash ${params.segmentHash}`}`));
|
|
168
|
+
const translatedParts = [];
|
|
169
|
+
const modelsUsed = new Set();
|
|
170
|
+
let inTok = direct.inTok;
|
|
171
|
+
let outTok = direct.outTok;
|
|
172
|
+
let cost = direct.cost;
|
|
173
|
+
let validationFailures = direct.validationFailures;
|
|
174
|
+
let individualCalls = direct.individualCalls;
|
|
175
|
+
let qualitySplitRetries = 1;
|
|
176
|
+
for (let pi = 0; pi < parts.length; pi++) {
|
|
177
|
+
throwIfAbortSignal(params.abortSignal);
|
|
178
|
+
const partContent = parts[pi];
|
|
179
|
+
const { text: partProtected, state: partState } = protectForTranslation(partContent);
|
|
180
|
+
const partOriginal = {
|
|
181
|
+
...original,
|
|
182
|
+
content: partContent,
|
|
183
|
+
};
|
|
184
|
+
const partResult = await translateOneSegmentWithQualityRetry({
|
|
185
|
+
...params,
|
|
186
|
+
original: partOriginal,
|
|
187
|
+
protectedContent: partProtected,
|
|
188
|
+
protectState: partState,
|
|
189
|
+
startModelIndex: 0,
|
|
190
|
+
splitDepth: splitDepth + 1,
|
|
191
|
+
});
|
|
192
|
+
inTok += partResult.inTok;
|
|
193
|
+
outTok += partResult.outTok;
|
|
194
|
+
cost += partResult.cost;
|
|
195
|
+
validationFailures += partResult.validationFailures;
|
|
196
|
+
individualCalls += partResult.individualCalls;
|
|
197
|
+
qualitySplitRetries += partResult.qualitySplitRetries;
|
|
198
|
+
for (const m of partResult.modelUsed.split(",")) {
|
|
199
|
+
const t = m.trim();
|
|
200
|
+
if (t) {
|
|
201
|
+
modelsUsed.add(t);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
translatedParts.push(partResult.text);
|
|
205
|
+
}
|
|
206
|
+
const joined = translatedParts.join("\n");
|
|
207
|
+
const joinedValidation = await validateDocTranslatePair(original, joined);
|
|
208
|
+
if (!joinedValidation.ok) {
|
|
209
|
+
throwQualityFatal(params, [`joined sub-parts: ${joinedValidation.errors.join("; ")}`]);
|
|
210
|
+
}
|
|
211
|
+
const modelUsed = [...modelsUsed].sort((a, b) => a.localeCompare(b)).join(",");
|
|
212
|
+
return {
|
|
213
|
+
text: joined,
|
|
214
|
+
modelUsed,
|
|
215
|
+
inTok,
|
|
216
|
+
outTok,
|
|
217
|
+
cost,
|
|
218
|
+
validationFailures,
|
|
219
|
+
individualCalls,
|
|
220
|
+
qualitySplitRetries,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=doc-translate-quality-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-translate-quality-retry.js","sourceRoot":"","sources":["../../src/cli/doc-translate-quality-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,6 +68,8 @@ export interface TranslateRunOptions {
|
|
|
68
68
|
* Default: 1 (sequential processing).
|
|
69
69
|
*/
|
|
70
70
|
fileConcurrency?: number;
|
|
71
|
+
/** When aborted (Ctrl+C), cooperative workers stop claiming new work. */
|
|
72
|
+
abortSignal?: AbortSignal;
|
|
71
73
|
}
|
|
72
74
|
export interface TranslateTotals {
|
|
73
75
|
filesWritten: number;
|
|
@@ -85,6 +87,8 @@ export interface TranslateTotals {
|
|
|
85
87
|
segmentValidationFailures?: number;
|
|
86
88
|
/** Count of single-segment API calls (`translateDocumentSegment`), including batch fallbacks and markdown quality retries. */
|
|
87
89
|
individualSegmentTranslations?: number;
|
|
90
|
+
/** Markdown segments recovered via progressive split after AST validation failure. */
|
|
91
|
+
segmentQualitySplitRetries?: number;
|
|
88
92
|
}
|
|
89
93
|
type ProtectState = ReturnType<PlaceholderHandler["protectForTranslation"]> & {
|
|
90
94
|
glossaryForceReplacements?: string[];
|
|
@@ -166,13 +170,21 @@ failureLogDirAbs?: string | null, failureTracker?: FailureTracker,
|
|
|
166
170
|
/** Cwd-relative source path stored on failure rows for dashboard UI when cache has no segment yet. */
|
|
167
171
|
failureDocMeta?: {
|
|
168
172
|
filepath: string;
|
|
169
|
-
}
|
|
173
|
+
},
|
|
174
|
+
/** Progressive split-on-AST-failure (markdown only). */
|
|
175
|
+
qualityRetryOpts?: {
|
|
176
|
+
qualityRetrySplit: boolean;
|
|
177
|
+
maxQualityRetrySplitDepth: number;
|
|
178
|
+
emphasisPlaceholders: boolean;
|
|
179
|
+
expressionProtection?: ExpressionProtectionOptions;
|
|
180
|
+
}, abortSignal?: AbortSignal): Promise<{
|
|
170
181
|
map: Map<string, DocSegmentTranslation>;
|
|
171
182
|
inTok: number;
|
|
172
183
|
outTok: number;
|
|
173
184
|
cost: number;
|
|
174
185
|
segmentValidationFailures: number;
|
|
175
186
|
individualSegmentTranslations: number;
|
|
187
|
+
segmentQualitySplitRetries: number;
|
|
176
188
|
}>;
|
|
177
189
|
/**
|
|
178
190
|
* Locale-independent: read source, extract segments (same options as translation), then refresh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-translate.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,qBAAqB,EACrB,QAAQ,EACR,UAAU,EACV,sBAAsB,EACtB,OAAO,EACP,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAI1B,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAStC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAGlF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAMpG,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAgCxD,OAAO,KAAK,EACV,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAyC,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"doc-translate.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate.ts"],"names":[],"mappings":"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"}
|