mirror of
https://github.com/lone-cloud/gerbil
synced 2026-06-03 19:54:44 -07:00
139 lines
5.2 KiB
TypeScript
139 lines
5.2 KiB
TypeScript
import { contextBridge, ipcRenderer, type IpcRendererEvent } from 'electron';
|
|
import type {
|
|
KoboldAPI,
|
|
AppAPI,
|
|
ConfigAPI,
|
|
UpdateInfo,
|
|
} from '@/types/electron';
|
|
|
|
const koboldAPI: KoboldAPI = {
|
|
getInstalledVersion: () => ipcRenderer.invoke('kobold:getInstalledVersion'),
|
|
getInstalledVersions: () => ipcRenderer.invoke('kobold:getInstalledVersions'),
|
|
getCurrentVersion: () => ipcRenderer.invoke('kobold:getCurrentVersion'),
|
|
getCurrentBinaryInfo: () => ipcRenderer.invoke('kobold:getCurrentBinaryInfo'),
|
|
setCurrentVersion: (version: string) =>
|
|
ipcRenderer.invoke('kobold:setCurrentVersion', version),
|
|
getVersionFromBinary: (binaryPath: string) =>
|
|
ipcRenderer.invoke('kobold:getVersionFromBinary', binaryPath),
|
|
getLatestReleaseWithStatus: () =>
|
|
ipcRenderer.invoke('kobold:getLatestReleaseWithStatus'),
|
|
getROCmDownload: () => ipcRenderer.invoke('kobold:getROCmDownload'),
|
|
downloadROCm: () => ipcRenderer.invoke('kobold:downloadROCm'),
|
|
getLatestRelease: () => ipcRenderer.invoke('kobold:getLatestRelease'),
|
|
getAllReleases: () => ipcRenderer.invoke('kobold:getAllReleases'),
|
|
getPlatform: () => ipcRenderer.invoke('kobold:getPlatform'),
|
|
detectGPU: () => ipcRenderer.invoke('kobold:detectGPU'),
|
|
detectCPU: () => ipcRenderer.invoke('kobold:detectCPU'),
|
|
detectGPUCapabilities: () =>
|
|
ipcRenderer.invoke('kobold:detectGPUCapabilities'),
|
|
detectROCm: () => ipcRenderer.invoke('kobold:detectROCm'),
|
|
detectHardware: () => ipcRenderer.invoke('kobold:detectHardware'),
|
|
detectAllCapabilities: () =>
|
|
ipcRenderer.invoke('kobold:detectAllCapabilities'),
|
|
getCurrentInstallDir: () => ipcRenderer.invoke('kobold:getCurrentInstallDir'),
|
|
selectInstallDirectory: () =>
|
|
ipcRenderer.invoke('kobold:selectInstallDirectory'),
|
|
downloadRelease: (asset) =>
|
|
ipcRenderer.invoke('kobold:downloadRelease', asset),
|
|
launchKoboldCpp: (args?: string[], configFilePath?: string) =>
|
|
ipcRenderer.invoke('kobold:launchKoboldCpp', args, configFilePath),
|
|
openInstallDialog: () => ipcRenderer.invoke('kobold:openInstallDialog'),
|
|
checkForUpdates: () => ipcRenderer.invoke('kobold:checkForUpdates'),
|
|
getConfigFiles: () => ipcRenderer.invoke('kobold:getConfigFiles'),
|
|
saveConfigFile: (
|
|
configName: string,
|
|
configData: {
|
|
gpulayers?: number;
|
|
contextsize?: number;
|
|
model_param?: string;
|
|
port?: number;
|
|
host?: string;
|
|
multiuser?: number;
|
|
multiplayer?: boolean;
|
|
remotetunnel?: boolean;
|
|
nocertify?: boolean;
|
|
websearch?: boolean;
|
|
noshift?: boolean;
|
|
flashattention?: boolean;
|
|
noavx2?: boolean;
|
|
failsafe?: boolean;
|
|
usecuda?: boolean;
|
|
usevulkan?: boolean;
|
|
useclblast?: boolean;
|
|
sdmodel?: string;
|
|
sdt5xxl?: string;
|
|
sdclipl?: string;
|
|
sdclipg?: string;
|
|
sdphotomaker?: string;
|
|
sdvae?: string;
|
|
[key: string]: unknown;
|
|
}
|
|
) => ipcRenderer.invoke('kobold:saveConfigFile', configName, configData),
|
|
getSelectedConfig: () => ipcRenderer.invoke('kobold:getSelectedConfig'),
|
|
setSelectedConfig: (configName: string) =>
|
|
ipcRenderer.invoke('kobold:setSelectedConfig', configName),
|
|
parseConfigFile: (filePath: string) =>
|
|
ipcRenderer.invoke('kobold:parseConfigFile', filePath),
|
|
selectModelFile: () => ipcRenderer.invoke('kobold:selectModelFile'),
|
|
stopKoboldCpp: () => ipcRenderer.invoke('kobold:stopKoboldCpp'),
|
|
confirmEject: () => ipcRenderer.invoke('kobold:confirmEject'),
|
|
onDownloadProgress: (callback) => {
|
|
ipcRenderer.on(
|
|
'download-progress',
|
|
(_: IpcRendererEvent, progress: number) => callback(progress)
|
|
);
|
|
},
|
|
onUpdateAvailable: (callback) => {
|
|
ipcRenderer.on(
|
|
'update-available',
|
|
(_: IpcRendererEvent, updateInfo: UpdateInfo) => callback(updateInfo)
|
|
);
|
|
},
|
|
onInstallDirChanged: (callback: (newPath: string) => void) => {
|
|
const handler = (_: IpcRendererEvent, newPath: string) => callback(newPath);
|
|
ipcRenderer.on('install-dir-changed', handler);
|
|
|
|
return () => {
|
|
ipcRenderer.removeListener('install-dir-changed', handler);
|
|
};
|
|
},
|
|
onVersionsUpdated: (callback: () => void) => {
|
|
const handler = () => callback();
|
|
ipcRenderer.on('versions-updated', handler);
|
|
|
|
return () => {
|
|
ipcRenderer.removeListener('versions-updated', handler);
|
|
};
|
|
},
|
|
onKoboldOutput: (callback: (data: string) => void) => {
|
|
const handler = (_: IpcRendererEvent, data: string) => callback(data);
|
|
ipcRenderer.on('kobold-output', handler);
|
|
|
|
return () => {
|
|
ipcRenderer.removeListener('kobold-output', handler);
|
|
};
|
|
},
|
|
removeAllListeners: (channel) => {
|
|
ipcRenderer.removeAllListeners(channel);
|
|
},
|
|
};
|
|
|
|
const appAPI: AppAPI = {
|
|
getVersion: () => ipcRenderer.invoke('app:getVersion'),
|
|
openExternal: (url) => ipcRenderer.invoke('app:openExternal', url),
|
|
};
|
|
|
|
const configAPI: ConfigAPI = {
|
|
getServerOnly: () => ipcRenderer.invoke('config:getServerOnly'),
|
|
setServerOnly: (serverOnly: boolean) =>
|
|
ipcRenderer.invoke('config:setServerOnly', serverOnly),
|
|
get: (key: string) => ipcRenderer.invoke('config:get', key),
|
|
set: (key: string, value: unknown) =>
|
|
ipcRenderer.invoke('config:set', key, value),
|
|
};
|
|
|
|
contextBridge.exposeInMainWorld('electronAPI', {
|
|
kobold: koboldAPI,
|
|
app: appAPI,
|
|
config: configAPI,
|
|
});
|