feat: support AzureAI
This commit is contained in:
@@ -3,6 +3,7 @@ import {
|
||||
OPT_TRANS_GOOGLE,
|
||||
OPT_TRANS_GOOGLE_2,
|
||||
OPT_TRANS_MICROSOFT,
|
||||
OPT_TRANS_AZUREAI,
|
||||
OPT_TRANS_DEEPL,
|
||||
OPT_TRANS_DEEPLFREE,
|
||||
OPT_TRANS_DEEPLX,
|
||||
@@ -179,6 +180,22 @@ const genMicrosoft = ({ texts, from, to, token }) => {
|
||||
return { url, body, headers };
|
||||
};
|
||||
|
||||
const genAzureAI = ({ texts, from, to, url, key, region }) => {
|
||||
const params = queryString.stringify({
|
||||
from,
|
||||
to,
|
||||
});
|
||||
url = url.endsWith("&") ? `${url}${params}` : `${url}&${params}`;
|
||||
const headers = {
|
||||
"Content-type": "application/json",
|
||||
"Ocp-Apim-Subscription-Key": key,
|
||||
"Ocp-Apim-Subscription-Region": region,
|
||||
};
|
||||
const body = texts.map((text) => ({ Text: text }));
|
||||
|
||||
return { url, body, headers };
|
||||
};
|
||||
|
||||
const genDeepl = ({ texts, from, to, url, key }) => {
|
||||
const body = {
|
||||
text: texts,
|
||||
@@ -546,6 +563,7 @@ const genReqFuncs = {
|
||||
[OPT_TRANS_GOOGLE]: genGoogle,
|
||||
[OPT_TRANS_GOOGLE_2]: genGoogle2,
|
||||
[OPT_TRANS_MICROSOFT]: genMicrosoft,
|
||||
[OPT_TRANS_AZUREAI]: genAzureAI,
|
||||
[OPT_TRANS_DEEPL]: genDeepl,
|
||||
[OPT_TRANS_DEEPLFREE]: genDeeplFree,
|
||||
[OPT_TRANS_DEEPLX]: genDeeplX,
|
||||
@@ -733,6 +751,7 @@ export const parseTransRes = async (
|
||||
case OPT_TRANS_GOOGLE_2:
|
||||
return res?.[0]?.map((_, i) => [res?.[0]?.[i], res?.[1]?.[i]]);
|
||||
case OPT_TRANS_MICROSOFT:
|
||||
case OPT_TRANS_AZUREAI:
|
||||
return res?.map((item) => [
|
||||
item.translations.map((item) => item.text).join(" "),
|
||||
item.detectedLanguage?.language,
|
||||
|
||||
@@ -28,6 +28,7 @@ export const OPT_TRANS_BUILTINAI = "BuiltinAI";
|
||||
export const OPT_TRANS_GOOGLE = "Google";
|
||||
export const OPT_TRANS_GOOGLE_2 = "Google2";
|
||||
export const OPT_TRANS_MICROSOFT = "Microsoft";
|
||||
export const OPT_TRANS_AZUREAI = "AzureAI";
|
||||
export const OPT_TRANS_DEEPL = "DeepL";
|
||||
export const OPT_TRANS_DEEPLX = "DeepLX";
|
||||
export const OPT_TRANS_DEEPLFREE = "DeepLFree";
|
||||
@@ -50,6 +51,7 @@ export const OPT_ALL_TYPES = [
|
||||
OPT_TRANS_GOOGLE,
|
||||
OPT_TRANS_GOOGLE_2,
|
||||
OPT_TRANS_MICROSOFT,
|
||||
OPT_TRANS_AZUREAI,
|
||||
// OPT_TRANS_BAIDU,
|
||||
OPT_TRANS_TENCENT,
|
||||
OPT_TRANS_VOLCENGINE,
|
||||
@@ -100,6 +102,7 @@ export const API_SPE_TYPES = {
|
||||
]),
|
||||
// 支持多key
|
||||
mulkeys: new Set([
|
||||
OPT_TRANS_AZUREAI,
|
||||
OPT_TRANS_DEEPL,
|
||||
OPT_TRANS_OPENAI,
|
||||
OPT_TRANS_GEMINI,
|
||||
@@ -113,6 +116,7 @@ export const API_SPE_TYPES = {
|
||||
]),
|
||||
// 支持批处理
|
||||
batch: new Set([
|
||||
OPT_TRANS_AZUREAI,
|
||||
OPT_TRANS_GOOGLE_2,
|
||||
OPT_TRANS_MICROSOFT,
|
||||
OPT_TRANS_TENCENT,
|
||||
@@ -222,6 +226,12 @@ export const OPT_LANGS_TO_SPEC = {
|
||||
["zh-CN", "zh-Hans"],
|
||||
["zh-TW", "zh-Hant"],
|
||||
]),
|
||||
[OPT_TRANS_AZUREAI]: new Map([
|
||||
...OPT_LANGS_SPEC_DEFAULT,
|
||||
["auto", ""],
|
||||
["zh-CN", "zh-Hans"],
|
||||
["zh-TW", "zh-Hant"],
|
||||
]),
|
||||
[OPT_TRANS_DEEPL]: new Map([
|
||||
...OPT_LANGS_SPEC_DEFAULT_UC,
|
||||
["auto", ""],
|
||||
@@ -442,7 +452,8 @@ const defaultApi = {
|
||||
maxTokens: 20480,
|
||||
think: false,
|
||||
thinkIgnore: "qwen3,deepseek-r1",
|
||||
isDisabled: false, // 是否不显示
|
||||
isDisabled: false, // 是否不显示,
|
||||
region: "", // Azure 专用
|
||||
};
|
||||
|
||||
const defaultApiOpts = {
|
||||
@@ -461,6 +472,11 @@ const defaultApiOpts = {
|
||||
...defaultApi,
|
||||
useBatchFetch: true,
|
||||
},
|
||||
[OPT_TRANS_AZUREAI]: {
|
||||
...defaultApi,
|
||||
url: "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",
|
||||
useBatchFetch: true,
|
||||
},
|
||||
[OPT_TRANS_BAIDU]: {
|
||||
...defaultApi,
|
||||
},
|
||||
|
||||
@@ -43,6 +43,7 @@ import {
|
||||
BUILTIN_STONES,
|
||||
BUILTIN_PLACEHOLDERS,
|
||||
BUILTIN_PLACETAGS,
|
||||
OPT_TRANS_AZUREAI,
|
||||
} from "../../config";
|
||||
|
||||
function TestButton({ api }) {
|
||||
@@ -237,6 +238,7 @@ function ApiFields({ apiSlug, isUserApi, deleteApi }) {
|
||||
tone = "neutral",
|
||||
placeholder = BUILTIN_PLACEHOLDERS[0],
|
||||
placetag = BUILTIN_PLACETAGS[0],
|
||||
region = "",
|
||||
// aiTerms = false,
|
||||
} = formData;
|
||||
|
||||
@@ -283,6 +285,16 @@ function ApiFields({ apiSlug, isUserApi, deleteApi }) {
|
||||
</>
|
||||
)}
|
||||
|
||||
{apiType === OPT_TRANS_AZUREAI && (
|
||||
<TextField
|
||||
size="small"
|
||||
label={"Region"}
|
||||
name="region"
|
||||
value={region}
|
||||
onChange={handleChange}
|
||||
/>
|
||||
)}
|
||||
|
||||
{API_SPE_TYPES.ai.has(apiType) && (
|
||||
<>
|
||||
<Box>
|
||||
|
||||
Reference in New Issue
Block a user