generaltranslation 1.1.22 → 1.1.24

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
@@ -18,7 +18,6 @@ npm i generaltranslation
18
18
 
19
19
  ```
20
20
  import GT from 'generaltranslation'
21
- // or const GT = require('generaltranslation')
22
21
 
23
22
  const gt = new GT()
24
23
  ```
@@ -102,23 +101,23 @@ const gt = new GT({
102
101
  });
103
102
  ```
104
103
 
105
- ### async getPrompt(prompt, language)
104
+ ### async translatePrompt(prompt, language)
106
105
 
107
106
  Translates prompt into the language represented by an ISO-639 language code. Designed for translating prompts into other languages, to internationalize responses from AI models.
108
107
 
109
- Just wrap `getPrompt` around your prompt and go.
108
+ Just wrap `translatePrompt` around your prompt and go.
110
109
 
111
110
  All of the following are valid:
112
111
 
113
112
  ```
114
- const translatedPrompt = await gt.getPrompt('Tell me a story', 'es');
113
+ const translatedPrompt = await gt.translatePrompt('Tell me a story', 'es');
115
114
  ```
116
115
 
117
116
  ```
118
117
  const first = 'Tell me a story ';
119
118
  const second = 'about a cat'
120
119
 
121
- const translatedPrompt = await gt.getPrompt([
120
+ const translatedPrompt = await gt.translatePrompt([
122
121
  first, second
123
122
  ], 'es');
124
123
  ```
@@ -129,7 +128,7 @@ To mark text that shouldn't be translated, wrap it in `{ text: "", translate: fa
129
128
  const prompt = 'Tell me a story about ';
130
129
  const input = 'gatos con espadas'
131
130
 
132
- const translatedPrompt = await gt.getPrompt([
131
+ const translatedPrompt = await gt.translatePrompt([
133
132
  prompt, { text: input, translate: false }
134
133
  ], 'es');
135
134
  ```
@@ -140,7 +139,7 @@ For type consistency, you can also make everything in the prompt parameter an ob
140
139
  const prompt = 'Tell me a story about ';
141
140
  const input = 'gatos con espadas'
142
141
 
143
- const translatedPrompt = await gt.getPrompt([
142
+ const translatedPrompt = await gt.translatePrompt([
144
143
  { text: prompt },
145
144
  { text: input, translate: false }
146
145
  ], 'es');
@@ -149,5 +148,5 @@ const translatedPrompt = await gt.getPrompt([
149
148
  This also works:
150
149
 
151
150
  ```
152
- const translatedPrompt = await gt.getPrompt({ text: 'Tell me a story' }, 'es');
151
+ const translatedPrompt = await gt.translatePrompt({ text: 'Tell me a story' }, 'es');
153
152
  ```
@@ -0,0 +1,14 @@
1
+ // Returns a user's default browser language
2
+ // e.g. 'en-US', not necessarily 'en'
3
+ // generaltranslation handles this well, but other libraries may not
4
+ // (it's a skill issue I'm afraid)
5
+ export default function _getUserLanguage(defaultLanguage = '') {
6
+ if (typeof window !== 'undefined' && window?.navigator) {
7
+ return navigator?.language || navigator?.userLanguage || defaultLanguage || '';
8
+ } else if (defaultLanguage) {
9
+ return defaultLanguage;
10
+ } else {
11
+ console.error("getUserLanguage error. It's likely you've called getUserLanguage() on the server. This is inadvisable and without a default language will return an empty string.")
12
+ return ''
13
+ }
14
+ }
@@ -1,4 +1,4 @@
1
- {
1
+ const CodeToLanguage = {
2
2
  "ab": "Abkhazian",
3
3
  "aa": "Afar",
4
4
  "af": "Afrikaans",
@@ -182,4 +182,5 @@
182
182
  "yo": "Yoruba",
183
183
  "za": "Zhuang",
184
184
  "zu": "Zulu"
185
- }
185
+ }
186
+ export default CodeToLanguage;
@@ -1,4 +1,4 @@
1
- {
1
+ const LanguageToCode = {
2
2
  "abkhazian": "ab",
3
3
  "afar": "aa",
4
4
  "afrikaans": "af",
@@ -224,4 +224,5 @@
224
224
  "zhuang": "za",
225
225
  "chuang": "za",
226
226
  "zulu": "zu"
227
- }
227
+ }
228
+ export default LanguageToCode;
@@ -1,4 +1,4 @@
1
- {
1
+ const CodeToLanguageTriletter = {
2
2
  "abk": "Abkhazian",
3
3
  "aar": "Afar",
4
4
  "afr": "Afrikaans",
@@ -184,3 +184,4 @@
184
184
  "zha": "Zhuang",
185
185
  "zul": "Zulu"
186
186
  }
187
+ export default CodeToLanguageTriletter;
@@ -1,4 +1,4 @@
1
- {
1
+ const LanguageToCodeTriletter = {
2
2
  "abkhazian": "abk",
3
3
  "afar": "aar",
4
4
  "afrikaans": "afr",
@@ -225,4 +225,5 @@
225
225
  "zhuang": "zha",
226
226
  "chuang": "zha",
227
227
  "zulu": "zul"
228
- }
228
+ }
229
+ export default LanguageToCodeTriletter;
package/codes/codes.js CHANGED
@@ -1,17 +1,27 @@
1
1
  // ----- IMPORTS ----- //
2
2
 
3
- const CodeToLanguage = require('./639-1/CodeToLanguage.json');
4
- const LanguageToCode = require('./639-1/LanguageToCode.json');
3
+ import CodeToLanguage from './639-1/CodeToLanguage.js'
4
+ import LanguageToCode from './639-1/LanguageToCode.js'
5
5
 
6
6
  // only for languages which have no two-letter code
7
- const CodeToLanguageTriletter = require('./639-3/CodeToLanguageTriletter.json');
8
- const LanguageToCodeTriletter = require('./639-3/LanguageToCodeTriletter.json');
7
+ import CodeToLanguageTriletter from './639-3/CodeToLanguageTriletter.js'
8
+ import LanguageToCodeTriletter from './639-3/LanguageToCodeTriletter.js'
9
9
 
10
10
  // ----- LANGUAGE CODES ----- //
11
11
 
12
12
  // Returns the name of a language from an ISO 639 code or an array of codes
13
- const _mapCodeToLanguage = code => CodeToLanguage[code] || CodeToLanguageTriletter[code] || '';
14
- const _getLanguageName = codes => {
13
+ const _mapCodeToLanguage = code => {
14
+ if (code.length === 2) {
15
+ return CodeToLanguage[code]
16
+ }
17
+ if (code.length === 3) {
18
+ CodeToLanguageTriletter[code]
19
+ }
20
+ else {
21
+ return CodeToLanguage[code.slice(0, 2)] || '';
22
+ }
23
+ }
24
+ export const _getLanguageName = codes => {
15
25
  return Array.isArray(codes) ? codes.map(_mapCodeToLanguage) : _mapCodeToLanguage(codes);
16
26
  }
17
27
 
@@ -21,10 +31,6 @@ const _mapLanguageToCode = language => {
21
31
  const lowerCaseLanguage = language.toLowerCase();
22
32
  return LanguageToCode[lowerCaseLanguage] || LanguageToCodeTriletter[lowerCaseLanguage] || '';
23
33
  }
24
- const _getLanguageCode = languages => {
34
+ export const _getLanguageCode = languages => {
25
35
  return Array.isArray(languages) ? languages.map(_mapLanguageToCode) : _mapLanguageToCode(languages);
26
- }
27
-
28
- module.exports = {
29
- _getLanguageName, _getLanguageCode
30
36
  }
package/index.js CHANGED
@@ -3,13 +3,14 @@
3
3
 
4
4
  // ----- IMPORTS ----- //
5
5
 
6
- const { _getLanguageName, _getLanguageCode } = require('./codes/codes.js');
7
- const { _getModelList, _getModelInfo, _getAllModelInfo, _getModelLanguages, _isLanguageSupported, _getModelsByDeveloper, _getModelsByLanguage, } = require('./models/models.js');
8
- const { _translatePrompt } = require('./prompts/translate.js');
6
+ import _getUserLanguage from "./client/getUserLanguage.js";
7
+ import { _getLanguageCode, _getLanguageName } from "./codes/codes.js"
8
+ import { _getModelInfo, _getModelList, _getModelLanguages, _isLanguageSupported, _getModelsByDeveloper, _getModelsByLanguage } from "./models/models.js"
9
+ import _translatePrompt from "./prompts/translate.js"
9
10
 
10
11
  // ----- CORE CLASS ----- //
11
12
 
12
- class GT {
13
+ export default class GT {
13
14
 
14
15
  constructor({
15
16
  apiKey = '',
@@ -28,14 +29,18 @@ class GT {
28
29
  // Model information functions
29
30
  getModelList = _getModelList; // returns array of supported model names
30
31
  getModelInfo = _getModelInfo; // returns model object
31
- getAllModelInfo = _getAllModelInfo; // returns all info on all models
32
32
  getModelLanguages = _getModelLanguages; // e.g. 'mistral-7b' => ['en']
33
33
  isLanguageSupported = _isLanguageSupported; // e.g. ('mistral-7b', 'en') => true
34
34
  getModelsByLanguage = _getModelsByLanguage; // returns array of model names
35
35
  getModelsByDeveloper = _getModelsByDeveloper; // returns array of model names
36
36
 
37
+ // Get a user's browser language
38
+ getUserLanguage = () => {
39
+ return _getUserLanguage(this.defaultLanguage);
40
+ }
41
+
37
42
  // Prompt I18N
38
- getPrompt = async (prompt, language) => {
43
+ translatePrompt = async (prompt, language) => {
39
44
  return await _translatePrompt({
40
45
  content: prompt, language: language, context: this
41
46
  });
@@ -43,15 +48,16 @@ class GT {
43
48
 
44
49
  }
45
50
 
46
- // ----- EXPORTS ----- //
47
-
48
- module.exports = GT;
49
- module.exports.getLanguageCode = _getLanguageCode;
50
- module.exports.getLanguageName = _getLanguageName;
51
- module.exports.getModelList = _getModelList;
52
- module.exports.getModelInfo = _getModelInfo;
53
- module.exports.getAllModelInfo = _getAllModelInfo;
54
- module.exports.getModelLanguages = _getModelLanguages;
55
- module.exports.isLanguageSupported = _isLanguageSupported;
56
- module.exports.getModelsByDeveloper = _getModelsByDeveloper;
57
- module.exports.getModelsByLanguage = _getModelsByLanguage;
51
+ // ----- SECONDARY EXPORTS ----- //
52
+
53
+ export {
54
+ _getLanguageCode as getLanguageCode,
55
+ _getLanguageName as getLanguageName,
56
+ _getModelList as getModelList,
57
+ _getModelInfo as getModelInfo,
58
+ _getModelLanguages as getModelLanguages,
59
+ _isLanguageSupported as isLanguageSupported,
60
+ _getModelsByDeveloper as getModelsByDeveloper,
61
+ _getModelsByLanguage as getModelsByLanguage,
62
+ _getUserLanguage as getUserLanguage
63
+ };
package/models/models.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // ----- MODEL INFORMATION ----- //
2
2
 
3
3
  // Get all info on all models
4
- const _getAllModelInfo = async () => {
4
+ export const _getAllModelInfo = async () => {
5
5
  try {
6
6
  const result = await fetch(`https://models.gtx.dev/all`);
7
7
  return await result.json();
@@ -13,7 +13,7 @@ const _getAllModelInfo = async () => {
13
13
 
14
14
  // Get all models by a given developer
15
15
  // Returns an empty array if none
16
- const _getModelsByDeveloper = async developer => {
16
+ export const _getModelsByDeveloper = async developer => {
17
17
  if (!developer) return null;
18
18
  developer = developer?.toLowerCase();
19
19
  try {
@@ -28,7 +28,7 @@ const _getModelsByDeveloper = async developer => {
28
28
 
29
29
  // Get all models certified for a given language
30
30
  // Returns an empty array if none
31
- const _getModelsByLanguage = async language => {
31
+ export const _getModelsByLanguage = async language => {
32
32
  if (!language) return null;
33
33
  language = language?.toLowerCase();
34
34
  try {
@@ -43,7 +43,7 @@ const _getModelsByLanguage = async language => {
43
43
 
44
44
  // Get all models
45
45
  // Returns an array of model names
46
- const _getModelList = async () => {
46
+ export const _getModelList = async () => {
47
47
  try {
48
48
  const result = await fetch(`https://models.gtx.dev/models`);
49
49
  const models = await result.json();
@@ -56,7 +56,7 @@ const _getModelList = async () => {
56
56
 
57
57
  // Get all info about a given model
58
58
  // Returns an object or null if invalid
59
- const _getModelInfo = async model => {
59
+ export const _getModelInfo = async model => {
60
60
  if (!model) return null;
61
61
  model = model?.toLowerCase();
62
62
  try {
@@ -69,27 +69,19 @@ const _getModelInfo = async model => {
69
69
  }
70
70
  }
71
71
 
72
+ // ----- FUNCTIONS FROM MODEL INFO ----- //
73
+
72
74
  // Get all languages known to be compatible with a given LLM
73
75
  // Returns an array of languages codes, or null if unknown
74
- const _getModelLanguages = async model => {
76
+ export const _getModelLanguages = async model => {
75
77
  const modelInfo = await _getModelInfo(model);
76
78
  return modelInfo?.languages;
77
79
  }
78
80
 
79
81
  // Returns true if a model is known to be compatible with a language
80
82
  // Returns false otherwise
81
- const _isLanguageSupported = async (model, code) => {
83
+ export const _isLanguageSupported = async (model, code) => {
82
84
  if (!code) return false;
83
85
  const modelLanguages = await _getModelLanguages(model);
84
86
  return modelLanguages?.includes(code) ? true : false;
85
- }
86
-
87
- module.exports = {
88
- _getModelList,
89
- _getModelInfo,
90
- _getModelLanguages,
91
- _isLanguageSupported,
92
- _getModelsByDeveloper,
93
- _getModelsByLanguage,
94
- _getAllModelInfo
95
87
  }
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "generaltranslation",
3
- "version": "1.1.22",
3
+ "version": "1.1.24",
4
4
  "description": "A language toolkit for AI developers",
5
5
  "main": "index.js",
6
+ "type": "module",
6
7
  "scripts": {
7
8
  "test": "echo \"Error: no test specified\" && exit 1"
8
9
  },
@@ -5,7 +5,7 @@ const _shouldTranslate = item => typeof item?.translate === 'boolean' ? item.tra
5
5
 
6
6
  // Pre-processes content to send to the API
7
7
  // Separates out text that shouldn't be translated.
8
- const _processContent = ({ content }) => {
8
+ const _processPrompt = ({ content }) => {
9
9
  const processed = [];
10
10
  const untranslated = [];
11
11
  if (Array.isArray(content)) {
@@ -40,7 +40,7 @@ const _processContent = ({ content }) => {
40
40
  }
41
41
 
42
42
  // Build content string from array or single item
43
- const _constructContent = ({ content, untranslated = null}) => {
43
+ const _constructPrompt = ({ content, untranslated = null}) => {
44
44
  if (Array.isArray(content)) {
45
45
  let final = '';
46
46
  for (const item of content) {
@@ -75,10 +75,10 @@ const _translatePrompt = async ({
75
75
 
76
76
  const defaultLanguage = context?.defaultLanguage;
77
77
  if (language === defaultLanguage) {
78
- return _constructContent({ content: content });
78
+ return _constructPrompt({ content: content });
79
79
  };
80
80
 
81
- const { processed, untranslated } = _processContent({ content });
81
+ const { processed, untranslated } = _processPrompt({ content });
82
82
 
83
83
  try {
84
84
  const response = await fetch(`${context?.baseURL}/prompt`, {
@@ -98,15 +98,13 @@ const _translatePrompt = async ({
98
98
  throw new Error(`${result || response.status}`);
99
99
  } else {
100
100
  const result = await response.json();
101
- return _constructContent({content: result, untranslated: untranslated });
101
+ return _constructPrompt({content: result, untranslated: untranslated });
102
102
  }
103
103
  } catch (error) {
104
104
  console.error(error)
105
- return _constructContent({ content: content })
105
+ return _constructPrompt({ content: content })
106
106
  }
107
107
 
108
108
  }
109
109
 
110
- module.exports = {
111
- _translatePrompt
112
- }
110
+ export default _translatePrompt;