@@ -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