From fad0e48437f1908b7fcdbe1baa4a96d49196be21 Mon Sep 17 00:00:00 2001 From: sauravniraula Date: Wed, 23 Jul 2025 00:10:41 +0545 Subject: [PATCH] style(nextjs): changes settings llm selection layout --- servers/nextjs/app/settings/SettingPage.tsx | 175 +++++++++++++------- 1 file changed, 118 insertions(+), 57 deletions(-) diff --git a/servers/nextjs/app/settings/SettingPage.tsx b/servers/nextjs/app/settings/SettingPage.tsx index b9538fbe..ecc6ee64 100644 --- a/servers/nextjs/app/settings/SettingPage.tsx +++ b/servers/nextjs/app/settings/SettingPage.tsx @@ -1,8 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; import Header from "../dashboard/components/Header"; -import Wrapper from "@/components/Wrapper"; -import { Settings, Key, Loader2 } from "lucide-react"; +import { Loader2, Download, CheckCircle } from "lucide-react"; import { toast } from "sonner"; import { RootState } from "@/store/store"; import { useSelector } from "react-redux"; @@ -45,6 +44,14 @@ const SettingsPage = () => { status: string; done: boolean; } | null>(null); + const [showDownloadModal, setShowDownloadModal] = useState(false); + + const downloadProgress = React.useMemo(() => { + if (downloadingModel && downloadingModel.downloaded !== null && downloadingModel.size !== null) { + return Math.round((downloadingModel.downloaded / downloadingModel.size) * 100); + } + return 0; + }, [downloadingModel?.downloaded, downloadingModel?.size]); const handleSaveConfig = async () => { try { @@ -55,17 +62,18 @@ const SettingsPage = () => { isDisabled: true, text: "Saving Configuration..." })); - + await handleSaveLLMConfig(llmConfig); - + if (llmConfig.LLM === "ollama" && llmConfig.OLLAMA_MODEL) { const isPulled = await checkIfSelectedOllamaModelIsPulled(llmConfig.OLLAMA_MODEL); if (!isPulled) { + setShowDownloadModal(true); await handleModelDownload(); } } - - toast.success("Configuration saved successfully"); + + toast.info("Configuration saved successfully"); setIsLoading(false); setButtonState(prev => ({ ...prev, @@ -76,7 +84,7 @@ const SettingsPage = () => { router.back(); } catch (error) { console.error("Error:", error); - toast.error( + toast.info( error instanceof Error ? error.message : "Failed to save configuration" @@ -97,6 +105,7 @@ const SettingsPage = () => { } catch (error) { console.error("Error downloading model:", error); setDownloadingModel(null); + setShowDownloadModal(false); } }; @@ -115,8 +124,9 @@ const SettingsPage = () => { if (downloadingModel && downloadingModel.done) { setTimeout(() => { + setShowDownloadModal(false); setDownloadingModel(null); - toast.success("Model downloaded successfully!"); + toast.info("Model downloaded successfully!"); }, 2000); } }, [downloadingModel]); @@ -132,64 +142,115 @@ const SettingsPage = () => { } return ( -
+
- -
- {/* Settings Header */} -
- -

Settings

-
+
+ {/* LLM Selection Component */} +
+ +
+
- {/* API Configuration Section */} -
-
- -

- API Configuration -

-
+ {/* Fixed Bottom Button */} +
+
+ +
+
- {/* LLM Selection Component */} -
- -
+ {/* Download Progress Modal */} + {showDownloadModal && downloadingModel && ( +
+
+ {/* Modal Content */} +
+ {/* Icon */} +
+ {downloadingModel.done ? ( + + ) : ( + + )} +
- {/* Save Button */} - + {/* Title */} +

+ {downloadingModel.done ? "Download Complete!" : "Downloading Model"} +

- {llmConfig.LLM === "ollama" && - downloadingModel?.status && - downloadingModel.status !== "pulled" && ( -
- {downloadingModel.status} + {/* Model Name */} +

+ {llmConfig.OLLAMA_MODEL} +

+ + {/* Progress Bar */} + {downloadProgress > 0 && ( +
+
+
+
+

+ {downloadProgress}% Complete +

)} + + {/* Status */} + {downloadingModel.status && ( +
+ + + {downloadingModel.status} + +
+ )} + + {/* Status Message */} + {downloadingModel.status && downloadingModel.status !== "pulled" && ( +
+ {downloadingModel.status === "downloading" && "Downloading model files..."} + {downloadingModel.status === "verifying" && "Verifying model integrity..."} + {downloadingModel.status === "pulling" && "Pulling model from registry..."} +
+ )} + + {/* Download Info */} + {downloadingModel.downloaded && downloadingModel.size && ( +
+
+ Downloaded: {(downloadingModel.downloaded / 1024 / 1024).toFixed(1)} MB + Total: {(downloadingModel.size / 1024 / 1024).toFixed(1)} MB +
+
+ )} +
- + )}
); };