From a30e42d567ad340a9415371d80ef1f86b703398d Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Mon, 13 Oct 2025 14:59:25 +0000 Subject: [PATCH 1/2] fix: Rename to AIProviderFactory for more accurate naming --- packages/sdk/server-ai/src/LDAIClientImpl.ts | 13 +++++-- packages/sdk/server-ai/src/api/LDAIClient.ts | 3 +- packages/sdk/server-ai/src/api/chat/index.ts | 1 - .../AIProviderFactory.ts} | 36 +++++-------------- .../sdk/server-ai/src/api/providers/index.ts | 1 + 5 files changed, 21 insertions(+), 33 deletions(-) rename packages/sdk/server-ai/src/api/{chat/TrackedChatFactory.ts => providers/AIProviderFactory.ts} (81%) diff --git a/packages/sdk/server-ai/src/LDAIClientImpl.ts b/packages/sdk/server-ai/src/LDAIClientImpl.ts index c116e460fb..c19bd382f7 100644 --- a/packages/sdk/server-ai/src/LDAIClientImpl.ts +++ b/packages/sdk/server-ai/src/LDAIClientImpl.ts @@ -3,7 +3,8 @@ import * as Mustache from 'mustache'; import { LDContext, LDLogger } from '@launchdarkly/js-server-sdk-common'; import { LDAIAgent, LDAIAgentConfig, LDAIAgentDefaults } from './api/agents'; -import { SupportedAIProvider, TrackedChat, TrackedChatFactory } from './api/chat'; +import { TrackedChat } from './api/chat'; +import { AIProviderFactory, SupportedAIProvider } from './api/providers'; import { LDAIConfig, LDAIConfigTracker, @@ -246,7 +247,13 @@ export class LDAIClientImpl implements LDAIClient { return undefined; } - // Create the TrackedChat instance based on the provider - return TrackedChatFactory.create(aiConfig, aiConfig.tracker, this._logger, defaultAiProvider); + // Create the AIProvider instance + const provider = await AIProviderFactory.create(aiConfig, this._logger, defaultAiProvider); + if (!provider) { + return undefined; + } + + // Create the TrackedChat instance with the provider + return new TrackedChat(aiConfig, aiConfig.tracker, provider); } } diff --git a/packages/sdk/server-ai/src/api/LDAIClient.ts b/packages/sdk/server-ai/src/api/LDAIClient.ts index d11801fcb1..8e44bd1b24 100644 --- a/packages/sdk/server-ai/src/api/LDAIClient.ts +++ b/packages/sdk/server-ai/src/api/LDAIClient.ts @@ -1,7 +1,8 @@ import { LDContext } from '@launchdarkly/js-server-sdk-common'; import { LDAIAgent, LDAIAgentConfig, LDAIAgentDefaults } from './agents'; -import { SupportedAIProvider, TrackedChat } from './chat'; +import { TrackedChat } from './chat'; +import { SupportedAIProvider } from './providers'; import { LDAIConfig, LDAIDefaults } from './config/LDAIConfig'; /** diff --git a/packages/sdk/server-ai/src/api/chat/index.ts b/packages/sdk/server-ai/src/api/chat/index.ts index c95ec22e3c..f7876298ea 100644 --- a/packages/sdk/server-ai/src/api/chat/index.ts +++ b/packages/sdk/server-ai/src/api/chat/index.ts @@ -1,3 +1,2 @@ export * from './types'; export * from './TrackedChat'; -export * from './TrackedChatFactory'; diff --git a/packages/sdk/server-ai/src/api/chat/TrackedChatFactory.ts b/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts similarity index 81% rename from packages/sdk/server-ai/src/api/chat/TrackedChatFactory.ts rename to packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts index 4017a96417..ab3546a35e 100644 --- a/packages/sdk/server-ai/src/api/chat/TrackedChatFactory.ts +++ b/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts @@ -1,9 +1,7 @@ import { LDLogger } from '@launchdarkly/js-server-sdk-common'; import { LDAIConfig } from '../config/LDAIConfig'; -import { LDAIConfigTracker } from '../config/LDAIConfigTracker'; -import { AIProvider } from '../providers/AIProvider'; -import { TrackedChat } from './TrackedChat'; +import { AIProvider } from './AIProvider'; /** * List of supported AI providers. @@ -21,41 +19,19 @@ export const SUPPORTED_AI_PROVIDERS = [ export type SupportedAIProvider = (typeof SUPPORTED_AI_PROVIDERS)[number]; /** - * Factory for creating TrackedChat instances based on the provider configuration. + * Factory for creating AIProvider instances based on the provider configuration. */ -export class TrackedChatFactory { +export class AIProviderFactory { /** - * Create a TrackedChat instance based on the AI configuration. + * Create an AIProvider instance based on the AI configuration. * This method attempts to load provider-specific implementations dynamically. * Returns undefined if the provider is not supported. * * @param aiConfig The AI configuration - * @param tracker The tracker for AI operations * @param logger Optional logger for logging provider initialization * @param defaultAiProvider Optional default AI provider to use */ static async create( - aiConfig: LDAIConfig, - tracker: LDAIConfigTracker, - logger?: LDLogger, - defaultAiProvider?: SupportedAIProvider, - ): Promise { - const provider = await this._createAIProvider(aiConfig, logger, defaultAiProvider); - if (!provider) { - logger?.warn( - `Provider is not supported or failed to initialize: ${aiConfig.provider?.name ?? 'unknown'}`, - ); - return undefined; - } - - return new TrackedChat(aiConfig, tracker, provider); - } - - /** - * Create an AIProvider instance based on the AI configuration. - * This method attempts to load provider-specific implementations dynamically. - */ - private static async _createAIProvider( aiConfig: LDAIConfig, logger?: LDLogger, defaultAiProvider?: SupportedAIProvider, @@ -74,6 +50,10 @@ export class TrackedChatFactory { } } + // If no provider was successfully created, log a warning + logger?.warn( + `Provider is not supported or failed to initialize: ${aiConfig.provider?.name ?? 'unknown'}`, + ); return undefined; } diff --git a/packages/sdk/server-ai/src/api/providers/index.ts b/packages/sdk/server-ai/src/api/providers/index.ts index 3b4d3f90a4..5439dfa830 100644 --- a/packages/sdk/server-ai/src/api/providers/index.ts +++ b/packages/sdk/server-ai/src/api/providers/index.ts @@ -1 +1,2 @@ export * from './AIProvider'; +export * from './AIProviderFactory'; From 85ff969eb40731a30eb5e3d05488b8e0d4fb0b7a Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Mon, 13 Oct 2025 16:30:04 +0000 Subject: [PATCH 2/2] fix lint issue --- packages/sdk/server-ai/src/LDAIClientImpl.ts | 2 +- packages/sdk/server-ai/src/api/LDAIClient.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sdk/server-ai/src/LDAIClientImpl.ts b/packages/sdk/server-ai/src/LDAIClientImpl.ts index c19bd382f7..4a4c5e0d23 100644 --- a/packages/sdk/server-ai/src/LDAIClientImpl.ts +++ b/packages/sdk/server-ai/src/LDAIClientImpl.ts @@ -4,7 +4,6 @@ import { LDContext, LDLogger } from '@launchdarkly/js-server-sdk-common'; import { LDAIAgent, LDAIAgentConfig, LDAIAgentDefaults } from './api/agents'; import { TrackedChat } from './api/chat'; -import { AIProviderFactory, SupportedAIProvider } from './api/providers'; import { LDAIConfig, LDAIConfigTracker, @@ -17,6 +16,7 @@ import { VercelAISDKProvider, } from './api/config'; import { LDAIClient } from './api/LDAIClient'; +import { AIProviderFactory, SupportedAIProvider } from './api/providers'; import { LDAIConfigMapper } from './LDAIConfigMapper'; import { LDAIConfigTrackerImpl } from './LDAIConfigTrackerImpl'; import { LDClientMin } from './LDClientMin'; diff --git a/packages/sdk/server-ai/src/api/LDAIClient.ts b/packages/sdk/server-ai/src/api/LDAIClient.ts index 8e44bd1b24..3f98474a62 100644 --- a/packages/sdk/server-ai/src/api/LDAIClient.ts +++ b/packages/sdk/server-ai/src/api/LDAIClient.ts @@ -2,8 +2,8 @@ import { LDContext } from '@launchdarkly/js-server-sdk-common'; import { LDAIAgent, LDAIAgentConfig, LDAIAgentDefaults } from './agents'; import { TrackedChat } from './chat'; -import { SupportedAIProvider } from './providers'; import { LDAIConfig, LDAIDefaults } from './config/LDAIConfig'; +import { SupportedAIProvider } from './providers'; /** * Interface for performing AI operations using LaunchDarkly.