Skip to content

Commit a218303

Browse files
committed
fix: Fixes dynamic loading of provider packages
1 parent a51dcdb commit a218303

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,21 +131,35 @@ export class AIProviderFactory {
131131
logger?: LDLogger,
132132
): Promise<AIProvider | undefined> {
133133
try {
134-
// Try to dynamically import the provider
135-
// This will work if the package is installed
136-
// eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-dynamic-require
137-
const { [providerClassName]: ProviderClass } = require(packageName);
134+
// Use dynamic import to load the provider module
135+
// This uses ESM resolution which can find packages in the user's node_modules
136+
// eslint-disable-next-line import/no-extraneous-dependencies
137+
const module = await import(packageName);
138+
const ProviderClass = module[providerClassName];
139+
140+
if (!ProviderClass) {
141+
logger?.warn(`Provider class ${providerClassName} not found in package ${packageName}`);
142+
return undefined;
143+
}
138144

139145
const provider = await ProviderClass.create(aiConfig, logger);
140146
logger?.debug(
141147
`Successfully created AIProvider for: ${aiConfig.provider?.name} with package ${packageName}`,
142148
);
143149
return provider;
144150
} catch (error) {
145-
// If the provider is not available or creation fails, return undefined
146-
logger?.warn(
147-
`Error creating AIProvider for: ${aiConfig.provider?.name} with package ${packageName}: ${error}`,
148-
);
151+
// Provide helpful error message if module is not found
152+
const err = error as Error & { code?: string };
153+
if (err.code === 'ERR_MODULE_NOT_FOUND' || err.message?.includes('Cannot find module')) {
154+
logger?.warn(
155+
`Error creating AIProvider for: ${aiConfig.provider?.name} with package ${packageName}: ${err.message}. ` +
156+
`Please install the ${packageName} package with your preferred package manager.`,
157+
);
158+
} else {
159+
logger?.warn(
160+
`Error creating AIProvider for: ${aiConfig.provider?.name} with package ${packageName}: ${error}`,
161+
);
162+
}
149163
return undefined;
150164
}
151165
}

0 commit comments

Comments
 (0)