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