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 11, 2024
1 parent 5a12000 commit 70e68bf
Show file tree
Hide file tree
Showing 22 changed files with 479 additions and 62 deletions.
162 changes: 162 additions & 0 deletions react/src/pages/SessionLauncherPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ interface SessionLauncherValue {
enabled: boolean;
scheduleDate?: string;
command?: string;
enabledTimeout?: boolean;
timeout?: string;
};
allocationPreset: string;
envvars: EnvVarFormListValue[];
Expand Down Expand Up @@ -208,6 +210,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 @@ -979,6 +984,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 @@ -1276,6 +1419,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 @@ -289,7 +289,10 @@
"autoSelect": "Automatische Auswahl",
"DescSelectAgent": "Die auf der rechten Seite des Agenten angezeigten Ressourcen stellen die tatsächliche Menge der verfügbaren Ressourcen dar. \nDerzeit ist die Agentenauswahl nur in einer Single-Node-Single-Container-Umgebung verfügbar. \nDie Standardeinstellung ist die Agentenzuteilung durch den Scheduler.",
"AgentNode": "Agent",
"AutoSelect": "automatisch auswählen"
"AutoSelect": "automatisch auswählen",
"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 @@ -1536,7 +1539,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 @@ -1757,5 +1761,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 @@ -289,7 +289,10 @@
"autoSelect": "Αυτόματη επιλογή",
"DescSelectAgent": "Οι πόροι που εμφανίζονται στη δεξιά πλευρά του πράκτορα αντιπροσωπεύουν την πραγματική ποσότητα των διαθέσιμων πόρων. \nΠρος το παρόν, η επιλογή πράκτορα είναι διαθέσιμη μόνο σε περιβάλλον ενός κοντέινερ ενός κόμβου. \nΗ προεπιλεγμένη ρύθμιση είναι η κατανομή πράκτορα από τον προγραμματιστή.",
"AgentNode": "Μέσο",
"AutoSelect": "αυτόματη επιλογή"
"AutoSelect": "αυτόματη επιλογή",
"BatchJobTimeoutDuration": "Διάρκεια χρονικού ορίου λήξης παρτίδας εργασίας",
"BatchJobTimeoutDurationDesc": "Ορίστε τον μέγιστο χρόνο εκτέλεσης για εργασίες παρτίδας. \nΗ συνεδρία θα τερματιστεί αυτόματα εάν ξεπεραστεί ο καθορισμένος χρόνος.",
"SetBatchJobTimeoutDuration": "Ορίστε τη διάρκεια του χρονικού ορίου λήξης της παρτίδας εργασίας"
},
"Preparing": "Προετοιμασία ...",
"PreparingSession": "Προετοιμασία συνεδρίας ...",
Expand Down Expand Up @@ -1536,7 +1539,8 @@
"APINotSupported": "Το API δεν υποστηρίζεται. Απαιτείται η τελευταία έκδοση του διαχειριστή Backend.AI.",
"WrongAPIServerAddress": "Λάθος διεύθυνση διακομιστή API.",
"ReachedResourceLimitPleaseContact": "Φτάσατε το όριο των πόρων σας. \nΕπικοινωνήστε με τον διαχειριστή.",
"InvalidUrl": "Δεν είναι έγκυρη διεύθυνση URL"
"InvalidUrl": "Δεν είναι έγκυρη διεύθυνση URL",
"AllowsPositiveNumberOnly": "Να επιτρέπεται μόνο θετικός αριθμός."
},
"maxLength": {
"64chars": "(έως 64 χαρακτήρες)",
Expand Down Expand Up @@ -1757,5 +1761,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 @@ -303,7 +303,10 @@
"autoSelect": "Auto Select",
"DescSelectAgent": "The resources displayed on the right side of the agent represent the actual amount of available resources. Currently, agent selection is only available in a single-node single-container environment. The default setting is agent allocation by the scheduler.",
"AgentNode": "Agent ",
"AutoSelect": "auto-select"
"AutoSelect": "auto-select",
"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 @@ -1668,7 +1671,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 @@ -1762,5 +1766,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 @@ -1325,7 +1326,10 @@
"autoSelect": "Selección automática",
"DescSelectAgent": "Los recursos que se muestran en el lado derecho del agente representan la cantidad real de recursos disponibles. \nActualmente, la selección de agentes solo está disponible en un entorno de un solo nodo y un solo contenedor. \nLa configuración predeterminada es la asignación de agentes por parte del programador.",
"AgentNode": "Agente",
"AutoSelect": "selección automática"
"AutoSelect": "selección automática",
"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 @@ -1759,5 +1763,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 70e68bf

Please sign in to comment.