#language = "v8" const apiKey = "{your API key}"; // Replace {your-API-key} with your API key const sModel = "gpt-3.5-turbo"; // Replace with "gpt-4" or "gpt-4-turbo-preview" if you want to use a newer model /** * Sends prompt to OpenAI and returns the response. * Docs: https://platform.openai.com/docs/guides/text-generation/chat-completions-api?lang=curl * @param {string} endpoint URL for request * @param {string} apiKey API key * @param {string} messageContent The prompt * @returns {string} The text content of the response */ async function callOpenAI(endpoint, apiKey, messageContent) { const response = await fetch( endpoint, { method: "POST", headers: { "Authorization": `Bearer ${apiKey}`, "content-type": "application/json", }, body: JSON.stringify({ "model": sModel, "messages": [ { "role": "user", "content": messageContent, } ], }), } ); if (!response.ok) { alert(await response.text()); Quit(); } const responseObj = await response.json(); if (responseObj.choices.length === 0) { alert("choices length is 0"); Quit(); } // Get content of first choice return responseObj.choices.pop().message.content; } /** * Generates image using Dall-E * @param {string} endpoint URL for request * @param {string} apiKey API key * @param {string} promptStr Image prompt * @returns {string} URL of generated image */ async function callDalle(endpoint, apiKey, promptStr) { const payload = { method: "POST", headers: { "Authorization": `Bearer ${apiKey}`, "content-type": "application/json", }, body: JSON.stringify({ "model": "dall-e-3", "prompt": promptStr, "style": "natural", }), }; const response = await fetch(endpoint, payload); if (!response.ok) { alert(await response.text()); Quit(); } const responseObj = await response.json(); if (responseObj.data.length === 0) { alert("data array length is 0"); Quit(); } return responseObj.data[0].url; } async function main() { let asCommands = []; let asTranslate = []; let sOtherLang = ""; let sWriteQuestion = ""; let sGenerateImage = ""; let sWaiting = ""; switch( editor.LangID ) { case 1041: // Japanese asCommands = ["校正してください", "意味を調べてください", "要約してください", "日本語に翻訳してください", "英語に翻訳してください"]; asTranslate = ["チェコ語に翻訳してください", "オランダ語に翻訳してください", "フランス語に翻訳してください", "ドイツ語に翻訳してください", "イタリア語に翻訳してください", "スペイン語に翻訳してください", "韓国語に翻訳してください", "簡体字中国語に翻訳してください", "繁体字中国語に翻訳してください", "ロシア語に翻訳してください"]; sOtherLang = "その他の言語"; sWriteQuestion = "質問を指定"; sGenerateImage = "画像を生成"; sWaiting = "OpenAI API からのレスポンスを待っています。しばらくお待ちください..."; break; case 1029: // Czech asCommands = ["Kontrola", "Vyhledat", "Shrnout", "Přeložit do japonštiny", "Přeložit do angličtiny"] asTranslate = ["Přeložit do češtiny", "Přeložit do holandštiny", "Přeložit do francouzštiny", "Přeložit do němčiny", "Přeložit do italštiny", "Přeložit do španělštiny", "Přeložit do korejštiny", "Přeložit do zjednodušené čínštiny", "Přeložit do tradiční čínštiny", "Přeložit do ruštiny"]; sOtherLang = "Jiné jazyky"; sWriteQuestion = "Napište otázku"; sGenerateImage = "Vygenerujte obrázek"; sWaiting = "Čekání na odpověď od OpenAI API. Prosím, čekejte..."; break; case 1031: // German asCommands = ["Korrekturlesen", "Nachschlagen", "Zusammenfassen", "Ins Japanische übersetzen", "Ins Englische übersetzen"] asTranslate = ["Übersetzen ins Tschechische", "Übersetzen ins Niederländische", "Übersetzen ins Französische", "Übersetzen ins Deutsche", "Übersetzen ins Italienische", "Übersetzen ins Spanische", "Übersetzen ins Koreanische", "Übersetzen ins vereinfachte Chinesisch", "Ins traditionelle Chinesisch übersetzen", "Ins Russische übersetzen"]; sOtherLang = "Andere Sprachen"; sWriteQuestion = "Schreiben Sie eine Frage"; sGenerateImage = "Erzeugen Sie ein Bild"; sWaiting = "Warten auf eine Antwort von der OpenAI-API. Bitte warten..."; break; case 1036: // French asCommands = ["Relire", "Rechercher", "Résumer", "Traduire en japonais", "Traduire en anglais"] asTranslate = ["Traduire en tchèque", "Traduire en néerlandais", "Traduire en français", "Traduire en allemand", "Traduire en italien", "Traduire en espagnol", "Traduire en coréen", "Traduire en chinois simplifié", " Traduire en chinois traditionnel", "Traduire en russe"]; sOtherLang = "Autres langues"; sWriteQuestion = "Écrivez une question"; sGenerateImage = "Générer une image"; sWaiting = "En attente d'une réponse de l'API OpenAI. S'il vous plaît, attendez..."; break; case 1049: // Russian asCommands = ["Корректура", "Поиск", "Обобщение", "Перевести на японский", "Перевести на английский"] asTranslate = ["Перевести на чешский", "Перевести на голландский", "Перевести на французский", "Перевести на немецкий", "Перевести на итальянский", "Перевести на испанский", "Перевести на корейский", "Перевести на упрощенный китайский", "Перевести на традиционный китайский", "Перевести на русский"]; sOtherLang = "Другие языки"; sWriteQuestion = "Написать вопрос"; sGenerateImage = "Создать изображение"; sWaiting = "Ждем ответа от OpenAI API. Пожалуйста, подождите..."; break; case 3082: // Spanish case 2058: // Spanish asCommands = ["Revisar", "Buscar", "Resumir", "Traducir al japonés", "Traducir al inglés"] asTranslate = ["Traducir al checo", "Traducir al holandés", "Traducir al francés", "Traducir al alemán", "Traducir al italiano", "Traducir al español", "Traducir al coreano", "Traducir al chino simplificado", " Traducir al chino tradicional", "Traducir al ruso"]; sOtherLang = "Otros idiomas"; sWriteQuestion = "Escribe una pregunta"; sGenerateImage = "Generar una imagen"; sWaiting = "Esperando una respuesta de la API OpenAI. Espere por favor..."; break; case 1040: // Italian asCommands = ["Rileggi", "Cerca", "Riassumi", "Traduci in giapponese", "Traduci in inglese"] asTranslate = ["Traduci in ceco", "Traduci in olandese", "Traduci in francese", "Traduci in tedesco", "Traduci in italiano", "Traduci in spagnolo", "Traduci in coreano", "Traduci in cinese semplificato", " Traduci in cinese tradizionale", "Traduci in russo"]; sOtherLang = "Altre lingue"; sWriteQuestion = "Scrivi una domanda"; sGenerateImage = "Genera un'immagine"; sWaiting = "In attesa di una risposta dall'API OpenAI. Attendere prego..."; break; case 1042: // Korean asCommands = ["교정", "찾아보기", "요약", "일본어로 번역", "영어로 번역"] asTranslate = ["체코어로 번역", "네덜란드어로 번역", "프랑스어로 번역", "독일어로 번역", "이탈리아어로 번역", "스페인어로 번역", "한국어로 번역", "중국어(간체)로 번역", "중국어(번체)로 번역", "러시아어로 번역"]; sOtherLang = "다른 언어"; sWriteQuestion = "질문을 작성하세요"; sGenerateImage = "이미지 생성"; sWaiting = "OpenAI API의 응답을 기다리는 중입니다. 기다리세요..."; break; case 1043: // Dutch asCommands = ["Proeflezen", "Opzoeken", "Samenvatten", "Vertalen naar het Japans", "Vertalen naar het Engels"] asTranslate = ["Vertalen naar het Tsjechisch", "Vertalen naar het Nederlands", "Vertalen naar het Frans", "Vertalen naar het Duits", "Vertalen naar het Italiaans", "Vertalen naar het Spaans", "Vertalen naar het Koreaans", "Vertalen naar Vereenvoudigd Chinees", "Vertalen in traditioneel Chinees", "Vertalen in het Russisch"]; sOtherLang = "Andere talen"; sWriteQuestion = "Schrijf een vraag"; sGenerateImage = "Genereer een afbeelding"; sWaiting = "Wachten op een reactie van OpenAI API. Even geduld aub..."; break; case 2052: // Simplified Chinese asCommands = ["校对", "查找", "总结", "翻译成日语", "翻译成英语"] asTranslate = ["翻译成捷克语", "翻译成荷兰语", "翻译成法语", "翻译成德语", "翻译成意大利语", "翻译成西班牙语", "翻译成韩语", "翻译成简体中文", "翻译成繁体中文", "翻译成俄语"]; sOtherLang = "其他语言"; sWriteQuestion = "提出問題"; sGenerateImage = "生成圖像"; sWaiting = "等待 OpenAI API 的响应。请稍等..."; break; case 1028: // Traditional Chinese asCommands = ["校對", "尋找", "總結", "翻譯成日語", "翻譯成英語"] asTranslate = ["翻譯成捷克語", "翻譯成荷蘭語", "翻譯成法語", "翻譯成德語", "翻譯成意大利語", "翻譯成西班牙語", "翻譯成韓語", "翻譯成簡體中文", "翻譯成繁體中文", "翻譯成俄語"]; sOtherLang = "其他語言"; sWriteQuestion = "提出問題"; sGenerateImage = "生成图像"; sWaiting = "等待 OpenAI API 的響應。請稍等..."; break; default: // English asCommands = ["Proofread", "Look up", "Summarize", "Translate into Japanese", "Translate into English"] asTranslate = ["Translate into Czech", "Translate into Dutch", "Translate into French", "Translate into German", "Translate into Italian", "Translate into Spanish", "Translate into Korean", "Translate into Simplified Chinese", "Translate into Traditional Chinese", "Translate into Russian"]; sOtherLang = "Other languages"; sWriteQuestion = "Write a question"; sGenerateImage = "Generate an image"; sWaiting = "Waiting for a response from OpenAI API. Please wait..."; break; } let sText = document.selection.Text; if (sText.length == 0) { document.selection.SelectAll(); sText = document.selection.Text; } const menu = CreatePopupMenu(); const submenu = CreatePopupMenu(); var nID = 0; for( var i = 0; i < asCommands.length; ++i ) { menu.Add(asCommands[i], ++nID); } menu.Add("", 0, eeMenuSeparator); for( var i = 0; i < asTranslate.length; ++i ) { submenu.Add(asTranslate[i], ++nID); } menu.AddPopup(sOtherLang + "...", submenu); menu.Add("", 0, eeMenuSeparator); menu.Add(sWriteQuestion + "...", 10000); menu.Add("", 0, eeMenuSeparator); menu.Add(sGenerateImage, 10001); const result = menu.Track(0); if (result != 0) { let sPrompt; if (result === 10000) { sPrompt = prompt(sWriteQuestion, "", 0); } else { sPrompt = menu.GetText(result); } if (sPrompt.length !== 0) { sPrompt = sPrompt + ": " + sText; shell.KeepRunning = true; status = sWaiting; if (result === 10001) { const endpoint = "https://api.openai.com/v1/images/generations"; const url = await callDalle(endpoint, apiKey, sText); WebBar.Open( url ); } else { const endpoint = "https://api.openai.com/v1/chat/completions"; const response = await callOpenAI(endpoint, apiKey, sPrompt); OutputBar.writeln( response ); OutputBar.Visible = true; } status = ""; shell.KeepRunning = false; } } } main();