jan/web/hooks/useModelSource.ts
Louis 83f090826e
feat: Jan Hub Revamp (#4491)
* feat: model hub revamp UI

* chore: model description - consistent markdown css

* chore: add model versions dropdown

* chore: integrate APIs - model sources

* chore: update model display name

* chore: lint fix

* chore: page transition animation

* feat: model search dropdown - deeplink

* chore: bump cortex version

* chore: add remote model sources

* chore: model download state

* chore: fix model metadata label

* chore: polish model detail page markdown

* test: fix test cases

* chore: initialize default Hub model sources

* chore: fix model stats

* chore: clean up click outside and inside hooks

* feat: change hub banner

* chore: lint fix

* chore: fix css long model id
2025-01-28 22:23:25 +07:00

73 lines
1.7 KiB
TypeScript

import { useMemo } from 'react'
import { ExtensionTypeEnum, ModelExtension } from '@janhq/core'
import useSWR from 'swr'
import { extensionManager } from '@/extension/ExtensionManager'
/**
* @returns A Promise that resolves to an object of model sources.
*/
export function useGetModelSources() {
const extension = useMemo(
() => extensionManager.get<ModelExtension>(ExtensionTypeEnum.Model),
[]
)
const {
data: sources,
error,
mutate,
} = useSWR(
extension ? 'getSources' : null,
() =>
extension?.getSources().then((e) =>
e.map((m) => ({
...m,
models: m.models.sort((a, b) => a.size - b.size),
}))
),
{
revalidateOnFocus: false,
revalidateOnReconnect: true,
}
)
return { sources, error, mutate }
}
export const useModelSourcesMutation = () => {
const extension = useMemo(
() => extensionManager.get<ModelExtension>(ExtensionTypeEnum.Model),
[]
)
/**
* Add a new model source
* @returns A Promise that resolves to intall of engine.
*/
const addModelSource = async (source: string) => {
try {
// Call the extension's method
return await extension?.addSource(source)
} catch (error) {
console.error('Failed to install engine variant:', error)
throw error
}
}
/**
* Delete a new model source
* @returns A Promise that resolves to intall of engine.
*/
const deleteModelSource = async (source: string) => {
try {
// Call the extension's method
return await extension?.deleteSource(source)
} catch (error) {
console.error('Failed to install engine variant:', error)
throw error
}
}
return { addModelSource, deleteModelSource }
}