diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index 7acd3e6de6..a4f4af2cb1 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -124,4 +124,54 @@ p { margin: 0; -} \ No newline at end of file +} + +@keyframes collapsible-down { + from { + height: 0; + opacity: 0; + transform: translateY(-4px); + visibility: hidden; + } + to { + height: var(--radix-collapsible-content-height); + opacity: 1; + transform: translateY(0); + visibility: visible; + } +} + +@keyframes collapsible-up { + from { + height: var(--radix-collapsible-content-height); + opacity: 1; + transform: translateY(0); + visibility: visible; + } + to { + height: 0; + opacity: 0; + transform: translateY(-4px); + visibility: hidden; + } +} + +.collapsible-content[data-state='open'] { + animation: collapsible-down 300ms ease-out; + visibility: visible; +} + +.collapsible-content[data-state='closed'] { + animation: collapsible-up 300ms ease-out; + height: 0; + opacity: 0; + pointer-events: none; + transform: translateY(-4px); + visibility: hidden; +} + +@media (prefers-reduced-motion: reduce) { + .collapsible-content { + animation: none !important; + } +} diff --git a/frontend/src/app/launch-model/[modelType]/page.tsx b/frontend/src/app/launch-model/[modelType]/page.tsx index e8b947dcc6..c0c0d0f797 100644 --- a/frontend/src/app/launch-model/[modelType]/page.tsx +++ b/frontend/src/app/launch-model/[modelType]/page.tsx @@ -1,13 +1,24 @@ import LaunchModel from '@/components/pages/launch-model'; -import { getLaunchModelRouteType } from '@/components/pages/launch-model/utils'; +import { getLaunchModelRouteType, getInitialCustomType } from '@/components/pages/launch-model/utils'; interface LaunchModelPageProps { params: Promise<{ modelType: string; }>; + + searchParams: Promise<{ + activeType?: string; + }>; } -export default async function LaunchModelPage({ params }: LaunchModelPageProps) { +export default async function LaunchModelPage({ params, searchParams }: LaunchModelPageProps) { const { modelType } = await params; - return ; + const { activeType } = await searchParams; + + return ( + + ); } diff --git a/frontend/src/app/register-model/[modelType]/[modelName]/page.tsx b/frontend/src/app/register-model/[modelType]/[modelName]/page.tsx new file mode 100644 index 0000000000..4783bdba4b --- /dev/null +++ b/frontend/src/app/register-model/[modelType]/[modelName]/page.tsx @@ -0,0 +1,14 @@ +import RegisterModel from '@/components/pages/register-model'; +import { getRigisterModelTyps } from '@/components/pages/register-model/utils'; + +interface RegisterModelPageProps { + params: Promise<{ + modelType: string; + modelName: string; + }>; +} + +export default async function RegisterModelPage({ params }: RegisterModelPageProps) { + const { modelType, modelName } = await params; + return ; +} diff --git a/frontend/src/app/register-model/[modelType]/page.tsx b/frontend/src/app/register-model/[modelType]/page.tsx new file mode 100644 index 0000000000..4242e3eade --- /dev/null +++ b/frontend/src/app/register-model/[modelType]/page.tsx @@ -0,0 +1,13 @@ +import RegisterModel from '@/components/pages/register-model'; +import { getRigisterModelTyps } from '@/components/pages/register-model/utils'; + +interface RegisterModelPageProps { + params: Promise<{ + modelType: string; + }>; +} + +export default async function RegisterModelPage({ params }: RegisterModelPageProps) { + const { modelType } = await params; + return ; +} diff --git a/frontend/src/app/register-model/page.tsx b/frontend/src/app/register-model/page.tsx index a52c5d1f74..884ae0bcb4 100644 --- a/frontend/src/app/register-model/page.tsx +++ b/frontend/src/app/register-model/page.tsx @@ -1,5 +1,5 @@ -import RegisterModel from '@/components/pages/register-model'; +import { redirect } from 'next/navigation'; -export default function RegisterModelPage() { - return ; +export default function LaunchModelPage() { + redirect('/register-model/LLM'); } diff --git a/frontend/src/app/running-model/page.tsx b/frontend/src/app/running-model/page.tsx index c58e8cc95e..dbfc26dd6f 100644 --- a/frontend/src/app/running-model/page.tsx +++ b/frontend/src/app/running-model/page.tsx @@ -1,6 +1,6 @@ -const RunningModel = ()=>{ - return ( -
- ) -} -export default RunningModel; \ No newline at end of file +import RunningModel from '@/components/pages/running-model'; + +const RunningModelPages = () => { + return ; +}; +export default RunningModelPages; diff --git a/frontend/src/app/workbench/page.tsx b/frontend/src/app/workbench/page.tsx index 8dbf5beaed..d210c54690 100644 --- a/frontend/src/app/workbench/page.tsx +++ b/frontend/src/app/workbench/page.tsx @@ -1,3 +1,8 @@ export default function Page() { - return
workbench
; -} \ No newline at end of file + return ( +
+ +
+ ); +} + diff --git a/frontend/src/components/layout/sidebar.tsx b/frontend/src/components/layout/sidebar.tsx index c93590f319..07e1ec2c0f 100644 --- a/frontend/src/components/layout/sidebar.tsx +++ b/frontend/src/components/layout/sidebar.tsx @@ -81,12 +81,12 @@ export function Sidebar() { Icon: Rocket, Extra: ChevronRight, }, - // { - // path: '/running-model', - // name: t('menu.runningModels'), - // Icon: Layers, - // Extra: ChevronRight, - // }, + { + path: '/running-model', + name: t('menu.runningModels'), + Icon: Layers, + Extra: ChevronRight, + }, { path: '/register-model', name: t('menu.registerModel'), diff --git a/frontend/src/components/pages/launch-model/cache-management.dialog.tsx b/frontend/src/components/pages/launch-model/cache-management.dialog.tsx index f67753c52c..d5503f0552 100644 --- a/frontend/src/components/pages/launch-model/cache-management.dialog.tsx +++ b/frontend/src/components/pages/launch-model/cache-management.dialog.tsx @@ -1,7 +1,7 @@ 'use client'; -import { FC, PropsWithChildren, useState } from 'react'; -import { Copy, Trash2 } from 'lucide-react'; +import { FC, useState } from 'react'; +import { Box, Copy, Trash2 } from 'lucide-react'; import { toast } from 'sonner'; import request from '@/lib/request'; import { Button } from '@/components/ui/button'; @@ -31,8 +31,7 @@ interface CacheManagementDialogProps { onCacheDelete: () => void; } -const CacheManagementDialog: FC> = ({ - children, +const CacheManagementDialog: FC = ({ modelDetail, onCacheDelete, }) => { @@ -86,7 +85,15 @@ const CacheManagementDialog: FC> = return ( - {children} + + + {modelDetail.model_name} diff --git a/frontend/src/components/pages/launch-model/custom-edit-dialog.tsx b/frontend/src/components/pages/launch-model/custom-edit-dialog.tsx new file mode 100644 index 0000000000..95b8e60d7f --- /dev/null +++ b/frontend/src/components/pages/launch-model/custom-edit-dialog.tsx @@ -0,0 +1,66 @@ +'use client'; + +import { FC, useState, useMemo } from 'react'; +import { SquarePen, Copy } from 'lucide-react'; +import { useRouter } from 'next/navigation'; +import { Button } from '@/components/ui/button'; +import { Textarea } from '@/components/ui/textarea'; +import { + Dialog, + DialogTrigger, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, +} from '@/components/ui/dialog'; +import { useI18n } from '@/contexts/i18n-context'; +import type { CatalogModel, RequestModelType } from './types'; +import { copyText } from '@/lib/utils'; + +interface EnvManagementDialogProps { + model: CatalogModel; + modelType: RequestModelType; +} +const CustomEditDialog: FC = ({ model, modelType }) => { + const { t } = useI18n(); + const router = useRouter(); + const [open, setOpen] = useState(false); + const value = useMemo(() => JSON.stringify(model, null, 4), [model]); + const handleEdit = () => { + // set model detail + sessionStorage.setItem('customJsonData', JSON.stringify(model)); + router.push(`/register-model/${modelType}/${model.model_name}`); + }; + return ( + + + + + + + {model.model_name} + + +