@better-translate/cli 2.0.0 → 2.0.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 +73 -0
- package/dist/ai-sdk-generator-F2X3W7NC.js +89 -0
- package/dist/ai-sdk-generator.d.ts.map +1 -1
- package/dist/bin.js +2 -2
- package/dist/{chunk-NRZIFUEW.js → chunk-55TGASZJ.js} +20 -25
- package/dist/chunk-VYOBAIBH.js +8 -0
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config.d.ts +1 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -5
- package/dist/generate.d.ts.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -6
- package/dist/types.d.ts +8 -12
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/ai-sdk-generator-WPQCTPGA.js +0 -37
- package/dist/chunk-WMIZO3GE.js +0 -19
- package/dist/provider-models.d.ts +0 -5
- package/dist/provider-models.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -2,4 +2,77 @@
|
|
|
2
2
|
|
|
3
3
|
`@better-translate/cli` extracts marked source strings into your source locale file, generates translated message files, and localizes markdown. Use it when you want Better Translate to create or update locale files for you.
|
|
4
4
|
|
|
5
|
+
Install the CLI and the provider package you want to use in your own project:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install -D @better-translate/cli @ai-sdk/openai
|
|
9
|
+
# or: npm install -D @better-translate/cli @ai-sdk/anthropic
|
|
10
|
+
# or: npm install -D @better-translate/cli @ai-sdk/moonshotai
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Then configure the CLI with a real AI SDK language model. The flow is the same for any provider package:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { openai } from "@ai-sdk/openai";
|
|
17
|
+
import { defineConfig } from "@better-translate/cli/config";
|
|
18
|
+
|
|
19
|
+
export default defineConfig({
|
|
20
|
+
sourceLocale: "en",
|
|
21
|
+
locales: ["es", "fr"],
|
|
22
|
+
model: openai("gpt-5"),
|
|
23
|
+
messages: {
|
|
24
|
+
entry: "./src/messages/en.json",
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { anthropic } from "@ai-sdk/anthropic";
|
|
31
|
+
import { defineConfig } from "@better-translate/cli/config";
|
|
32
|
+
|
|
33
|
+
export default defineConfig({
|
|
34
|
+
sourceLocale: "en",
|
|
35
|
+
locales: ["es", "fr"],
|
|
36
|
+
model: anthropic("claude-sonnet-4-5"),
|
|
37
|
+
messages: {
|
|
38
|
+
entry: "./src/messages/en.json",
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import { moonshotai } from "@ai-sdk/moonshotai";
|
|
45
|
+
import { defineConfig } from "@better-translate/cli/config";
|
|
46
|
+
|
|
47
|
+
export default defineConfig({
|
|
48
|
+
sourceLocale: "en",
|
|
49
|
+
locales: ["es", "fr"],
|
|
50
|
+
model: moonshotai("kimi-k2-0905-preview"),
|
|
51
|
+
messages: {
|
|
52
|
+
entry: "./src/messages/en.json",
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
If you need provider-specific settings, create the model in your app first and pass it through. Credentials and provider configuration stay entirely in the provider package setup:
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
import { createOpenAI } from "@ai-sdk/openai";
|
|
61
|
+
import { defineConfig } from "@better-translate/cli/config";
|
|
62
|
+
|
|
63
|
+
const model = createOpenAI({
|
|
64
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
65
|
+
baseURL: process.env.OPENAI_BASE_URL,
|
|
66
|
+
})("gpt-5");
|
|
67
|
+
|
|
68
|
+
export default defineConfig({
|
|
69
|
+
sourceLocale: "en",
|
|
70
|
+
locales: ["es", "fr"],
|
|
71
|
+
model,
|
|
72
|
+
messages: {
|
|
73
|
+
entry: "./src/messages/en.json",
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
5
78
|
Full docs: [better-translate-placeholder.com/en/docs/cli](https://better-translate-placeholder.com/en/docs/cli)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// src/ai-sdk-generator.ts
|
|
2
|
+
function validateGeneratedValue(value, request) {
|
|
3
|
+
if (!request.validate) {
|
|
4
|
+
return value;
|
|
5
|
+
}
|
|
6
|
+
return request.validate(value);
|
|
7
|
+
}
|
|
8
|
+
function createOutputValidator(request) {
|
|
9
|
+
return {
|
|
10
|
+
validate(value) {
|
|
11
|
+
try {
|
|
12
|
+
return {
|
|
13
|
+
success: true,
|
|
14
|
+
value: validateGeneratedValue(value, request)
|
|
15
|
+
};
|
|
16
|
+
} catch (error) {
|
|
17
|
+
return {
|
|
18
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
19
|
+
success: false
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function isSchemaTooLargeError(error) {
|
|
26
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
27
|
+
const normalizedMessage = message.toLowerCase();
|
|
28
|
+
return normalizedMessage.includes("compiled grammar is too large") || normalizedMessage.includes("reduce the number of strict tools") || normalizedMessage.includes("simplify your tool schemas") || normalizedMessage.includes("tool schemas");
|
|
29
|
+
}
|
|
30
|
+
function extractJsonPayload(text) {
|
|
31
|
+
const trimmed = text.trim();
|
|
32
|
+
const fencedMatch = trimmed.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);
|
|
33
|
+
if (fencedMatch?.[1]) {
|
|
34
|
+
return fencedMatch[1].trim();
|
|
35
|
+
}
|
|
36
|
+
const firstBrace = trimmed.indexOf("{");
|
|
37
|
+
const lastBrace = trimmed.lastIndexOf("}");
|
|
38
|
+
if (firstBrace >= 0 && lastBrace > firstBrace) {
|
|
39
|
+
return trimmed.slice(firstBrace, lastBrace + 1);
|
|
40
|
+
}
|
|
41
|
+
return trimmed;
|
|
42
|
+
}
|
|
43
|
+
function parseJsonText(text, request) {
|
|
44
|
+
const payload = extractJsonPayload(text);
|
|
45
|
+
try {
|
|
46
|
+
return validateGeneratedValue(JSON.parse(payload), request);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
49
|
+
throw new Error(
|
|
50
|
+
`Fallback JSON parsing failed for "${request.sourcePath}": ${reason}`
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function generateWithAiSdk(model, request) {
|
|
55
|
+
const { Output, generateText, jsonSchema } = await import("ai");
|
|
56
|
+
const baseInput = {
|
|
57
|
+
model,
|
|
58
|
+
prompt: request.prompt,
|
|
59
|
+
system: request.system,
|
|
60
|
+
temperature: 0
|
|
61
|
+
};
|
|
62
|
+
try {
|
|
63
|
+
const result = await generateText({
|
|
64
|
+
...baseInput,
|
|
65
|
+
experimental_output: Output.object({
|
|
66
|
+
schema: jsonSchema(request.schema, createOutputValidator(request))
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
return result.experimental_output;
|
|
70
|
+
} catch (error) {
|
|
71
|
+
if (!isSchemaTooLargeError(error)) {
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const fallbackResult = await generateText({
|
|
76
|
+
...baseInput,
|
|
77
|
+
prompt: [
|
|
78
|
+
request.prompt,
|
|
79
|
+
"",
|
|
80
|
+
"Return only a valid JSON object that matches the required shape exactly.",
|
|
81
|
+
"Do not wrap the JSON in markdown fences."
|
|
82
|
+
].join("\n"),
|
|
83
|
+
system: `${request.system} Return only valid JSON.`
|
|
84
|
+
});
|
|
85
|
+
return parseJsonText(fallbackResult.text, request);
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
generateWithAiSdk
|
|
89
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk-generator.d.ts","sourceRoot":"","sources":["../src/ai-sdk-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-sdk-generator.d.ts","sourceRoot":"","sources":["../src/ai-sdk-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAyF9D,wBAAsB,iBAAiB,CAAC,OAAO,EAC7C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,2BAA2B,CAAC,OAAO,CAAC,GAC5C,OAAO,CAAC,OAAO,CAAC,CAoClB"}
|
package/dist/bin.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
extractProject,
|
|
4
4
|
generateProject
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-55TGASZJ.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
8
8
|
import pc2 from "picocolors";
|
|
@@ -70,7 +70,7 @@ ${pc.magenta("\u25C6")} locale: ${pc.bold(localeMatch[1])}`);
|
|
|
70
70
|
spinner.stopAndPersist({ symbol: "\u25CC", text: pc.dim(message) });
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
if (message.startsWith("Using AI Gateway model:") || message.startsWith("Using
|
|
73
|
+
if (message.startsWith("Using AI Gateway model:") || message.startsWith("Using configured provider model:") || message.startsWith("Source locale:") || message.startsWith("Target locales:")) {
|
|
74
74
|
spinner.stop();
|
|
75
75
|
console.log(pc.dim(message));
|
|
76
76
|
return;
|
|
@@ -179,33 +179,32 @@ function toJavaScriptIdentifier(value) {
|
|
|
179
179
|
|
|
180
180
|
// src/config-loader.ts
|
|
181
181
|
var DEFAULT_CONFIG_FILE = "better-translate.config.ts";
|
|
182
|
-
function
|
|
182
|
+
function resolveCliLanguageModel(model) {
|
|
183
183
|
assert(
|
|
184
184
|
isRecord(model),
|
|
185
|
-
|
|
185
|
+
"Config requires model to be a non-empty string or an AI SDK language model instance."
|
|
186
186
|
);
|
|
187
187
|
assert(
|
|
188
|
-
model.
|
|
189
|
-
|
|
188
|
+
model.specificationVersion === "v3",
|
|
189
|
+
"Config requires model to be a non-empty string or an AI SDK language model instance."
|
|
190
190
|
);
|
|
191
191
|
assert(
|
|
192
|
-
model.provider === "
|
|
193
|
-
|
|
192
|
+
typeof model.provider === "string" && model.provider.trim().length > 0,
|
|
193
|
+
"AI SDK language model instances require a non-empty provider string."
|
|
194
194
|
);
|
|
195
195
|
assert(
|
|
196
196
|
typeof model.modelId === "string" && model.modelId.trim().length > 0,
|
|
197
|
-
|
|
197
|
+
"AI SDK language model instances require a non-empty modelId string."
|
|
198
198
|
);
|
|
199
199
|
assert(
|
|
200
|
-
typeof model.
|
|
201
|
-
|
|
200
|
+
typeof model.doGenerate === "function",
|
|
201
|
+
"AI SDK language model instances must provide a doGenerate function."
|
|
202
202
|
);
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
};
|
|
203
|
+
assert(
|
|
204
|
+
typeof model.doStream === "function",
|
|
205
|
+
"AI SDK language model instances must provide a doStream function."
|
|
206
|
+
);
|
|
207
|
+
return model;
|
|
209
208
|
}
|
|
210
209
|
function resolveConfig(rawConfig, configDirectory) {
|
|
211
210
|
assert(
|
|
@@ -271,7 +270,7 @@ function resolveConfig(rawConfig, configDirectory) {
|
|
|
271
270
|
if (typeof model === "string") {
|
|
272
271
|
assert(
|
|
273
272
|
model.trim().length > 0,
|
|
274
|
-
'Config requires a non-empty model string, for example "
|
|
273
|
+
'Config requires a non-empty model string, for example "provider/model-id".'
|
|
275
274
|
);
|
|
276
275
|
assert(
|
|
277
276
|
isRecord(gateway),
|
|
@@ -291,9 +290,9 @@ function resolveConfig(rawConfig, configDirectory) {
|
|
|
291
290
|
}
|
|
292
291
|
assert(
|
|
293
292
|
gateway === void 0,
|
|
294
|
-
"Config must not include gateway when model is
|
|
293
|
+
"Config must not include gateway when model is an AI SDK language model instance."
|
|
295
294
|
);
|
|
296
|
-
const resolvedModel =
|
|
295
|
+
const resolvedModel = resolveCliLanguageModel(model);
|
|
297
296
|
return {
|
|
298
297
|
...resolvedBase,
|
|
299
298
|
model: resolvedModel
|
|
@@ -1174,7 +1173,7 @@ function prepareGatewayEnvironment(apiKey) {
|
|
|
1174
1173
|
process.env.AI_GATEWAY_API_KEY = apiKey;
|
|
1175
1174
|
}
|
|
1176
1175
|
async function createDefaultGenerator(model) {
|
|
1177
|
-
const { generateWithAiSdk } = await import("./ai-sdk-generator-
|
|
1176
|
+
const { generateWithAiSdk } = await import("./ai-sdk-generator-F2X3W7NC.js");
|
|
1178
1177
|
return async (request) => generateWithAiSdk(model, request);
|
|
1179
1178
|
}
|
|
1180
1179
|
async function resolveRuntimeModel(config) {
|
|
@@ -1185,13 +1184,9 @@ async function resolveRuntimeModel(config) {
|
|
|
1185
1184
|
model: config.model
|
|
1186
1185
|
};
|
|
1187
1186
|
}
|
|
1188
|
-
const { createOpenAI } = await import("@ai-sdk/openai");
|
|
1189
|
-
const provider = createOpenAI({
|
|
1190
|
-
apiKey: config.model.apiKey
|
|
1191
|
-
});
|
|
1192
1187
|
return {
|
|
1193
|
-
description: `Using
|
|
1194
|
-
model:
|
|
1188
|
+
description: `Using configured provider model: ${config.model.provider}/${config.model.modelId}`,
|
|
1189
|
+
model: config.model
|
|
1195
1190
|
};
|
|
1196
1191
|
}
|
|
1197
1192
|
function validateMarkdownTranslation(frontmatterStrings, value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,8BAA8B,EAE/B,MAAM,YAAY,CAAC;AAsJpB,wBAAsB,aAAa,CACjC,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACT,GACL,OAAO,CAAC,8BAA8B,CAAC,CAyBzC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { defineConfig } from "./define-config.js";
|
|
2
|
-
export {
|
|
3
|
-
export type { BetterTranslateCliConfig, MarkdownExtension, OpenAIProviderModelSpec, } from "./types.js";
|
|
2
|
+
export type { BetterTranslateCliConfig, BetterTranslateCliDirectModelConfig, CliLanguageModel, MarkdownExtension, } from "./types.js";
|
|
4
3
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,YAAY,EACV,wBAAwB,EACxB,mCAAmC,EACnC,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
package/dist/config.js
CHANGED
package/dist/generate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAGV,sBAAsB,EACtB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAGV,sBAAsB,EACtB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AA2GpB,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA6KhC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,5 @@ export { loadCliConfig } from "./config-loader.js";
|
|
|
2
2
|
export { defineConfig } from "./define-config.js";
|
|
3
3
|
export { extractProject } from "./extract.js";
|
|
4
4
|
export { generateProject } from "./generate.js";
|
|
5
|
-
export {
|
|
6
|
-
export type { BetterTranslateCliConfig, BetterTranslateCliGatewayConfig, BetterTranslateCliOpenAIConfig, CliLogger, ExtractProjectOptions, ExtractProjectResult, CliWriteOperation, GenerateProjectOptions, GenerateProjectResult, LoadedBetterTranslateCliConfig, MarkdownExtension, OpenAIProviderModelSpec, ResolvedBetterTranslateCliConfig, ResolvedBetterTranslateCliGatewayConfig, ResolvedBetterTranslateCliOpenAIConfig, StructuredGenerationRequest, StructuredGenerator, } from "./types.js";
|
|
5
|
+
export type { BetterTranslateCliConfig, BetterTranslateCliDirectModelConfig, BetterTranslateCliGatewayConfig, CliLanguageModel, CliLogger, ExtractProjectOptions, ExtractProjectResult, CliWriteOperation, GenerateProjectOptions, GenerateProjectResult, LoadedBetterTranslateCliConfig, MarkdownExtension, ResolvedBetterTranslateCliConfig, ResolvedBetterTranslateCliDirectModelConfig, ResolvedBetterTranslateCliGatewayConfig, StructuredGenerationRequest, StructuredGenerator, } from "./types.js";
|
|
7
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,YAAY,EACV,wBAAwB,EACxB,mCAAmC,EACnC,+BAA+B,EAC/B,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,iBAAiB,EACjB,gCAAgC,EAChC,2CAA2C,EAC3C,uCAAuC,EACvC,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,15 +2,13 @@ import {
|
|
|
2
2
|
extractProject,
|
|
3
3
|
generateProject,
|
|
4
4
|
loadCliConfig
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-55TGASZJ.js";
|
|
6
6
|
import {
|
|
7
|
-
defineConfig
|
|
8
|
-
|
|
9
|
-
} from "./chunk-WMIZO3GE.js";
|
|
7
|
+
defineConfig
|
|
8
|
+
} from "./chunk-VYOBAIBH.js";
|
|
10
9
|
export {
|
|
11
10
|
defineConfig,
|
|
12
11
|
extractProject,
|
|
13
12
|
generateProject,
|
|
14
|
-
loadCliConfig
|
|
15
|
-
openai
|
|
13
|
+
loadCliConfig
|
|
16
14
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { LanguageModelV3 } from "@ai-sdk/provider";
|
|
1
2
|
export type MarkdownExtension = ".md" | ".mdx";
|
|
3
|
+
export type CliLanguageModel = LanguageModelV3;
|
|
2
4
|
interface BetterTranslateCliConfigBase {
|
|
3
5
|
locales: string[];
|
|
4
6
|
markdown?: {
|
|
@@ -10,23 +12,17 @@ interface BetterTranslateCliConfigBase {
|
|
|
10
12
|
};
|
|
11
13
|
sourceLocale: string;
|
|
12
14
|
}
|
|
13
|
-
export interface OpenAIProviderModelSpec {
|
|
14
|
-
apiKey: string;
|
|
15
|
-
kind: "provider-model";
|
|
16
|
-
modelId: string;
|
|
17
|
-
provider: "openai";
|
|
18
|
-
}
|
|
19
15
|
export interface BetterTranslateCliGatewayConfig extends BetterTranslateCliConfigBase {
|
|
20
16
|
gateway: {
|
|
21
17
|
apiKey: string;
|
|
22
18
|
};
|
|
23
19
|
model: string;
|
|
24
20
|
}
|
|
25
|
-
export interface
|
|
21
|
+
export interface BetterTranslateCliDirectModelConfig extends BetterTranslateCliConfigBase {
|
|
26
22
|
gateway?: never;
|
|
27
|
-
model:
|
|
23
|
+
model: CliLanguageModel;
|
|
28
24
|
}
|
|
29
|
-
export type BetterTranslateCliConfig = BetterTranslateCliGatewayConfig |
|
|
25
|
+
export type BetterTranslateCliConfig = BetterTranslateCliGatewayConfig | BetterTranslateCliDirectModelConfig;
|
|
30
26
|
interface ResolvedBetterTranslateCliConfigBase {
|
|
31
27
|
locales: readonly string[];
|
|
32
28
|
markdown?: {
|
|
@@ -44,10 +40,10 @@ export interface ResolvedBetterTranslateCliGatewayConfig extends ResolvedBetterT
|
|
|
44
40
|
};
|
|
45
41
|
model: string;
|
|
46
42
|
}
|
|
47
|
-
export interface
|
|
48
|
-
model:
|
|
43
|
+
export interface ResolvedBetterTranslateCliDirectModelConfig extends ResolvedBetterTranslateCliConfigBase {
|
|
44
|
+
model: CliLanguageModel;
|
|
49
45
|
}
|
|
50
|
-
export type ResolvedBetterTranslateCliConfig = ResolvedBetterTranslateCliGatewayConfig |
|
|
46
|
+
export type ResolvedBetterTranslateCliConfig = ResolvedBetterTranslateCliGatewayConfig | ResolvedBetterTranslateCliDirectModelConfig;
|
|
51
47
|
export interface LoadedBetterTranslateCliConfig {
|
|
52
48
|
config: ResolvedBetterTranslateCliConfig;
|
|
53
49
|
directory: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,CAAC;AAE/C,UAAU,4BAA4B;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;QAC1C,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-translate/cli",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "AI-powered translation generation CLI for Better Translate.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"url": "https://github.com/jralvarenga/better-translate/issues"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@ai-sdk/
|
|
49
|
-
"ai": "^6.0.116",
|
|
48
|
+
"@ai-sdk/provider": "^3.0.8",
|
|
50
49
|
"@better-translate/core": "^2.0.0",
|
|
50
|
+
"ai": "^6.0.116",
|
|
51
51
|
"dotenv": "^17.2.3",
|
|
52
52
|
"gray-matter": "^4.0.3",
|
|
53
53
|
"ora": "^8.2.0",
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// src/ai-sdk-generator.ts
|
|
2
|
-
async function generateWithAiSdk(model, request) {
|
|
3
|
-
const { Output, generateText, jsonSchema } = await import("ai");
|
|
4
|
-
const result = await generateText({
|
|
5
|
-
experimental_output: Output.object({
|
|
6
|
-
schema: jsonSchema(request.schema, {
|
|
7
|
-
validate(value) {
|
|
8
|
-
if (!request.validate) {
|
|
9
|
-
return {
|
|
10
|
-
success: true,
|
|
11
|
-
value
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
try {
|
|
15
|
-
return {
|
|
16
|
-
success: true,
|
|
17
|
-
value: request.validate(value)
|
|
18
|
-
};
|
|
19
|
-
} catch (error) {
|
|
20
|
-
return {
|
|
21
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
22
|
-
success: false
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
})
|
|
27
|
-
}),
|
|
28
|
-
model,
|
|
29
|
-
prompt: request.prompt,
|
|
30
|
-
system: request.system,
|
|
31
|
-
temperature: 0
|
|
32
|
-
});
|
|
33
|
-
return result.experimental_output;
|
|
34
|
-
}
|
|
35
|
-
export {
|
|
36
|
-
generateWithAiSdk
|
|
37
|
-
};
|
package/dist/chunk-WMIZO3GE.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
// src/define-config.ts
|
|
2
|
-
function defineConfig(config) {
|
|
3
|
-
return config;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
// src/provider-models.ts
|
|
7
|
-
function openai(modelId, options) {
|
|
8
|
-
return {
|
|
9
|
-
apiKey: options.apiKey,
|
|
10
|
-
kind: "provider-model",
|
|
11
|
-
modelId,
|
|
12
|
-
provider: "openai"
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export {
|
|
17
|
-
defineConfig,
|
|
18
|
-
openai
|
|
19
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-models.d.ts","sourceRoot":"","sources":["../src/provider-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,wBAAgB,MAAM,CACpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;CAChB,GACA,uBAAuB,CAOzB"}
|