-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path09e translate-OpenAI.js
More file actions
70 lines (61 loc) · 2.53 KB
/
Copy path09e translate-OpenAI.js
File metadata and controls
70 lines (61 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
function translateTextOpenAI(inputText, sourceLang, targetLang, apiKey, modelSettings, preserveFormatting) {
try {
// Logger.log(`OpenAI _${inputText}_`);
let { temperature, maxTokens, customPrompt, useDefaultPrompt, model } = { ...modelSettings };
if (useDefaultPrompt === true) {
customPrompt = settings.OpenAI.defaultPrompt;
}
let systemMessage = customPrompt.replaceAll('<T>', targetLang);
systemMessage = systemMessage.replaceAll('<S>', sourceLang);
if (preserveFormatting) {
systemMessage += ' Preserve html tags.';
}
const messagesArray = [{ "role": "user", "content": inputText }];
let payloadJson;
if (['gpt-5.2', 'gpt-5.2-pro', 'gpt-5', 'gpt-5-mini', 'gpt-5-nano', 'o1-preview', 'o1-preview-2024-09-12', 'o1-mini', 'o1-mini-2024-09-12', 'o4-mini', 'o3', 'gpt-4o-search-preview', 'gpt-4o-mini-search-preview'].includes(model)) {
messagesArray.unshift({ "role": "user", "content": systemMessage });
payloadJson = {
model: model,
"max_completion_tokens": Number(maxTokens),
"messages": messagesArray,
//"temperature": Number(temperature)
}
} else {
messagesArray.unshift({ "role": "system", "content": systemMessage });
payloadJson = {
model: model,
"max_tokens": Number(maxTokens),
"messages": messagesArray,
"temperature": Number(temperature)
}
}
const url = 'https://api.openai.com/v1/chat/completions';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + apiKey,
'Content-Type': 'application/json'
},
payload: JSON.stringify(payloadJson),
muteHttpExceptions: false
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
// Logger.log(json);
if (json.choices[0].finish_reason === 'length') {
throw new Error('Error in translateTextOpenAI: ' + JSON.stringify(json.usage));
}
if (json.error || json.warning) {
const errorOrWarning = json.error ? json.error : json.warning;
const message = typeof errorOrWarning === 'object' ? JSON.stringify(errorOrWarning) : errorOrWarning;
throw new Error('Error in translateTextOpenAI: ' + message);
}
if (!json.choices?.[0]?.message?.content) {
throw new Error('Error in translateTextOpenAI: unexpected api.openai.com response.');
}
return { status: 'ok', message: json.choices[0].message.content };
}
catch (e) {
return { status: 'error', message: e };
}
}