diff --git a/src/composables/useLlmProviderDirectory.ts b/src/composables/useLlmProviderDirectory.ts index 2456301a..0b7d5f3f 100644 --- a/src/composables/useLlmProviderDirectory.ts +++ b/src/composables/useLlmProviderDirectory.ts @@ -16,11 +16,17 @@ export interface LlmProviderAuthStatus { updated_at?: number | null } +export interface LlmProviderUrlPreset { + label: string + value: string +} + export interface LlmProvider { id: string name: string runtime: string default_base_url: string + base_url_presets?: LlmProviderUrlPreset[] base_url_editable: boolean requires_base_url: boolean supports_api_key: boolean @@ -96,9 +102,15 @@ export function useLlmProviderDirectory(options: UseLlmProviderDirectoryOptions) () => models.value.find(item => item.id === normalizeValue(options.model.value)) || null, ) const providerItems = computed(() => providers.value.map(item => ({ title: item.name, value: item.id }))) + const baseUrlPresetItems = computed(() => + (selectedProvider.value?.base_url_presets || []).map(item => ({ + title: item.label, + value: item.value, + })), + ) const providerConnected = computed(() => Boolean(selectedProvider.value?.auth_status?.connected)) const showBaseUrlField = computed( - () => Boolean(selectedProvider.value?.requires_base_url || selectedProvider.value?.base_url_editable), + () => Boolean(selectedProvider.value && (selectedProvider.value.oauth_methods || []).length === 0), ) const showApiKeyField = computed(() => selectedProvider.value?.supports_api_key !== false) const hasUsableCredential = computed(() => { @@ -333,6 +345,7 @@ export function useLlmProviderDirectory(options: UseLlmProviderDirectoryOptions) return { providers, providerItems, + baseUrlPresetItems, models, selectedProvider, selectedModel, diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index b9abf5c9..2ced4da9 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -1355,6 +1355,8 @@ export default { llmApiKey: 'LLM API Key', llmApiKeyHint: 'API key from the LLM service provider for authentication', llmApiKeyPlaceholder: 'Please enter API key', + llmBaseUrlPreset: 'LLM URL Preset', + llmBaseUrlPresetHint: 'Start with a provider preset URL, then edit the actual request URL below if needed', llmBaseUrl: 'LLM Base URL', llmBaseUrlHint: 'Base URL for LLM API, used for custom API endpoints', llmProviderAuth: 'Provider Authorization', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index aa35c1c4..612b54c8 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1348,6 +1348,8 @@ export default { llmApiKey: 'LLM API密钥', llmApiKeyHint: 'LLM服务提供商的API密钥,用于身份验证', llmApiKeyPlaceholder: '请输入API密钥', + llmBaseUrlPreset: 'LLM地址预设', + llmBaseUrlPresetHint: '可先选择供应商预设地址,再按需修改下方实际调用地址', llmBaseUrl: 'LLM基础URL', llmBaseUrlHint: 'LLM API的基础URL地址,用于自定义API端点', llmProviderAuth: '提供商授权', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index c5a98532..58b0cd2d 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -1350,6 +1350,8 @@ export default { llmApiKey: 'LLM API密鑰', llmApiKeyHint: 'LLM服務提供商的API密鑰,用於身份驗證', llmApiKeyPlaceholder: '請輸入API密鑰', + llmBaseUrlPreset: 'LLM位址預設', + llmBaseUrlPresetHint: '可先選擇提供商預設位址,再按需修改下方實際調用位址', llmBaseUrl: 'LLM基礎URL', llmBaseUrlHint: 'LLM API的基礎URL地址,用於自定義API端點', llmProviderAuth: '提供商授權', diff --git a/src/views/setting/AccountSettingSystem.vue b/src/views/setting/AccountSettingSystem.vue index 85d4d9d8..7e92dab8 100644 --- a/src/views/setting/AccountSettingSystem.vue +++ b/src/views/setting/AccountSettingSystem.vue @@ -221,6 +221,7 @@ const llmMaxContextRef = computed({ const { providerItems: llmProviderItems, + baseUrlPresetItems: llmBaseUrlPresetItems, models: llmModels, selectedProvider: selectedLlmProvider, selectedModel: selectedLlmModel, @@ -1015,11 +1016,24 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => { /> + diff --git a/src/views/setup/AgentSettingsStep.vue b/src/views/setup/AgentSettingsStep.vue index 002fd2fb..a107aa35 100644 --- a/src/views/setup/AgentSettingsStep.vue +++ b/src/views/setup/AgentSettingsStep.vue @@ -53,6 +53,7 @@ const authConnectedRef = computed({ const { providerItems, + baseUrlPresetItems, models: llmModels, selectedProvider, selectedModel, @@ -228,11 +229,24 @@ onMounted(async () => { +