diff --git a/README.md b/README.md index df7a088..560189d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Friendly Kobold A desktop app for running Large Language Models locally. -FriendlyKobold Icon +FriendlyKobold Icon diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 4d81656..aee44d0 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -27,7 +27,7 @@ export default defineConfig({ }, renderer: { root: '.', - publicDir: 'assets', + publicDir: 'src/assets', build: { outDir: 'dist', rollupOptions: { diff --git a/package.json b/package.json index e5dffd0..cf448f1 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,6 @@ "execa": "^9.6.0", "got": "^14.4.7", "lucide-react": "^0.542.0", - "npm": "^11.5.2", "react": "^19.1.1", "react-dom": "^19.1.1", "systeminformation": "^5.27.8", @@ -97,7 +96,7 @@ "appId": "com.friendly-kobold.app", "productName": "Friendly Kobold", "compression": "normal", - "icon": "assets/icon.png", + "icon": "src/assets/icon.png", "publish": null, "electronLanguages": [ "en-US" @@ -107,18 +106,18 @@ }, "files": [ "out/**/*", - "dist/**/*", - "assets/**/*" + "dist/**/*" + ], + "extraFiles": [ + { + "from": "assets/friendly-kobold.desktop", + "to": "assets/friendly-kobold.desktop", + "filter": [ + "**/*" + ] + } ], "extraResources": [ - { - "from": "assets", - "to": "assets", - "filter": [ - "**/*", - "!screenshots/**/*" - ] - }, { "from": "src/main/templates", "to": "templates", @@ -134,6 +133,12 @@ "gatekeeperAssess": false, "entitlements": "assets/entitlements.mac.plist", "entitlementsInherit": "assets/entitlements.mac.plist", + "extraFiles": [ + { + "from": "assets/entitlements.mac.plist", + "to": "assets/entitlements.mac.plist" + } + ], "target": [ { "target": "dmg", diff --git a/assets/icon.png b/src/assets/icon.png similarity index 100% rename from assets/icon.png rename to src/assets/icon.png diff --git a/src/components/AppHeader.tsx b/src/components/AppHeader.tsx index f5435a3..93ffe1f 100644 --- a/src/components/AppHeader.tsx +++ b/src/components/AppHeader.tsx @@ -11,7 +11,7 @@ import { Tooltip, } from '@mantine/core'; import { Settings, ArrowLeft } from 'lucide-react'; -import { soundAssets, playSound, initializeAudio } from '@/utils'; +import { soundAssets, playSound, initializeAudio } from '@/utils/sounds'; import iconUrl from '/icon.png'; import { FRONTENDS } from '@/constants'; import type { InterfaceTab, FrontendPreference, Screen } from '@/types'; diff --git a/src/components/ModelFileField.tsx b/src/components/ModelFileField.tsx index 0d9591d..90fbb33 100644 --- a/src/components/ModelFileField.tsx +++ b/src/components/ModelFileField.tsx @@ -1,7 +1,7 @@ import { Group, TextInput, Button } from '@mantine/core'; import { File, Search } from 'lucide-react'; import { LabelWithTooltip } from '@/components/LabelWithTooltip'; -import { getInputValidationState } from '@/utils'; +import { getInputValidationState } from '@/utils/validation'; import styles from '@/styles/layout.module.css'; interface ModelFileFieldProps { diff --git a/src/components/screens/Download.tsx b/src/components/screens/Download.tsx index 0bc4f37..531ad05 100644 --- a/src/components/screens/Download.tsx +++ b/src/components/screens/Download.tsx @@ -1,7 +1,8 @@ import { useState, useCallback, useEffect, useRef } from 'react'; import { Card, Text, Title, Loader, Stack, Container } from '@mantine/core'; import { DownloadCard } from '@/components/DownloadCard'; -import { getPlatformDisplayName, formatDownloadSize } from '@/utils'; +import { getPlatformDisplayName } from '@/utils/platform'; +import { formatDownloadSize } from '@/utils/downloadUtils'; import { getAssetDescription, sortDownloadsByType } from '@/utils/assets'; import { useKoboldVersions } from '@/hooks/useKoboldVersions'; import type { DownloadItem } from '@/types/electron'; diff --git a/src/components/screens/Interface/TerminalTab.tsx b/src/components/screens/Interface/TerminalTab.tsx index 8a1ca0a..184922e 100644 --- a/src/components/screens/Interface/TerminalTab.tsx +++ b/src/components/screens/Interface/TerminalTab.tsx @@ -9,7 +9,8 @@ import { import { ChevronDown } from 'lucide-react'; import styles from '@/styles/layout.module.css'; import { UI } from '@/constants'; -import { handleTerminalOutput, processTerminalContent } from '@/utils'; +import { handleTerminalOutput } from '@/utils/terminal'; +import { processTerminalContent } from '@/utils/linkifyTerminal'; import { useLaunchConfigStore } from '@/stores/launchConfigStore'; interface TerminalTabProps { diff --git a/src/components/screens/Launch/ImageGenerationTab.tsx b/src/components/screens/Launch/ImageGenerationTab.tsx index e2f52db..c52ff49 100644 --- a/src/components/screens/Launch/ImageGenerationTab.tsx +++ b/src/components/screens/Launch/ImageGenerationTab.tsx @@ -2,7 +2,7 @@ import { Stack } from '@mantine/core'; import { useState } from 'react'; import { ModelFileField } from '@/components/ModelFileField'; import { SelectWithTooltip } from '@/components/SelectWithTooltip'; -import { IMAGE_MODEL_PRESETS } from '@/utils'; +import { IMAGE_MODEL_PRESETS } from '@/constants/imageModelPresets'; import { useLaunchConfig } from '@/hooks/useLaunchConfig'; export const ImageGenerationTab = () => { diff --git a/src/components/screens/Welcome.tsx b/src/components/screens/Welcome.tsx index 5942ec2..d7bcbf7 100644 --- a/src/components/screens/Welcome.tsx +++ b/src/components/screens/Welcome.tsx @@ -73,7 +73,22 @@ export const WelcomeScreen = ({ onGetStarted }: WelcomeScreenProps) => ( - Use powerful AI models for free once downloaded + + + + Hardware acceleration + {' '} + - Supports CUDA, ROCm, Vulkan, and CLBlast backends for faster + inference + + + + + Note: Hardware acceleration requires appropriate drivers to be + manually installed by the user (CUDA for NVIDIA GPUs, ROCm for AMD + GPUs, etc.) +