@gringow/gringow 0.1.3 → 0.2.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 (49) hide show
  1. package/README.md +279 -43
  2. package/dist/config.d.mts +7 -8
  3. package/dist/config.mjs +32 -20
  4. package/dist/config.test.mjs +39 -25
  5. package/dist/constants/default-config.mjs +4 -3
  6. package/dist/data/check-cache.mjs +33 -63
  7. package/dist/data/clear-cache.mjs +32 -20
  8. package/dist/data/create-cache-dir.mjs +32 -20
  9. package/dist/data/delete-cache-item.mjs +32 -20
  10. package/dist/data/get-cache.mjs +32 -20
  11. package/dist/data/get-or-create-cache.mjs +32 -20
  12. package/dist/data/save-cache.mjs +32 -20
  13. package/dist/data/write-cache-to-disk.mjs +32 -20
  14. package/dist/gringow.mjs +84 -491
  15. package/dist/index.mjs +84 -491
  16. package/dist/io/ask-llm.d.mts +3 -1
  17. package/dist/io/ask-llm.mjs +77 -449
  18. package/dist/schemas/config.shcema.d.mts +40 -47
  19. package/dist/schemas/config.shcema.mjs +26 -15
  20. package/dist/types/index.d.mts +3 -25
  21. package/gringow.config.js.example +2 -4
  22. package/gringow.config.json.example +4 -2
  23. package/package.json +2 -5
  24. package/dist/io/anthropic/ask.d.mts +0 -11
  25. package/dist/io/anthropic/ask.mjs +0 -190
  26. package/dist/io/anthropic/commit-response.d.mts +0 -21
  27. package/dist/io/anthropic/commit-response.mjs +0 -10
  28. package/dist/io/anthropic/index.d.mts +0 -14
  29. package/dist/io/anthropic/index.mjs +0 -208
  30. package/dist/io/anthropic/parse.d.mts +0 -20
  31. package/dist/io/anthropic/parse.mjs +0 -10
  32. package/dist/io/gemini/ask.d.mts +0 -11
  33. package/dist/io/gemini/ask.mjs +0 -232
  34. package/dist/io/gemini/commit-response.d.mts +0 -11
  35. package/dist/io/gemini/commit-response.mjs +0 -7
  36. package/dist/io/gemini/index.d.mts +0 -14
  37. package/dist/io/gemini/index.mjs +0 -248
  38. package/dist/io/gemini/parse.d.mts +0 -20
  39. package/dist/io/gemini/parse.mjs +0 -11
  40. package/dist/io/huggingface/ask.d.mts +0 -13
  41. package/dist/io/huggingface/ask.mjs +0 -405
  42. package/dist/io/huggingface/commit-response.d.mts +0 -39
  43. package/dist/io/huggingface/commit-response.mjs +0 -14
  44. package/dist/io/huggingface/index.d.mts +0 -13
  45. package/dist/io/huggingface/index.mjs +0 -426
  46. package/dist/io/huggingface/languages-map.d.mts +0 -191
  47. package/dist/io/huggingface/languages-map.mjs +0 -187
  48. package/dist/io/huggingface/parse.d.mts +0 -20
  49. package/dist/io/huggingface/parse.mjs +0 -9
@@ -19,19 +19,34 @@ var defaultConfig = {
19
19
  prefix: "grw",
20
20
  write: true
21
21
  },
22
- keys: {},
23
22
  sourceLanguage: "en-US",
23
+ defaultLanguage: "pt-BR",
24
24
  languages: ["pt-BR", "fr-CA"],
25
25
  llm: {
26
- choice: "huggingface",
27
- model: "Xenova/nllb-200-distilled-600M",
26
+ provider: "openai",
27
+ apiKey: void 0,
28
+ model: "gpt-4o-mini",
28
29
  temperature: 1,
29
30
  sleep: 0
30
31
  },
31
32
  globby: "./src/**/*.{js,jsx,ts,tsx}"
32
33
  };
33
34
  var languageSchema = z.string().regex(/^[a-z]{2,3}(-[A-Z]{2})?$/);
34
- var llmOptionsSchema = z.enum(["gemini", "anthropic", "huggingface"]);
35
+ var llmProviderSchema = z.enum([
36
+ "anthropic",
37
+ "gemini",
38
+ "openai",
39
+ "groq",
40
+ "mistral",
41
+ "ollama",
42
+ "xai",
43
+ "deepseek",
44
+ "openrouter",
45
+ "cerebras",
46
+ "lmstudio",
47
+ "azure",
48
+ "meta"
49
+ ]);
35
50
  var configSchema = z.object({
36
51
  debug: z.boolean().optional(),
37
52
  log: z.object({
@@ -43,14 +58,13 @@ var configSchema = z.object({
43
58
  prefix: z.string(),
44
59
  write: z.boolean().optional()
45
60
  }),
46
- keys: z.object({
47
- anthropicApiKey: z.string().optional(),
48
- geminiApiKey: z.string().optional()
49
- }),
50
61
  sourceLanguage: languageSchema,
62
+ defaultLanguage: languageSchema,
51
63
  languages: z.array(languageSchema),
52
64
  llm: z.object({
53
- choice: llmOptionsSchema,
65
+ provider: llmProviderSchema,
66
+ apiKey: z.string().optional(),
67
+ baseURL: z.string().optional(),
54
68
  model: z.string().nullable(),
55
69
  temperature: z.number().optional(),
56
70
  sleep: z.number().optional(),
@@ -64,17 +78,15 @@ var configSchema = z.object({
64
78
  globby: z.string().regex(/^\.\/.*/).optional()
65
79
  }).refine(
66
80
  (data) => {
67
- if (data.llm.choice === "gemini" && !data.keys.geminiApiKey) {
68
- return false;
69
- }
70
- if (data.llm.choice === "anthropic" && !data.keys.anthropicApiKey) {
71
- return false;
81
+ const noApiKeyRequired = ["ollama", "lmstudio"];
82
+ if (noApiKeyRequired.includes(data.llm.provider)) {
83
+ return true;
72
84
  }
73
- return true;
85
+ return !!data.llm.apiKey;
74
86
  },
75
87
  {
76
- message: "The API key corresponding to the chosen LLM must be present.",
77
- path: ["keys"]
88
+ message: "The API key must be present in llm.apiKey for the chosen provider.",
89
+ path: ["llm", "apiKey"]
78
90
  }
79
91
  );
80
92
 
@@ -110,7 +122,7 @@ Your task is to translate a given text and output **only one valid JSON object**
110
122
 
111
123
  Follow these rules strictly:
112
124
 
113
- 1. The original text is written in English.
125
+ 1. The original text is written in English or Spanish.
114
126
  2. You will receive additional user parameters under the variable 'extraInstructions'. These may specify tone, persona, style, context, or any relevant translation guideline.
115
127
  - Examples: \u201Ctranslate as if you were a Shakespearean narrator\u201D or \u201Cuse a formal business tone suitable for a corporate presentation.\u201D
116
128
  - Apply these creatively but **without altering the meaning or punctuation** of the original text.
@@ -143,10 +155,10 @@ Translate the following text faithfully:
143
155
  function defaultPostPrompt(_config) {
144
156
  return "";
145
157
  }
146
- function prePrompt(config, append, replace) {
158
+ function prePrompt(config, prepend, replace) {
147
159
  return [
148
160
  // ...(append ? ['[SPECIFIC_INPUTS]', String(append), '[/SPECIFIC_INPUTS]'] : []),
149
- replace ? String(replace) : defaultPrePrompt(config, append)
161
+ replace ? String(replace) : defaultPrePrompt(config, prepend)
150
162
  ].join(" ").trim();
151
163
  }
152
164
  function postPrompt(config, prepend, replace) {
@@ -19,19 +19,34 @@ var defaultConfig = {
19
19
  prefix: "grw",
20
20
  write: true
21
21
  },
22
- keys: {},
23
22
  sourceLanguage: "en-US",
23
+ defaultLanguage: "pt-BR",
24
24
  languages: ["pt-BR", "fr-CA"],
25
25
  llm: {
26
- choice: "huggingface",
27
- model: "Xenova/nllb-200-distilled-600M",
26
+ provider: "openai",
27
+ apiKey: void 0,
28
+ model: "gpt-4o-mini",
28
29
  temperature: 1,
29
30
  sleep: 0
30
31
  },
31
32
  globby: "./src/**/*.{js,jsx,ts,tsx}"
32
33
  };
33
34
  var languageSchema = z.string().regex(/^[a-z]{2,3}(-[A-Z]{2})?$/);
34
- var llmOptionsSchema = z.enum(["gemini", "anthropic", "huggingface"]);
35
+ var llmProviderSchema = z.enum([
36
+ "anthropic",
37
+ "gemini",
38
+ "openai",
39
+ "groq",
40
+ "mistral",
41
+ "ollama",
42
+ "xai",
43
+ "deepseek",
44
+ "openrouter",
45
+ "cerebras",
46
+ "lmstudio",
47
+ "azure",
48
+ "meta"
49
+ ]);
35
50
  var configSchema = z.object({
36
51
  debug: z.boolean().optional(),
37
52
  log: z.object({
@@ -43,14 +58,13 @@ var configSchema = z.object({
43
58
  prefix: z.string(),
44
59
  write: z.boolean().optional()
45
60
  }),
46
- keys: z.object({
47
- anthropicApiKey: z.string().optional(),
48
- geminiApiKey: z.string().optional()
49
- }),
50
61
  sourceLanguage: languageSchema,
62
+ defaultLanguage: languageSchema,
51
63
  languages: z.array(languageSchema),
52
64
  llm: z.object({
53
- choice: llmOptionsSchema,
65
+ provider: llmProviderSchema,
66
+ apiKey: z.string().optional(),
67
+ baseURL: z.string().optional(),
54
68
  model: z.string().nullable(),
55
69
  temperature: z.number().optional(),
56
70
  sleep: z.number().optional(),
@@ -64,17 +78,15 @@ var configSchema = z.object({
64
78
  globby: z.string().regex(/^\.\/.*/).optional()
65
79
  }).refine(
66
80
  (data) => {
67
- if (data.llm.choice === "gemini" && !data.keys.geminiApiKey) {
68
- return false;
69
- }
70
- if (data.llm.choice === "anthropic" && !data.keys.anthropicApiKey) {
71
- return false;
81
+ const noApiKeyRequired = ["ollama", "lmstudio"];
82
+ if (noApiKeyRequired.includes(data.llm.provider)) {
83
+ return true;
72
84
  }
73
- return true;
85
+ return !!data.llm.apiKey;
74
86
  },
75
87
  {
76
- message: "The API key corresponding to the chosen LLM must be present.",
77
- path: ["keys"]
88
+ message: "The API key must be present in llm.apiKey for the chosen provider.",
89
+ path: ["llm", "apiKey"]
78
90
  }
79
91
  );
80
92
 
@@ -110,7 +122,7 @@ Your task is to translate a given text and output **only one valid JSON object**
110
122
 
111
123
  Follow these rules strictly:
112
124
 
113
- 1. The original text is written in English.
125
+ 1. The original text is written in English or Spanish.
114
126
  2. You will receive additional user parameters under the variable 'extraInstructions'. These may specify tone, persona, style, context, or any relevant translation guideline.
115
127
  - Examples: \u201Ctranslate as if you were a Shakespearean narrator\u201D or \u201Cuse a formal business tone suitable for a corporate presentation.\u201D
116
128
  - Apply these creatively but **without altering the meaning or punctuation** of the original text.
@@ -143,10 +155,10 @@ Translate the following text faithfully:
143
155
  function defaultPostPrompt(_config) {
144
156
  return "";
145
157
  }
146
- function prePrompt(config, append, replace) {
158
+ function prePrompt(config, prepend, replace) {
147
159
  return [
148
160
  // ...(append ? ['[SPECIFIC_INPUTS]', String(append), '[/SPECIFIC_INPUTS]'] : []),
149
- replace ? String(replace) : defaultPrePrompt(config, append)
161
+ replace ? String(replace) : defaultPrePrompt(config, prepend)
150
162
  ].join(" ").trim();
151
163
  }
152
164
  function postPrompt(config, prepend, replace) {