mirror of
https://github.com/lone-cloud/gerbil
synced 2026-06-04 04:04:44 -07:00
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:
parent
206351c284
commit
537bd4d710
7 changed files with 67 additions and 25 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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) : [];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 }]
|
||||||
: []),
|
: []),
|
||||||
|
|
|
||||||
10
yarn.lock
10
yarn.lock
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue