import type { CPUCapabilities, GPUCapabilities, BasicGPUInfo, GPUMemoryInfo, SystemMemoryInfo, } from '@/types/hardware'; import type { Acceleration, AccelerationOption, AccelerationSupport, Screen, ModelAnalysis, CachedModel, } from '@/types'; import type { MantineColorScheme } from '@mantine/core'; import type { CpuMetrics, MemoryMetrics, GpuMetrics, } from '@/main/modules/monitoring'; import type { KoboldCrashInfo } from '@/types/ipc'; export interface GitHubAsset { name: string; browser_download_url: string; size: number; version?: string; } export interface DownloadReleaseOptions { isUpdate?: boolean; wasCurrentBinary?: boolean; oldBackendPath?: string; } export interface GitHubRelease { tag_name: string; name: string; published_at: string; body: string; html_url: string; assets: GitHubAsset[]; } export interface UpdateInfo { currentVersion: string; latestVersion: string; releaseInfo: GitHubRelease; hasUpdate: boolean; } export interface ReleaseWithStatus { release: GitHubRelease; availableAssets: { asset: GitHubAsset; isDownloaded: boolean; installedBackendVersion?: string; }[]; } export interface InstalledBackend { version: string; path: string; filename: string; size?: number; actualVersion?: string; } export interface DownloadItem { name: string; url: string; size: number; version?: string; } export interface OptimalLayersResult { recommendedLayers: number; totalLayers: number; estimatedVramUsageGB: number; modelVramGB: number; contextVramGB: number; headroomGB: number; } export interface KoboldConfig { gpulayers?: number; contextsize?: number; port?: number; host?: string; multiuser?: number; multiplayer?: boolean; remotetunnel?: boolean; nocertify?: boolean; websearch?: boolean; noshift?: boolean; flashattention?: boolean; noavx2?: boolean; failsafe?: boolean; lowvram?: boolean; quantmatmul?: boolean; usemmap?: boolean; debugmode?: boolean; usecuda?: boolean; usevulkan?: boolean; useclblast?: boolean | [number, number]; gpuDeviceSelection?: string; tensorSplit?: string; gpuPlatform?: number; sdmodel?: string; sdt5xxl?: string; sdclipl?: string; sdclipg?: string; sdphotomaker?: string; sdvae?: string; sdlora?: string; sdconvdirect?: string; sdvaecpu?: boolean; sdclipgpu?: boolean; additionalArguments?: string; preLaunchCommands?: string[]; moecpu?: number; moeexperts?: number; smartcache?: boolean; pipelineparallel?: boolean; autoGpuLayers?: boolean; model?: string; backend?: string; } export interface KoboldAPI { getInstalledBackends: () => Promise; getCurrentBackend: () => Promise; setCurrentBackend: (version: string) => Promise; getPlatform: () => Promise; detectGPU: () => Promise; detectCPU: () => Promise; detectGPUCapabilities: () => Promise; detectGPUMemory: () => Promise; detectSystemMemory: () => Promise; detectROCm: () => Promise<{ supported: boolean; devices: string[] }>; detectAccelerationSupport: () => Promise; getAvailableAccelerations: ( includeDisabled?: boolean ) => Promise; getCurrentInstallDir: () => Promise; selectInstallDirectory: () => Promise; downloadRelease: ( asset: GitHubAsset, options: DownloadReleaseOptions ) => Promise; deleteRelease: ( binaryPath: string ) => Promise<{ success: boolean; error?: string }>; launchKoboldCpp: ( args?: string[], preLaunchCommands?: string[] ) => Promise<{ success: boolean; pid?: number; error?: string }>; getConfigFiles: () => Promise<{ name: string; path: string; size: number }[]>; saveConfigFile: ( configName: string, configData: KoboldConfig ) => Promise; deleteConfigFile: (configName: string) => Promise; getSelectedConfig: () => Promise; setSelectedConfig: (configName: string) => Promise; parseConfigFile: (filePath: string) => Promise; selectModelFile: (title?: string) => Promise; importLocalBackend: () => Promise<{ success: boolean; error?: string }>; getLocalModels: (paramType: string) => Promise; analyzeModel: (filePath: string) => Promise; calculateOptimalLayers: ( modelPath: string, contextSize: number, availableVramGB: number, flashAttention: boolean, acceleration: Acceleration ) => Promise; stopKoboldCpp: () => void; onDownloadProgress: (callback: (progress: number) => void) => () => void; onInstallDirChanged: (callback: (newPath: string) => void) => () => void; onVersionsUpdated: (callback: () => void) => () => void; onKoboldOutput: (callback: (data: string) => void) => () => void; onKoboldCrashed: ( callback: (crashInfo: KoboldCrashInfo) => void ) => () => void; onServerReady: (callback: () => void) => () => void; onTunnelUrlChanged: (callback: (url: string | null) => void) => () => void; } export interface SystemVersionInfo { appVersion: string; electronVersion: string; nodeVersion: string; chromeVersion: string; v8Version: string; osVersion: string; platform: string; arch: string; nodeJsSystemVersion?: string; uvVersion?: string; aurPackageVersion?: string; } export interface AppAPI { showLogsFolder: () => Promise; viewConfigFile: () => Promise; openPath: (path: string) => Promise; getVersion: () => Promise; getVersionInfo: () => Promise; minimizeWindow: () => void; maximizeWindow: () => void; closeWindow: () => void; isMaximized: () => Promise; getZoomLevel: () => Promise; setZoomLevel: (level: number) => Promise; getColorScheme: () => Promise; setColorScheme: (colorScheme: MantineColorScheme) => Promise; getEnableSystemTray: () => Promise; setEnableSystemTray: (enabled: boolean) => Promise; getStartMinimizedToTray: () => Promise; setStartMinimizedToTray: (enabled: boolean) => Promise; updateTrayState: (state: { screen?: Screen | null; model?: string | null; config?: string | null; monitoringEnabled?: boolean; }) => Promise; onTrayEject: (callback: () => void) => () => void; openExternal: (url: string) => Promise; openPerformanceManager: () => Promise<{ success: boolean; error?: string; }>; checkForUpdates: () => Promise; downloadUpdate: () => Promise; quitAndInstall: () => Promise; isUpdateDownloaded: () => Promise; onWindowStateToggle: (callback: () => void) => () => void; onLineNumbersChanged: ( callback: (showLineNumbers: boolean) => void ) => () => void; } export interface ConfigAPI { get: (key: string) => Promise; set: (key: string, value: unknown) => void; } export interface LogsAPI { logError: (message: string, error?: Error) => void; } export interface DependenciesAPI { isNpxAvailable: () => Promise; isUvAvailable: () => Promise; clearOpenWebUIData: () => Promise<{ success: boolean; error?: string }>; } export interface MonitoringAPI { start: () => () => void; onCpuMetrics: (callback: (metrics: CpuMetrics) => void) => () => void; onMemoryMetrics: (callback: (metrics: MemoryMetrics) => void) => () => void; onGpuMetrics: (callback: (metrics: GpuMetrics) => void) => () => void; } export interface UpdaterAPI { checkForUpdates: () => Promise; downloadUpdate: () => Promise; quitAndInstall: () => void; isUpdateDownloaded: () => Promise; canAutoUpdate: () => Promise; isAURInstallation: () => Promise; } export interface NotepadTab { title: string; content: string; } export interface SavedNotepadTab { title: string; } export interface NotepadState { tabs: NotepadTab[]; activeTabId: string | null; position: { width: number; height: number; }; isVisible: boolean; showLineNumbers: boolean; } export interface SavedNotepadState { activeTabId: string | null; position: { width: number; height: number; }; isVisible: boolean; showLineNumbers?: boolean; } export interface NotepadStateWithTabs extends SavedNotepadState { tabs: SavedNotepadTab[]; } export interface NotepadAPI { saveTabContent: (title: string, content: string) => Promise; loadTabContent: (title: string) => Promise; renameTab: (oldTitle: string, newTitle: string) => Promise; saveState: (state: SavedNotepadState) => Promise; loadState: () => Promise; deleteTab: (title: string) => Promise; createNewTab: (title?: string) => Promise; } declare global { interface Window { electronAPI: { kobold: KoboldAPI; app: AppAPI; config: ConfigAPI; logs: LogsAPI; dependencies: DependenciesAPI; monitoring: MonitoringAPI; updater: UpdaterAPI; notepad: NotepadAPI; }; } }