@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 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;AAE9D,wBAAsB,iBAAiB,CAAC,OAAO,EAC7C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,2BAA2B,CAAC,OAAO,CAAC,GAC5C,OAAO,CAAC,OAAO,CAAC,CAkClB"}
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-NRZIFUEW.js";
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 built-in OpenAI provider model:") || message.startsWith("Source locale:") || message.startsWith("Target locales:")) {
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 resolveProviderModelSpec(model) {
182
+ function resolveCliLanguageModel(model) {
183
183
  assert(
184
184
  isRecord(model),
185
- 'Config requires model to be a non-empty string or openai("model-id", { apiKey }).'
185
+ "Config requires model to be a non-empty string or an AI SDK language model instance."
186
186
  );
187
187
  assert(
188
- model.kind === "provider-model",
189
- 'Config requires model to be a non-empty string or openai("model-id", { apiKey }).'
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 === "openai",
193
- 'Only openai("model-id", { apiKey }) is supported for built-in provider mode right now.'
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
- 'openai("model-id", { apiKey }) requires a non-empty model id.'
197
+ "AI SDK language model instances require a non-empty modelId string."
198
198
  );
199
199
  assert(
200
- typeof model.apiKey === "string" && model.apiKey.trim().length > 0,
201
- 'openai("model-id", { apiKey }) requires a non-empty apiKey string.'
200
+ typeof model.doGenerate === "function",
201
+ "AI SDK language model instances must provide a doGenerate function."
202
202
  );
203
- return {
204
- apiKey: model.apiKey.trim(),
205
- kind: "provider-model",
206
- modelId: model.modelId.trim(),
207
- provider: "openai"
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 "openai/gpt-4.1".'
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 created with openai(...)."
293
+ "Config must not include gateway when model is an AI SDK language model instance."
295
294
  );
296
- const resolvedModel = resolveProviderModelSpec(model);
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-WPQCTPGA.js");
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 built-in OpenAI provider model: ${config.model.modelId}`,
1194
- model: provider(config.model.modelId)
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) {
@@ -0,0 +1,8 @@
1
+ // src/define-config.ts
2
+ function defineConfig(config) {
3
+ return config;
4
+ }
5
+
6
+ export {
7
+ defineConfig
8
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,8BAA8B,EAG/B,MAAM,YAAY,CAAC;AAuJpB,wBAAsB,aAAa,CACjC,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACT,GACL,OAAO,CAAC,8BAA8B,CAAC,CAyBzC"}
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 { openai } from "./provider-models.js";
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,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
@@ -1,8 +1,6 @@
1
1
  import {
2
- defineConfig,
3
- openai
4
- } from "./chunk-WMIZO3GE.js";
2
+ defineConfig
3
+ } from "./chunk-VYOBAIBH.js";
5
4
  export {
6
- defineConfig,
7
- openai
5
+ defineConfig
8
6
  };
@@ -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;AAgHpB,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA6KhC"}
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 { openai } from "./provider-models.js";
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
@@ -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;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,YAAY,EACV,wBAAwB,EACxB,+BAA+B,EAC/B,8BAA8B,EAC9B,SAAS,EACT,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,iBAAiB,EACjB,uBAAuB,EACvB,gCAAgC,EAChC,uCAAuC,EACvC,sCAAsC,EACtC,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,YAAY,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-NRZIFUEW.js";
5
+ } from "./chunk-55TGASZJ.js";
6
6
  import {
7
- defineConfig,
8
- openai
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 BetterTranslateCliOpenAIConfig extends BetterTranslateCliConfigBase {
21
+ export interface BetterTranslateCliDirectModelConfig extends BetterTranslateCliConfigBase {
26
22
  gateway?: never;
27
- model: OpenAIProviderModelSpec;
23
+ model: CliLanguageModel;
28
24
  }
29
- export type BetterTranslateCliConfig = BetterTranslateCliGatewayConfig | BetterTranslateCliOpenAIConfig;
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 ResolvedBetterTranslateCliOpenAIConfig extends ResolvedBetterTranslateCliConfigBase {
48
- model: OpenAIProviderModelSpec;
43
+ export interface ResolvedBetterTranslateCliDirectModelConfig extends ResolvedBetterTranslateCliConfigBase {
44
+ model: CliLanguageModel;
49
45
  }
50
- export type ResolvedBetterTranslateCliConfig = ResolvedBetterTranslateCliGatewayConfig | ResolvedBetterTranslateCliOpenAIConfig;
46
+ export type ResolvedBetterTranslateCliConfig = ResolvedBetterTranslateCliGatewayConfig | ResolvedBetterTranslateCliDirectModelConfig;
51
47
  export interface LoadedBetterTranslateCliConfig {
52
48
  config: ResolvedBetterTranslateCliConfig;
53
49
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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.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/openai": "^3.0.41",
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
- };
@@ -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,5 +0,0 @@
1
- import type { OpenAIProviderModelSpec } from "./types.js";
2
- export declare function openai(modelId: string, options: {
3
- apiKey: string;
4
- }): OpenAIProviderModelSpec;
5
- //# sourceMappingURL=provider-models.d.ts.map
@@ -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"}