generaltranslation 1.1.5 → 1.1.7

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/codes/codes.js CHANGED
@@ -11,7 +11,7 @@ const LanguageToCodeTriletter = require('./639-3/LanguageToCodeTriletter.json');
11
11
 
12
12
  // Returns the name of a language from an ISO 639 code or an array of codes
13
13
  const _mapCodeToLanguage = code => CodeToLanguage[code] || CodeToLanguageTriletter[code] || '';
14
- const getLanguageName = codes => {
14
+ const _getLanguageName = codes => {
15
15
  return Array.isArray(codes) ? codes.map(_mapCodeToLanguage) : _mapCodeToLanguage(codes);
16
16
  }
17
17
 
@@ -21,10 +21,10 @@ const _mapLanguageToCode = language => {
21
21
  const lowerCaseLanguage = language.toLowerCase();
22
22
  return LanguageToCode[lowerCaseLanguage] || LanguageToCodeTriletter[lowerCaseLanguage] || '';
23
23
  }
24
- const getLanguageCode = languages => {
24
+ const _getLanguageCode = languages => {
25
25
  return Array.isArray(languages) ? languages.map(_mapLanguageToCode) : _mapLanguageToCode(languages);
26
26
  }
27
27
 
28
28
  module.exports = {
29
- getLanguageName, getLanguageCode
29
+ _getLanguageName, _getLanguageCode
30
30
  }
package/index.js CHANGED
@@ -3,9 +3,11 @@
3
3
 
4
4
  // ----- IMPORTS ----- //
5
5
 
6
- const { getLanguageName, getLanguageCode } = require('./codes/codes.js');
6
+ const { _getLanguageName, _getLanguageCode } = require('./codes/codes.js');
7
+ const { _getModelList, _getModelLanguages, _isLanguageSupported } = require('./models/models.js');
8
+ const { _getPrompt } = require('./prompts/prompts.js');
7
9
 
8
- const { getModelList, getModelLanguages, isLanguageSupported } = require('./models/models.js');
10
+ // ----- CORE CLASS ----- //
9
11
 
10
12
  class GT {
11
13
 
@@ -18,21 +20,26 @@ class GT {
18
20
  }
19
21
 
20
22
  // Language code functions
21
- getLanguageName = getLanguageName; // e.g. 'en' => 'English'
22
- getLanguageCode = getLanguageCode; // e.g. 'English' => 'en'
23
+ getLanguageName = _getLanguageName; // e.g. 'en' => 'English'
24
+ getLanguageCode = _getLanguageCode; // e.g. 'English' => 'en'
23
25
 
24
26
  // Model information functions
25
- getModelList = getModelList; // returns array of supported model names
26
- getModelLanguages = getModelLanguages; // e.g. 'mistral-7b' => ['en']
27
- isLanguageSupported = isLanguageSupported; // e.g. ('mistral-7b', 'en') => true
27
+ getModelList = _getModelList; // returns array of supported model names
28
+ getModelLanguages = _getModelLanguages; // e.g. 'mistral-7b' => ['en']
29
+ isLanguageSupported = _isLanguageSupported; // e.g. ('mistral-7b', 'en') => true
30
+
31
+ // Prompt internationalization
32
+ getPrompt = async (prompt, language) => {
33
+ return await _getPrompt(prompt, language, this.defaultLanguage, this.apiKey);
34
+ }
28
35
 
29
36
  }
30
37
 
31
38
  // ----- EXPORTS ----- //
32
39
 
33
40
  module.exports = GT;
34
- module.exports.getLanguageCode = getLanguageCode;
35
- module.exports.getLanguageName = getLanguageName;
36
- module.exports.getModelList = getModelList;
37
- module.exports.getModelLanguages = getModelLanguages;
38
- module.exports.isLanguageSupported = isLanguageSupported;
41
+ module.exports.getLanguageCode = _getLanguageCode;
42
+ module.exports.getLanguageName = _getLanguageName;
43
+ module.exports.getModelList = _getModelList;
44
+ module.exports.getModelLanguages = _getModelLanguages;
45
+ module.exports.isLanguageSupported = _isLanguageSupported;
package/models/models.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  // Get all models
4
4
  // Returns an array of model names
5
- const getModelList = async () => {
5
+ const _getModelList = async () => {
6
6
  try {
7
7
  const result = await fetch(`https://models.gtx.dev/models`);
8
8
  const models = await result.json();
@@ -30,21 +30,21 @@ const _getModelInfo = async model => {
30
30
 
31
31
  // Get all languages known to be compatible with a given LLM
32
32
  // Returns an array of languages codes, or [] if unknown
33
- const getModelLanguages = async model => {
33
+ const _getModelLanguages = async model => {
34
34
  const modelInfo = await _getModelInfo(model);
35
35
  return modelInfo?.languages || [];
36
36
  }
37
37
 
38
38
  // Returns true if a model is known to be compatible with a language
39
39
  // Returns false otherwise
40
- const isLanguageSupported = async (model, code) => {
40
+ const _isLanguageSupported = async (model, code) => {
41
41
  if (!code) return false;
42
- const modelLanguages = await getModelLanguages(model);
42
+ const modelLanguages = await _getModelLanguages(model);
43
43
  return modelLanguages?.includes(code) ? true : false;
44
44
  }
45
45
 
46
46
  module.exports = {
47
- getModelList,
48
- getModelLanguages,
49
- isLanguageSupported
47
+ _getModelList,
48
+ _getModelLanguages,
49
+ _isLanguageSupported
50
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generaltranslation",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "A language toolkit for AI developers",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -0,0 +1,102 @@
1
+ // ----- PROMPT INTERNATIONALIZATION ----- //
2
+
3
+ // Decides whether a prompt object should be translated
4
+ const _shouldTranslate = item => typeof item?.translate === 'boolean' ? item.translate : true;
5
+
6
+ // Pre-processes prompt to send to the API
7
+ // Separates out text that shouldn't be translated.
8
+ const _processPrompt = (prompt) => {
9
+ const processed = [];
10
+ const redacted = [];
11
+ if (Array.isArray(prompt)) {
12
+ for (const item of prompt) {
13
+ if (typeof item === 'string') {
14
+ processed.push({
15
+ text: item
16
+ });
17
+ } else if (_shouldTranslate(item)) {
18
+ processed.push(item);
19
+ } else {
20
+ processed.push({text: '', translate: false});
21
+ redacted.push(item);
22
+ }
23
+ }
24
+ return {
25
+ processed: processed,
26
+ redacted: redacted.length > 0 ? redacted : null
27
+ }
28
+ } else {
29
+ if (typeof prompt === 'string') {
30
+ processed.push({
31
+ text: prompt
32
+ });
33
+ } else if (_shouldTranslate(prompt)) {
34
+ processed.push(prompt);
35
+ } else {
36
+ processed.push({text: '', translate: false});
37
+ redacted.push(prompt);
38
+ }
39
+ }
40
+ return {
41
+ processed: processed,
42
+ redacted: redacted.length > 0 ? redacted : null
43
+ }
44
+ }
45
+
46
+ // Build prompt string from array or single item
47
+ const _constructPrompt = (translated, redacted = null) => {
48
+ if (Array.isArray(translated)) {
49
+ let final = '';
50
+ for (const item of translated) {
51
+ if (typeof item === 'string') final += item;
52
+ else if (_shouldTranslate(item)) final += item?.text || '';
53
+ else {
54
+ if (redacted?.length > 0) {
55
+ final += redacted?.shift().text || '';
56
+ } else {
57
+ final += item?.text || '';
58
+ }
59
+ }
60
+ }
61
+ return final;
62
+ } else if (typeof translated === 'string') {
63
+ return translated;
64
+ } else {
65
+ return translated?.text || '';
66
+ }
67
+ }
68
+
69
+ // Get a translated prompt via General Translation API
70
+ // Returns prompt string
71
+ const _getPrompt = async (prompt, language, defaultLanguage, apiKey) => {
72
+ if (!apiKey) {
73
+ throw new Error('Missing API Key!')
74
+ }
75
+ if (language === defaultLanguage) {
76
+ return _constructPrompt(prompt);
77
+ }
78
+ const { processed, redacted } = _processPrompt(prompt);
79
+ const response = await fetch('https://prompts.gtx.dev/internationalize', {
80
+ method: 'POST',
81
+ headers: {
82
+ 'Content-Type': 'application/json',
83
+ 'gtx-api-key': apiKey
84
+ },
85
+ body: JSON.stringify({
86
+ prompt: processed,
87
+ language: language,
88
+ defaultLanguage: defaultLanguage
89
+ })
90
+ })
91
+ if (!response.ok) {
92
+ const result = await response.text();
93
+ throw new Error(`${result || response.status}`);
94
+ } else {
95
+ const result = await response.json();
96
+ return _constructPrompt(result, redacted);
97
+ }
98
+ }
99
+
100
+ module.exports = {
101
+ _getPrompt
102
+ }