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 90496bc commit a33804f
Show file tree
Hide file tree
Showing 23 changed files with 506 additions and 62 deletions.
185 changes: 185 additions & 0 deletions react/src/pages/SessionLauncherPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ interface SessionConfig {
startupCommand?: string;
bootstrap_script?: string;
agent_list?: string[];
batch_timeout?: string;
}

interface CreateSessionInfo {
Expand All @@ -148,6 +149,9 @@ interface SessionLauncherValue {
enabled: boolean;
scheduleDate?: string;
command?: string;
timeoutEnabled?: boolean;
timeout?: string;
timeoutUnit?: string;
};
allocationPreset: string;
envvars: EnvVarFormListValue[];
Expand Down Expand Up @@ -192,6 +196,7 @@ const SessionLauncherPage = () => {

const supportExtendedImageInfo =
baiClient?.supports('extended-image-info') ?? false;
const supportBatchTimeout = baiClient?.supports('batch-timeout') ?? false;

const [isStartingSession, setIsStartingSession] = useState(false);
const INITIAL_FORM_VALUES: DeepPartial<SessionLauncherFormValue> = useMemo(
Expand All @@ -208,6 +213,11 @@ const SessionLauncherPage = () => {
enabled: false,
command: undefined,
scheduleDate: undefined,
...(supportBatchTimeout && {
timeoutEnabled: false,
timeout: undefined,
timeoutUnit: 's',
}),
},
envvars: [],
// set default_session_environment only if set
Expand All @@ -222,6 +232,7 @@ const SessionLauncherPage = () => {
[
baiClient._config?.default_session_environment,
currentGlobalResourceGroup,
supportBatchTimeout,
],
);
const StepParam = withDefault(NumberParam, 0);
Expand Down Expand Up @@ -515,6 +526,15 @@ const SessionLauncherPage = () => {
),
} // Filter out undefined values
: undefined),
...(supportBatchTimeout &&
values?.batch?.timeoutEnabled &&
!_.isUndefined(values?.batch?.timeout)
? {
batch_timeout:
_.toString(values.batch.timeout) +
values?.batch?.timeoutUnit,
}
: undefined),
},
};
const sessionPromises = _.map(
Expand Down Expand Up @@ -979,6 +999,150 @@ const SessionLauncherPage = () => {
</Form.Item>
</Flex>
</Form.Item>
{supportBatchTimeout ? (
<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>
) : null}
</Card>
)}

Expand Down Expand Up @@ -1276,6 +1440,27 @@ const SessionLauncherPage = () => {
</Typography.Text>
)}
</Descriptions.Item>
{supportBatchTimeout ? (
<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>
) : null}
</>
)}
</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"
}
}
Loading

0 comments on commit a33804f

Please sign in to comment.