diff --git a/packages/twenty-server/package.json b/packages/twenty-server/package.json index 17826ee1fe..d7c9daa9b3 100644 --- a/packages/twenty-server/package.json +++ b/packages/twenty-server/package.json @@ -20,6 +20,7 @@ "@ai-sdk/google": "^3.0.30", "@ai-sdk/mistral": "^3.0.20", "@ai-sdk/openai": "^3.0.30", + "@ai-sdk/openai-compatible": "^2.0.40", "@ai-sdk/provider-utils": "^4.0.15", "@ai-sdk/xai": "^3.0.57", "@aws-sdk/client-lambda": "3.1001.0", diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-models/services/sdk-provider-factory.service.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-models/services/sdk-provider-factory.service.ts index 0f2b979ab4..d3c1cda9b9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-models/services/sdk-provider-factory.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-models/services/sdk-provider-factory.service.ts @@ -8,6 +8,7 @@ import { createAnthropic, type AnthropicProvider } from '@ai-sdk/anthropic'; import { createGoogleGenerativeAI } from '@ai-sdk/google'; import { createMistral } from '@ai-sdk/mistral'; import { createOpenAI, type OpenAIProvider } from '@ai-sdk/openai'; +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; import { createXai } from '@ai-sdk/xai'; import { type LanguageModel } from 'ai'; import { type AiSdkPackage } from 'twenty-shared/ai'; @@ -80,11 +81,7 @@ export class SdkProviderFactoryService { } getRawOpenAIProvider(providerName: string): OpenAIProvider | undefined { - return this.getRawProvider( - providerName, - AI_SDK_OPENAI, - AI_SDK_OPENAI_COMPATIBLE, - ); + return this.getRawProvider(providerName, AI_SDK_OPENAI); } clearCache(): void { @@ -158,9 +155,10 @@ export class SdkProviderFactoryService { throw new Error('baseUrl is required for openai-compatible providers'); } - const provider = createOpenAI({ + const provider = createOpenAICompatible({ + name: config.name ?? 'openai-compatible', baseURL: config.baseUrl, - apiKey: config.apiKey ?? '', + ...(config.apiKey && { apiKey: config.apiKey }), }); return { diff --git a/yarn.lock b/yarn.lock index 8faa35e882..4b872317e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -113,6 +113,18 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/openai-compatible@npm:^2.0.40": + version: 2.0.41 + resolution: "@ai-sdk/openai-compatible@npm:2.0.41" + dependencies: + "@ai-sdk/provider": "npm:3.0.8" + "@ai-sdk/provider-utils": "npm:4.0.23" + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + checksum: 10c0/3f91ad098edfedff46d9fa14b015fa46e235cc460cfdf45f1fb3f5114baa625684436770993aa7b969dbbf5f835a640e062c75cbf3ae72bd746ce6a37f2636f2 + languageName: node + linkType: hard + "@ai-sdk/openai@npm:^3.0.30": version: 3.0.34 resolution: "@ai-sdk/openai@npm:3.0.34" @@ -177,6 +189,19 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/provider-utils@npm:4.0.23": + version: 4.0.23 + resolution: "@ai-sdk/provider-utils@npm:4.0.23" + dependencies: + "@ai-sdk/provider": "npm:3.0.8" + "@standard-schema/spec": "npm:^1.1.0" + eventsource-parser: "npm:^3.0.6" + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + checksum: 10c0/06e0aaf95eef47617d87709f78e321c87d26663bae16e68e9776a4bced8d78823d4c1514ac5e5e7dcb74f24a2e37152bc6b6eb1e31c9f0f77e54a020993c276a + languageName: node + linkType: hard + "@ai-sdk/provider@npm:2.0.1": version: 2.0.1 resolution: "@ai-sdk/provider@npm:2.0.1" @@ -60472,6 +60497,7 @@ __metadata: "@ai-sdk/google": "npm:^3.0.30" "@ai-sdk/mistral": "npm:^3.0.20" "@ai-sdk/openai": "npm:^3.0.30" + "@ai-sdk/openai-compatible": "npm:^2.0.40" "@ai-sdk/provider-utils": "npm:^4.0.15" "@ai-sdk/xai": "npm:^3.0.57" "@aws-sdk/client-lambda": "npm:3.1001.0"