Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2024-02-15 12:14:56 +08:00
commit d3a4053f28
11 changed files with 113 additions and 40 deletions

View file

@ -273,6 +273,9 @@
"apiMaxTokensTip": "The <code class='fn__code'>max_tokens</code> parameter passed in when requesting the API is used to control the length of the generated text",
"apiBaseURL": "API Base URL",
"apiBaseURLTip": "The base address of the request, such as <code class='fn__code'>https://api.openai.com/v1</code>",
"apiUserAgentTip": "The user agent that initiated the request, that is, the HTTP header <code class='fn__code'>User-Agent</code>",
"apiProvider": "API Provider",
"apiProviderTip": "Use the selected API provider to implement AI-related functions",
"skip": "Skip",
"nextRound": "Next round",
"save": "Save",

View file

@ -273,6 +273,9 @@
"apiMaxTokensTip": "El parámetro <code class='fn__code'>max_tokens</code> que se pasa al solicitar la API se usa para controlar la longitud del texto generado",
"apiBaseURL": "URL base de la API",
"apiBaseURLTip": "La dirección base de la solicitud, como <code class='fn__code'>https://api.openai.com/v1</code>",
"apiUserAgentTip": "El agente de usuario que inició la solicitud, es decir, el encabezado HTTP <code class='fn__code'>User-Agent</code>",
"apiProvider": "API proveedor",
"apiProviderTip": "Utilice el proveedor de API seleccionado para implementar funciones relacionadas con la IA",
"skip": "barco",
"nextRound": "Siguiente ronda",
"save": "Ahorrar",

View file

@ -273,6 +273,9 @@
"apiMaxTokensTip": "Le paramètre <code class='fn__code'>max_tokens</code> transmis lors de la demande de l'API est utilisé pour contrôler la longueur du texte généré",
"apiBaseURL": "URL de base de l'API",
"apiBaseURLTip": "L'adresse de base de la requête, telle que <code class='fn__code'>https://api.openai.com/v1</code>",
"apiUserAgentTip": "L'agent utilisateur qui a initié la requête, c'est-à-dire l'en-tête HTTP <code class='fn__code'>User-Agent</code>",
"apiProvider": "API du fournisseur",
"apiProviderTip": "Utiliser le fournisseur d'API sélectionné pour implémenter les fonctions liées à l'IA",
"skip": "Navire",
"nextRound": "Prochain tour",
"save": "Sauvegarder",

View file

@ -273,6 +273,9 @@
"apiMaxTokensTip": "請求 API 時傳入的 <code class='fn__code'>max_tokens</code> 參數,用於控制生成的文字長度",
"apiBaseURL": "API 基礎地址",
"apiBaseURLTip": "發起請求的基礎地址,如 <code class='fn__code'>https://api.openai.com/v1</code>",
"apiUserAgentTip": "發起請求的使用者代理,即 HTTP 標頭 <code class='fn__code'>User-Agent</code>",
"apiProvider": "API 提供商",
"apiProviderTip": "選擇後將使用該提供商的 API 服務實現 AI 相關功能",
"skip": "跳過",
"nextRound": "下一輪",
"save": "保存",

View file

@ -273,6 +273,9 @@
"apiMaxTokensTip": "请求 API 时传入的 <code class='fn__code'>max_tokens</code> 参数,用于控制生成的文本长度",
"apiBaseURL": "API 基础地址",
"apiBaseURLTip": "发起请求的基础地址,如 <code class='fn__code'>https://api.openai.com/v1</code>",
"apiUserAgentTip": "发起请求的用户代理,即 HTTP 标头 <code class='fn__code'>User-Agent</code>",
"apiProvider": "API 提供商",
"apiProviderTip": "选择后将使用该提供商的 API 服务实现 AI 相关功能",
"skip": "跳过",
"nextRound": "下一轮",
"save": "保存",

View file

@ -6,33 +6,35 @@ export const ai = {
let responsiveHTML = "";
/// #if MOBILE
responsiveHTML = `<div class="b3-label">
${window.siyuan.languages.apiProvider}
<div class="b3-label__text">
${window.siyuan.languages.apiProviderTip}
</div>
<div class="b3-label__text fn__flex config__item" style="padding: 4px 0 4px 4px;">
<select id="apiProvider" class="b3-select">
<option value="OpenAI" ${window.siyuan.config.ai.openAI.apiProvider === "OpenAI" ? "selected" : ""}>OpenAI</option>
<option value="Azure" ${window.siyuan.config.ai.openAI.apiProvider === "Azure" ? "selected" : ""}>Azure</option>
</select>
</div>
</div>
<div class="b3-label">
${window.siyuan.languages.apiTimeout}
<div class="fn__hr"></div>
<input class="b3-text-field fn__flex-center fn__block" type="number" step="1" min="5" max="600" id="apiTimeout" value="${window.siyuan.config.ai.openAI.apiTimeout}"/>
<div class="b3-label__text">${window.siyuan.languages.apiTimeoutTip}</div>
</div>
<div class="b3-label">
${window.siyuan.languages.apiModel}
<div class="b3-label__text">
${window.siyuan.languages.apiModelTip}
</div>
<div class="b3-label__text fn__flex config__item" style="padding: 4px 0 4px 4px;">
<select id="apiModel" class="b3-select">
<option value="gpt-4" ${window.siyuan.config.ai.openAI.apiModel === "gpt-4" ? "selected" : ""}>gpt-4</option>
<option value="gpt-4-32k" ${window.siyuan.config.ai.openAI.apiModel === "gpt-4-32k" ? "selected" : ""}>gpt-4-32k</option>
<option value="gpt-4-1106-preview" ${window.siyuan.config.ai.openAI.apiModel === "gpt-4-1106-preview" ? "selected" : ""}>gpt-4-1106-preview</option>
<option value="gpt-3.5-turbo" ${window.siyuan.config.ai.openAI.apiModel === "gpt-3.5-turbo" ? "selected" : ""}>gpt-3.5-turbo</option>
<option value="gpt-3.5-turbo-16k" ${window.siyuan.config.ai.openAI.apiModel === "gpt-3.5-turbo-16k" ? "selected" : ""}>gpt-3.5-turbo-16k</option>
<option value="gpt-3.5-turbo-1106" ${window.siyuan.config.ai.openAI.apiModel === "gpt-3.5-turbo-1106" ? "selected" : ""}>gpt-3.5-turbo-1106</option>
</select>
</div>
</div>
<div class="b3-label">
${window.siyuan.languages.apiMaxTokens}
<div class="fn__hr"></div>
<input class="b3-text-field fn__flex-center fn__block" type="number" step="1" min="0" id="apiMaxTokens" value="${window.siyuan.config.ai.openAI.apiMaxTokens}"/>
<div class="b3-label__text">${window.siyuan.languages.apiMaxTokensTip}</div>
</div>
<div class="b3-label">
${window.siyuan.languages.apiModel}
<div class="fn__hr"></div>
<input class="b3-text-field fn__block" id="apiModel" value="${window.siyuan.config.ai.openAI.apiModel}"/>
<div class="b3-label__text">${window.siyuan.languages.apiModelTip}</div>
</div>
<div class="b3-label">
${window.siyuan.languages.apiKey}
<div class="fn__hr"></div>
@ -50,9 +52,26 @@ export const ai = {
<div class="fn__hr"></div>
<input class="b3-text-field fn__block" id="apiBaseURL" value="${window.siyuan.config.ai.openAI.apiBaseURL}"/>
<div class="b3-label__text">${window.siyuan.languages.apiBaseURLTip}</div>
</div>
<div class="b3-label">
User-Agent
<div class="fn__hr"></div>
<input class="b3-text-field fn__block" id="apiUserAgent" value="${window.siyuan.config.ai.openAI.apiUserAgent}"/>
<div class="b3-label__text">${window.siyuan.languages.apiUserAgentTip}</div>
</div>`;
/// #else
responsiveHTML = `<div class="fn__flex b3-label">
responsiveHTML = `<div class="fn__flex b3-label config__item">
<div class="fn__flex-1">
${window.siyuan.languages.apiProvider}
<div class="b3-label__text">${window.siyuan.languages.apiProviderTip}</div>
</div>
<span class="fn__space"></span>
<select id="apiProvider" class="b3-select fn__flex-center fn__size200">
<option value="OpenAI" ${window.siyuan.config.ai.openAI.apiProvider === "OpenAI" ? "selected" : ""}>OpenAI</option>
<option value="Azure" ${window.siyuan.config.ai.openAI.apiProvider === "Azure" ? "selected" : ""}>Azure</option>
</select>
</div>
<div class="fn__flex b3-label">
<div class="fn__flex-1">
${window.siyuan.languages.apiTimeout}
<div class="b3-label__text">${window.siyuan.languages.apiTimeoutTip}</div>
@ -60,21 +79,6 @@ export const ai = {
<span class="fn__space"></span>
<input class="b3-text-field fn__flex-center fn__size200" type="number" step="1" min="5" max="600" id="apiTimeout" value="${window.siyuan.config.ai.openAI.apiTimeout}"/>
</div>
<div class="fn__flex b3-label config__item">
<div class="fn__flex-1">
${window.siyuan.languages.apiModel}
<div class="b3-label__text">${window.siyuan.languages.apiModelTip}</div>
</div>
<span class="fn__space"></span>
<select id="apiModel" class="b3-select fn__flex-center fn__size200">
<option value="gpt-4" ${window.siyuan.config.ai.openAI.apiModel === "gpt-4" ? "selected" : ""}>gpt-4</option>
<option value="gpt-4-32k" ${window.siyuan.config.ai.openAI.apiModel === "gpt-4-32k" ? "selected" : ""}>gpt-4-32k</option>
<option value="gpt-4-1106-preview" ${window.siyuan.config.ai.openAI.apiModel === "gpt-4-1106-preview" ? "selected" : ""}>gpt-4-1106-preview</option>
<option value="gpt-3.5-turbo" ${window.siyuan.config.ai.openAI.apiModel === "gpt-3.5-turbo" ? "selected" : ""}>gpt-3.5-turbo</option>
<option value="gpt-3.5-turbo-16k" ${window.siyuan.config.ai.openAI.apiModel === "gpt-3.5-turbo-16k" ? "selected" : ""}>gpt-3.5-turbo-16k</option>
<option value="gpt-3.5-turbo-1106" ${window.siyuan.config.ai.openAI.apiModel === "gpt-3.5-turbo-1106" ? "selected" : ""}>gpt-3.5-turbo-1106</option>
</select>
</div>
<div class="fn__flex b3-label">
<div class="fn__flex-1">
${window.siyuan.languages.apiMaxTokens}
@ -83,6 +87,14 @@ export const ai = {
<span class="fn__space"></span>
<input class="b3-text-field fn__flex-center fn__size200" type="number" step="1" min="0" id="apiMaxTokens" value="${window.siyuan.config.ai.openAI.apiMaxTokens}"/>
</div>
<div class="fn__flex b3-label">
<div class="fn__block">
${window.siyuan.languages.apiModel}
<div class="b3-label__text">${window.siyuan.languages.apiModelTip}</div>
<div class="fn__hr"></div>
<input class="b3-text-field fn__block" id="apiModel" value="${window.siyuan.config.ai.openAI.apiModel}"/>
</div>
</div>
<div class="fn__flex b3-label">
<div class="fn__block">
${window.siyuan.languages.apiKey}
@ -106,6 +118,14 @@ export const ai = {
<span class="fn__hr"></span>
<input class="b3-text-field fn__block" id="apiBaseURL" value="${window.siyuan.config.ai.openAI.apiBaseURL}"/>
</div>
</div>
<div class="fn__flex b3-label">
<div class="fn__block">
User-Agent
<div class="b3-label__text">${window.siyuan.languages.apiUserAgentTip}</div>
<span class="fn__hr"></span>
<input class="b3-text-field fn__block" id="apiUserAgent" value="${window.siyuan.config.ai.openAI.apiUserAgent}"/>
</div>
</div>`;
/// #endif
return `<div class="fn__flex-column" style="height: 100%">
@ -124,6 +144,7 @@ export const ai = {
item.addEventListener("change", () => {
fetchPost("/api/setting/setAI", {
openAI: {
apiUserAgent: (ai.element.querySelector("#apiUserAgent") as HTMLInputElement).value,
apiBaseURL: (ai.element.querySelector("#apiBaseURL") as HTMLInputElement).value,
apiKey: (ai.element.querySelector("#apiKey") as HTMLInputElement).value,
apiModel: (ai.element.querySelector("#apiModel") as HTMLSelectElement).value,

View file

@ -722,6 +722,8 @@ interface IConfig {
}
ai: {
openAI: {
apiProvider: string // OpenAI, Azure
apiUserAgent: string
apiBaseURL: string
apiKey: string
apiModel: string