From 4cceddc179761e060fa18292813d091f0ed9e98a Mon Sep 17 00:00:00 2001 From: MyPrototypeWhat Date: Mon, 1 Sep 2025 18:32:54 +0800 Subject: [PATCH] refactor(providerConfig): improve provider handling and configuration logic - Introduced formatPrivateKey utility for better private key management. - Updated handleSpecialProviders function to streamline provider type checks and error handling. - Enhanced providerToAiSdkConfig function to include Google Vertex AI configuration with private key formatting. - Removed commented-out code for clarity and maintainability. --- .../src/aiCore/provider/providerConfig.ts | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/renderer/src/aiCore/provider/providerConfig.ts b/src/renderer/src/aiCore/provider/providerConfig.ts index 6bebb87145..3b7c25ee42 100644 --- a/src/renderer/src/aiCore/provider/providerConfig.ts +++ b/src/renderer/src/aiCore/provider/providerConfig.ts @@ -1,4 +1,5 @@ import { + formatPrivateKey, hasProviderConfig, ProviderConfigFactory, type ProviderId, @@ -10,13 +11,13 @@ import { getAwsBedrockRegion, getAwsBedrockSecretAccessKey } from '@renderer/hooks/useAwsBedrock' -import { createVertexProvider, isVertexAIConfigured, isVertexProvider } from '@renderer/hooks/useVertexAI' +import { createVertexProvider, isVertexAIConfigured } from '@renderer/hooks/useVertexAI' import { getProviderByModel } from '@renderer/services/AssistantService' import { loggerService } from '@renderer/services/LoggerService' import store from '@renderer/store' import type { Model, Provider } from '@renderer/types' import { formatApiHost } from '@renderer/utils/api' -import { cloneDeep } from 'lodash' +import { cloneDeep, isEmpty } from 'lodash' import { aihubmixProviderCreator, newApiResolverCreator } from './config' import { getAiSdkProviderId } from './factory' @@ -53,12 +54,12 @@ function getRotatedApiKey(provider: Provider): string { * 处理特殊provider的转换逻辑 */ function handleSpecialProviders(model: Model, provider: Provider): Provider { - if (provider.type === 'vertexai' && !isVertexProvider(provider)) { - if (!isVertexAIConfigured()) { - throw new Error('VertexAI is not configured. Please configure project, location and service account credentials.') - } - return createVertexProvider(provider) - } + // if (provider.type === 'vertexai' && !isVertexProvider(provider)) { + // if (!isVertexAIConfigured()) { + // throw new Error('VertexAI is not configured. Please configure project, location and service account credentials.') + // } + // return createVertexProvider(provider) + // } if (provider.id === 'aihubmix') { return aihubmixProviderCreator(model, provider) @@ -155,6 +156,33 @@ export function providerToAiSdkConfig( extraOptions.accessKeyId = getAwsBedrockAccessKeyId() extraOptions.secretAccessKey = getAwsBedrockSecretAccessKey() } + // google-vertex + if (aiSdkProviderId === 'google-vertex') { + if (!isVertexAIConfigured()) { + throw new Error('VertexAI is not configured. Please configure project, location and service account credentials.') + } + const { project, location, googleCredentials } = createVertexProvider(actualProvider) + extraOptions.project = project + extraOptions.location = location + extraOptions.googleCredentials = { + ...googleCredentials, + privateKey: formatPrivateKey(googleCredentials.privateKey) + } + // extraOptions.headers = window.api.vertexAI.getAuthHeaders({ + // projectId: project, + // serviceAccount: { + // privateKey: googleCredentials.privateKey, + // clientEmail: googleCredentials.clientEmail + // } + // }) + if (baseConfig.baseURL.endsWith('/v1/')) { + baseConfig.baseURL = baseConfig.baseURL.slice(0, -4) + } else if (baseConfig.baseURL.endsWith('/v1')) { + baseConfig.baseURL = baseConfig.baseURL.slice(0, -3) + } + + baseConfig.baseURL = isEmpty(baseConfig.baseURL) ? '' : baseConfig.baseURL + } // 如果AI SDK支持该provider,使用原生配置 if (hasProviderConfig(aiSdkProviderId) && aiSdkProviderId !== 'openai-compatible') {