diff --git a/src/apis/trans.js b/src/apis/trans.js
index f06952f..ec34489 100644
--- a/src/apis/trans.js
+++ b/src/apis/trans.js
@@ -185,7 +185,17 @@ const genTencent = ({ text, from, to }) => {
return [URL_TENCENT_TRANSMART, init];
};
-const genOpenAI = ({ text, from, to, url, key, prompt, model }) => {
+const genOpenAI = ({
+ text,
+ from,
+ to,
+ url,
+ key,
+ prompt,
+ model,
+ temperature,
+ maxTokens,
+}) => {
prompt = prompt
.replaceAll(INPUT_PLACE_FROM, from)
.replaceAll(INPUT_PLACE_TO, to);
@@ -202,8 +212,8 @@ const genOpenAI = ({ text, from, to, url, key, prompt, model }) => {
content: text,
},
],
- temperature: 0,
- max_tokens: 256,
+ temperature,
+ max_tokens: maxTokens,
};
const init = {
diff --git a/src/config/index.js b/src/config/index.js
index 4b7ca10..1a030ef 100644
--- a/src/config/index.js
+++ b/src/config/index.js
@@ -500,6 +500,8 @@ const defaultOpenaiApi = {
key: "",
model: "gpt-4",
prompt: `You will be provided with a sentence in ${INPUT_PLACE_FROM}, and your task is to translate it into ${INPUT_PLACE_TO}.`,
+ temperature: 0,
+ maxTokens: 256,
fetchLimit: 1,
fetchInterval: 500,
};
diff --git a/src/libs/utils.js b/src/libs/utils.js
index c53ad3a..d50e111 100644
--- a/src/libs/utils.js
+++ b/src/libs/utils.js
@@ -15,6 +15,16 @@ export const limitNumber = (num, min = 0, max = 100) => {
return number;
};
+export const limitFloat = (num, min = 0, max = 100) => {
+ const number = parseFloat(num);
+ if (Number.isNaN(number) || number < min) {
+ return min;
+ } else if (number > max) {
+ return max;
+ }
+ return number;
+};
+
/**
* 匹配是否为数组中的值
* @param {*} arr
diff --git a/src/views/Options/Apis.js b/src/views/Options/Apis.js
index b762a60..15ec44a 100644
--- a/src/views/Options/Apis.js
+++ b/src/views/Options/Apis.js
@@ -38,7 +38,7 @@ import { useApi } from "../../hooks/Api";
import { apiTranslate } from "../../apis";
import Box from "@mui/material/Box";
import Link from "@mui/material/Link";
-import { limitNumber } from "../../libs/utils";
+import { limitNumber, limitFloat } from "../../libs/utils";
function TestButton({ translator, api }) {
const i18n = useI18n();
@@ -121,6 +121,8 @@ function ApiFields({ translator }) {
memoryNo = "",
reqHook = "",
resHook = "",
+ temperature = 0,
+ maxTokens = 256,
} = api;
const handleChange = (e) => {
@@ -132,6 +134,12 @@ function ApiFields({ translator }) {
case "fetchInterval":
value = limitNumber(value, 0, 5000);
break;
+ case "temperature":
+ value = limitFloat(value, 0, 2);
+ break;
+ case "maxTokens":
+ value = limitNumber(value, 0, 2 ** 15);
+ break;
default:
}
updateApi({
@@ -225,6 +233,27 @@ function ApiFields({ translator }) {
>
)}
+ {translator.startsWith(OPT_TRANS_OPENAI) && (
+ <>
+
+
+ >
+ )}
+
{translator === OPT_TRANS_NIUTRANS && (
<>