diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index c401fd74..a082831b 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -599,7 +599,8 @@ "parameter_type": { "string": "Text", "number": "Number", - "boolean": "Boolean" + "boolean": "Boolean", + "json": "JSON" } }, "prompts": { diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 4389060d..c66a4f30 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -582,7 +582,8 @@ "parameter_type": { "string": "テキスト", "number": "数値", - "boolean": "真偽値" + "boolean": "真偽値", + "json": "JSON" } }, "prompts": { diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 061cd412..bfd2a5c1 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -599,7 +599,8 @@ "parameter_type": { "string": "Текст", "number": "Число", - "boolean": "Логическое" + "boolean": "Логическое", + "json": "JSON" } }, "prompts": { diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index bf3a4fc8..5cf5fa01 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -588,7 +588,8 @@ "parameter_type": { "string": "文本", "number": "数字", - "boolean": "布尔值" + "boolean": "布尔值", + "json": "JSON" } }, "prompts": { diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index ac92e4c7..d22c6bcc 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -587,7 +587,8 @@ "parameter_type": { "string": "文字", "number": "數字", - "boolean": "布林值" + "boolean": "布林值", + "json": "JSON" } }, "prompts": { diff --git a/src/renderer/src/pages/home/Tabs/SettingsTab.tsx b/src/renderer/src/pages/home/Tabs/SettingsTab.tsx index 9f8f59fa..27289499 100644 --- a/src/renderer/src/pages/home/Tabs/SettingsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/SettingsTab.tsx @@ -1,4 +1,4 @@ -import { CheckOutlined, DeleteOutlined, PlusOutlined, QuestionCircleOutlined, ReloadOutlined } from '@ant-design/icons' +import { CheckOutlined, QuestionCircleOutlined, ReloadOutlined } from '@ant-design/icons' import { HStack } from '@renderer/components/Layout' import Scrollbar from '@renderer/components/Scrollbar' import { @@ -29,7 +29,7 @@ import { setShowMessageDivider } from '@renderer/store/settings' import { Assistant, AssistantSettings, ThemeMode } from '@renderer/types' -import { Button, Col, Input, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd' +import { Col, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd' import { FC, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -203,106 +203,6 @@ const SettingsTab: FC = (props) => { /> - {assistant?.settings?.customParameters?.map((param, index) => ( - - - - { - const newParams = [...(assistant?.settings?.customParameters || [])] - newParams[index] = { ...param, name: e.target.value } - onUpdateAssistantSettings({ customParameters: newParams }) - }} - /> - - - - - - - - {param.type === 'boolean' ? ( - { - const newParams = [...(assistant?.settings?.customParameters || [])] - newParams[index] = { ...param, value: checked } - onUpdateAssistantSettings({ customParameters: newParams }) - }} - /> - ) : param.type === 'number' ? ( - { - const newParams = [...(assistant?.settings?.customParameters || [])] - newParams[index] = { ...param, value: value || 0 } - onUpdateAssistantSettings({ customParameters: newParams }) - }} - step={0.01} - /> - ) : ( - { - const newParams = [...(assistant?.settings?.customParameters || [])] - newParams[index] = { ...param, value: e.target.value } - onUpdateAssistantSettings({ customParameters: newParams }) - }} - /> - )} - - - {t('settings.messages.title')} @@ -519,15 +419,4 @@ export const SettingGroup = styled.div<{ theme?: ThemeMode }>` background: var(--color-group-background); ` -const ParameterCard = styled.div` - margin-bottom: 8px; - padding: 8px; - border: 1px solid var(--color-border); - border-radius: 6px; - background: var(--color-background); - &:last-child { - margin-bottom: 12px; - } -` - export default SettingsTab diff --git a/src/renderer/src/pages/settings/AssistantSettings/AssistantModelSettings.tsx b/src/renderer/src/pages/settings/AssistantSettings/AssistantModelSettings.tsx index 4872d9b2..fcaef439 100644 --- a/src/renderer/src/pages/settings/AssistantSettings/AssistantModelSettings.tsx +++ b/src/renderer/src/pages/settings/AssistantSettings/AssistantModelSettings.tsx @@ -28,8 +28,8 @@ const AssistantModelSettings: FC = ({ assistant, updateAssistant, updateA const [customParameters, setCustomParameters] = useState< Array<{ name: string - value: string | number | boolean - type: 'string' | 'number' | 'boolean' + value: string | number | boolean | object + type: 'string' | 'number' | 'boolean' | 'json' }> >(assistant?.settings?.customParameters ?? []) const { t } = useTranslation() @@ -68,7 +68,7 @@ const AssistantModelSettings: FC = ({ assistant, updateAssistant, updateA const onUpdateCustomParameter = ( index: number, field: 'name' | 'value' | 'type', - value: string | number | boolean + value: string | number | boolean | object ) => { const newParams = [...customParameters] if (field === 'type') { @@ -80,6 +80,9 @@ const AssistantModelSettings: FC = ({ assistant, updateAssistant, updateA case 'boolean': defaultValue = false break + case 'json': + defaultValue = '' + break default: defaultValue = '' } @@ -113,6 +116,20 @@ const AssistantModelSettings: FC = ({ assistant, updateAssistant, updateA onChange={(checked) => onUpdateCustomParameter(index, 'value', checked)} /> ) + case 'json': + return ( + { + try { + const jsonValue = JSON.parse(e.target.value) + onUpdateCustomParameter(index, 'value', jsonValue) + } catch { + onUpdateCustomParameter(index, 'value', e.target.value) + } + }} + /> + ) default: return ( = ({ assistant, updateAssistant, updateA {t('models.parameter_type.string')} {t('models.parameter_type.number')} {t('models.parameter_type.boolean')} + {t('models.parameter_type.json')} {renderParameterValueInput(param, index)} diff --git a/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx b/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx index b34ea5ad..094ea934 100644 --- a/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx +++ b/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx @@ -25,7 +25,6 @@ const WebDavSettings: FC = () => { webdavUser: webDAVUser, webdavPass: webDAVPass, webdavPath: webDAVPath, - webdavAutoSync: webDAVAutoSync, webdavSyncInterval: webDAVSyncInterval } = useSettings() diff --git a/src/renderer/src/providers/BaseProvider.ts b/src/renderer/src/providers/BaseProvider.ts index eceff2ce..968bb283 100644 --- a/src/renderer/src/providers/BaseProvider.ts +++ b/src/renderer/src/providers/BaseProvider.ts @@ -3,7 +3,7 @@ import { getOllamaKeepAliveTime } from '@renderer/hooks/useOllama' import { getKnowledgeReferences } from '@renderer/services/KnowledgeService' import store from '@renderer/store' import { Assistant, Message, Model, Provider, Suggestion } from '@renderer/types' -import { delay } from '@renderer/utils' +import { delay, isJSON } from '@renderer/utils' import OpenAI from 'openai' import { CompletionsParams } from '.' @@ -101,13 +101,16 @@ export default abstract class BaseProvider { protected getCustomParameters(assistant: Assistant) { return ( - assistant?.settings?.customParameters?.reduce( - (acc, param) => ({ - ...acc, - [param.name]: param.value - }), - {} - ) || {} + assistant?.settings?.customParameters?.reduce((acc, param) => { + if (!param.name?.trim()) { + return acc + } + if (param.type === 'json') { + const value = param.value as string + return { ...acc, [param.name]: isJSON(value) ? JSON.parse(value) : value } + } + return { ...acc, [param.name]: param.value } + }, {}) || {} ) } } diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index 1dac3eb1..8badfc9c 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -32,8 +32,8 @@ export type AssistantSettings = { autoResetModel: boolean customParameters?: { name: string - value: string | number | boolean - type: 'string' | 'number' | 'boolean' + value: string | number | boolean | object + type: 'string' | 'number' | 'boolean' | 'json' }[] }