glotto 2.8.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -55
- package/esm/cli.js +49 -41
- package/esm/deno.d.ts +1 -1
- package/esm/deno.js +7 -7
- package/esm/deps/jsr.io/@std/cli/1.0.29/_data.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.js +17 -3
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.js +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/internal/1.0.13/_os.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.js +1 -1
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/basename.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/constants.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/dirname.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/extname.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/format.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/from_file_url.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/glob_to_regexp.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/is_absolute.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/join.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/join_globs.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/normalize.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/normalize_glob.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/parse.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/relative.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/resolve.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/to_file_url.js +1 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/to_namespaced_path.js +1 -1
- package/esm/src/contants.d.ts +2 -3
- package/esm/src/contants.d.ts.map +1 -1
- package/esm/src/contants.js +22 -13
- package/esm/src/file.d.ts +2 -7
- package/esm/src/file.d.ts.map +1 -1
- package/esm/src/file.js +1 -93
- package/esm/src/providers/anthropic.d.ts +6 -11
- package/esm/src/providers/anthropic.d.ts.map +1 -1
- package/esm/src/providers/anthropic.js +14 -103
- package/esm/src/providers/gemini.d.ts +6 -11
- package/esm/src/providers/gemini.d.ts.map +1 -1
- package/esm/src/providers/gemini.js +13 -109
- package/esm/src/providers/openai.d.ts +6 -11
- package/esm/src/providers/openai.d.ts.map +1 -1
- package/esm/src/providers/openai.js +10 -104
- package/esm/src/translator.d.ts +8 -0
- package/esm/src/translator.d.ts.map +1 -0
- package/esm/src/translator.js +200 -0
- package/esm/src/types.d.ts +28 -11
- package/esm/src/types.d.ts.map +1 -1
- package/esm/src/utilites.d.ts +1 -6
- package/esm/src/utilites.d.ts.map +1 -1
- package/esm/src/utilites.js +18 -77
- package/package.json +4 -4
- package/script/cli.js +47 -39
- package/script/deno.d.ts +1 -1
- package/script/deno.js +7 -7
- package/script/deps/jsr.io/@std/cli/1.0.29/_data.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.js +17 -3
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.js +1 -1
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/internal/1.0.13/_os.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.js +1 -1
- package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/basename.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/constants.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/dirname.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/extname.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/format.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/from_file_url.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/glob_to_regexp.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/is_absolute.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/join.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/join_globs.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/normalize.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/normalize_glob.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/parse.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/relative.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/resolve.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/to_file_url.js +1 -1
- package/script/deps/jsr.io/@std/path/1.1.4/to_namespaced_path.js +1 -1
- package/script/src/contants.d.ts +2 -3
- package/script/src/contants.d.ts.map +1 -1
- package/script/src/contants.js +23 -14
- package/script/src/file.d.ts +2 -7
- package/script/src/file.d.ts.map +1 -1
- package/script/src/file.js +2 -99
- package/script/src/providers/anthropic.d.ts +6 -11
- package/script/src/providers/anthropic.d.ts.map +1 -1
- package/script/src/providers/anthropic.js +13 -102
- package/script/src/providers/gemini.d.ts +6 -11
- package/script/src/providers/gemini.d.ts.map +1 -1
- package/script/src/providers/gemini.js +12 -108
- package/script/src/providers/openai.d.ts +6 -11
- package/script/src/providers/openai.d.ts.map +1 -1
- package/script/src/providers/openai.js +9 -103
- package/script/src/translator.d.ts +8 -0
- package/script/src/translator.d.ts.map +1 -0
- package/script/src/translator.js +209 -0
- package/script/src/types.d.ts +28 -11
- package/script/src/types.d.ts.map +1 -1
- package/script/src/utilites.d.ts +1 -6
- package/script/src/utilites.d.ts.map +1 -1
- package/script/src/utilites.js +19 -80
- package/esm/deps/jsr.io/@std/cli/1.0.27/_data.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -51
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts +0 -35
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common32.js +0 -192
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts +0 -35
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common64.js +0 -113
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -13
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -2
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts +0 -2
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.js +0 -26
- package/esm/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts +0 -61
- package/esm/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/ascii85.js +0 -152
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts +0 -40
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base32.js +0 -87
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts +0 -40
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base58.js +0 -131
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts +0 -40
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base64.js +0 -82
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts +0 -40
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/base64url.js +0 -72
- package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
- package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -87
- package/esm/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts +0 -98
- package/esm/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/mod.js +0 -99
- package/esm/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts +0 -120
- package/esm/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.10/varint.js +0 -205
- package/esm/deps/jsr.io/@std/internal/1.0.12/_os.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/cli/1.0.27/_data.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -57
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts +0 -35
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common32.js +0 -198
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts +0 -35
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common64.js +0 -119
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -16
- package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
- package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -3
- package/script/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts +0 -2
- package/script/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.js +0 -29
- package/script/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts +0 -61
- package/script/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/ascii85.js +0 -156
- package/script/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts +0 -40
- package/script/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/base32.js +0 -91
- package/script/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts +0 -40
- package/script/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/base58.js +0 -135
- package/script/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts +0 -40
- package/script/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/base64.js +0 -86
- package/script/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts +0 -40
- package/script/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/base64url.js +0 -76
- package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
- package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -91
- package/script/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts +0 -98
- package/script/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/mod.js +0 -115
- package/script/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts +0 -120
- package/script/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.10/varint.js +0 -211
- package/script/deps/jsr.io/@std/internal/1.0.12/_os.d.ts.map +0 -1
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.js +0 -0
- /package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.js +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.js +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.js +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.js +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts +0 -0
- /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.js +0 -0
- /package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.d.ts +0 -0
- /package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts +0 -0
package/script/src/file.js
CHANGED
|
@@ -33,13 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
36
|
+
exports.writeOutput = exports.getImportJson = exports.resolvePath = void 0;
|
|
37
37
|
const dntShim = __importStar(require("../_dnt.shims.js"));
|
|
38
38
|
const mod_js_1 = require("../deps/jsr.io/@std/path/1.1.4/mod.js");
|
|
39
|
-
const
|
|
40
|
-
const resolvePath = (...paths) => {
|
|
41
|
-
return (0, mod_js_1.join)(dntShim.Deno.cwd(), ...paths);
|
|
42
|
-
};
|
|
39
|
+
const resolvePath = (...paths) => (0, mod_js_1.join)(dntShim.Deno.cwd(), ...paths);
|
|
43
40
|
exports.resolvePath = resolvePath;
|
|
44
41
|
const getImportJson = async (input) => {
|
|
45
42
|
const filePath = (0, exports.resolvePath)(input);
|
|
@@ -54,97 +51,3 @@ const writeOutput = async (outputPath, content) => {
|
|
|
54
51
|
await dntShim.Deno.writeTextFile(outputPath, content, { create: true });
|
|
55
52
|
};
|
|
56
53
|
exports.writeOutput = writeOutput;
|
|
57
|
-
const existsFile = async (path) => {
|
|
58
|
-
try {
|
|
59
|
-
await dntShim.Deno.stat(path);
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
if (error instanceof dntShim.Deno.errors.NotFound) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
throw error;
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
exports.existsFile = existsFile;
|
|
70
|
-
const ensureDirectoryExists = async (directory) => {
|
|
71
|
-
const directoryExists = await (0, exports.existsFile)(directory);
|
|
72
|
-
if (!directoryExists) {
|
|
73
|
-
await dntShim.Deno.mkdir(directory, { recursive: true });
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
exports.ensureDirectoryExists = ensureDirectoryExists;
|
|
77
|
-
const getByteSize = (str) => {
|
|
78
|
-
return new TextEncoder().encode(str).byteLength;
|
|
79
|
-
};
|
|
80
|
-
const buildChunkWithSize = (data, keys) => {
|
|
81
|
-
const chunk = Object.create(null);
|
|
82
|
-
for (const key of keys) {
|
|
83
|
-
chunk[key] = data[key];
|
|
84
|
-
}
|
|
85
|
-
const json = JSON.stringify(chunk);
|
|
86
|
-
return { json, size: getByteSize(json) };
|
|
87
|
-
};
|
|
88
|
-
const splitJson = (data, maxChunkBytes = 30_000) => {
|
|
89
|
-
const encoder = new TextEncoder();
|
|
90
|
-
const dataKeys = Object.keys(data);
|
|
91
|
-
const totalKeys = dataKeys.length;
|
|
92
|
-
const fullJson = JSON.stringify(data);
|
|
93
|
-
const totalBytes = getByteSize(fullJson);
|
|
94
|
-
if (totalBytes <= maxChunkBytes) {
|
|
95
|
-
return [
|
|
96
|
-
{
|
|
97
|
-
data: encoder.encode(fullJson),
|
|
98
|
-
keyCount: totalKeys,
|
|
99
|
-
byteSize: totalBytes,
|
|
100
|
-
index: 0,
|
|
101
|
-
},
|
|
102
|
-
];
|
|
103
|
-
}
|
|
104
|
-
const chunks = [];
|
|
105
|
-
let currentKeys = [];
|
|
106
|
-
let currentSize = 2;
|
|
107
|
-
for (let i = 0; i < totalKeys; i++) {
|
|
108
|
-
const key = dataKeys[i];
|
|
109
|
-
const keyValueJson = JSON.stringify({ [key]: data[key] });
|
|
110
|
-
const entrySize = getByteSize(keyValueJson) - 2;
|
|
111
|
-
const separatorSize = currentKeys.length > 0 ? 1 : 0;
|
|
112
|
-
const projectedSize = currentSize + entrySize + separatorSize;
|
|
113
|
-
if (projectedSize > maxChunkBytes && currentKeys.length > 0) {
|
|
114
|
-
const { json, size } = buildChunkWithSize(data, currentKeys);
|
|
115
|
-
chunks.push({
|
|
116
|
-
data: encoder.encode(json),
|
|
117
|
-
keyCount: currentKeys.length,
|
|
118
|
-
byteSize: size,
|
|
119
|
-
index: chunks.length,
|
|
120
|
-
});
|
|
121
|
-
currentKeys = [key];
|
|
122
|
-
currentSize = 2 + entrySize;
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
currentKeys.push(key);
|
|
126
|
-
currentSize = projectedSize;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
if (currentKeys.length > 0) {
|
|
130
|
-
const { json, size } = buildChunkWithSize(data, currentKeys);
|
|
131
|
-
chunks.push({
|
|
132
|
-
data: encoder.encode(json),
|
|
133
|
-
keyCount: currentKeys.length,
|
|
134
|
-
byteSize: size,
|
|
135
|
-
index: chunks.length,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
return chunks;
|
|
139
|
-
};
|
|
140
|
-
exports.splitJson = splitJson;
|
|
141
|
-
const mergeInputs = (inputs) => {
|
|
142
|
-
return Object.assign({}, ...inputs);
|
|
143
|
-
};
|
|
144
|
-
exports.mergeInputs = mergeInputs;
|
|
145
|
-
const writeTemp = async (tempJsonFileName, content) => {
|
|
146
|
-
await (0, exports.ensureDirectoryExists)(contants_js_1.TEMP_DIR);
|
|
147
|
-
const tempJsonFilePath = (0, exports.resolvePath)(contants_js_1.TEMP_DIR, tempJsonFileName);
|
|
148
|
-
await dntShim.Deno.writeTextFile(tempJsonFilePath, content, { create: true });
|
|
149
|
-
};
|
|
150
|
-
exports.writeTemp = writeTemp;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
client: Anthropic;
|
|
8
|
-
model: string;
|
|
9
|
-
constructor(key: string, chunks: ChunkInfo[], from: string, to: string, baseUrl?: string, modelName?: string);
|
|
10
|
-
private translateChunk;
|
|
11
|
-
translate(): Promise<string>;
|
|
1
|
+
import type { TextTranslator, TranslateOptions } from '../types.js';
|
|
2
|
+
declare class AnthropicModel implements TextTranslator {
|
|
3
|
+
private client;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(key: string, baseUrl?: string, modelName?: string, options?: TranslateOptions);
|
|
6
|
+
translate(prompt: string): Promise<string>;
|
|
12
7
|
}
|
|
13
8
|
export default AnthropicModel;
|
|
14
9
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/src/providers/anthropic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpE,cAAM,cAAe,YAAW,cAAc;IAC5C,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAGpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAuD;IAU5D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYjD;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -4,31 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
7
|
-
const utilites_js_1 = require("../utilites.js");
|
|
8
|
-
const logger_js_1 = require("../logger.js");
|
|
9
|
-
const file_js_1 = require("../file.js");
|
|
10
7
|
const contants_js_1 = require("../contants.js");
|
|
11
|
-
const decoder = new TextDecoder();
|
|
12
8
|
class AnthropicModel {
|
|
13
|
-
constructor(key,
|
|
14
|
-
Object.defineProperty(this, "chunks", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: void 0
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "from", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: void 0
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "to", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: void 0
|
|
31
|
-
});
|
|
9
|
+
constructor(key, baseUrl, modelName, options = { noLimit: false, noTimeout: false }) {
|
|
32
10
|
Object.defineProperty(this, "client", {
|
|
33
11
|
enumerable: true,
|
|
34
12
|
configurable: true,
|
|
@@ -41,91 +19,24 @@ class AnthropicModel {
|
|
|
41
19
|
writable: true,
|
|
42
20
|
value: void 0
|
|
43
21
|
});
|
|
44
|
-
this.chunks = chunks;
|
|
45
|
-
this.from = from;
|
|
46
|
-
this.to = to;
|
|
47
22
|
this.model = modelName ?? contants_js_1.DEFAULT_MODELS.anthropic;
|
|
48
23
|
this.client = new sdk_1.default({
|
|
49
24
|
apiKey: key,
|
|
50
25
|
baseURL: baseUrl,
|
|
26
|
+
timeout: options.noTimeout ? 0 : undefined,
|
|
51
27
|
});
|
|
52
28
|
}
|
|
53
|
-
async
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
model: this.model,
|
|
65
|
-
max_tokens: 4096,
|
|
66
|
-
messages: [
|
|
67
|
-
{
|
|
68
|
-
role: 'user',
|
|
69
|
-
content: `${systemPrompt}\n\n${userPrompt}\n\nSOURCE_JSON:\n${sourceJson}`,
|
|
70
|
-
},
|
|
71
|
-
],
|
|
72
|
-
});
|
|
73
|
-
const textParts = message.content
|
|
74
|
-
.filter((part) => part.type === 'text')
|
|
75
|
-
.map((part) => part.text);
|
|
76
|
-
const text = textParts.join('').trim();
|
|
77
|
-
if (!text) {
|
|
78
|
-
logger_js_1.logger.error(`${chunkLabel} Empty response from Anthropic`);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
const tempJsonFileName = `${this.to}_chunk_${chunk.index + 1}.json`;
|
|
82
|
-
await (0, file_js_1.writeTemp)(tempJsonFileName, text);
|
|
83
|
-
if (!(0, utilites_js_1.isValidJson)(text)) {
|
|
84
|
-
logger_js_1.logger.error(`${chunkLabel} Invalid JSON response, saved to ${tempJsonFileName}`);
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
logger_js_1.logger.info(`${chunkLabel} Translated successfully (${(0, utilites_js_1.formatBytes)(chunk.byteSize)}, ${chunk.keyCount} keys)`);
|
|
88
|
-
return text;
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
const isLastAttempt = attempt === contants_js_1.MAX_RETRIES;
|
|
92
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
93
|
-
if (isLastAttempt) {
|
|
94
|
-
logger_js_1.logger.error(`${chunkLabel} Failed after ${contants_js_1.MAX_RETRIES + 1} attempts: ${errorMessage}`);
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
logger_js_1.logger.warn(`${chunkLabel} Attempt ${attempt + 1} failed: ${errorMessage}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
async translate() {
|
|
103
|
-
const { systemPrompt, userPrompt } = (0, utilites_js_1.generatePrompts)(this.from, this.to);
|
|
104
|
-
const totalChunks = this.chunks.length;
|
|
105
|
-
logger_js_1.logger.info(`Starting translation: ${totalChunks} chunk(s) to process`);
|
|
106
|
-
const results = [];
|
|
107
|
-
const failedChunks = [];
|
|
108
|
-
for (let i = 0; i < totalChunks; i++) {
|
|
109
|
-
const chunk = this.chunks[i];
|
|
110
|
-
if (i > 0) {
|
|
111
|
-
logger_js_1.logger.info(`Waiting ${contants_js_1.INTER_CHUNK_DELAY_MS}ms before next chunk (rate limit protection)...`);
|
|
112
|
-
await (0, utilites_js_1.delay)(contants_js_1.INTER_CHUNK_DELAY_MS);
|
|
113
|
-
}
|
|
114
|
-
const result = await this.translateChunk(chunk, systemPrompt, userPrompt);
|
|
115
|
-
if (result) {
|
|
116
|
-
results.push(result);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
failedChunks.push(chunk.index + 1);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (failedChunks.length > 0) {
|
|
123
|
-
throw new Error(`Translation failed for chunk(s): ${failedChunks.join(', ')}. Check temp files for partial results.`);
|
|
124
|
-
}
|
|
125
|
-
logger_js_1.logger.info(`All ${totalChunks} chunk(s) translated successfully, merging results...`);
|
|
126
|
-
const jsonInputs = results.map((r) => JSON.parse(r));
|
|
127
|
-
const mergedContent = (0, file_js_1.mergeInputs)(jsonInputs);
|
|
128
|
-
return JSON.stringify(mergedContent, null, 2);
|
|
29
|
+
async translate(prompt) {
|
|
30
|
+
const message = await this.client.messages.create({
|
|
31
|
+
model: this.model,
|
|
32
|
+
max_tokens: 8192,
|
|
33
|
+
temperature: 0.2,
|
|
34
|
+
messages: [{ role: 'user', content: prompt }],
|
|
35
|
+
});
|
|
36
|
+
return message.content
|
|
37
|
+
.filter((part) => part.type === 'text')
|
|
38
|
+
.map((part) => part.text)
|
|
39
|
+
.join('');
|
|
129
40
|
}
|
|
130
41
|
}
|
|
131
42
|
exports.default = AnthropicModel;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
genAI: GoogleGenAI;
|
|
8
|
-
model: string;
|
|
9
|
-
constructor(key: string, chunks: ChunkInfo[], from: string, to: string, modelName?: string);
|
|
10
|
-
private translateChunk;
|
|
11
|
-
translate(): Promise<string>;
|
|
1
|
+
import type { TextTranslator, TranslateOptions } from '../types.js';
|
|
2
|
+
declare class Gemini implements TextTranslator {
|
|
3
|
+
private genAI;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(key: string, modelName?: string, options?: TranslateOptions);
|
|
6
|
+
translate(prompt: string): Promise<string>;
|
|
12
7
|
}
|
|
13
8
|
export default Gemini;
|
|
14
9
|
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/src/providers/gemini.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/src/providers/gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpE,cAAM,MAAO,YAAW,cAAc;IACpC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAS;gBAGpB,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAuD;IAS5D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAWjD;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -1,31 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const genai_1 = require("@google/genai");
|
|
4
|
-
const mod_js_1 = require("../../deps/jsr.io/@std/encoding/1.0.10/mod.js");
|
|
5
|
-
const utilites_js_1 = require("../utilites.js");
|
|
6
|
-
const logger_js_1 = require("../logger.js");
|
|
7
|
-
const file_js_1 = require("../file.js");
|
|
8
4
|
const contants_js_1 = require("../contants.js");
|
|
9
5
|
class Gemini {
|
|
10
|
-
constructor(key,
|
|
11
|
-
Object.defineProperty(this, "chunks", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
writable: true,
|
|
15
|
-
value: void 0
|
|
16
|
-
});
|
|
17
|
-
Object.defineProperty(this, "from", {
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true,
|
|
21
|
-
value: void 0
|
|
22
|
-
});
|
|
23
|
-
Object.defineProperty(this, "to", {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
configurable: true,
|
|
26
|
-
writable: true,
|
|
27
|
-
value: void 0
|
|
28
|
-
});
|
|
6
|
+
constructor(key, modelName, options = { noLimit: false, noTimeout: false }) {
|
|
29
7
|
Object.defineProperty(this, "genAI", {
|
|
30
8
|
enumerable: true,
|
|
31
9
|
configurable: true,
|
|
@@ -38,96 +16,22 @@ class Gemini {
|
|
|
38
16
|
writable: true,
|
|
39
17
|
value: void 0
|
|
40
18
|
});
|
|
41
|
-
this.chunks = chunks;
|
|
42
|
-
this.from = from;
|
|
43
|
-
this.to = to;
|
|
44
19
|
this.model = modelName ?? contants_js_1.DEFAULT_MODELS.gemini;
|
|
45
20
|
this.genAI = new genai_1.GoogleGenAI({
|
|
46
21
|
apiKey: key,
|
|
22
|
+
httpOptions: options.noTimeout ? { timeout: 2_147_483_647 } : undefined,
|
|
47
23
|
});
|
|
48
24
|
}
|
|
49
|
-
async
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const part = {
|
|
60
|
-
inlineData: {
|
|
61
|
-
data: fileBase64,
|
|
62
|
-
mimeType: 'text/plain',
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
const { text } = await this.genAI.models.generateContent({
|
|
66
|
-
model: this.model,
|
|
67
|
-
contents: [systemPrompt, userPrompt, part],
|
|
68
|
-
config: {
|
|
69
|
-
systemInstruction: systemPrompt,
|
|
70
|
-
candidateCount: 1,
|
|
71
|
-
responseMimeType: 'application/json',
|
|
72
|
-
responseLogprobs: false,
|
|
73
|
-
temperature: 0.3,
|
|
74
|
-
topP: 0.7,
|
|
75
|
-
topK: 20,
|
|
76
|
-
maxOutputTokens: Number.POSITIVE_INFINITY,
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
if (!text) {
|
|
80
|
-
logger_js_1.logger.error(`${chunkLabel} Empty response from Gemini AI`);
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
const tempJsonFileName = `${this.to}_chunk_${chunk.index + 1}.json`;
|
|
84
|
-
await (0, file_js_1.writeTemp)(tempJsonFileName, text);
|
|
85
|
-
if (!(0, utilites_js_1.isValidJson)(text)) {
|
|
86
|
-
logger_js_1.logger.error(`${chunkLabel} Invalid JSON response, saved to ${tempJsonFileName}`);
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
logger_js_1.logger.info(`${chunkLabel} Translated successfully (${(0, utilites_js_1.formatBytes)(chunk.byteSize)}, ${chunk.keyCount} keys)`);
|
|
90
|
-
return text;
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
const isLastAttempt = attempt === contants_js_1.MAX_RETRIES;
|
|
94
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
95
|
-
if (isLastAttempt) {
|
|
96
|
-
logger_js_1.logger.error(`${chunkLabel} Failed after ${contants_js_1.MAX_RETRIES + 1} attempts: ${errorMessage}`);
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
logger_js_1.logger.warn(`${chunkLabel} Attempt ${attempt + 1} failed: ${errorMessage}`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
async translate() {
|
|
105
|
-
const { systemPrompt, userPrompt } = (0, utilites_js_1.generatePrompts)(this.from, this.to);
|
|
106
|
-
const totalChunks = this.chunks.length;
|
|
107
|
-
logger_js_1.logger.info(`Starting translation: ${totalChunks} chunk(s) to process`);
|
|
108
|
-
const results = [];
|
|
109
|
-
const failedChunks = [];
|
|
110
|
-
for (let i = 0; i < totalChunks; i++) {
|
|
111
|
-
const chunk = this.chunks[i];
|
|
112
|
-
if (i > 0) {
|
|
113
|
-
logger_js_1.logger.info(`Waiting ${contants_js_1.INTER_CHUNK_DELAY_MS}ms before next chunk (rate limit protection)...`);
|
|
114
|
-
await (0, utilites_js_1.delay)(contants_js_1.INTER_CHUNK_DELAY_MS);
|
|
115
|
-
}
|
|
116
|
-
const result = await this.translateChunk(chunk, systemPrompt, userPrompt);
|
|
117
|
-
if (result) {
|
|
118
|
-
results.push(result);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
failedChunks.push(chunk.index + 1);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (failedChunks.length > 0) {
|
|
125
|
-
throw new Error(`Translation failed for chunk(s): ${failedChunks.join(', ')}. Check temp files for partial results.`);
|
|
126
|
-
}
|
|
127
|
-
logger_js_1.logger.info(`All ${totalChunks} chunk(s) translated successfully, merging results...`);
|
|
128
|
-
const jsonInputs = results.map((r) => JSON.parse(r));
|
|
129
|
-
const mergedContent = (0, file_js_1.mergeInputs)(jsonInputs);
|
|
130
|
-
return JSON.stringify(mergedContent, null, 2);
|
|
25
|
+
async translate(prompt) {
|
|
26
|
+
const { text } = await this.genAI.models.generateContent({
|
|
27
|
+
model: this.model,
|
|
28
|
+
contents: prompt,
|
|
29
|
+
config: {
|
|
30
|
+
candidateCount: 1,
|
|
31
|
+
temperature: 0.2,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
return text ?? '';
|
|
131
35
|
}
|
|
132
36
|
}
|
|
133
37
|
exports.default = Gemini;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
client: OpenAI;
|
|
8
|
-
model: string;
|
|
9
|
-
constructor(key: string, chunks: ChunkInfo[], from: string, to: string, baseUrl?: string, modelName?: string);
|
|
10
|
-
private translateChunk;
|
|
11
|
-
translate(): Promise<string>;
|
|
1
|
+
import type { TextTranslator, TranslateOptions } from '../types.js';
|
|
2
|
+
declare class OpenAIModel implements TextTranslator {
|
|
3
|
+
private client;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(key: string, baseUrl?: string, modelName?: string, options?: TranslateOptions);
|
|
6
|
+
translate(prompt: string): Promise<string>;
|
|
12
7
|
}
|
|
13
8
|
export default OpenAIModel;
|
|
14
9
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/src/providers/openai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpE,cAAM,WAAY,YAAW,cAAc;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAGpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAuD;IAU5D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQjD;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -4,31 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const openai_1 = __importDefault(require("openai"));
|
|
7
|
-
const utilites_js_1 = require("../utilites.js");
|
|
8
|
-
const logger_js_1 = require("../logger.js");
|
|
9
|
-
const file_js_1 = require("../file.js");
|
|
10
7
|
const contants_js_1 = require("../contants.js");
|
|
11
|
-
const decoder = new TextDecoder();
|
|
12
8
|
class OpenAIModel {
|
|
13
|
-
constructor(key,
|
|
14
|
-
Object.defineProperty(this, "chunks", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: void 0
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "from", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: void 0
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "to", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: void 0
|
|
31
|
-
});
|
|
9
|
+
constructor(key, baseUrl, modelName, options = { noLimit: false, noTimeout: false }) {
|
|
32
10
|
Object.defineProperty(this, "client", {
|
|
33
11
|
enumerable: true,
|
|
34
12
|
configurable: true,
|
|
@@ -41,92 +19,20 @@ class OpenAIModel {
|
|
|
41
19
|
writable: true,
|
|
42
20
|
value: void 0
|
|
43
21
|
});
|
|
44
|
-
this.chunks = chunks;
|
|
45
|
-
this.from = from;
|
|
46
|
-
this.to = to;
|
|
47
22
|
this.model = modelName ?? contants_js_1.DEFAULT_MODELS.openai;
|
|
48
23
|
this.client = new openai_1.default({
|
|
49
24
|
apiKey: key,
|
|
50
25
|
baseURL: baseUrl,
|
|
26
|
+
timeout: options.noTimeout ? 2_147_483_647 : undefined,
|
|
51
27
|
});
|
|
52
28
|
}
|
|
53
|
-
async
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
logger_js_1.logger.warn(`${chunkLabel} Retry ${attempt}/${contants_js_1.MAX_RETRIES} after ${backoffMs}ms backoff...`);
|
|
61
|
-
await (0, utilites_js_1.delay)(backoffMs);
|
|
62
|
-
}
|
|
63
|
-
const response = await this.client.responses.create({
|
|
64
|
-
model: this.model,
|
|
65
|
-
input: [
|
|
66
|
-
{
|
|
67
|
-
role: 'user',
|
|
68
|
-
content: [
|
|
69
|
-
{
|
|
70
|
-
type: 'input_text',
|
|
71
|
-
text: `${systemPrompt}\n\n${userPrompt}\n\nSOURCE_JSON:\n${sourceJson}`,
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
});
|
|
77
|
-
const text = response.output_text;
|
|
78
|
-
if (!text) {
|
|
79
|
-
logger_js_1.logger.error(`${chunkLabel} Empty response from OpenAI`);
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
const tempJsonFileName = `${this.to}_chunk_${chunk.index + 1}.json`;
|
|
83
|
-
await (0, file_js_1.writeTemp)(tempJsonFileName, text);
|
|
84
|
-
if (!(0, utilites_js_1.isValidJson)(text)) {
|
|
85
|
-
logger_js_1.logger.error(`${chunkLabel} Invalid JSON response, saved to ${tempJsonFileName}`);
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
logger_js_1.logger.info(`${chunkLabel} Translated successfully (${(0, utilites_js_1.formatBytes)(chunk.byteSize)}, ${chunk.keyCount} keys)`);
|
|
89
|
-
return text;
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
const isLastAttempt = attempt === contants_js_1.MAX_RETRIES;
|
|
93
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
94
|
-
if (isLastAttempt) {
|
|
95
|
-
logger_js_1.logger.error(`${chunkLabel} Failed after ${contants_js_1.MAX_RETRIES + 1} attempts: ${errorMessage}`);
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
logger_js_1.logger.warn(`${chunkLabel} Attempt ${attempt + 1} failed: ${errorMessage}`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
async translate() {
|
|
104
|
-
const { systemPrompt, userPrompt } = (0, utilites_js_1.generatePrompts)(this.from, this.to);
|
|
105
|
-
const totalChunks = this.chunks.length;
|
|
106
|
-
logger_js_1.logger.info(`Starting translation: ${totalChunks} chunk(s) to process`);
|
|
107
|
-
const results = [];
|
|
108
|
-
const failedChunks = [];
|
|
109
|
-
for (let i = 0; i < totalChunks; i++) {
|
|
110
|
-
const chunk = this.chunks[i];
|
|
111
|
-
if (i > 0) {
|
|
112
|
-
logger_js_1.logger.info(`Waiting ${contants_js_1.INTER_CHUNK_DELAY_MS}ms before next chunk (rate limit protection)...`);
|
|
113
|
-
await (0, utilites_js_1.delay)(contants_js_1.INTER_CHUNK_DELAY_MS);
|
|
114
|
-
}
|
|
115
|
-
const result = await this.translateChunk(chunk, systemPrompt, userPrompt);
|
|
116
|
-
if (result) {
|
|
117
|
-
results.push(result);
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
failedChunks.push(chunk.index + 1);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (failedChunks.length > 0) {
|
|
124
|
-
throw new Error(`Translation failed for chunk(s): ${failedChunks.join(', ')}. Check temp files for partial results.`);
|
|
125
|
-
}
|
|
126
|
-
logger_js_1.logger.info(`All ${totalChunks} chunk(s) translated successfully, merging results...`);
|
|
127
|
-
const jsonInputs = results.map((r) => JSON.parse(r));
|
|
128
|
-
const mergedContent = (0, file_js_1.mergeInputs)(jsonInputs);
|
|
129
|
-
return JSON.stringify(mergedContent, null, 2);
|
|
29
|
+
async translate(prompt) {
|
|
30
|
+
const completion = await this.client.chat.completions.create({
|
|
31
|
+
model: this.model,
|
|
32
|
+
messages: [{ role: 'user', content: prompt }],
|
|
33
|
+
temperature: 0.2,
|
|
34
|
+
});
|
|
35
|
+
return completion.choices[0]?.message?.content ?? '';
|
|
130
36
|
}
|
|
131
37
|
}
|
|
132
38
|
exports.default = OpenAIModel;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Batch, JsonValue, Leaf, TextTranslator, TranslateOptions } from './types.js';
|
|
2
|
+
export declare const extractLeaves: (data: JsonValue) => Leaf[];
|
|
3
|
+
export declare const groupIntoBatches: (leaves: Leaf[], maxBytes: number) => Batch[];
|
|
4
|
+
export declare const buildBatchPrompt: (from: string, to: string, leaves: Leaf[]) => string;
|
|
5
|
+
export declare const decodeResponse: (text: string) => Map<number, string>;
|
|
6
|
+
export declare const reconstruct: (allLeaves: Leaf[], translations: Map<number, string>) => JsonValue;
|
|
7
|
+
export declare const runBatches: (batches: Batch[], translator: TextTranslator, from: string, to: string, options: TranslateOptions) => Promise<Map<number, string>>;
|
|
8
|
+
//# sourceMappingURL=translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../../src/src/translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAQ,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQjG,eAAO,MAAM,aAAa,GAAI,MAAM,SAAS,KAAG,IAAI,EAiCnD,CAAC;AAQF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,IAAI,EAAE,EAAE,UAAU,MAAM,KAAG,KAAK,EA0BxE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,IAAI,MAAM,EAAE,QAAQ,IAAI,EAAE,KAAG,MAkB3E,CAAC;AAQF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAS/D,CAAC;AAgBF,eAAO,MAAM,WAAW,GAAI,WAAW,IAAI,EAAE,EAAE,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,SAalF,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,KAAK,EAAE,EAChB,YAAY,cAAc,EAC1B,MAAM,MAAM,EACZ,IAAI,MAAM,EACV,SAAS,gBAAgB,KACxB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgF7B,CAAC"}
|