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.
Files changed (230) hide show
  1. package/README.md +86 -55
  2. package/esm/cli.js +49 -41
  3. package/esm/deno.d.ts +1 -1
  4. package/esm/deno.js +7 -7
  5. package/esm/deps/jsr.io/@std/cli/1.0.29/_data.d.ts.map +1 -0
  6. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts.map +1 -1
  7. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts.map +1 -1
  8. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts.map +1 -1
  9. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.js +17 -3
  10. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts.map +1 -1
  11. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.js +1 -1
  12. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts.map +1 -1
  13. package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts.map +1 -1
  14. package/esm/deps/jsr.io/@std/internal/1.0.13/_os.d.ts.map +1 -0
  15. package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.js +1 -1
  16. package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts.map +1 -1
  17. package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.js +1 -1
  18. package/esm/deps/jsr.io/@std/path/1.1.4/basename.js +1 -1
  19. package/esm/deps/jsr.io/@std/path/1.1.4/constants.js +1 -1
  20. package/esm/deps/jsr.io/@std/path/1.1.4/dirname.js +1 -1
  21. package/esm/deps/jsr.io/@std/path/1.1.4/extname.js +1 -1
  22. package/esm/deps/jsr.io/@std/path/1.1.4/format.js +1 -1
  23. package/esm/deps/jsr.io/@std/path/1.1.4/from_file_url.js +1 -1
  24. package/esm/deps/jsr.io/@std/path/1.1.4/glob_to_regexp.js +1 -1
  25. package/esm/deps/jsr.io/@std/path/1.1.4/is_absolute.js +1 -1
  26. package/esm/deps/jsr.io/@std/path/1.1.4/join.js +1 -1
  27. package/esm/deps/jsr.io/@std/path/1.1.4/join_globs.js +1 -1
  28. package/esm/deps/jsr.io/@std/path/1.1.4/normalize.js +1 -1
  29. package/esm/deps/jsr.io/@std/path/1.1.4/normalize_glob.js +1 -1
  30. package/esm/deps/jsr.io/@std/path/1.1.4/parse.js +1 -1
  31. package/esm/deps/jsr.io/@std/path/1.1.4/relative.js +1 -1
  32. package/esm/deps/jsr.io/@std/path/1.1.4/resolve.js +1 -1
  33. package/esm/deps/jsr.io/@std/path/1.1.4/to_file_url.js +1 -1
  34. package/esm/deps/jsr.io/@std/path/1.1.4/to_namespaced_path.js +1 -1
  35. package/esm/src/contants.d.ts +2 -3
  36. package/esm/src/contants.d.ts.map +1 -1
  37. package/esm/src/contants.js +22 -13
  38. package/esm/src/file.d.ts +2 -7
  39. package/esm/src/file.d.ts.map +1 -1
  40. package/esm/src/file.js +1 -93
  41. package/esm/src/providers/anthropic.d.ts +6 -11
  42. package/esm/src/providers/anthropic.d.ts.map +1 -1
  43. package/esm/src/providers/anthropic.js +14 -103
  44. package/esm/src/providers/gemini.d.ts +6 -11
  45. package/esm/src/providers/gemini.d.ts.map +1 -1
  46. package/esm/src/providers/gemini.js +13 -109
  47. package/esm/src/providers/openai.d.ts +6 -11
  48. package/esm/src/providers/openai.d.ts.map +1 -1
  49. package/esm/src/providers/openai.js +10 -104
  50. package/esm/src/translator.d.ts +8 -0
  51. package/esm/src/translator.d.ts.map +1 -0
  52. package/esm/src/translator.js +200 -0
  53. package/esm/src/types.d.ts +28 -11
  54. package/esm/src/types.d.ts.map +1 -1
  55. package/esm/src/utilites.d.ts +1 -6
  56. package/esm/src/utilites.d.ts.map +1 -1
  57. package/esm/src/utilites.js +18 -77
  58. package/package.json +4 -4
  59. package/script/cli.js +47 -39
  60. package/script/deno.d.ts +1 -1
  61. package/script/deno.js +7 -7
  62. package/script/deps/jsr.io/@std/cli/1.0.29/_data.d.ts.map +1 -0
  63. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts.map +1 -1
  64. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts.map +1 -1
  65. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts.map +1 -1
  66. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.js +17 -3
  67. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts.map +1 -1
  68. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.js +1 -1
  69. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts.map +1 -1
  70. package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts.map +1 -1
  71. package/script/deps/jsr.io/@std/internal/1.0.13/_os.d.ts.map +1 -0
  72. package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.js +1 -1
  73. package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts.map +1 -1
  74. package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.js +1 -1
  75. package/script/deps/jsr.io/@std/path/1.1.4/basename.js +1 -1
  76. package/script/deps/jsr.io/@std/path/1.1.4/constants.js +1 -1
  77. package/script/deps/jsr.io/@std/path/1.1.4/dirname.js +1 -1
  78. package/script/deps/jsr.io/@std/path/1.1.4/extname.js +1 -1
  79. package/script/deps/jsr.io/@std/path/1.1.4/format.js +1 -1
  80. package/script/deps/jsr.io/@std/path/1.1.4/from_file_url.js +1 -1
  81. package/script/deps/jsr.io/@std/path/1.1.4/glob_to_regexp.js +1 -1
  82. package/script/deps/jsr.io/@std/path/1.1.4/is_absolute.js +1 -1
  83. package/script/deps/jsr.io/@std/path/1.1.4/join.js +1 -1
  84. package/script/deps/jsr.io/@std/path/1.1.4/join_globs.js +1 -1
  85. package/script/deps/jsr.io/@std/path/1.1.4/normalize.js +1 -1
  86. package/script/deps/jsr.io/@std/path/1.1.4/normalize_glob.js +1 -1
  87. package/script/deps/jsr.io/@std/path/1.1.4/parse.js +1 -1
  88. package/script/deps/jsr.io/@std/path/1.1.4/relative.js +1 -1
  89. package/script/deps/jsr.io/@std/path/1.1.4/resolve.js +1 -1
  90. package/script/deps/jsr.io/@std/path/1.1.4/to_file_url.js +1 -1
  91. package/script/deps/jsr.io/@std/path/1.1.4/to_namespaced_path.js +1 -1
  92. package/script/src/contants.d.ts +2 -3
  93. package/script/src/contants.d.ts.map +1 -1
  94. package/script/src/contants.js +23 -14
  95. package/script/src/file.d.ts +2 -7
  96. package/script/src/file.d.ts.map +1 -1
  97. package/script/src/file.js +2 -99
  98. package/script/src/providers/anthropic.d.ts +6 -11
  99. package/script/src/providers/anthropic.d.ts.map +1 -1
  100. package/script/src/providers/anthropic.js +13 -102
  101. package/script/src/providers/gemini.d.ts +6 -11
  102. package/script/src/providers/gemini.d.ts.map +1 -1
  103. package/script/src/providers/gemini.js +12 -108
  104. package/script/src/providers/openai.d.ts +6 -11
  105. package/script/src/providers/openai.d.ts.map +1 -1
  106. package/script/src/providers/openai.js +9 -103
  107. package/script/src/translator.d.ts +8 -0
  108. package/script/src/translator.d.ts.map +1 -0
  109. package/script/src/translator.js +209 -0
  110. package/script/src/types.d.ts +28 -11
  111. package/script/src/types.d.ts.map +1 -1
  112. package/script/src/utilites.d.ts +1 -6
  113. package/script/src/utilites.d.ts.map +1 -1
  114. package/script/src/utilites.js +19 -80
  115. package/esm/deps/jsr.io/@std/cli/1.0.27/_data.d.ts.map +0 -1
  116. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  117. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  118. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -51
  119. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts +0 -35
  120. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts.map +0 -1
  121. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common32.js +0 -192
  122. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts +0 -35
  123. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts.map +0 -1
  124. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common64.js +0 -113
  125. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  126. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  127. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -13
  128. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  129. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  130. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -2
  131. package/esm/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts +0 -2
  132. package/esm/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts.map +0 -1
  133. package/esm/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.js +0 -26
  134. package/esm/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts +0 -61
  135. package/esm/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts.map +0 -1
  136. package/esm/deps/jsr.io/@std/encoding/1.0.10/ascii85.js +0 -152
  137. package/esm/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts +0 -40
  138. package/esm/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts.map +0 -1
  139. package/esm/deps/jsr.io/@std/encoding/1.0.10/base32.js +0 -87
  140. package/esm/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts +0 -40
  141. package/esm/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts.map +0 -1
  142. package/esm/deps/jsr.io/@std/encoding/1.0.10/base58.js +0 -131
  143. package/esm/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts +0 -40
  144. package/esm/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts.map +0 -1
  145. package/esm/deps/jsr.io/@std/encoding/1.0.10/base64.js +0 -82
  146. package/esm/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts +0 -40
  147. package/esm/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts.map +0 -1
  148. package/esm/deps/jsr.io/@std/encoding/1.0.10/base64url.js +0 -72
  149. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  150. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  151. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -87
  152. package/esm/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts +0 -98
  153. package/esm/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts.map +0 -1
  154. package/esm/deps/jsr.io/@std/encoding/1.0.10/mod.js +0 -99
  155. package/esm/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts +0 -120
  156. package/esm/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts.map +0 -1
  157. package/esm/deps/jsr.io/@std/encoding/1.0.10/varint.js +0 -205
  158. package/esm/deps/jsr.io/@std/internal/1.0.12/_os.d.ts.map +0 -1
  159. package/script/deps/jsr.io/@std/cli/1.0.27/_data.d.ts.map +0 -1
  160. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  161. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  162. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -57
  163. package/script/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts +0 -35
  164. package/script/deps/jsr.io/@std/encoding/1.0.10/_common32.d.ts.map +0 -1
  165. package/script/deps/jsr.io/@std/encoding/1.0.10/_common32.js +0 -198
  166. package/script/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts +0 -35
  167. package/script/deps/jsr.io/@std/encoding/1.0.10/_common64.d.ts.map +0 -1
  168. package/script/deps/jsr.io/@std/encoding/1.0.10/_common64.js +0 -119
  169. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  170. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  171. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -16
  172. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  173. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  174. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -3
  175. package/script/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts +0 -2
  176. package/script/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.d.ts.map +0 -1
  177. package/script/deps/jsr.io/@std/encoding/1.0.10/_validate_binary_like.js +0 -29
  178. package/script/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts +0 -61
  179. package/script/deps/jsr.io/@std/encoding/1.0.10/ascii85.d.ts.map +0 -1
  180. package/script/deps/jsr.io/@std/encoding/1.0.10/ascii85.js +0 -156
  181. package/script/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts +0 -40
  182. package/script/deps/jsr.io/@std/encoding/1.0.10/base32.d.ts.map +0 -1
  183. package/script/deps/jsr.io/@std/encoding/1.0.10/base32.js +0 -91
  184. package/script/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts +0 -40
  185. package/script/deps/jsr.io/@std/encoding/1.0.10/base58.d.ts.map +0 -1
  186. package/script/deps/jsr.io/@std/encoding/1.0.10/base58.js +0 -135
  187. package/script/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts +0 -40
  188. package/script/deps/jsr.io/@std/encoding/1.0.10/base64.d.ts.map +0 -1
  189. package/script/deps/jsr.io/@std/encoding/1.0.10/base64.js +0 -86
  190. package/script/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts +0 -40
  191. package/script/deps/jsr.io/@std/encoding/1.0.10/base64url.d.ts.map +0 -1
  192. package/script/deps/jsr.io/@std/encoding/1.0.10/base64url.js +0 -76
  193. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  194. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  195. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -91
  196. package/script/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts +0 -98
  197. package/script/deps/jsr.io/@std/encoding/1.0.10/mod.d.ts.map +0 -1
  198. package/script/deps/jsr.io/@std/encoding/1.0.10/mod.js +0 -115
  199. package/script/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts +0 -120
  200. package/script/deps/jsr.io/@std/encoding/1.0.10/varint.d.ts.map +0 -1
  201. package/script/deps/jsr.io/@std/encoding/1.0.10/varint.js +0 -211
  202. package/script/deps/jsr.io/@std/internal/1.0.12/_os.d.ts.map +0 -1
  203. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.d.ts +0 -0
  204. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.js +0 -0
  205. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts +0 -0
  206. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.js +0 -0
  207. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts +0 -0
  208. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.js +0 -0
  209. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts +0 -0
  210. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts +0 -0
  211. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts +0 -0
  212. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.js +0 -0
  213. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts +0 -0
  214. /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.js +0 -0
  215. /package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.d.ts +0 -0
  216. /package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts +0 -0
  217. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.d.ts +0 -0
  218. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_data.js +0 -0
  219. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.d.ts +0 -0
  220. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/_run_length.js +0 -0
  221. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.d.ts +0 -0
  222. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/mod.js +0 -0
  223. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/parse_args.d.ts +0 -0
  224. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/prompt_secret.d.ts +0 -0
  225. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.d.ts +0 -0
  226. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unicode_width.js +0 -0
  227. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.d.ts +0 -0
  228. /package/script/deps/jsr.io/@std/cli/{1.0.27 → 1.0.29}/unstable_spinner.js +0 -0
  229. /package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.d.ts +0 -0
  230. /package/script/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts +0 -0
@@ -33,13 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.writeTemp = exports.mergeInputs = exports.splitJson = exports.ensureDirectoryExists = exports.existsFile = exports.writeOutput = exports.getImportJson = exports.resolvePath = void 0;
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 contants_js_1 = require("./contants.js");
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 Anthropic from '@anthropic-ai/sdk';
2
- import type { ChunkInfo, Translatable } from '../types.js';
3
- declare class AnthropicModel implements Translatable {
4
- chunks: ChunkInfo[];
5
- from: string;
6
- to: string;
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":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAQvE,cAAM,cAAe,YAAW,YAAY;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;gBAEF,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;YAW9F,cAAc;IA4DtB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAqCnC;AAED,eAAe,cAAc,CAAC"}
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, chunks, from, to, baseUrl, modelName) {
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 translateChunk(chunk, systemPrompt, userPrompt) {
54
- const chunkLabel = `[Chunk ${chunk.index + 1}/${this.chunks.length}]`;
55
- const sourceJson = decoder.decode(chunk.data);
56
- for (let attempt = 0; attempt <= contants_js_1.MAX_RETRIES; attempt++) {
57
- try {
58
- if (attempt > 0) {
59
- const backoffMs = contants_js_1.BASE_RETRY_DELAY_MS * Math.pow(2, attempt - 1);
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 message = await this.client.messages.create({
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 { GoogleGenAI } from '@google/genai';
2
- import type { ChunkInfo, Translatable } from '../types.js';
3
- declare class Gemini implements Translatable {
4
- chunks: ChunkInfo[];
5
- from: string;
6
- to: string;
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":"AAAA,OAAO,EAAE,WAAW,EAAa,MAAM,eAAe,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAMvE,cAAM,MAAO,YAAW,YAAY;IAClC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;gBAEF,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;YAU5E,cAAc;IAkEtB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAqCnC;AAED,eAAe,MAAM,CAAC"}
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, chunks, from, to, modelName) {
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 translateChunk(chunk, systemPrompt, userPrompt) {
50
- const chunkLabel = `[Chunk ${chunk.index + 1}/${this.chunks.length}]`;
51
- for (let attempt = 0; attempt <= contants_js_1.MAX_RETRIES; attempt++) {
52
- try {
53
- if (attempt > 0) {
54
- const backoffMs = contants_js_1.BASE_RETRY_DELAY_MS * Math.pow(2, attempt - 1);
55
- logger_js_1.logger.warn(`${chunkLabel} Retry ${attempt}/${contants_js_1.MAX_RETRIES} after ${backoffMs}ms backoff...`);
56
- await (0, utilites_js_1.delay)(backoffMs);
57
- }
58
- const fileBase64 = (0, mod_js_1.encodeBase64)(chunk.data);
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 OpenAI from 'openai';
2
- import type { ChunkInfo, Translatable } from '../types.js';
3
- declare class OpenAIModel implements Translatable {
4
- chunks: ChunkInfo[];
5
- from: string;
6
- to: string;
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":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAQvE,cAAM,WAAY,YAAW,YAAY;IACvC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;gBAEF,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;YAW9F,cAAc;IA4DtB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAqCnC;AAED,eAAe,WAAW,CAAC"}
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, chunks, from, to, baseUrl, modelName) {
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 translateChunk(chunk, systemPrompt, userPrompt) {
54
- const chunkLabel = `[Chunk ${chunk.index + 1}/${this.chunks.length}]`;
55
- const sourceJson = decoder.decode(chunk.data);
56
- for (let attempt = 0; attempt <= contants_js_1.MAX_RETRIES; attempt++) {
57
- try {
58
- if (attempt > 0) {
59
- const backoffMs = contants_js_1.BASE_RETRY_DELAY_MS * Math.pow(2, attempt - 1);
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"}