diff --git a/web-app/src/lib/extension.ts b/web-app/src/lib/extension.ts index 5470097ac..d7d67ba3a 100644 --- a/web-app/src/lib/extension.ts +++ b/web-app/src/lib/extension.ts @@ -117,10 +117,8 @@ export class ExtensionManager { /** * Loads all registered extension. */ - load() { - this.listExtensions().forEach((ext) => { - ext.onLoad() - }) + async load() { + await Promise.all(this.listExtensions().map((ext) => ext.onLoad())) } /** @@ -169,25 +167,27 @@ export class ExtensionManager { async activateExtension(extension: Extension) { // Import class const extensionUrl = extension.url - await import(/* @vite-ignore */convertFileSrc(extensionUrl)).then((extensionClass) => { - // Register class if it has a default export - if ( - typeof extensionClass.default === 'function' && - extensionClass.default.prototype - ) { - this.register( - extension.name, - new extensionClass.default( - extension.url, + await import(/* @vite-ignore */ convertFileSrc(extensionUrl)).then( + (extensionClass) => { + // Register class if it has a default export + if ( + typeof extensionClass.default === 'function' && + extensionClass.default.prototype + ) { + this.register( extension.name, - extension.productName, - extension.active, - extension.description, - extension.version + new extensionClass.default( + extension.url, + extension.name, + extension.productName, + extension.active, + extension.description, + extension.version + ) ) - ) + } } - }) + ) } /** diff --git a/web-app/src/services/providers.ts b/web-app/src/services/providers.ts index 9b5135861..b76424053 100644 --- a/web-app/src/services/providers.ts +++ b/web-app/src/services/providers.ts @@ -10,7 +10,6 @@ import { fetchModels } from './models' import { ExtensionManager } from '@/lib/extension' import { fetch as fetchTauri } from '@tauri-apps/plugin-http' - export const getProviders = async (): Promise => { const builtinProviders = predefinedProviders.map((provider) => { let models = provider.models as Model[] @@ -48,7 +47,6 @@ export const getProviders = async (): Promise => { const runtimeProviders: ModelProvider[] = [] for (const [providerName, value] of EngineManager.instance().engines) { const models = (await fetchModels()) ?? [] - const provider: ModelProvider = { active: false, persist: true, @@ -119,7 +117,6 @@ export const getProviders = async (): Promise => { return runtimeProviders.concat(builtinProviders as ModelProvider[]) } - /** * Fetches models from a provider's API endpoint * Always uses Tauri's HTTP client to bypass CORS issues @@ -178,14 +175,14 @@ export const fetchModelsFromProvider = async ( } } catch (error) { console.error('Error fetching models from provider:', error) - + // Provide helpful error message if (error instanceof Error && error.message.includes('fetch')) { throw new Error( `Cannot connect to ${provider.provider} at ${provider.base_url}. Please check that the service is running and accessible.` ) } - + throw error } }