44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { useCallback } from "react";
|
|
import { useAtom } from "jotai";
|
|
import {
|
|
localModelsAtom,
|
|
localModelsLoadingAtom,
|
|
localModelsErrorAtom,
|
|
} from "@/atoms/localModelsAtoms";
|
|
import { IpcClient } from "@/ipc/ipc_client";
|
|
|
|
export function useLocalModels() {
|
|
const [models, setModels] = useAtom(localModelsAtom);
|
|
const [loading, setLoading] = useAtom(localModelsLoadingAtom);
|
|
const [error, setError] = useAtom(localModelsErrorAtom);
|
|
|
|
const ipcClient = IpcClient.getInstance();
|
|
|
|
/**
|
|
* Load local models from Ollama
|
|
*/
|
|
const loadModels = useCallback(async () => {
|
|
setLoading(true);
|
|
try {
|
|
const modelList = await ipcClient.listLocalOllamaModels();
|
|
setModels(modelList);
|
|
setError(null);
|
|
|
|
return modelList;
|
|
} catch (error) {
|
|
console.error("Error loading local Ollama models:", error);
|
|
setError(error instanceof Error ? error : new Error(String(error)));
|
|
return [];
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
}, [ipcClient, setModels, setError, setLoading]);
|
|
|
|
return {
|
|
models,
|
|
loading,
|
|
error,
|
|
loadModels,
|
|
};
|
|
}
|