diff --git a/src/composables/useSetupWizard.ts b/src/composables/useSetupWizard.ts index 62c917cc..2b4cdeff 100644 --- a/src/composables/useSetupWizard.ts +++ b/src/composables/useSetupWizard.ts @@ -57,18 +57,23 @@ export interface WizardData { model: string thinkingLevel: string supportImageInput: boolean - supportAudioInputOutput: boolean + supportAudioInput: boolean + supportAudioOutput: boolean apiKey: string baseUrl: string baseUrlPreset: string maxContextTokens: number - voiceApiKey: string - voiceBaseUrl: string - voiceSttModel: string - voiceTtsModel: string - voiceTtsVoice: string - voiceLanguage: string - voiceReplyWithText: boolean + audioInputProvider: string + audioInputApiKey: string + audioInputBaseUrl: string + audioInputModel: string + audioInputLanguage: string + audioOutputProvider: string + audioOutputApiKey: string + audioOutputBaseUrl: string + audioOutputModel: string + audioOutputVoice: string + audioOutputIncludeText: boolean jobInterval: number retryTransfer: boolean recommendEnabled: boolean @@ -238,18 +243,23 @@ const wizardData = ref({ model: 'deepseek-chat', thinkingLevel: 'off', supportImageInput: true, - supportAudioInputOutput: false, + supportAudioInput: false, + supportAudioOutput: false, apiKey: '', baseUrl: 'https://api.deepseek.com', baseUrlPreset: '', maxContextTokens: 64, - voiceApiKey: '', - voiceBaseUrl: '', - voiceSttModel: 'gpt-4o-mini-transcribe', - voiceTtsModel: 'gpt-4o-mini-tts', - voiceTtsVoice: 'alloy', - voiceLanguage: 'zh', - voiceReplyWithText: false, + audioInputProvider: 'openai', + audioInputApiKey: '', + audioInputBaseUrl: '', + audioInputModel: 'gpt-4o-mini-transcribe', + audioInputLanguage: 'zh', + audioOutputProvider: 'openai', + audioOutputApiKey: '', + audioOutputBaseUrl: '', + audioOutputModel: 'gpt-4o-mini-tts', + audioOutputVoice: 'alloy', + audioOutputIncludeText: false, jobInterval: 0, retryTransfer: false, recommendEnabled: false, @@ -1430,18 +1440,23 @@ export function useSetupWizard() { LLM_MODEL: wizardData.value.agent.model, LLM_THINKING_LEVEL: wizardData.value.agent.thinkingLevel, LLM_SUPPORT_IMAGE_INPUT: wizardData.value.agent.supportImageInput, - LLM_SUPPORT_AUDIO_INPUT_OUTPUT: wizardData.value.agent.supportAudioInputOutput, + LLM_SUPPORT_AUDIO_INPUT: wizardData.value.agent.supportAudioInput, + LLM_SUPPORT_AUDIO_OUTPUT: wizardData.value.agent.supportAudioOutput, LLM_API_KEY: wizardData.value.agent.apiKey, LLM_BASE_URL: wizardData.value.agent.baseUrl || null, LLM_BASE_URL_PRESET: wizardData.value.agent.baseUrlPreset || null, LLM_MAX_CONTEXT_TOKENS: wizardData.value.agent.maxContextTokens, - AI_VOICE_API_KEY: wizardData.value.agent.voiceApiKey || null, - AI_VOICE_BASE_URL: wizardData.value.agent.voiceBaseUrl || null, - AI_VOICE_STT_MODEL: wizardData.value.agent.voiceSttModel, - AI_VOICE_TTS_MODEL: wizardData.value.agent.voiceTtsModel, - AI_VOICE_TTS_VOICE: wizardData.value.agent.voiceTtsVoice, - AI_VOICE_LANGUAGE: wizardData.value.agent.voiceLanguage, - AI_VOICE_REPLY_WITH_TEXT: wizardData.value.agent.voiceReplyWithText, + AUDIO_INPUT_PROVIDER: wizardData.value.agent.audioInputProvider || 'openai', + AUDIO_INPUT_API_KEY: wizardData.value.agent.audioInputApiKey || null, + AUDIO_INPUT_BASE_URL: wizardData.value.agent.audioInputBaseUrl || null, + AUDIO_INPUT_MODEL: wizardData.value.agent.audioInputModel, + AUDIO_INPUT_LANGUAGE: wizardData.value.agent.audioInputLanguage, + AUDIO_OUTPUT_PROVIDER: wizardData.value.agent.audioOutputProvider || 'openai', + AUDIO_OUTPUT_API_KEY: wizardData.value.agent.audioOutputApiKey || null, + AUDIO_OUTPUT_BASE_URL: wizardData.value.agent.audioOutputBaseUrl || null, + AUDIO_OUTPUT_MODEL: wizardData.value.agent.audioOutputModel, + AUDIO_OUTPUT_VOICE: wizardData.value.agent.audioOutputVoice, + AUDIO_OUTPUT_INCLUDE_TEXT: wizardData.value.agent.audioOutputIncludeText, AI_AGENT_JOB_INTERVAL: wizardData.value.agent.enabled ? wizardData.value.agent.jobInterval : 0, AI_AGENT_RETRY_TRANSFER: wizardData.value.agent.enabled ? wizardData.value.agent.retryTransfer : false, AI_RECOMMEND_ENABLED: @@ -1538,18 +1553,23 @@ export function useSetupWizard() { wizardData.value.agent.model = result.data.LLM_MODEL || '' wizardData.value.agent.thinkingLevel = resolveThinkingLevelValue(result.data) wizardData.value.agent.supportImageInput = result.data.LLM_SUPPORT_IMAGE_INPUT ?? true - wizardData.value.agent.supportAudioInputOutput = Boolean(result.data.LLM_SUPPORT_AUDIO_INPUT_OUTPUT) + wizardData.value.agent.supportAudioInput = Boolean(result.data.LLM_SUPPORT_AUDIO_INPUT) + wizardData.value.agent.supportAudioOutput = Boolean(result.data.LLM_SUPPORT_AUDIO_OUTPUT) wizardData.value.agent.apiKey = result.data.LLM_API_KEY || '' wizardData.value.agent.baseUrl = result.data.LLM_BASE_URL || '' wizardData.value.agent.baseUrlPreset = result.data.LLM_BASE_URL_PRESET || '' wizardData.value.agent.maxContextTokens = result.data.LLM_MAX_CONTEXT_TOKENS || 64 - wizardData.value.agent.voiceApiKey = result.data.AI_VOICE_API_KEY || '' - wizardData.value.agent.voiceBaseUrl = result.data.AI_VOICE_BASE_URL || '' - wizardData.value.agent.voiceSttModel = result.data.AI_VOICE_STT_MODEL || 'gpt-4o-mini-transcribe' - wizardData.value.agent.voiceTtsModel = result.data.AI_VOICE_TTS_MODEL || 'gpt-4o-mini-tts' - wizardData.value.agent.voiceTtsVoice = result.data.AI_VOICE_TTS_VOICE || 'alloy' - wizardData.value.agent.voiceLanguage = result.data.AI_VOICE_LANGUAGE || 'zh' - wizardData.value.agent.voiceReplyWithText = Boolean(result.data.AI_VOICE_REPLY_WITH_TEXT) + wizardData.value.agent.audioInputProvider = result.data.AUDIO_INPUT_PROVIDER || 'openai' + wizardData.value.agent.audioInputApiKey = result.data.AUDIO_INPUT_API_KEY || '' + wizardData.value.agent.audioInputBaseUrl = result.data.AUDIO_INPUT_BASE_URL || '' + wizardData.value.agent.audioInputModel = result.data.AUDIO_INPUT_MODEL || 'gpt-4o-mini-transcribe' + wizardData.value.agent.audioInputLanguage = result.data.AUDIO_INPUT_LANGUAGE || 'zh' + wizardData.value.agent.audioOutputProvider = result.data.AUDIO_OUTPUT_PROVIDER || 'openai' + wizardData.value.agent.audioOutputApiKey = result.data.AUDIO_OUTPUT_API_KEY || '' + wizardData.value.agent.audioOutputBaseUrl = result.data.AUDIO_OUTPUT_BASE_URL || '' + wizardData.value.agent.audioOutputModel = result.data.AUDIO_OUTPUT_MODEL || 'gpt-4o-mini-tts' + wizardData.value.agent.audioOutputVoice = result.data.AUDIO_OUTPUT_VOICE || 'alloy' + wizardData.value.agent.audioOutputIncludeText = Boolean(result.data.AUDIO_OUTPUT_INCLUDE_TEXT) wizardData.value.agent.jobInterval = result.data.AI_AGENT_JOB_INTERVAL || 0 wizardData.value.agent.retryTransfer = Boolean(result.data.AI_AGENT_RETRY_TRANSFER) wizardData.value.agent.recommendEnabled = Boolean(result.data.AI_RECOMMEND_ENABLED) diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index d154d8f6..950e4095 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -1418,9 +1418,12 @@ export default { llmSupportImageInput: 'Model Supports Image Input', llmSupportImageInputHint: 'When enabled, message images are sent to the LLM as multimodal image input. When disabled, images are saved locally as attachments and only the file path is passed to the AI assistant.', - llmSupportAudioInputOutput: 'Support Audio Input and Output', - llmSupportAudioInputOutputHint: - 'When enabled, the AI assistant can transcribe incoming audio messages and reply with voice on supported channels.', + llmSupportAudioInput: 'Support Audio Input', + llmSupportAudioInputHint: + 'When enabled, incoming audio messages are transcribed before being handled by the AI assistant.', + llmSupportAudioOutput: 'Support Audio Output', + llmSupportAudioOutputHint: + 'When enabled, the AI assistant can send voice replies on supported channels.', llmMaxContextTokens: 'LLM Max Context Tokens (K)', llmMaxContextTokensHint: 'Set the maximum number of context tokens (in thousands) for the LLM. Exceeding this limit will trigger context trimming.', @@ -1441,23 +1444,36 @@ export default { llmProviderDeviceCode: 'Device Code', llmProviderOpenAuthPage: 'Open Authorization Page', llmProviderCheckAuthStatus: 'Check Authorization Status', - aiVoiceApiKey: 'Audio API Key', - aiVoiceApiKeyHint: - 'API key used for audio transcription and speech synthesis. Falls back to the current LLM API key when left blank.', - aiVoiceBaseUrl: 'Audio Base URL', - aiVoiceBaseUrlHint: - 'Base URL used for audio transcription and speech synthesis. Falls back to the current LLM base URL when left blank.', - aiVoiceSttModel: 'Audio Transcription Model', - aiVoiceSttModelHint: 'Model name used to convert audio content into text.', - aiVoiceTtsModel: 'Speech Synthesis Model', - aiVoiceTtsModelHint: 'Model name used to convert text content into speech.', - aiVoiceTtsVoice: 'Voice Preset', - aiVoiceTtsVoiceHint: 'Speaker or voice preset used for speech synthesis.', - aiVoiceLanguage: 'Recognition Language', - aiVoiceLanguageHint: + audioInputProvider: 'Audio Input Provider', + audioInputProviderHint: + 'Service used to transcribe incoming audio messages. Supports OpenAI audio, Chat Audio compatible APIs, and Xiaomi MiMo.', + audioProviderOpenAiAudio: 'OpenAI Audio Compatible', + audioProviderChatAudio: 'Chat Audio Compatible', + audioProviderMimo: 'Xiaomi MiMo', + audioInputApiKey: 'Audio Input API Key', + audioInputApiKeyHint: 'API key used for audio transcription.', + audioInputBaseUrl: 'Audio Input Base URL', + audioInputBaseUrlHint: + 'Base URL for audio input. Use the matching compatible endpoint for Chat Audio services; MiMo defaults to https://api.xiaomimimo.com/v1.', + audioInputModel: 'Audio Input Model', + audioInputModelHint: 'Model name used to convert audio content into text.', + audioInputLanguage: 'Recognition Language', + audioInputLanguageHint: 'Default language for audio transcription, such as zh or en. Leave blank to use the backend default.', - aiVoiceReplyWithText: 'Include Text with Voice Replies', - aiVoiceReplyWithTextHint: 'When sending a voice reply, also include the text version of the response.', + audioOutputProvider: 'Audio Output Provider', + audioOutputProviderHint: + 'Service used to generate voice replies. Supports OpenAI audio, Chat Audio compatible APIs, and Xiaomi MiMo.', + audioOutputApiKey: 'Audio Output API Key', + audioOutputApiKeyHint: 'API key used for speech synthesis.', + audioOutputBaseUrl: 'Audio Output Base URL', + audioOutputBaseUrlHint: + 'Base URL for audio output. Use the matching compatible endpoint for Chat Audio services; MiMo defaults to https://api.xiaomimimo.com/v1.', + audioOutputModel: 'Audio Output Model', + audioOutputModelHint: 'Model name used to convert text content into speech.', + audioOutputVoice: 'Voice Preset', + audioOutputVoiceHint: 'Speaker or voice preset used for speech synthesis.', + audioOutputIncludeText: 'Include Text with Voice Replies', + audioOutputIncludeTextHint: 'When sending a voice reply, also include the text version of the response.', llmTestAction: 'Test Call', llmTestSuccessToast: 'LLM test call succeeded', llmTestFailedToast: 'LLM test call failed', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index a78194c7..5e05cd93 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1410,9 +1410,10 @@ export default { llmSupportImageInput: '模型支持图片输入', llmSupportImageInputHint: '启用后,消息中的图片会按多模态图片发送给 LLM;关闭后图片会作为附件保存到本地,并将文件路径提供给智能助手处理', - llmSupportAudioInputOutput: '支持音频输入输出', - llmSupportAudioInputOutputHint: - '启用后,智能助手可以转写用户发送的音频消息,并在支持的渠道上回复语音', + llmSupportAudioInput: '支持音频输入', + llmSupportAudioInputHint: '启用后,智能助手会将用户发送的音频消息转写为文字再处理', + llmSupportAudioOutput: '支持音频输出', + llmSupportAudioOutputHint: '启用后,智能助手可以在支持的渠道上发送语音回复', llmMaxContextTokens: 'LLM 最大上下文 Token 数量 (K)', llmMaxContextTokensHint: '设定 LLM 记录会话历史的最大 Token 数量上限(千),超出后将自动修整历史记录以节省 Token 消耗及防止超出 LLM 限制', @@ -1431,20 +1432,31 @@ export default { llmProviderDeviceCode: '设备码', llmProviderOpenAuthPage: '打开授权页面', llmProviderCheckAuthStatus: '检查授权状态', - aiVoiceApiKey: '音频 API密钥', - aiVoiceApiKeyHint: '音频转写与语音合成使用的 API 密钥,留空时回退到当前 LLM API 密钥', - aiVoiceBaseUrl: '音频基础URL', - aiVoiceBaseUrlHint: '音频转写与语音合成接口的基础URL,留空时回退到当前 LLM 基础 URL', - aiVoiceSttModel: '音频转写模型', - aiVoiceSttModelHint: '用于将音频内容转换为文字的模型名称', - aiVoiceTtsModel: '语音合成模型', - aiVoiceTtsModelHint: '用于将文字内容转换为语音的模型名称', - aiVoiceTtsVoice: '语音音色', - aiVoiceTtsVoiceHint: '语音合成使用的发音人或音色标识', - aiVoiceLanguage: '识别语言', - aiVoiceLanguageHint: '音频转写默认语言,例如 zh、en,留空时按后端默认处理', - aiVoiceReplyWithText: '语音回复附带文字', - aiVoiceReplyWithTextHint: '发送语音回复时,同时附带一份文字内容', + audioInputProvider: '音频输入提供商', + audioInputProviderHint: '用于识别用户音频消息的服务,支持 OpenAI 音频接口、Chat Audio 兼容接口和 Xiaomi MiMo', + audioProviderOpenAiAudio: 'OpenAI Audio 兼容', + audioProviderChatAudio: 'Chat Audio 兼容', + audioProviderMimo: '小米 MiMo', + audioInputApiKey: '音频输入 API密钥', + audioInputApiKeyHint: '音频输入转写使用的 API 密钥', + audioInputBaseUrl: '音频输入基础URL', + audioInputBaseUrlHint: '音频输入接口基础URL,Chat Audio 类服务可填写对应兼容地址,MiMo 默认 https://api.xiaomimimo.com/v1', + audioInputModel: '音频输入模型', + audioInputModelHint: '用于将音频内容转换为文字的模型名称', + audioInputLanguage: '识别语言', + audioInputLanguageHint: '音频转写默认语言,例如 zh、en,留空时按后端默认处理', + audioOutputProvider: '音频输出提供商', + audioOutputProviderHint: '用于生成语音回复的服务,支持 OpenAI 音频接口、Chat Audio 兼容接口和 Xiaomi MiMo', + audioOutputApiKey: '音频输出 API密钥', + audioOutputApiKeyHint: '文字转语音使用的 API 密钥', + audioOutputBaseUrl: '音频输出基础URL', + audioOutputBaseUrlHint: '音频输出接口基础URL,Chat Audio 类服务可填写对应兼容地址,MiMo 默认 https://api.xiaomimimo.com/v1', + audioOutputModel: '音频输出模型', + audioOutputModelHint: '用于将文字内容转换为语音的模型名称', + audioOutputVoice: '语音音色', + audioOutputVoiceHint: '语音合成使用的发音人或音色标识', + audioOutputIncludeText: '语音回复附带文字', + audioOutputIncludeTextHint: '发送语音回复时,同时附带一份文字内容', llmTestAction: '测试调用', llmTestSuccessToast: 'LLM 调用测试成功', llmTestFailedToast: 'LLM 调用测试失败', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index a3b314e6..a91404a3 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -1412,9 +1412,10 @@ export default { llmSupportImageInput: '模型支援圖片輸入', llmSupportImageInputHint: '啟用後,消息中的圖片會按多模態圖片發送給 LLM;關閉後圖片會作為附件保存到本地,並將檔案路徑提供給智能助手處理', - llmSupportAudioInputOutput: '支援音頻輸入輸出', - llmSupportAudioInputOutputHint: - '啟用後,智能助手可以轉寫用戶發送的音頻消息,並在支援的渠道上回覆語音', + llmSupportAudioInput: '支援音頻輸入', + llmSupportAudioInputHint: '啟用後,智能助手會將用戶發送的音頻消息轉寫為文字再處理', + llmSupportAudioOutput: '支援音頻輸出', + llmSupportAudioOutputHint: '啟用後,智能助手可以在支援的渠道上發送語音回覆', llmMaxContextTokens: 'LLM 最大上下文 Token 數量 (K)', llmMaxContextTokensHint: '設定 LLM 記錄會話歷史的最大 Token 數量上限(千),超出後將自動修整歷史記錄以節省 Token 消耗及防止超出 LLM 限制', @@ -1433,20 +1434,31 @@ export default { llmProviderDeviceCode: '設備碼', llmProviderOpenAuthPage: '開啟授權頁面', llmProviderCheckAuthStatus: '檢查授權狀態', - aiVoiceApiKey: '音頻 API密鑰', - aiVoiceApiKeyHint: '音頻轉寫與語音合成使用的 API 密鑰,留空時回退到當前 LLM API 密鑰', - aiVoiceBaseUrl: '音頻基礎URL', - aiVoiceBaseUrlHint: '音頻轉寫與語音合成接口的基礎URL,留空時回退到當前 LLM 基礎 URL', - aiVoiceSttModel: '音頻轉寫模型', - aiVoiceSttModelHint: '用於將音頻內容轉換為文字的模型名稱', - aiVoiceTtsModel: '語音合成模型', - aiVoiceTtsModelHint: '用於將文字內容轉換為語音的模型名稱', - aiVoiceTtsVoice: '語音音色', - aiVoiceTtsVoiceHint: '語音合成使用的發音人或音色標識', - aiVoiceLanguage: '識別語言', - aiVoiceLanguageHint: '音頻轉寫預設語言,例如 zh、en,留空時按後端預設處理', - aiVoiceReplyWithText: '語音回覆附帶文字', - aiVoiceReplyWithTextHint: '發送語音回覆時,同時附帶一份文字內容', + audioInputProvider: '音頻輸入提供商', + audioInputProviderHint: '用於識別用戶音頻消息的服務,支援 OpenAI 音頻接口、Chat Audio 兼容接口和 Xiaomi MiMo', + audioProviderOpenAiAudio: 'OpenAI Audio 兼容', + audioProviderChatAudio: 'Chat Audio 兼容', + audioProviderMimo: '小米 MiMo', + audioInputApiKey: '音頻輸入 API密鑰', + audioInputApiKeyHint: '音頻輸入轉寫使用的 API 密鑰', + audioInputBaseUrl: '音頻輸入基礎URL', + audioInputBaseUrlHint: '音頻輸入接口基礎URL,Chat Audio 類服務可填寫對應兼容地址,MiMo 預設 https://api.xiaomimimo.com/v1', + audioInputModel: '音頻輸入模型', + audioInputModelHint: '用於將音頻內容轉換為文字的模型名稱', + audioInputLanguage: '識別語言', + audioInputLanguageHint: '音頻轉寫預設語言,例如 zh、en,留空時按後端預設處理', + audioOutputProvider: '音頻輸出提供商', + audioOutputProviderHint: '用於生成語音回覆的服務,支援 OpenAI 音頻接口、Chat Audio 兼容接口和 Xiaomi MiMo', + audioOutputApiKey: '音頻輸出 API密鑰', + audioOutputApiKeyHint: '文字轉語音使用的 API 密鑰', + audioOutputBaseUrl: '音頻輸出基礎URL', + audioOutputBaseUrlHint: '音頻輸出接口基礎URL,Chat Audio 類服務可填寫對應兼容地址,MiMo 預設 https://api.xiaomimimo.com/v1', + audioOutputModel: '音頻輸出模型', + audioOutputModelHint: '用於將文字內容轉換為語音的模型名稱', + audioOutputVoice: '語音音色', + audioOutputVoiceHint: '語音合成使用的發音人或音色標識', + audioOutputIncludeText: '語音回覆附帶文字', + audioOutputIncludeTextHint: '發送語音回覆時,同時附帶一份文字內容', llmTestAction: '測試調用', llmTestSuccessToast: 'LLM 調用測試成功', llmTestFailedToast: 'LLM 調用測試失敗', diff --git a/src/views/setting/AccountSettingSystem.vue b/src/views/setting/AccountSettingSystem.vue index ddc054a0..e1f1e7a6 100644 --- a/src/views/setting/AccountSettingSystem.vue +++ b/src/views/setting/AccountSettingSystem.vue @@ -44,17 +44,22 @@ const SystemSettings = ref({ LLM_MODEL: 'deepseek-chat', LLM_THINKING_LEVEL: 'off', LLM_SUPPORT_IMAGE_INPUT: false, - LLM_SUPPORT_AUDIO_INPUT_OUTPUT: false, + LLM_SUPPORT_AUDIO_INPUT: false, + LLM_SUPPORT_AUDIO_OUTPUT: false, LLM_API_KEY: null, LLM_BASE_URL: 'https://api.deepseek.com', LLM_BASE_URL_PRESET: null, - AI_VOICE_API_KEY: null, - AI_VOICE_BASE_URL: null, - AI_VOICE_STT_MODEL: 'gpt-4o-mini-transcribe', - AI_VOICE_TTS_MODEL: 'gpt-4o-mini-tts', - AI_VOICE_TTS_VOICE: 'alloy', - AI_VOICE_LANGUAGE: 'zh', - AI_VOICE_REPLY_WITH_TEXT: false, + AUDIO_INPUT_PROVIDER: 'openai', + AUDIO_INPUT_API_KEY: null, + AUDIO_INPUT_BASE_URL: null, + AUDIO_INPUT_MODEL: 'gpt-4o-mini-transcribe', + AUDIO_INPUT_LANGUAGE: 'zh', + AUDIO_OUTPUT_PROVIDER: 'openai', + AUDIO_OUTPUT_API_KEY: null, + AUDIO_OUTPUT_BASE_URL: null, + AUDIO_OUTPUT_MODEL: 'gpt-4o-mini-tts', + AUDIO_OUTPUT_VOICE: 'alloy', + AUDIO_OUTPUT_INCLUDE_TEXT: false, AI_AGENT_RETRY_TRANSFER: false, AI_RECOMMEND_ENABLED: false, AI_RECOMMEND_USER_PREFERENCE: null, @@ -111,6 +116,12 @@ const SystemSettings = ref({ }, }) +const audioProviderItems = computed(() => [ + { title: t('setting.system.audioProviderOpenAiAudio'), value: 'openai' }, + { title: t('setting.system.audioProviderChatAudio'), value: 'openai_chat_audio' }, + { title: t('setting.system.audioProviderMimo'), value: 'mimo' }, +]) + // 刮削配置 const scrapingConfig = [ { @@ -1216,105 +1227,168 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => { /> - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/setup/AgentSettingsStep.vue b/src/views/setup/AgentSettingsStep.vue index 65a218fc..eee8f064 100644 --- a/src/views/setup/AgentSettingsStep.vue +++ b/src/views/setup/AgentSettingsStep.vue @@ -116,6 +116,12 @@ const thinkingLevelItems = computed(() => [ { title: t('setting.system.llmThinkingLevelXhigh'), value: 'xhigh' }, ]) +const audioProviderItems = computed(() => [ + { title: t('setting.system.audioProviderOpenAiAudio'), value: 'openai' }, + { title: t('setting.system.audioProviderChatAudio'), value: 'openai_chat_audio' }, + { title: t('setting.system.audioProviderMimo'), value: 'mimo' }, +]) + const providerAuthMethods = computed(() => selectedProvider.value?.oauth_methods || []) const providerAuthLabel = computed(() => selectedProvider.value?.auth_status?.label || '') const selectedModelInfo = computed(() => { @@ -390,20 +396,41 @@ onMounted(async () => { -