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

View file

@ -14,6 +14,7 @@ export const SystemTab = () => {
null
);
const [hardwareInfo, setHardwareInfo] = useState<HardwareInfo | null>(null);
const [koboldVersion, setKoboldVersion] = useState<string | null>(null);
useEffect(() => {
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 () => {
try {
const [cpu, gpu, gpuCapabilities, gpuMemory, systemMemory] =
@ -50,6 +59,7 @@ export const SystemTab = () => {
};
loadVersionInfo();
loadKoboldVersion();
loadHardwareInfo();
}, []);
@ -61,7 +71,7 @@ export const SystemTab = () => {
);
}
const softwareItems = createSoftwareItems(versionInfo);
const softwareItems = createSoftwareItems(versionInfo, koboldVersion);
const driverItems = hardwareInfo ? createDriverItems(hardwareInfo) : [];
const hardwareItems = hardwareInfo ? createHardwareItems(hardwareInfo) : [];

View file

@ -14,28 +14,42 @@ export const IMAGE_MODEL_PRESETS = [
name: 'FLUX.1',
description: 'FLUX.1 development model with default encoders',
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:
'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:
'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: '',
sdphotomaker: '',
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',
description: 'Chroma with optimized VAE and shared encoders',
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:
'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:
'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: '',
sdphotomaker: '',
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;

View file

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

View file

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

View file

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