refactor: wait for extension load
This commit is contained in:
parent
66bae2adb8
commit
0dbfde4c80
@ -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
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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<ModelProvider[]> => {
|
||||
const builtinProviders = predefinedProviders.map((provider) => {
|
||||
let models = provider.models as Model[]
|
||||
@ -48,7 +47,6 @@ export const getProviders = async (): Promise<ModelProvider[]> => {
|
||||
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<ModelProvider[]> => {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user