+
diff --git a/ui/src/app/jobs/page.tsx b/ui/src/app/jobs/page.tsx
index 817ad92a..57042706 100644
--- a/ui/src/app/jobs/page.tsx
+++ b/ui/src/app/jobs/page.tsx
@@ -9,12 +9,16 @@ export default function Dashboard() {
<>
-
Queue
+ Queue
-
- New Training Job
+
+ + New Job
+ New Training Job
diff --git a/ui/src/app/layout.tsx b/ui/src/app/layout.tsx
index 46747e88..341ac545 100644
--- a/ui/src/app/layout.tsx
+++ b/ui/src/app/layout.tsx
@@ -20,6 +20,12 @@ export const metadata: Metadata = {
description: 'A toolkit for building AI things.',
};
+export const viewport = {
+ width: 'device-width',
+ initialScale: 1,
+ maximumScale: 5,
+};
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
// Check if the AI_TOOLKIT_AUTH environment variable is set
const authRequired = process.env.AI_TOOLKIT_AUTH ? true : false;
diff --git a/ui/src/app/settings/page.tsx b/ui/src/app/settings/page.tsx
index 4bf257c3..8b0d8801 100644
--- a/ui/src/app/settings/page.tsx
+++ b/ui/src/app/settings/page.tsx
@@ -36,7 +36,7 @@ export default function Settings() {
<>
-
Settings
+ Settings
diff --git a/ui/src/components/AutoCaptionButton.tsx b/ui/src/components/AutoCaptionButton.tsx
index 207ba5c1..e9ee8903 100644
--- a/ui/src/components/AutoCaptionButton.tsx
+++ b/ui/src/components/AutoCaptionButton.tsx
@@ -1,4 +1,4 @@
-import React, {use, useEffect} from 'react';
+import React, { use, useEffect } from 'react';
import { Button } from '@headlessui/react';
import { CaptionDatasetModal, openCaptionDatasetModal } from '@/components/CaptionDatasetModal';
import useJobByRef from '@/hooks/useJobByRef';
@@ -14,26 +14,33 @@ export default function AutoCaptionButton({ datasetPath, setIsAutoCaptioning }:
const { job, status, refreshJob } = useJobByRef(datasetPath, 5000);
useEffect(() => {
if (setIsAutoCaptioning) {
- setIsAutoCaptioning(!!(job && (job.status === 'running')));
+ setIsAutoCaptioning(!!(job && job.status === 'running'));
}
}, [job, setIsAutoCaptioning]);
-
+
if (job && (job.status === 'running' || job.status === 'queued')) {
return (
-
+
- Auto Captioning...
+
Auto Captioning...
+
Captioning
);
}
return (
);
}
diff --git a/ui/src/components/GPUMonitor.tsx b/ui/src/components/GPUMonitor.tsx
index 145ff509..fe1d7ade 100644
--- a/ui/src/components/GPUMonitor.tsx
+++ b/ui/src/components/GPUMonitor.tsx
@@ -50,22 +50,22 @@ const GpuMonitor: React.FC = () => {
case 1:
return 'grid-cols-1';
case 2:
- return 'grid-cols-2';
+ return 'grid-cols-1 sm:grid-cols-2';
case 3:
- return 'grid-cols-3';
+ return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3';
case 4:
- return 'grid-cols-4';
+ return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4';
case 5:
case 6:
- return 'grid-cols-3';
+ return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3';
case 7:
case 8:
- return 'grid-cols-4';
+ return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4';
case 9:
case 10:
- return 'grid-cols-5';
+ return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-5';
default:
- return 'grid-cols-3';
+ return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3';
}
};
diff --git a/ui/src/components/JobActionBar.tsx b/ui/src/components/JobActionBar.tsx
index 5623ae64..4520a04f 100644
--- a/ui/src/components/JobActionBar.tsx
+++ b/ui/src/components/JobActionBar.tsx
@@ -30,8 +30,9 @@ export default function JobActionBar({
if (!afterDelete) afterDelete = onRefresh;
+ const iconSizeClass = 'w-5 h-5 sm:w-6 sm:h-6';
return (
-
+
{canStart && (
)}
{canRemoveFromQueue && (
@@ -55,9 +56,9 @@ export default function JobActionBar({
await markJobAsStopped(job.id);
if (onRefresh) onRefresh();
}}
- className={`ml-2 opacity-100`}
+ className={`ml-1 sm:ml-2 opacity-100`}
>
-
+
)}
{canStop && (
@@ -75,19 +76,19 @@ export default function JobActionBar({
},
});
}}
- className={`ml-2 opacity-100`}
+ className={`ml-1 sm:ml-2 opacity-100`}
>
-
+
)}
{!hideView && (
-
-
+
+
)}
{job.job_type === 'caption' && canEdit && (
openCaptionDatasetModal(
job.job_ref || '',
@@ -98,12 +99,12 @@ export default function JobActionBar({
)
}
>
-
+
)}
{job.job_type === 'train' && canEdit && (
-
-
+
+
)}
-
+