diff --git a/packages/ai-sdk-provider/package.json b/packages/ai-sdk-provider/package.json index bf509ee963..95f0dbb01d 100644 --- a/packages/ai-sdk-provider/package.json +++ b/packages/ai-sdk-provider/package.json @@ -1,6 +1,6 @@ { "name": "@cherrystudio/ai-sdk-provider", - "version": "0.1.2", + "version": "0.1.3", "description": "Cherry Studio AI SDK provider bundle with CherryIN routing.", "keywords": [ "ai-sdk", diff --git a/packages/ai-sdk-provider/src/cherryin-provider.ts b/packages/ai-sdk-provider/src/cherryin-provider.ts index 478380a411..1f799133d9 100644 --- a/packages/ai-sdk-provider/src/cherryin-provider.ts +++ b/packages/ai-sdk-provider/src/cherryin-provider.ts @@ -67,6 +67,10 @@ export interface CherryInProviderSettings { * Optional static headers applied to every request. */ headers?: HeadersInput + /** + * Optional endpoint type to distinguish different endpoint behaviors. + */ + endpointType?: 'openai' | 'openai-response' | 'anthropic' | 'gemini' | 'image-generation' | 'jina-rerank' } export interface CherryInProvider extends ProviderV2 { @@ -151,7 +155,8 @@ export const createCherryIn = (options: CherryInProviderSettings = {}): CherryIn baseURL = DEFAULT_CHERRYIN_BASE_URL, anthropicBaseURL = DEFAULT_CHERRYIN_ANTHROPIC_BASE_URL, geminiBaseURL = DEFAULT_CHERRYIN_GEMINI_BASE_URL, - fetch + fetch, + endpointType } = options const getJsonHeaders = createJsonHeadersGetter(options) @@ -205,7 +210,7 @@ export const createCherryIn = (options: CherryInProviderSettings = {}): CherryIn fetch }) - const createChatModel = (modelId: string, settings: OpenAIProviderSettings = {}) => { + const createChatModelByModelId = (modelId: string, settings: OpenAIProviderSettings = {}) => { if (isAnthropicModel(modelId)) { return createAnthropicModel(modelId) } @@ -223,6 +228,29 @@ export const createCherryIn = (options: CherryInProviderSettings = {}): CherryIn }) } + const createChatModel = (modelId: string, settings: OpenAIProviderSettings = {}) => { + if (!endpointType) return createChatModelByModelId(modelId, settings) + switch (endpointType) { + case 'anthropic': + return createAnthropicModel(modelId) + case 'gemini': + return createGeminiModel(modelId) + case 'openai': + return createOpenAIChatModel(modelId) + case 'openai-response': + default: + return new OpenAIResponsesLanguageModel(modelId, { + provider: `${CHERRYIN_PROVIDER_NAME}.openai`, + url, + headers: () => ({ + ...getJsonHeaders(), + ...settings.headers + }), + fetch + }) + } + } + const createCompletionModel = (modelId: string, settings: OpenAIProviderSettings = {}) => new OpenAICompletionLanguageModel(modelId, { provider: `${CHERRYIN_PROVIDER_NAME}.completion`, diff --git a/packages/aiCore/package.json b/packages/aiCore/package.json index fbbea52d40..75f75b0ab6 100644 --- a/packages/aiCore/package.json +++ b/packages/aiCore/package.json @@ -35,7 +35,7 @@ "peerDependencies": { "@ai-sdk/google": "^2.0.36", "@ai-sdk/openai": "^2.0.64", - "@cherrystudio/ai-sdk-provider": "^0.1.2", + "@cherrystudio/ai-sdk-provider": "^0.1.3", "ai": "^5.0.26" }, "dependencies": { diff --git a/src/renderer/src/aiCore/provider/providerConfig.ts b/src/renderer/src/aiCore/provider/providerConfig.ts index 07b4ceaa7d..39138f3642 100644 --- a/src/renderer/src/aiCore/provider/providerConfig.ts +++ b/src/renderer/src/aiCore/provider/providerConfig.ts @@ -227,6 +227,13 @@ export function providerToAiSdkConfig( baseConfig.baseURL += aiSdkProviderId === 'google-vertex' ? '/publishers/google' : '/publishers/anthropic/models' } + // cherryin + if (aiSdkProviderId === 'cherryin') { + if (model.endpoint_type) { + extraOptions.endpointType = model.endpoint_type + } + } + if (hasProviderConfig(aiSdkProviderId) && aiSdkProviderId !== 'openai-compatible') { const options = ProviderConfigFactory.fromProvider(aiSdkProviderId, baseConfig, extraOptions) return { diff --git a/yarn.lock b/yarn.lock index 240532dfb3..ce67881109 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1909,7 +1909,7 @@ __metadata: peerDependencies: "@ai-sdk/google": ^2.0.36 "@ai-sdk/openai": ^2.0.64 - "@cherrystudio/ai-sdk-provider": ^0.1.2 + "@cherrystudio/ai-sdk-provider": ^0.1.3 ai: ^5.0.26 languageName: unknown linkType: soft