display current kcpp version under software, new image gen preset for the new qwen 3 image, improve kcpp ui patching accuracy

This commit is contained in:
Egor 2025-11-02 22:18:35 -08:00
parent 206351c284
commit 537bd4d710
7 changed files with 67 additions and 25 deletions

6
.gitignore vendored
View file

@ -19,3 +19,9 @@ flux1-kontext-dev-Q3_K_S.gguf
gemma-3-4b-it.Q8_0.gguf gemma-3-4b-it.Q8_0.gguf
.webui_secret_key .webui_secret_key
chroma-unlocked-v29-Q3_K_L.gguf chroma-unlocked-v29-Q3_K_L.gguf
Qwen-Image-Edit-2509-Q4_K_S.gguf
Qwen2.5-VL-7B-Instruct.mmproj-Q8_0.gguf
Qwen2.5-VL-7B-Instruct.Q4_K_S.gguf
qwen_image_vae.safetensors
flux1-kontext-dev-Q4_K_S.gguf
chroma-unlocked-v45-Q4_0.gguf

View file

@ -1,7 +1,7 @@
{ {
"name": "gerbil", "name": "gerbil",
"productName": "Gerbil", "productName": "Gerbil",
"version": "1.8.2", "version": "1.8.3",
"description": "Run Large Language Models locally", "description": "Run Large Language Models locally",
"main": "out/main/index.js", "main": "out/main/index.js",
"homepage": "./", "homepage": "./",
@ -39,7 +39,7 @@
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.39.0", "@eslint/js": "^9.39.0",
"@types/node": "^24.9.2", "@types/node": "^24.10.0",
"@types/react": "^19.2.2", "@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2", "@types/react-dom": "^19.2.2",
"@types/yauzl": "^2.10.3", "@types/yauzl": "^2.10.3",

View file

@ -14,6 +14,7 @@ export const SystemTab = () => {
null null
); );
const [hardwareInfo, setHardwareInfo] = useState<HardwareInfo | null>(null); const [hardwareInfo, setHardwareInfo] = useState<HardwareInfo | null>(null);
const [koboldVersion, setKoboldVersion] = useState<string | null>(null);
useEffect(() => { useEffect(() => {
const loadVersionInfo = async () => { const loadVersionInfo = async () => {
@ -23,6 +24,14 @@ export const SystemTab = () => {
} }
}; };
const loadKoboldVersion = async () => {
const currentVersion =
await window.electronAPI.kobold.getCurrentVersion();
if (currentVersion) {
setKoboldVersion(currentVersion.version);
}
};
const loadHardwareInfo = async () => { const loadHardwareInfo = async () => {
try { try {
const [cpu, gpu, gpuCapabilities, gpuMemory, systemMemory] = const [cpu, gpu, gpuCapabilities, gpuMemory, systemMemory] =
@ -50,6 +59,7 @@ export const SystemTab = () => {
}; };
loadVersionInfo(); loadVersionInfo();
loadKoboldVersion();
loadHardwareInfo(); loadHardwareInfo();
}, []); }, []);
@ -61,7 +71,7 @@ export const SystemTab = () => {
); );
} }
const softwareItems = createSoftwareItems(versionInfo); const softwareItems = createSoftwareItems(versionInfo, koboldVersion);
const driverItems = hardwareInfo ? createDriverItems(hardwareInfo) : []; const driverItems = hardwareInfo ? createDriverItems(hardwareInfo) : [];
const hardwareItems = hardwareInfo ? createHardwareItems(hardwareInfo) : []; const hardwareItems = hardwareInfo ? createHardwareItems(hardwareInfo) : [];

View file

@ -14,28 +14,42 @@ export const IMAGE_MODEL_PRESETS = [
name: 'FLUX.1', name: 'FLUX.1',
description: 'FLUX.1 development model with default encoders', description: 'FLUX.1 development model with default encoders',
sdmodel: sdmodel:
'https://huggingface.co/bullerwins/FLUX.1-Kontext-dev-GGUF/resolve/main/flux1-kontext-dev-Q3_K_S.gguf?download=true', 'https://huggingface.co/bullerwins/FLUX.1-Kontext-dev-GGUF/resolve/main/flux1-kontext-dev-Q4_K_S.gguf',
sdt5xxl: sdt5xxl:
'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/t5xxl_fp8_e4m3fn.safetensors?download=true', 'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/t5xxl_fp8_e4m3fn.safetensors',
sdclipl: sdclipl:
'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/clip_l.safetensors?download=true', 'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/clip_l.safetensors',
sdclipg: '', sdclipg: '',
sdphotomaker: '', sdphotomaker: '',
sdvae: sdvae:
'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/ae.safetensors?download=true', 'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/ae.safetensors',
}, },
{ {
name: 'Chroma', name: 'Chroma',
description: 'Chroma with optimized VAE and shared encoders', description: 'Chroma with optimized VAE and shared encoders',
sdmodel: sdmodel:
'https://huggingface.co/silveroxides/Chroma-GGUF/resolve/main/chroma-unlocked-v29/chroma-unlocked-v29-Q3_K_L.gguf?download=true', 'https://huggingface.co/silveroxides/Chroma-GGUF/resolve/main/chroma-unlocked-v45/chroma-unlocked-v45-Q4_0.gguf',
sdt5xxl: sdt5xxl:
'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/t5xxl_fp8_e4m3fn.safetensors?download=true', 'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/t5xxl_fp8_e4m3fn.safetensors',
sdclipl: sdclipl:
'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/clip_l.safetensors?download=true', 'https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/clip_l.safetensors',
sdclipg: '', sdclipg: '',
sdphotomaker: '', sdphotomaker: '',
sdvae: sdvae:
'https://huggingface.co/lodestones/Chroma/resolve/main/ae.safetensors?download=true', 'https://huggingface.co/lodestones/Chroma/resolve/main/ae.safetensors',
},
{
name: 'Qwen Image Edit 2509',
description: 'Qwen Image Edit model with vision encoder and VAE',
sdmodel:
'https://huggingface.co/QuantStack/Qwen-Image-Edit-2509-GGUF/resolve/main/Qwen-Image-Edit-2509-Q4_K_S.gguf',
sdt5xxl: '',
sdclipl:
'https://huggingface.co/mradermacher/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/Qwen2.5-VL-7B-Instruct.Q4_K_S.gguf',
sdclipg:
'https://huggingface.co/mradermacher/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/Qwen2.5-VL-7B-Instruct.mmproj-Q8_0.gguf',
sdphotomaker: '',
sdvae:
'https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/resolve/main/split_files/vae/qwen_image_vae.safetensors',
}, },
] as const; ] as const;

View file

@ -88,7 +88,8 @@ const patchKcppSduiEmbd = (unpackedDir: string) =>
export async function launchKoboldCpp( export async function launchKoboldCpp(
args: string[] = [], args: string[] = [],
frontendPreference: FrontendPreference = 'koboldcpp' frontendPreference: FrontendPreference = 'koboldcpp',
imageGenerationFrontendPreference?: ImageGenerationFrontendPreference
) { ) {
try { try {
if (koboldProcess) { if (koboldProcess) {
@ -114,14 +115,17 @@ export async function launchKoboldCpp(
const binaryDir = currentVersion.path.split(/[/\\]/).slice(0, -1).join('/'); const binaryDir = currentVersion.path.split(/[/\\]/).slice(0, -1).join('/');
const { isImageMode } = parseKoboldConfig(args); const { isImageMode, isTextMode } = parseKoboldConfig(args);
if (frontendPreference === 'koboldcpp') { if (frontendPreference === 'koboldcpp') {
if (isImageMode) { if (isImageMode) {
await patchKcppSduiEmbd(binaryDir); await patchKcppSduiEmbd(binaryDir);
} else { }
if (isTextMode) {
await patchKliteEmbd(binaryDir); await patchKliteEmbd(binaryDir);
} }
} else if (isImageMode && imageGenerationFrontendPreference === 'builtin') {
await patchKcppSduiEmbd(binaryDir);
} }
const finalArgs = [...args]; const finalArgs = [...args];
@ -223,7 +227,11 @@ export const launchKoboldCppWithCustomFrontends = async (args: string[] = []) =>
'imageGenerationFrontendPreference' 'imageGenerationFrontendPreference'
)) as ImageGenerationFrontendPreference | undefined; )) as ImageGenerationFrontendPreference | undefined;
const result = await launchKoboldCpp(args, frontendPreference); const result = await launchKoboldCpp(
args,
frontendPreference,
imageGenerationFrontendPreference
);
const { isImageMode, isTextMode } = parseKoboldConfig(args); const { isImageMode, isTextMode } = parseKoboldConfig(args);

View file

@ -3,7 +3,10 @@ import { PRODUCT_NAME } from '@/constants';
import type { InfoItem } from '@/components/InfoCard'; import type { InfoItem } from '@/components/InfoCard';
import type { HardwareInfo } from '@/types/hardware'; import type { HardwareInfo } from '@/types/hardware';
export const createSoftwareItems = (versionInfo: SystemVersionInfo) => [ export const createSoftwareItems = (
versionInfo: SystemVersionInfo,
koboldVersion?: string | null
) => [
{ {
label: PRODUCT_NAME, label: PRODUCT_NAME,
value: versionInfo.aurPackageVersion value: versionInfo.aurPackageVersion
@ -15,6 +18,11 @@ export const createSoftwareItems = (versionInfo: SystemVersionInfo) => [
})() })()
: versionInfo.appVersion, : versionInfo.appVersion,
}, },
...(koboldVersion ? [{ label: 'KoboldCpp', value: koboldVersion }] : []),
{
label: 'OS',
value: `${versionInfo.platform} ${versionInfo.arch} (${versionInfo.osVersion})`,
},
{ label: 'Electron', value: versionInfo.electronVersion }, { label: 'Electron', value: versionInfo.electronVersion },
{ {
label: 'Node.js', label: 'Node.js',
@ -26,10 +34,6 @@ export const createSoftwareItems = (versionInfo: SystemVersionInfo) => [
}, },
{ label: 'Chromium', value: versionInfo.chromeVersion }, { label: 'Chromium', value: versionInfo.chromeVersion },
{ label: 'V8', value: versionInfo.v8Version }, { label: 'V8', value: versionInfo.v8Version },
{
label: 'OS',
value: `${versionInfo.platform} ${versionInfo.arch} (${versionInfo.osVersion})`,
},
...(versionInfo.uvVersion ...(versionInfo.uvVersion
? [{ label: 'uv', value: versionInfo.uvVersion }] ? [{ label: 'uv', value: versionInfo.uvVersion }]
: []), : []),

View file

@ -1394,12 +1394,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:*, @types/node@npm:^24.9.2": "@types/node@npm:*, @types/node@npm:^24.10.0":
version: 24.9.2 version: 24.10.0
resolution: "@types/node@npm:24.9.2" resolution: "@types/node@npm:24.10.0"
dependencies: dependencies:
undici-types: "npm:~7.16.0" undici-types: "npm:~7.16.0"
checksum: 10c0/7905d43f65cee72ef475fe76316e10bbf6ac5d08a7f0f6c38f2b6285d7ca3009e8fcafc8f8a1d2bf3f55889c9c278dbb203a9081fd0cf2d6d62161703924c6fa checksum: 10c0/f82ed7194e16f5590ef7afdc20c6d09068c76d50278b485ede8f0c5749683536e3064ffa8def8db76915196afb3724b854aa5723c64d6571b890b14492943b46
languageName: node languageName: node
linkType: hard linkType: hard
@ -3771,7 +3771,7 @@ __metadata:
"@huggingface/gguf": "npm:^0.3.2" "@huggingface/gguf": "npm:^0.3.2"
"@mantine/core": "npm:^8.3.6" "@mantine/core": "npm:^8.3.6"
"@mantine/hooks": "npm:^8.3.6" "@mantine/hooks": "npm:^8.3.6"
"@types/node": "npm:^24.9.2" "@types/node": "npm:^24.10.0"
"@types/react": "npm:^19.2.2" "@types/react": "npm:^19.2.2"
"@types/react-dom": "npm:^19.2.2" "@types/react-dom": "npm:^19.2.2"
"@types/yauzl": "npm:^2.10.3" "@types/yauzl": "npm:^2.10.3"