From 8dda6b05d717eb9d85bba2fdee1c694a6b11d5a7 Mon Sep 17 00:00:00 2001 From: Hossein Salari Date: Thu, 26 Feb 2026 17:34:37 +0330 Subject: [PATCH] feat: connect LLM + LoRA tab to backend api --- .env | 2 +- components/layout/AppHeader.jsx | 49 ++++++++ components/layout/SidebarItem.jsx | 33 +++++ components/layout/SidebarList.jsx | 72 +++++++++++ components/tabs/llmPanel.js | 15 ++- lib/api.js | 1 - pages/index.js | 194 ++---------------------------- 7 files changed, 178 insertions(+), 188 deletions(-) create mode 100644 components/layout/AppHeader.jsx create mode 100644 components/layout/SidebarItem.jsx create mode 100644 components/layout/SidebarList.jsx diff --git a/.env b/.env index e9c9ddd..bfd53f1 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -NEXT_PUBLIC_BASE_URL=http://192.168.10.87:8070 +NEXT_PUBLIC_BASE_URL=http://192.168.10.87:8070/generative diff --git a/components/layout/AppHeader.jsx b/components/layout/AppHeader.jsx new file mode 100644 index 0000000..eff0a10 --- /dev/null +++ b/components/layout/AppHeader.jsx @@ -0,0 +1,49 @@ +import { Box, HStack, Image, Text, VStack } from "@chakra-ui/react"; + +export default function AppHeader() { + return ( + + + + + + سامانه تولید محتوای هوشمند + + + سامانه جامع تولید محتوا با استفاده از مدل‌های زبانی و مولد تصویر و + ویدئو + + + + + + + موسسه تولید سیستم های خبره و هوشمند اسلامی باقرالعلوم(ع) + + + + ); +} diff --git a/components/layout/SidebarItem.jsx b/components/layout/SidebarItem.jsx new file mode 100644 index 0000000..5e49ea5 --- /dev/null +++ b/components/layout/SidebarItem.jsx @@ -0,0 +1,33 @@ +import { Flex, Icon, Text } from "@chakra-ui/react"; + +export default function SidebarItem({ + icon, + label, + active = false, + setFilters, + name, +}) { + return ( + setFilters({ tab_menu: name })} + > + + + {label} + + + ); +} diff --git a/components/layout/SidebarList.jsx b/components/layout/SidebarList.jsx new file mode 100644 index 0000000..819db0e --- /dev/null +++ b/components/layout/SidebarList.jsx @@ -0,0 +1,72 @@ +import { VStack } from "@chakra-ui/react"; +import SidebarItem from "./SidebarItem"; +import { BsChatText } from "react-icons/bs"; +import { FiImage } from "react-icons/fi"; +import { CiVideoOn } from "react-icons/ci"; + +export default function SidebarList({ filters, setFilters }) { + return ( + + {filters?.tab === 0 && ( + <> + + + + )} + {filters?.tab === 1 && ( + <> + + + + )} + {filters?.tab === 2 && ( + <> + + + + )} + + ); +} diff --git a/components/tabs/llmPanel.js b/components/tabs/llmPanel.js index e7821c0..4e8889e 100644 --- a/components/tabs/llmPanel.js +++ b/components/tabs/llmPanel.js @@ -25,6 +25,11 @@ import useSWRMutation from "swr/mutation"; import axiosInstance, { baseUrl } from "@/lib/api"; import { useState } from "react"; +const modelsDic = { + gemma_base: "base", + gemma4b_lora: "lora", +}; + const postRequest = async (url, { arg }) => { const response = await axiosInstance.post(baseUrl + url, arg); return response?.data; @@ -35,9 +40,13 @@ export default function LlmPanel({ filters }) { const [generatedText, setGeneratedText] = useState(""); const { trigger: triggerGenerateText, isMutating: isGeneratingText } = - useSWRMutation("/content/content/base", postRequest, { - onSuccess: (data) => setGeneratedText(data?.content), - }); + useSWRMutation( + `/content/vllm/${modelsDic[filters?.tab_menu]}`, + postRequest, + { + onSuccess: (data) => setGeneratedText(data?.content), + }, + ); const onSubmit = (data) => { triggerGenerateText({ diff --git a/lib/api.js b/lib/api.js index 7ff8e23..0f87c02 100644 --- a/lib/api.js +++ b/lib/api.js @@ -11,7 +11,6 @@ axiosInstance.interceptors.request.use( async (config) => { if (keycloak?.authenticated) { config.headers.Authorization = `Bearer ${keycloak.token}`; - await keycloak.updateToken(30); } return config; }, diff --git a/pages/index.js b/pages/index.js index 4994cc1..29c916a 100644 --- a/pages/index.js +++ b/pages/index.js @@ -11,12 +11,8 @@ import { TabList, TabPanel, TabPanels, - Icon, HStack, - Image, } from "@chakra-ui/react"; -import { FiImage, FiLayers } from "react-icons/fi"; -import { CiVideoOn } from "react-icons/ci"; import { IoDocumentTextOutline, IoImageOutline, @@ -29,9 +25,11 @@ import { useQueryParams, withDefault, } from "use-query-params"; -import { BsChatText } from "react-icons/bs"; import { AiOutlinePoweroff } from "react-icons/ai"; import keycloak from "@/lib/keycloak"; +import AppHeader from "@/components/layout/AppHeader"; +import SidebarList from "@/components/layout/SidebarList"; +import { useEffect } from "react"; export default function Home() { const [filters, setFilters] = useQueryParams({ @@ -40,6 +38,12 @@ export default function Home() { model_name: withDefault(NumberParam, 0), }); + useEffect(() => { + if (filters?.tab == 0) setFilters({ tab_menu: "gemma_base" }); + else if (filters?.tab == 1) setFilters({ tab_menu: "sdxl" }); + else if (filters?.tab == 2) setFilters({ tab_menu: "cogvideo_base" }); + }, [filters?.tab]); + return ( {/* Header */} @@ -83,112 +87,10 @@ export default function Home() { - - - - - - - - + - - - - - - - - + @@ -290,77 +192,3 @@ export default function Home() { ); } - -function AppHeader() { - return ( - - - - - - سامانه تولید محتوای هوشمند - - - سامانه جامع تولید محتوا با استفاده از مدل‌های زبانی و مولد تصویر و - ویدئو - - - - - - - موسسه تولید سیستم های خبره و هوشمند اسلامی باقرالعلوم(ع) - - - - ); -} - -function SidebarItem({ icon, label, active = false, setFilters, name }) { - return ( - setFilters({ tab_menu: name })} - > - - - {label} - - - ); -}