From 91bfedf5e1e0aab6e01c8bae7a27b9938360d536 Mon Sep 17 00:00:00 2001 From: yetone Date: Sun, 19 Feb 2023 15:22:32 +0800 Subject: [PATCH] first commit --- .github/workflows/release.yaml | 36 ++++++++++++++ .gitignore | 1 + README.md | 23 +++++++++ src/icon.png | Bin 0 -> 14075 bytes src/info.json | 36 ++++++++++++++ src/main.js | 84 +++++++++++++++++++++++++++++++++ 6 files changed, 180 insertions(+) create mode 100644 .github/workflows/release.yaml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 src/icon.png create mode 100644 src/info.json create mode 100644 src/main.js diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..a46fce5 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,36 @@ +name: Release + +on: + push: + tags: [ v\d+\.\d+\.\d+ ] + + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Get tag + id: tag + uses: dawidd6/action-get-tag@v1 + with: + strip_v: true + + - name: Change version + run: sed -i -e "s/0\.1\.0/${{ steps.tag.outputs.tag }}/" src/info.json + + - name: Package plugin + run: mkdir release && zip -j -r release/openai-translator-${{ steps.tag.outputs.tag }}.bobplugin ./src/* + + - name: Upload binaries to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: release/openai-translator-${{ steps.tag.outputs.tag }}.bobplugin + asset_name: openai-translator-${{ steps.tag.outputs.tag }}.bobplugin + tag: ${{ github.ref }} + overwrite: true + body: "Release OpenAI Translator Bob plugin v${{ steps.tag.outpus.tag}}!" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8b324e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.bobplugin diff --git a/README.md b/README.md new file mode 100644 index 0000000..1f6af44 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +OpenAI Translator Bob Plugin +---------------------------- + +# 简介 + +ChatGPT 向我们展示了 GPT 模型的伟大之处,我使用 OpenAI 的 API 实现了这个翻译插件,虽然 OpenAI API 用的还是 GPT-3 模型(不是 ChatGPT 用的 GPT-3.5),但是其翻译效果已经很棒了。 + +基于 ChatGPT 的 Bob 翻译插件正在开发中! + +# 使用截图 + + +# 使用方法 + +1. 安装 [Bob](https://bobtranslate.com/guide/#%E5%AE%89%E8%A3%85) (版本 >= 0.50) +2. 下载此插件: [openai-translator.bobplugin](https://github.com/yetone/bob-plugin-openai-translator/releases) +3. 安装此插件: + +4. 去 [OpenAI](https://platform.openai.com/account/api-keys) 获取你的 API KEY +5. 把 API KEY 填入 Bob 此插件配置界面的 API KEY + 输入框中 + +6. 安装 [PopClip](https://bobtranslate.com/guide/integration/popclip.html) 实现划词后鼠标附近出现小图标 diff --git a/src/icon.png b/src/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..839ed1812d0b83548232f730d2e057a53f721534 GIT binary patch literal 14075 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 literal 0 HcmV?d00001 diff --git a/src/info.json b/src/info.json new file mode 100644 index 0000000..4bdf92b --- /dev/null +++ b/src/info.json @@ -0,0 +1,36 @@ +{ + "identifier": "yetone.openai.translator", + "version": "0.1.0", + "category": "translate", + "name": "OpenAI Translator", + "summary": "", + "icon": "", + "author": "yetone", + "homepage": "", + "appcast": "", + "minBobVersion": "0.5.0", + "options": [ + { + "identifier": "api_keys", + "type": "text", + "title": "API KEY", + "desc": "可以用英文逗号分割多个 api key 以实现额度加倍及负载均衡" + }, + { + "identifier": "model", + "type": "menu", + "title": "模型", + "defaultValue": "text-davinci-003", + "menuValues": [ + { + "title": "text-davinci-003", + "value": "text-davinci-003" + }, + { + "title": "text-davinci-002", + "value": "text-davinci-002" + } + ] + } + ] +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..c498805 --- /dev/null +++ b/src/main.js @@ -0,0 +1,84 @@ +var items = [ + ["auto", "auto"], + ["zh-Hans", "zh"], + ["zh-Hant", "zh"], + ["en", "en"], +]; + +var langMap = new Map(items); +var langMapReverse = new Map( + items.map(([standardLang, lang]) => [lang, standardLang]) +); + +function supportLanguages() { + return items.map(([standardLang, lang]) => standardLang); +} + +function translate(query, completion) { + const api_keys = $option.api_keys.split(",").map((key) => key.trim()); + const api_key = api_keys[Math.floor(Math.random() * api_keys.length)]; + const header = { + "Content-Type": "application/json", + Authorization: "Bearer " + api_key, + }; + const body = { + model: $option.model, + prompt: `translate to ${langMap.get(query.detectTo)}:${query.text}`, + temperature: 0, + max_tokens: 4000, + top_p: 1, + frequency_penalty: 0.5, + presence_penalty: 0, + }; + (async () => { + const resp = await $http.request({ + method: "POST", + url: "https://api.openai.com/v1/completions", + header, + body, + }); + + if (resp.error) { + const { statusCode } = resp.response; + let reason; + if (statusCode >= 400 && statusCode < 500) { + reason = "param"; + } else { + reason = "api"; + } + completion({ + error: { + type: reason, + message: `接口响应错误 - ${response.data.msg}`, + addtion: JSON.stringify(response), + }, + }); + } else { + const { choices } = resp.data; + if (!choices || choices.length === 0) { + completion({ + error: { + type: "api", + message: "接口未返回结果", + }, + }); + return; + } + completion({ + result: { + from: query.detectFrom, + to: query.detectTo, + toParagraphs: choices[0].text.trim().split("\n"), + }, + }); + } + })().catch((err) => { + completion({ + error: { + type: err._type || "unknown", + message: err._message || "未知错误", + addtion: err._addtion, + }, + }); + }); +}