Skip to content

Commit

Permalink
feat: batch session timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
agatha197 committed Nov 8, 2024
1 parent 06d5f40 commit 8facaeb
Show file tree
Hide file tree
Showing 22 changed files with 477 additions and 63 deletions.
162 changes: 162 additions & 0 deletions react/src/pages/SessionLauncherPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@ interface SessionLauncherValue {
enabled: boolean;
scheduleDate?: string;
command?: string;
enabledTimeout?: boolean;
timeout?: string;
};
allocationPreset: string;
envvars: EnvVarFormListValue[];
Expand Down Expand Up @@ -207,6 +209,9 @@ const SessionLauncherPage = () => {
enabled: false,
command: undefined,
scheduleDate: undefined,
enabledTimeout: false,
timeout: undefined,
timeoutUnit: 's',
},
envvars: [],
// set default_session_environment only if set
Expand Down Expand Up @@ -963,6 +968,144 @@ const SessionLauncherPage = () => {
</Form.Item>
</Flex>
</Form.Item>
<Form.Item
label={
<Flex gap="xxs">
<Typography.Text>
{t('session.launcher.BatchJobTimeoutDuration')}
</Typography.Text>
<Tooltip
title={t(
'session.launcher.BatchJobTimeoutDurationDesc',
)}
>
<QuestionCircleOutlined />
</Tooltip>
</Flex>
}
extra={
<Form.Item
noStyle
shouldUpdate={(prev, next) =>
prev.batch.timeout !== next.batch.timeout ||
prev.batch.timeoutUnit !== next.batch.timeoutUnit
}
>
{() => {
const timeout = form.getFieldValue([
'batch',
'timeout',
]);
const unit = form.getFieldValue([
'batch',
'timeoutUnit',
]);
const humanizedDuration = timeout
? dayjs
.duration(timeout, unit ?? 'ms')
.humanize(true)
: null;
return !_.isNull(timeout) && _.toFinite(timeout) > 0
? humanizedDuration
: null;
}}
</Form.Item>
}
>
<Flex direction="row" gap={'xs'}>
<Form.Item
noStyle
name={['batch', 'timeoutEnabled']}
valuePropName="checked"
>
<Checkbox
onChange={(e) => {
if (e.target.checked === false) {
form.setFieldValue(
['batch', 'timeout'],
undefined,
);
}
form.validateFields([['batch', 'timeout']]);
}}
>
{t('session.launcher.Enable')}
</Checkbox>
</Form.Item>
<Form.Item
noStyle
shouldUpdate={(prev, next) => {
return (
prev.batch?.timeoutEnabled !==
next.batch?.timeoutEnabled
);
}}
>
{() => {
const disabled =
form.getFieldValue([
'batch',
'timeoutEnabled',
]) !== true;
return (
<>
<Form.Item
name={['batch', 'timeout']}
noStyle
rules={[
{
min: 0,
type: 'number',
message: t(
'error.AllowsPositiveNumberOnly',
),
},
]}
>
<InputNumber
disabled={disabled}
addonAfter={
<Form.Item
noStyle
name={['batch', 'timeoutUnit']}
>
<Select
tabIndex={-1}
style={{ minWidth: 75 }}
options={[
{ label: t('time.ms'), value: '' },
{
label: t('time.sec'),
value: 's',
},
{
label: t('time.min'),
value: 'm',
},
{
label: t('time.hour'),
value: 'h',
},
{
label: t('time.day'),
value: 'd',
},
{
label: t('time.week'),
value: 'w',
},
]}
/>
</Form.Item>
}
/>
</Form.Item>
</>
);
}}
</Form.Item>
</Flex>
</Form.Item>
</Card>
)}

Expand Down Expand Up @@ -1260,6 +1403,25 @@ const SessionLauncherPage = () => {
</Typography.Text>
)}
</Descriptions.Item>
<Descriptions.Item
label={t(
'session.launcher.SetBatchJobTimeoutDuration',
)}
>
{form.getFieldValue(['batch', 'timeout']) ? (
<Typography.Text>
{form.getFieldValue(['batch', 'timeout'])}
{form.getFieldValue([
'batch',
'timeoutUnit',
]) ?? 'ms'}
</Typography.Text>
) : (
<Typography.Text type="secondary">
{t('general.None')}
</Typography.Text>
)}
</Descriptions.Item>
</>
)}
</Descriptions>
Expand Down
18 changes: 15 additions & 3 deletions resources/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@
"PreOpenPortConfigurationDone": "Vorgeöffnete Ports erfolgreich konfiguriert.",
"InfiniteTime": "Unendlich",
"ResetStartTime": "Bitte stellen Sie die Startzeit neu ein.",
"SessionStartTime": "Die Sitzung beginnt:",
"SessionStartTime": "Die Sitzung beginnt",
"SessionType": "Sitzungstyp",
"InferenceMode": "Inferenz",
"BatchMode": "Stapel",
Expand Down Expand Up @@ -284,7 +284,10 @@
"InsufficientAllocationOfResourcesWarning": "Die zuweisbaren Ressourcen liegen unter der im ausgewählten Bild erforderlichen Mindestressource.",
"RecentHistory": "Jüngere Geschichte",
"CreatedAt": "Erstellt am",
"Tags": "Schlagworte"
"Tags": "Schlagworte",
"BatchJobTimeoutDuration": "Dauer des Batch-Job-Timeouts",
"BatchJobTimeoutDurationDesc": "Legen Sie die maximale Ausführungszeit für Batch-Jobs fest. \nDie Sitzung wird automatisch beendet, wenn die angegebene Zeit überschritten wird.",
"SetBatchJobTimeoutDuration": "Legen Sie die Zeitüberschreitungsdauer für Batch-Jobs fest"
},
"Preparing": "Vorbereitung...",
"PreparingSession": "Sitzung vorbereiten...",
Expand Down Expand Up @@ -1531,7 +1534,8 @@
"APINotSupported": "API wird nicht unterstützt. Erfordert die neueste Version des Backend.AI-Managers.",
"WrongAPIServerAddress": "Falsche API-Serveradresse.",
"ReachedResourceLimitPleaseContact": "Ihr Ressourcenlimit wurde erreicht. \nBitte wenden Sie sich an den Administrator.",
"InvalidUrl": "Es handelt sich nicht um eine gültige URL"
"InvalidUrl": "Es handelt sich nicht um eine gültige URL",
"AllowsPositiveNumberOnly": "Nur positive Zahlen zulassen."
},
"maxLength": {
"64chars": "(maximal 64 Zeichen)",
Expand Down Expand Up @@ -1752,5 +1756,13 @@
"SelectEndpoint": "Wählen Sie Endpunkt aus",
"SyncInput": "Eingang synchronisieren",
"CompareWithOtherModels": "Vergleichen Sie mit anderen Modellen"
},
"time": {
"ms": "ms",
"sec": "Sek",
"min": "min",
"hour": "Stunde",
"day": "day",
"week": "Woche"
}
}
18 changes: 15 additions & 3 deletions resources/i18n/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@
"PreOpenPortConfigurationDone": "Οι προ-ανοίγουσες θύρες διαμορφώθηκαν με επιτυχία.",
"InfiniteTime": "Άπειρο",
"ResetStartTime": "Παρακαλώ επαναφέρετε την ώρα έναρξης.",
"SessionStartTime": "Έναρξη συνεδρίας:",
"SessionStartTime": "Έναρξη συνεδρίας",
"SessionType": "Τύπος συνεδρίας",
"InferenceMode": "Συμπεράσματα",
"BatchMode": "Παρτίδα",
Expand Down Expand Up @@ -284,7 +284,10 @@
"InsufficientAllocationOfResourcesWarning": "Οι κατανεμητέοι πόροι πέφτουν κάτω από τον ελάχιστο απαιτούμενο πόρο στην επιλεγμένη εικόνα.",
"RecentHistory": "Πρόσφατη ιστορία",
"CreatedAt": "Δημιουργήθηκε στο",
"Tags": "Ετικέτες"
"Tags": "Ετικέτες",
"BatchJobTimeoutDuration": "Διάρκεια χρονικού ορίου λήξης παρτίδας εργασίας",
"BatchJobTimeoutDurationDesc": "Ορίστε τον μέγιστο χρόνο εκτέλεσης για εργασίες παρτίδας. \nΗ συνεδρία θα τερματιστεί αυτόματα εάν ξεπεραστεί ο καθορισμένος χρόνος.",
"SetBatchJobTimeoutDuration": "Ορίστε τη διάρκεια του χρονικού ορίου λήξης της παρτίδας εργασίας"
},
"Preparing": "Προετοιμασία ...",
"PreparingSession": "Προετοιμασία συνεδρίας ...",
Expand Down Expand Up @@ -1531,7 +1534,8 @@
"APINotSupported": "Το API δεν υποστηρίζεται. Απαιτείται η τελευταία έκδοση του διαχειριστή Backend.AI.",
"WrongAPIServerAddress": "Λάθος διεύθυνση διακομιστή API.",
"ReachedResourceLimitPleaseContact": "Φτάσατε το όριο των πόρων σας. \nΕπικοινωνήστε με τον διαχειριστή.",
"InvalidUrl": "Δεν είναι έγκυρη διεύθυνση URL"
"InvalidUrl": "Δεν είναι έγκυρη διεύθυνση URL",
"AllowsPositiveNumberOnly": "Να επιτρέπεται μόνο θετικός αριθμός."
},
"maxLength": {
"64chars": "(έως 64 χαρακτήρες)",
Expand Down Expand Up @@ -1752,5 +1756,13 @@
"SelectEndpoint": "Επιλέξτε Τελικό σημείο",
"SyncInput": "Συγχρονισμός εισόδου",
"CompareWithOtherModels": "Συγκρίνετε με άλλα μοντέλα"
},
"time": {
"ms": "ms",
"sec": "δευτ",
"min": "min",
"hour": "ώρα",
"day": "day",
"week": "εβδομάδα"
}
}
18 changes: 15 additions & 3 deletions resources/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@
"BatchModeConfig": "Batch mode Configuration",
"ScheduleTime": "Schedule time (optional)",
"StartUpCommand": "Startup Command",
"SessionStartTime": "Session Starts: ",
"SessionStartTime": "Session Starts",
"ResetStartTime": "Please reset the start time.",
"InfiniteTime": "Infinite",
"SetEnvironmentVariable": "Environment Variable (optional)",
Expand Down Expand Up @@ -298,7 +298,10 @@
"InsufficientAllocationOfResourcesWarning": "Allocatable resources falls below the minimum resource required in the selected image.",
"RecentHistory": "Recent History",
"CreatedAt": "CreatedAt",
"Tags": "Tags"
"Tags": "Tags",
"BatchJobTimeoutDuration": "Batch Job Timeout Duration",
"BatchJobTimeoutDurationDesc": "Set the maximum execution time for batch jobs. The session will automatically terminate if the specified time is exceeded.",
"SetBatchJobTimeoutDuration": "Set batch job timeout duration"
},
"Preparing": "Preparing...",
"PreparingSession": "Preparing session...",
Expand Down Expand Up @@ -1663,7 +1666,8 @@
"APINotSupported": "API not supported. Requires latest version of Backend.AI manager.",
"ErrorFetchingExternalContent": "Error fetching external content:",
"ReachedResourceLimitPleaseContact": "Reached your resource limit. Please contact the administrator.",
"InvalidUrl": "It is not a valid URL"
"InvalidUrl": "It is not a valid URL",
"AllowsPositiveNumberOnly": "Allow positive number only."
},
"maxLength": {
"64chars": "(maximum 64 chars)",
Expand Down Expand Up @@ -1757,5 +1761,13 @@
"DeleteChattingSessionDescription": "You are about to delete this topic. Once deleted, it cannot be recovered. Please proceed with caution.",
"SyncInput": "Sync input",
"CompareWithOtherModels": "Compare with other models"
},
"time": {
"ms": "ms",
"sec": "sec",
"min": "min",
"hour": "hour",
"day": "day",
"week": "week"
}
}
18 changes: 15 additions & 3 deletions resources/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@
"UserNameAlreadyExist": "El nombre de usuario ya existe. No se puede duplicar.",
"VirtualFolderAlreadyExist": "Ya existe una carpeta virtual con el mismo nombre. Elimine su propia carpeta o rechace la invitación.",
"ReachedResourceLimitPleaseContact": "Alcanzó su límite de recursos. \nPor favor contacte al administrador.",
"InvalidUrl": "No es una URL válida"
"InvalidUrl": "No es una URL válida",
"AllowsPositiveNumberOnly": "Permitir solo números positivos."
},
"DownloadSSHKey": "Descargar clave SSH",
"ErrorBoundary": {
Expand Down Expand Up @@ -1256,7 +1257,7 @@
"SessionAlreadyExists": "El nombre de la sesión ya existe",
"SessionNameAllowCondition": "El nombre de la sesión debe tener de 4 a 64 letras/números sin espacios en blanco.",
"SessionNameOptional": "Nombre de la sesión (opcional)",
"SessionStartTime": "Comienza la sesión:",
"SessionStartTime": "Comienza la sesión",
"SessionType": "Tipo de sesión",
"Sessions": "Sesiones",
"SetEnvironmentVariable": "Variable de entorno (opcional)",
Expand Down Expand Up @@ -1320,7 +1321,10 @@
"InsufficientAllocationOfResourcesWarning": "Los recursos asignables están por debajo del recurso mínimo requerido en la imagen seleccionada.",
"RecentHistory": "Historia reciente",
"CreatedAt": "Creado en",
"Tags": "Etiquetas"
"Tags": "Etiquetas",
"BatchJobTimeoutDuration": "Duración del tiempo de espera del trabajo por lotes",
"BatchJobTimeoutDurationDesc": "Establezca el tiempo máximo de ejecución para trabajos por lotes. \nLa sesión finalizará automáticamente si se excede el tiempo especificado.",
"SetBatchJobTimeoutDuration": "Establecer la duración del tiempo de espera del trabajo por lotes"
},
"ExpiresAfter": "Tiempo restante",
"CPU": "CPU",
Expand Down Expand Up @@ -1754,5 +1758,13 @@
"SelectEndpoint": "Seleccionar punto final",
"SyncInput": "Entrada de sincronización",
"CompareWithOtherModels": "Comparar con otros modelos"
},
"time": {
"ms": "ms",
"sec": "segundo",
"min": "min",
"hour": "hora",
"day": "day",
"week": "semana"
}
}
Loading

0 comments on commit 8facaeb

Please sign in to comment.