Artifacts: bytes a node produced, addressed by their content
A checkpoint is not a message. DType.ARTIFACT carries a reference — digest, size, media type, name — so everything on the wire stays JSON and thirty megabytes never sit in Redis, which answers the vision's open binary-payload question by narrowing it: inline codecs would only serve payloads too small to be worth a round trip, and nothing asks for that. The store is content-addressed rather than per-run, for three reasons that all pay later: a sweep whose fifty configs share one preprocessed input stores it once, a reference stays valid however it is passed around because it names content instead of a location, and the digest is what a stage cache will compare — so building it in now is what keeps that from being a change to the message contract. Node code calls fluksio.save_artifact/load_artifact and cannot tell whether it is writing the engine's own directory or putting bytes over HTTP, which is what will let the same flow run on a remote worker unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AD8SfVhzXBG2nAfFcVh3iD
This commit is contained in:
@@ -57,6 +57,59 @@ export const ApplyResultSchema = {
|
||||
title: 'ApplyResult'
|
||||
} as const;
|
||||
|
||||
export const ArtifactRefSchema = {
|
||||
properties: {
|
||||
digest: {
|
||||
type: 'string',
|
||||
title: 'Digest'
|
||||
},
|
||||
size: {
|
||||
type: 'integer',
|
||||
title: 'Size'
|
||||
},
|
||||
media_type: {
|
||||
type: 'string',
|
||||
title: 'Media Type'
|
||||
},
|
||||
name: {
|
||||
type: 'string',
|
||||
title: 'Name',
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['digest', 'size', 'media_type'],
|
||||
title: 'ArtifactRef'
|
||||
} as const;
|
||||
|
||||
export const ArtifactRowSchema = {
|
||||
properties: {
|
||||
name: {
|
||||
type: 'string',
|
||||
title: 'Name'
|
||||
},
|
||||
node: {
|
||||
type: 'string',
|
||||
title: 'Node'
|
||||
},
|
||||
digest: {
|
||||
type: 'string',
|
||||
title: 'Digest'
|
||||
},
|
||||
size: {
|
||||
type: 'integer',
|
||||
title: 'Size'
|
||||
},
|
||||
media_type: {
|
||||
type: 'string',
|
||||
title: 'Media Type'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['name', 'node', 'digest', 'size', 'media_type'],
|
||||
title: 'ArtifactRow'
|
||||
} as const;
|
||||
|
||||
export const Body_login_login_access_tokenSchema = {
|
||||
properties: {
|
||||
grant_type: {
|
||||
@@ -320,7 +373,7 @@ export const ChannelSchema = {
|
||||
|
||||
export const DTypeSchema = {
|
||||
type: 'string',
|
||||
enum: ['float', 'int', 'str', 'bool', 'json', 'series', 'record', 'list'],
|
||||
enum: ['float', 'int', 'str', 'bool', 'json', 'series', 'record', 'list', 'artifact'],
|
||||
title: 'DType',
|
||||
description: `Serializable payload types.
|
||||
|
||||
@@ -329,8 +382,13 @@ are declared shapes rather than "some JSON": a widget or a downstream node
|
||||
knows what it is getting before anything runs, which is what lets the
|
||||
dashboard picker offer a message and refuse a wrong binding.
|
||||
|
||||
Binary payloads (tensors, images) will arrive later as explicitly declared
|
||||
codec fields; until then everything on the wire is JSON.`
|
||||
Binary payloads — tensors, checkpoints, images — travel as \`\`artifact\`\`:
|
||||
the bytes go to the artifact store and the message carries a reference to
|
||||
them. That keeps everything on the wire JSON, which is what the state
|
||||
backend, the queue and the worker protocol all rely on, and it means a
|
||||
thirty-megabyte checkpoint never sits in Redis. Inline codecs would only be
|
||||
needed for payloads too small to be worth a round trip, and nothing asks
|
||||
for that yet.`
|
||||
} as const;
|
||||
|
||||
export const DashboardDef_InputSchema = {
|
||||
@@ -642,6 +700,21 @@ export const FlowDef_InputSchema = {
|
||||
type: 'integer',
|
||||
title: 'Version',
|
||||
default: 1
|
||||
},
|
||||
mode: {
|
||||
type: 'string',
|
||||
enum: ['live', 'batch'],
|
||||
title: 'Mode',
|
||||
description: 'A live flow reacts to what arrives: its subscriptions, schedules and webhooks run until it is stopped. A batch flow only runs when a run asks it to, from its inputs to its outputs, and is never activated.',
|
||||
default: 'live'
|
||||
},
|
||||
outputs: {
|
||||
items: {
|
||||
type: 'string'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Outputs',
|
||||
description: 'Messages a batch run reports as its result, unqualified. Empty means every message the flow ends up holding.'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
@@ -679,6 +752,21 @@ export const FlowDef_OutputSchema = {
|
||||
type: 'integer',
|
||||
title: 'Version',
|
||||
default: 1
|
||||
},
|
||||
mode: {
|
||||
type: 'string',
|
||||
enum: ['live', 'batch'],
|
||||
title: 'Mode',
|
||||
description: 'A live flow reacts to what arrives: its subscriptions, schedules and webhooks run until it is stopped. A batch flow only runs when a run asks it to, from its inputs to its outputs, and is never activated.',
|
||||
default: 'live'
|
||||
},
|
||||
outputs: {
|
||||
items: {
|
||||
type: 'string'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Outputs',
|
||||
description: 'Messages a batch run reports as its result, unqualified. Empty means every message the flow ends up holding.'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
@@ -1220,6 +1308,49 @@ export const MessagesPublicSchema = {
|
||||
title: 'MessagesPublic'
|
||||
} as const;
|
||||
|
||||
export const MetricPointSchema = {
|
||||
properties: {
|
||||
step: {
|
||||
type: 'integer',
|
||||
title: 'Step'
|
||||
},
|
||||
ts: {
|
||||
type: 'number',
|
||||
title: 'Ts'
|
||||
},
|
||||
value: {
|
||||
type: 'number',
|
||||
title: 'Value'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['step', 'ts', 'value'],
|
||||
title: 'MetricPoint'
|
||||
} as const;
|
||||
|
||||
export const MetricSeriesSchema = {
|
||||
properties: {
|
||||
label: {
|
||||
type: 'string',
|
||||
title: 'Label'
|
||||
},
|
||||
points: {
|
||||
items: {
|
||||
items: {
|
||||
type: 'number'
|
||||
},
|
||||
type: 'array'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Points'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['label'],
|
||||
title: 'MetricSeries',
|
||||
description: 'The shape a chart widget already draws, so comparing runs is a binding.'
|
||||
} as const;
|
||||
|
||||
export const ModulePackageSchema = {
|
||||
properties: {
|
||||
name: {
|
||||
@@ -1347,7 +1478,26 @@ export const NodeDef_InputSchema = {
|
||||
}
|
||||
],
|
||||
title: 'Timeout',
|
||||
description: "Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running."
|
||||
description: "Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running — in a batch run, which never redelivers, it is an idle timeout instead: silence this long is a kill."
|
||||
},
|
||||
device: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Device',
|
||||
description: "Label of the worker this node's code must run on, such as 'gpu'. Empty means the engine's own workers. A run needing a label no attached worker carries waits rather than failing."
|
||||
},
|
||||
device_policy: {
|
||||
type: 'string',
|
||||
enum: ['require', 'prefer'],
|
||||
title: 'Device Policy',
|
||||
description: 'What to do when no worker carries `device`: wait for one, or run locally anyway.',
|
||||
default: 'require'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
@@ -1417,7 +1567,26 @@ export const NodeDef_OutputSchema = {
|
||||
}
|
||||
],
|
||||
title: 'Timeout',
|
||||
description: "Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running."
|
||||
description: "Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running — in a batch run, which never redelivers, it is an idle timeout instead: silence this long is a kill."
|
||||
},
|
||||
device: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Device',
|
||||
description: "Label of the worker this node's code must run on, such as 'gpu'. Empty means the engine's own workers. A run needing a label no attached worker carries waits rather than failing."
|
||||
},
|
||||
device_policy: {
|
||||
type: 'string',
|
||||
enum: ['require', 'prefer'],
|
||||
title: 'Device Policy',
|
||||
description: 'What to do when no worker carries `device`: wait for one, or run locally anyway.',
|
||||
default: 'require'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
@@ -1893,6 +2062,182 @@ export const RuleSchema = {
|
||||
description: 'Which events go to which channels.'
|
||||
} as const;
|
||||
|
||||
export const RunCreateSchema = {
|
||||
properties: {
|
||||
params: {
|
||||
additionalProperties: true,
|
||||
type: 'object',
|
||||
title: 'Params'
|
||||
},
|
||||
seed: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'integer'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Seed'
|
||||
},
|
||||
draft: {
|
||||
type: 'boolean',
|
||||
title: 'Draft',
|
||||
default: false
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
title: 'RunCreate'
|
||||
} as const;
|
||||
|
||||
export const RunDetailSchema = {
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string',
|
||||
title: 'Id'
|
||||
},
|
||||
flow: {
|
||||
type: 'string',
|
||||
title: 'Flow'
|
||||
},
|
||||
status: {
|
||||
type: 'string',
|
||||
title: 'Status'
|
||||
},
|
||||
status_reason: {
|
||||
type: 'string',
|
||||
title: 'Status Reason'
|
||||
},
|
||||
cause: {
|
||||
type: 'string',
|
||||
title: 'Cause'
|
||||
},
|
||||
params: {
|
||||
additionalProperties: true,
|
||||
type: 'object',
|
||||
title: 'Params'
|
||||
},
|
||||
params_digest: {
|
||||
type: 'string',
|
||||
title: 'Params Digest'
|
||||
},
|
||||
seed: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'integer'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Seed'
|
||||
},
|
||||
group_id: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Group Id'
|
||||
},
|
||||
labels: {
|
||||
items: {
|
||||
type: 'string'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Labels'
|
||||
},
|
||||
created_at: {
|
||||
title: 'Created At'
|
||||
},
|
||||
started_at: {
|
||||
title: 'Started At'
|
||||
},
|
||||
finished_at: {
|
||||
title: 'Finished At'
|
||||
},
|
||||
duration_ms: {
|
||||
type: 'number',
|
||||
title: 'Duration Ms'
|
||||
},
|
||||
actor: {
|
||||
type: 'string',
|
||||
title: 'Actor'
|
||||
},
|
||||
result: {
|
||||
additionalProperties: true,
|
||||
type: 'object',
|
||||
title: 'Result'
|
||||
},
|
||||
commit: {
|
||||
type: 'string',
|
||||
title: 'Commit',
|
||||
default: ''
|
||||
},
|
||||
flow_version: {
|
||||
type: 'integer',
|
||||
title: 'Flow Version',
|
||||
default: 1
|
||||
},
|
||||
nodes: {
|
||||
items: {
|
||||
'$ref': '#/components/schemas/RunNodeRow'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Nodes'
|
||||
},
|
||||
artifacts: {
|
||||
items: {
|
||||
'$ref': '#/components/schemas/ArtifactRow'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Artifacts'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['id', 'flow', 'status', 'status_reason', 'cause', 'params', 'params_digest', 'seed', 'group_id', 'labels', 'created_at', 'duration_ms', 'actor'],
|
||||
title: 'RunDetail'
|
||||
} as const;
|
||||
|
||||
export const RunNodeRowSchema = {
|
||||
properties: {
|
||||
node: {
|
||||
type: 'string',
|
||||
title: 'Node'
|
||||
},
|
||||
status: {
|
||||
type: 'string',
|
||||
title: 'Status'
|
||||
},
|
||||
attempt: {
|
||||
type: 'integer',
|
||||
title: 'Attempt'
|
||||
},
|
||||
duration_ms: {
|
||||
type: 'number',
|
||||
title: 'Duration Ms'
|
||||
},
|
||||
worker: {
|
||||
type: 'string',
|
||||
title: 'Worker'
|
||||
},
|
||||
error: {
|
||||
type: 'string',
|
||||
title: 'Error'
|
||||
},
|
||||
logs: {
|
||||
type: 'string',
|
||||
title: 'Logs'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['node', 'status', 'attempt', 'duration_ms', 'worker', 'error', 'logs'],
|
||||
title: 'RunNodeRow'
|
||||
} as const;
|
||||
|
||||
export const RunRequestSchema = {
|
||||
properties: {
|
||||
inputs: {
|
||||
@@ -1906,63 +2251,6 @@ export const RunRequestSchema = {
|
||||
title: 'RunRequest'
|
||||
} as const;
|
||||
|
||||
export const RunRowSchema = {
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string',
|
||||
title: 'Id'
|
||||
},
|
||||
flow: {
|
||||
type: 'string',
|
||||
title: 'Flow'
|
||||
},
|
||||
source: {
|
||||
type: 'string',
|
||||
title: 'Source'
|
||||
},
|
||||
status: {
|
||||
type: 'string',
|
||||
title: 'Status'
|
||||
},
|
||||
started_at: {
|
||||
type: 'string',
|
||||
format: 'date-time',
|
||||
title: 'Started At'
|
||||
},
|
||||
finished_at: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'string',
|
||||
format: 'date-time'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Finished At'
|
||||
},
|
||||
nodes: {
|
||||
type: 'integer',
|
||||
title: 'Nodes'
|
||||
},
|
||||
errors: {
|
||||
type: 'integer',
|
||||
title: 'Errors'
|
||||
},
|
||||
duration_ms: {
|
||||
type: 'number',
|
||||
title: 'Duration Ms'
|
||||
},
|
||||
deliveries: {
|
||||
type: 'integer',
|
||||
title: 'Deliveries'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['id', 'flow', 'source', 'status', 'started_at', 'nodes', 'errors', 'duration_ms', 'deliveries'],
|
||||
title: 'RunRow'
|
||||
} as const;
|
||||
|
||||
export const SecretNamesSchema = {
|
||||
properties: {
|
||||
data: {
|
||||
@@ -2044,6 +2332,25 @@ export const SectionDef_OutputSchema = {
|
||||
description: 'A grid of widgets under a heading.'
|
||||
} as const;
|
||||
|
||||
export const SeriesAnswerSchema = {
|
||||
properties: {
|
||||
metric: {
|
||||
type: 'string',
|
||||
title: 'Metric'
|
||||
},
|
||||
lines: {
|
||||
items: {
|
||||
'$ref': '#/components/schemas/MetricSeries'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Lines'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['metric'],
|
||||
title: 'SeriesAnswer'
|
||||
} as const;
|
||||
|
||||
export const SeriesPointSchema = {
|
||||
properties: {
|
||||
ts: {
|
||||
@@ -2092,6 +2399,48 @@ export const ShareRequestSchema = {
|
||||
title: 'ShareRequest'
|
||||
} as const;
|
||||
|
||||
export const SweepCreateSchema = {
|
||||
properties: {
|
||||
runs: {
|
||||
items: {
|
||||
'$ref': '#/components/schemas/SweepEntry'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Runs'
|
||||
},
|
||||
draft: {
|
||||
type: 'boolean',
|
||||
title: 'Draft',
|
||||
default: false
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
title: 'SweepCreate'
|
||||
} as const;
|
||||
|
||||
export const SweepEntrySchema = {
|
||||
properties: {
|
||||
params: {
|
||||
additionalProperties: true,
|
||||
type: 'object',
|
||||
title: 'Params'
|
||||
},
|
||||
seed: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'integer'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Seed'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
title: 'SweepEntry'
|
||||
} as const;
|
||||
|
||||
export const TokenSchema = {
|
||||
properties: {
|
||||
access_token: {
|
||||
@@ -2635,6 +2984,147 @@ export const app__api__routes__messages__PublishRequestSchema = {
|
||||
title: 'PublishRequest'
|
||||
} as const;
|
||||
|
||||
export const app__api__routes__observability__RunRowSchema = {
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string',
|
||||
title: 'Id'
|
||||
},
|
||||
flow: {
|
||||
type: 'string',
|
||||
title: 'Flow'
|
||||
},
|
||||
source: {
|
||||
type: 'string',
|
||||
title: 'Source'
|
||||
},
|
||||
status: {
|
||||
type: 'string',
|
||||
title: 'Status'
|
||||
},
|
||||
started_at: {
|
||||
type: 'string',
|
||||
format: 'date-time',
|
||||
title: 'Started At'
|
||||
},
|
||||
finished_at: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'string',
|
||||
format: 'date-time'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Finished At'
|
||||
},
|
||||
nodes: {
|
||||
type: 'integer',
|
||||
title: 'Nodes'
|
||||
},
|
||||
errors: {
|
||||
type: 'integer',
|
||||
title: 'Errors'
|
||||
},
|
||||
duration_ms: {
|
||||
type: 'number',
|
||||
title: 'Duration Ms'
|
||||
},
|
||||
deliveries: {
|
||||
type: 'integer',
|
||||
title: 'Deliveries'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['id', 'flow', 'source', 'status', 'started_at', 'nodes', 'errors', 'duration_ms', 'deliveries'],
|
||||
title: 'RunRow'
|
||||
} as const;
|
||||
|
||||
export const app__api__routes__runs__RunRowSchema = {
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string',
|
||||
title: 'Id'
|
||||
},
|
||||
flow: {
|
||||
type: 'string',
|
||||
title: 'Flow'
|
||||
},
|
||||
status: {
|
||||
type: 'string',
|
||||
title: 'Status'
|
||||
},
|
||||
status_reason: {
|
||||
type: 'string',
|
||||
title: 'Status Reason'
|
||||
},
|
||||
cause: {
|
||||
type: 'string',
|
||||
title: 'Cause'
|
||||
},
|
||||
params: {
|
||||
additionalProperties: true,
|
||||
type: 'object',
|
||||
title: 'Params'
|
||||
},
|
||||
params_digest: {
|
||||
type: 'string',
|
||||
title: 'Params Digest'
|
||||
},
|
||||
seed: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'integer'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Seed'
|
||||
},
|
||||
group_id: {
|
||||
anyOf: [
|
||||
{
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
type: 'null'
|
||||
}
|
||||
],
|
||||
title: 'Group Id'
|
||||
},
|
||||
labels: {
|
||||
items: {
|
||||
type: 'string'
|
||||
},
|
||||
type: 'array',
|
||||
title: 'Labels'
|
||||
},
|
||||
created_at: {
|
||||
title: 'Created At'
|
||||
},
|
||||
started_at: {
|
||||
title: 'Started At'
|
||||
},
|
||||
finished_at: {
|
||||
title: 'Finished At'
|
||||
},
|
||||
duration_ms: {
|
||||
type: 'number',
|
||||
title: 'Duration Ms'
|
||||
},
|
||||
actor: {
|
||||
type: 'string',
|
||||
title: 'Actor'
|
||||
}
|
||||
},
|
||||
type: 'object',
|
||||
required: ['id', 'flow', 'status', 'status_reason', 'cause', 'params', 'params_digest', 'seed', 'group_id', 'labels', 'created_at', 'duration_ms', 'actor'],
|
||||
title: 'RunRow',
|
||||
description: 'A run without its result, which is the part that can be large.'
|
||||
} as const;
|
||||
|
||||
export const app__flow__schemas__MessageValueSchema = {
|
||||
properties: {
|
||||
value: {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import type { CancelablePromise } from './core/CancelablePromise';
|
||||
import { OpenAPI } from './core/OpenAPI';
|
||||
import { request as __request } from './core/request';
|
||||
import type { AlertsReadAlertsConfigResponse, AlertsSaveAlertsConfigData, AlertsSaveAlertsConfigResponse, AlertsTestChannelData, AlertsTestChannelResponse, DashboardsReadDashboardsResponse, DashboardsReadDashboardData, DashboardsReadDashboardResponse, DashboardsCreateDashboardData, DashboardsCreateDashboardResponse, DashboardsSaveDashboardData, DashboardsSaveDashboardResponse, DashboardsDeleteDashboardData, DashboardsDeleteDashboardResponse, DashboardsPublishDashboardData, DashboardsPublishDashboardResponse, DashboardsDiscardDashboardDraftData, DashboardsDiscardDashboardDraftResponse, DashboardsRenameDashboardData, DashboardsRenameDashboardResponse, FlowsReadFlowsResponse, FlowsReadNodeTypesResponse, FlowsReadGraphResponse, FlowsReadLibraryResponse, FlowsDeleteSharedNodeData, FlowsDeleteSharedNodeResponse, FlowsReadFlowData, FlowsReadFlowResponse, FlowsSaveFlowData, FlowsSaveFlowResponse, FlowsDeleteFlowData, FlowsDeleteFlowResponse, FlowsPublishFlowData, FlowsPublishFlowResponse, FlowsDiscardDraftData, FlowsDiscardDraftResponse, FlowsRenameFlowData, FlowsRenameFlowResponse, FlowsReadNodeSourceData, FlowsReadNodeSourceResponse, FlowsSaveNodeSourceData, FlowsSaveNodeSourceResponse, FlowsShareNodeData, FlowsShareNodeResponse, FlowsUnshareNodeData, FlowsUnshareNodeResponse, FlowsStartFlowData, FlowsStartFlowResponse, FlowsStopFlowData, FlowsStopFlowResponse, FlowsPauseFlowData, FlowsPauseFlowResponse, FlowsResumeFlowData, FlowsResumeFlowResponse, FlowsStepFlowData, FlowsStepFlowResponse, FlowsValidateFlowData, FlowsValidateFlowResponse, FlowsRunFlowData, FlowsRunFlowResponse, FlowsTriggerNodeData, FlowsTriggerNodeResponse, FlowsCancelNodeData, FlowsCancelNodeResponse, FlowsReadFlowStateData, FlowsReadFlowStateResponse, FlowsReadMessageHistoryData, FlowsReadMessageHistoryResponse, LoginLoginAccessTokenData, LoginLoginAccessTokenResponse, LoginTestTokenResponse, LoginRecoverPasswordData, LoginRecoverPasswordResponse, LoginResetPasswordData, LoginResetPasswordResponse, LoginRecoverPasswordHtmlContentData, LoginRecoverPasswordHtmlContentResponse, MessagesReadMessagesResponse, MessagesPublishMessageData, MessagesPublishMessageResponse, MessagesReadMessageHistoryData, MessagesReadMessageHistoryResponse, ModulesReadModulesResponse, ModulesApplyModulesData, ModulesApplyModulesResponse, OauthRegisterClientData, OauthRegisterClientResponse, OauthAuthorizeValidateData, OauthAuthorizeValidateResponse, OauthAuthorizeData, OauthAuthorizeResponse, OauthTokenData, OauthTokenResponse, OauthReadClientsResponse, OauthRevokeClientData, OauthRevokeClientResponse, ObservabilityReadSummaryResponse, ObservabilityReadTimeseriesData, ObservabilityReadTimeseriesResponse, ObservabilityReadFlowRollupsData, ObservabilityReadFlowRollupsResponse, ObservabilityReadRunsData, ObservabilityReadRunsResponse, ObservabilityReadEventsData, ObservabilityReadEventsResponse, ObservabilityReadDeadLettersData, ObservabilityReadDeadLettersResponse, PrivateCreateUserData, PrivateCreateUserResponse, SecretsReadSecretsResponse, SecretsSaveSecretData, SecretsSaveSecretResponse, SecretsDeleteSecretData, SecretsDeleteSecretResponse, UsersReadUsersData, UsersReadUsersResponse, UsersCreateUserData, UsersCreateUserResponse, UsersReadUserMeResponse, UsersDeleteUserMeResponse, UsersUpdateUserMeData, UsersUpdateUserMeResponse, UsersUpdatePasswordMeData, UsersUpdatePasswordMeResponse, UsersRegisterUserData, UsersRegisterUserResponse, UsersReadUserByIdData, UsersReadUserByIdResponse, UsersUpdateUserData, UsersUpdateUserResponse, UsersDeleteUserData, UsersDeleteUserResponse, UtilsTestEmailData, UtilsTestEmailResponse, UtilsHealthCheckResponse, UtilsHealthResponse } from './types.gen';
|
||||
import type { AlertsReadAlertsConfigResponse, AlertsSaveAlertsConfigData, AlertsSaveAlertsConfigResponse, AlertsTestChannelData, AlertsTestChannelResponse, ArtifactsPutArtifactData, ArtifactsPutArtifactResponse, ArtifactsGetArtifactData, ArtifactsGetArtifactResponse, DashboardsReadDashboardsResponse, DashboardsReadDashboardData, DashboardsReadDashboardResponse, DashboardsCreateDashboardData, DashboardsCreateDashboardResponse, DashboardsSaveDashboardData, DashboardsSaveDashboardResponse, DashboardsDeleteDashboardData, DashboardsDeleteDashboardResponse, DashboardsPublishDashboardData, DashboardsPublishDashboardResponse, DashboardsDiscardDashboardDraftData, DashboardsDiscardDashboardDraftResponse, DashboardsRenameDashboardData, DashboardsRenameDashboardResponse, FlowsReadFlowsResponse, FlowsReadNodeTypesResponse, FlowsReadGraphResponse, FlowsReadLibraryResponse, FlowsDeleteSharedNodeData, FlowsDeleteSharedNodeResponse, FlowsReadFlowData, FlowsReadFlowResponse, FlowsSaveFlowData, FlowsSaveFlowResponse, FlowsDeleteFlowData, FlowsDeleteFlowResponse, FlowsPublishFlowData, FlowsPublishFlowResponse, FlowsDiscardDraftData, FlowsDiscardDraftResponse, FlowsRenameFlowData, FlowsRenameFlowResponse, FlowsReadNodeSourceData, FlowsReadNodeSourceResponse, FlowsSaveNodeSourceData, FlowsSaveNodeSourceResponse, FlowsShareNodeData, FlowsShareNodeResponse, FlowsUnshareNodeData, FlowsUnshareNodeResponse, FlowsStartFlowData, FlowsStartFlowResponse, FlowsStopFlowData, FlowsStopFlowResponse, FlowsPauseFlowData, FlowsPauseFlowResponse, FlowsResumeFlowData, FlowsResumeFlowResponse, FlowsStepFlowData, FlowsStepFlowResponse, FlowsValidateFlowData, FlowsValidateFlowResponse, FlowsRunFlowData, FlowsRunFlowResponse, FlowsTriggerNodeData, FlowsTriggerNodeResponse, FlowsCancelNodeData, FlowsCancelNodeResponse, FlowsReadFlowStateData, FlowsReadFlowStateResponse, FlowsReadMessageHistoryData, FlowsReadMessageHistoryResponse, LoginLoginAccessTokenData, LoginLoginAccessTokenResponse, LoginTestTokenResponse, LoginRecoverPasswordData, LoginRecoverPasswordResponse, LoginResetPasswordData, LoginResetPasswordResponse, LoginRecoverPasswordHtmlContentData, LoginRecoverPasswordHtmlContentResponse, MessagesReadMessagesResponse, MessagesPublishMessageData, MessagesPublishMessageResponse, MessagesReadMessageHistoryData, MessagesReadMessageHistoryResponse, ModulesReadModulesResponse, ModulesApplyModulesData, ModulesApplyModulesResponse, OauthRegisterClientData, OauthRegisterClientResponse, OauthAuthorizeValidateData, OauthAuthorizeValidateResponse, OauthAuthorizeData, OauthAuthorizeResponse, OauthTokenData, OauthTokenResponse, OauthReadClientsResponse, OauthRevokeClientData, OauthRevokeClientResponse, ObservabilityReadSummaryResponse, ObservabilityReadTimeseriesData, ObservabilityReadTimeseriesResponse, ObservabilityReadFlowRollupsData, ObservabilityReadFlowRollupsResponse, ObservabilityReadRunsData, ObservabilityReadRunsResponse, ObservabilityReadEventsData, ObservabilityReadEventsResponse, ObservabilityReadDeadLettersData, ObservabilityReadDeadLettersResponse, PrivateCreateUserData, PrivateCreateUserResponse, RunsCreateRunData, RunsCreateRunResponse, RunsCreateSweepData, RunsCreateSweepResponse, RunsReadRunsData, RunsReadRunsResponse, RunsReadRunData, RunsReadRunResponse, RunsCancelRunData, RunsCancelRunResponse, RunsReadMetricsData, RunsReadMetricsResponse, RunsCompareMetricData, RunsCompareMetricResponse, SecretsReadSecretsResponse, SecretsSaveSecretData, SecretsSaveSecretResponse, SecretsDeleteSecretData, SecretsDeleteSecretResponse, UsersReadUsersData, UsersReadUsersResponse, UsersCreateUserData, UsersCreateUserResponse, UsersReadUserMeResponse, UsersDeleteUserMeResponse, UsersUpdateUserMeData, UsersUpdateUserMeResponse, UsersUpdatePasswordMeData, UsersUpdatePasswordMeResponse, UsersRegisterUserData, UsersRegisterUserResponse, UsersReadUserByIdData, UsersReadUserByIdResponse, UsersUpdateUserData, UsersUpdateUserResponse, UsersDeleteUserData, UsersDeleteUserResponse, UtilsTestEmailData, UtilsTestEmailResponse, UtilsHealthCheckResponse, UtilsHealthResponse } from './types.gen';
|
||||
|
||||
export class AlertsService {
|
||||
/**
|
||||
@@ -61,6 +61,52 @@ export class AlertsService {
|
||||
}
|
||||
}
|
||||
|
||||
export class ArtifactsService {
|
||||
/**
|
||||
* Put Artifact
|
||||
* Store the request body and answer with the reference to it.
|
||||
* @param data The data for the request.
|
||||
* @param data.name
|
||||
* @param data.mediaType
|
||||
* @returns ArtifactRef Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static putArtifact(data: ArtifactsPutArtifactData = {}): CancelablePromise<ArtifactsPutArtifactResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'PUT',
|
||||
url: '/api/v1/artifacts',
|
||||
query: {
|
||||
name: data.name,
|
||||
media_type: data.mediaType
|
||||
},
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Artifact
|
||||
* Stream one artifact back.
|
||||
* @param data The data for the request.
|
||||
* @param data.digest
|
||||
* @returns unknown Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static getArtifact(data: ArtifactsGetArtifactData): CancelablePromise<ArtifactsGetArtifactResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'GET',
|
||||
url: '/api/v1/artifacts/{digest}',
|
||||
path: {
|
||||
digest: data.digest
|
||||
},
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class DashboardsService {
|
||||
/**
|
||||
* Read Dashboards
|
||||
@@ -1210,7 +1256,7 @@ export class ObservabilityService {
|
||||
* @param data.since
|
||||
* @param data.until
|
||||
* @param data.limit
|
||||
* @returns RunRow Successful Response
|
||||
* @returns app__api__routes__observability__RunRow Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static readRuns(data: ObservabilityReadRunsData = {}): CancelablePromise<ObservabilityReadRunsResponse> {
|
||||
@@ -1306,6 +1352,188 @@ export class PrivateService {
|
||||
}
|
||||
}
|
||||
|
||||
export class RunsService {
|
||||
/**
|
||||
* Create Run
|
||||
* Queue one run of a flow.
|
||||
* @param data The data for the request.
|
||||
* @param data.name
|
||||
* @param data.requestBody
|
||||
* @returns app__api__routes__runs__RunRow Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static createRun(data: RunsCreateRunData): CancelablePromise<RunsCreateRunResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'POST',
|
||||
url: '/api/v1/runs/flows/{name}',
|
||||
path: {
|
||||
name: data.name
|
||||
},
|
||||
body: data.requestBody,
|
||||
mediaType: 'application/json',
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Sweep
|
||||
* Queue many runs of one flow under a shared group.
|
||||
*
|
||||
* An ensemble is this with the same parameters and different seeds; a grid
|
||||
* search is this with the parameters spread out. Either way the caller
|
||||
* builds the list — the engine does not own a sweep grammar.
|
||||
* @param data The data for the request.
|
||||
* @param data.name
|
||||
* @param data.requestBody
|
||||
* @returns app__api__routes__runs__RunRow Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static createSweep(data: RunsCreateSweepData): CancelablePromise<RunsCreateSweepResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'POST',
|
||||
url: '/api/v1/runs/flows/{name}/sweep',
|
||||
path: {
|
||||
name: data.name
|
||||
},
|
||||
body: data.requestBody,
|
||||
mediaType: 'application/json',
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Read Runs
|
||||
* Runs, newest first. The queryable table an experiment log needs.
|
||||
* @param data The data for the request.
|
||||
* @param data.flow
|
||||
* @param data.status
|
||||
* @param data.group
|
||||
* @param data.digest
|
||||
* @param data.limit
|
||||
* @returns app__api__routes__runs__RunRow Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static readRuns(data: RunsReadRunsData = {}): CancelablePromise<RunsReadRunsResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'GET',
|
||||
url: '/api/v1/runs',
|
||||
query: {
|
||||
flow: data.flow,
|
||||
status: data.status,
|
||||
group: data.group,
|
||||
digest: data.digest,
|
||||
limit: data.limit
|
||||
},
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Read Run
|
||||
* One run in full: what it was asked, what each node did, what it made.
|
||||
* @param data The data for the request.
|
||||
* @param data.runId
|
||||
* @returns RunDetail Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static readRun(data: RunsReadRunData): CancelablePromise<RunsReadRunResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'GET',
|
||||
url: '/api/v1/runs/{run_id}',
|
||||
path: {
|
||||
run_id: data.runId
|
||||
},
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel Run
|
||||
* Stop a run. One already past its last node is left as it finished.
|
||||
* @param data The data for the request.
|
||||
* @param data.runId
|
||||
* @returns app__api__routes__runs__RunRow Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static cancelRun(data: RunsCancelRunData): CancelablePromise<RunsCancelRunResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'POST',
|
||||
url: '/api/v1/runs/{run_id}/cancel',
|
||||
path: {
|
||||
run_id: data.runId
|
||||
},
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Read Metrics
|
||||
* One metric's series, in step order.
|
||||
*
|
||||
* ``stride`` thins a long curve down: 3000 steps drawn on a 400-pixel chart
|
||||
* is 3000 points nobody can see.
|
||||
* @param data The data for the request.
|
||||
* @param data.runId
|
||||
* @param data.name
|
||||
* @param data.stride
|
||||
* @returns MetricPoint Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static readMetrics(data: RunsReadMetricsData): CancelablePromise<RunsReadMetricsResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'GET',
|
||||
url: '/api/v1/runs/{run_id}/metrics',
|
||||
path: {
|
||||
run_id: data.runId
|
||||
},
|
||||
query: {
|
||||
name: data.name,
|
||||
stride: data.stride
|
||||
},
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare Metric
|
||||
* One metric across several runs, as the chart widget's series shape.
|
||||
*
|
||||
* This is the comparison view: it answers in the same shape a flow answers a
|
||||
* chart's query with, so putting three training curves beside each other is
|
||||
* a widget binding rather than a screen of its own.
|
||||
* @param data The data for the request.
|
||||
* @param data.ids
|
||||
* @param data.metric
|
||||
* @returns SeriesAnswer Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static compareMetric(data: RunsCompareMetricData): CancelablePromise<RunsCompareMetricResponse> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'GET',
|
||||
url: '/api/v1/runs/series/compare',
|
||||
query: {
|
||||
ids: data.ids,
|
||||
metric: data.metric
|
||||
},
|
||||
errors: {
|
||||
422: 'Validation Error'
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class SecretsService {
|
||||
/**
|
||||
* Read Secrets
|
||||
|
||||
@@ -39,6 +39,42 @@ export type app__api__routes__messages__PublishRequest = {
|
||||
source_detail?: string;
|
||||
};
|
||||
|
||||
export type app__api__routes__observability__RunRow = {
|
||||
id: string;
|
||||
flow: string;
|
||||
source: string;
|
||||
status: string;
|
||||
started_at: string;
|
||||
finished_at?: (string | null);
|
||||
nodes: number;
|
||||
errors: number;
|
||||
duration_ms: number;
|
||||
deliveries: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* A run without its result, which is the part that can be large.
|
||||
*/
|
||||
export type app__api__routes__runs__RunRow = {
|
||||
id: string;
|
||||
flow: string;
|
||||
status: string;
|
||||
status_reason: string;
|
||||
cause: string;
|
||||
params: {
|
||||
[key: string]: unknown;
|
||||
};
|
||||
params_digest: string;
|
||||
seed: (number | null);
|
||||
group_id: (string | null);
|
||||
labels: Array<(string)>;
|
||||
created_at: unknown;
|
||||
started_at?: unknown;
|
||||
finished_at?: unknown;
|
||||
duration_ms: number;
|
||||
actor: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* The last payload seen on a message.
|
||||
*/
|
||||
@@ -59,6 +95,21 @@ export type ApplyResult = {
|
||||
output?: string;
|
||||
};
|
||||
|
||||
export type ArtifactRef = {
|
||||
digest: string;
|
||||
size: number;
|
||||
media_type: string;
|
||||
name?: string;
|
||||
};
|
||||
|
||||
export type ArtifactRow = {
|
||||
name: string;
|
||||
node: string;
|
||||
digest: string;
|
||||
size: number;
|
||||
media_type: string;
|
||||
};
|
||||
|
||||
export type Body_login_login_access_token = {
|
||||
grant_type?: (string | null);
|
||||
username: string;
|
||||
@@ -190,10 +241,15 @@ export type DeadLetter = {
|
||||
* knows what it is getting before anything runs, which is what lets the
|
||||
* dashboard picker offer a message and refuse a wrong binding.
|
||||
*
|
||||
* Binary payloads (tensors, images) will arrive later as explicitly declared
|
||||
* codec fields; until then everything on the wire is JSON.
|
||||
* Binary payloads — tensors, checkpoints, images — travel as ``artifact``:
|
||||
* the bytes go to the artifact store and the message carries a reference to
|
||||
* them. That keeps everything on the wire JSON, which is what the state
|
||||
* backend, the queue and the worker protocol all rely on, and it means a
|
||||
* thirty-megabyte checkpoint never sits in Redis. Inline codecs would only be
|
||||
* needed for payloads too small to be worth a round trip, and nothing asks
|
||||
* for that yet.
|
||||
*/
|
||||
export type DType = 'float' | 'int' | 'str' | 'bool' | 'json' | 'series' | 'record' | 'list';
|
||||
export type DType = 'float' | 'int' | 'str' | 'bool' | 'json' | 'series' | 'record' | 'list' | 'artifact';
|
||||
|
||||
/**
|
||||
* Something wired into this flow that is not a node in it.
|
||||
@@ -231,8 +287,21 @@ export type FlowDef_Input = {
|
||||
nodes?: Array<NodeDef_Input>;
|
||||
inputs?: Array<FlowInput_Input>;
|
||||
version?: number;
|
||||
/**
|
||||
* A live flow reacts to what arrives: its subscriptions, schedules and webhooks run until it is stopped. A batch flow only runs when a run asks it to, from its inputs to its outputs, and is never activated.
|
||||
*/
|
||||
mode?: 'live' | 'batch';
|
||||
/**
|
||||
* Messages a batch run reports as its result, unqualified. Empty means every message the flow ends up holding.
|
||||
*/
|
||||
outputs?: Array<(string)>;
|
||||
};
|
||||
|
||||
/**
|
||||
* A live flow reacts to what arrives: its subscriptions, schedules and webhooks run until it is stopped. A batch flow only runs when a run asks it to, from its inputs to its outputs, and is never activated.
|
||||
*/
|
||||
export type mode = 'live' | 'batch';
|
||||
|
||||
/**
|
||||
* One atomic flow.
|
||||
*/
|
||||
@@ -242,6 +311,14 @@ export type FlowDef_Output = {
|
||||
nodes?: Array<NodeDef_Output>;
|
||||
inputs?: Array<FlowInput_Output>;
|
||||
version?: number;
|
||||
/**
|
||||
* A live flow reacts to what arrives: its subscriptions, schedules and webhooks run until it is stopped. A batch flow only runs when a run asks it to, from its inputs to its outputs, and is never activated.
|
||||
*/
|
||||
mode?: 'live' | 'batch';
|
||||
/**
|
||||
* Messages a batch run reports as its result, unqualified. Empty means every message the flow ends up holding.
|
||||
*/
|
||||
outputs?: Array<(string)>;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -422,6 +499,20 @@ export type MessagesPublic = {
|
||||
count: number;
|
||||
};
|
||||
|
||||
export type MetricPoint = {
|
||||
step: number;
|
||||
ts: number;
|
||||
value: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* The shape a chart widget already draws, so comparing runs is a binding.
|
||||
*/
|
||||
export type MetricSeries = {
|
||||
label: string;
|
||||
points?: Array<Array<(number)>>;
|
||||
};
|
||||
|
||||
/**
|
||||
* One package installed in the venv node code runs on.
|
||||
*/
|
||||
@@ -464,11 +555,24 @@ export type NodeDef_Input = {
|
||||
provides?: Array<MessageSpec>;
|
||||
source_ref?: (string | null);
|
||||
/**
|
||||
* Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running.
|
||||
* Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running — in a batch run, which never redelivers, it is an idle timeout instead: silence this long is a kill.
|
||||
*/
|
||||
timeout?: (number | null);
|
||||
/**
|
||||
* Label of the worker this node's code must run on, such as 'gpu'. Empty means the engine's own workers. A run needing a label no attached worker carries waits rather than failing.
|
||||
*/
|
||||
device?: (string | null);
|
||||
/**
|
||||
* What to do when no worker carries `device`: wait for one, or run locally anyway.
|
||||
*/
|
||||
device_policy?: 'require' | 'prefer';
|
||||
};
|
||||
|
||||
/**
|
||||
* What to do when no worker carries `device`: wait for one, or run locally anyway.
|
||||
*/
|
||||
export type device_policy = 'require' | 'prefer';
|
||||
|
||||
/**
|
||||
* A node as stored: identity, configuration and ports.
|
||||
*
|
||||
@@ -487,9 +591,17 @@ export type NodeDef_Output = {
|
||||
provides?: Array<MessageSpec>;
|
||||
source_ref?: (string | null);
|
||||
/**
|
||||
* Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running.
|
||||
* Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running — in a batch run, which never redelivers, it is an idle timeout instead: silence this long is a kill.
|
||||
*/
|
||||
timeout?: (number | null);
|
||||
/**
|
||||
* Label of the worker this node's code must run on, such as 'gpu'. Empty means the engine's own workers. A run needing a label no attached worker carries waits rather than failing.
|
||||
*/
|
||||
device?: (string | null);
|
||||
/**
|
||||
* What to do when no worker carries `device`: wait for one, or run locally anyway.
|
||||
*/
|
||||
device_policy?: 'require' | 'prefer';
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -624,25 +736,57 @@ export type Rule = {
|
||||
cooldown_s?: number;
|
||||
};
|
||||
|
||||
export type RunCreate = {
|
||||
params?: {
|
||||
[key: string]: unknown;
|
||||
};
|
||||
seed?: (number | null);
|
||||
draft?: boolean;
|
||||
};
|
||||
|
||||
export type RunDetail = {
|
||||
id: string;
|
||||
flow: string;
|
||||
status: string;
|
||||
status_reason: string;
|
||||
cause: string;
|
||||
params: {
|
||||
[key: string]: unknown;
|
||||
};
|
||||
params_digest: string;
|
||||
seed: (number | null);
|
||||
group_id: (string | null);
|
||||
labels: Array<(string)>;
|
||||
created_at: unknown;
|
||||
started_at?: unknown;
|
||||
finished_at?: unknown;
|
||||
duration_ms: number;
|
||||
actor: string;
|
||||
result?: {
|
||||
[key: string]: unknown;
|
||||
};
|
||||
commit?: string;
|
||||
flow_version?: number;
|
||||
nodes?: Array<RunNodeRow>;
|
||||
artifacts?: Array<ArtifactRow>;
|
||||
};
|
||||
|
||||
export type RunNodeRow = {
|
||||
node: string;
|
||||
status: string;
|
||||
attempt: number;
|
||||
duration_ms: number;
|
||||
worker: string;
|
||||
error: string;
|
||||
logs: string;
|
||||
};
|
||||
|
||||
export type RunRequest = {
|
||||
inputs?: {
|
||||
[key: string]: unknown;
|
||||
};
|
||||
};
|
||||
|
||||
export type RunRow = {
|
||||
id: string;
|
||||
flow: string;
|
||||
source: string;
|
||||
status: string;
|
||||
started_at: string;
|
||||
finished_at?: (string | null);
|
||||
nodes: number;
|
||||
errors: number;
|
||||
duration_ms: number;
|
||||
deliveries: number;
|
||||
};
|
||||
|
||||
export type SecretNames = {
|
||||
data: Array<(string)>;
|
||||
count: number;
|
||||
@@ -670,6 +814,11 @@ export type SectionDef_Output = {
|
||||
widgets?: Array<WidgetDef>;
|
||||
};
|
||||
|
||||
export type SeriesAnswer = {
|
||||
metric: string;
|
||||
lines?: Array<MetricSeries>;
|
||||
};
|
||||
|
||||
export type SeriesPoint = {
|
||||
ts: number;
|
||||
executions: number;
|
||||
@@ -684,6 +833,18 @@ export type ShareRequest = {
|
||||
lib_name: string;
|
||||
};
|
||||
|
||||
export type SweepCreate = {
|
||||
runs?: Array<SweepEntry>;
|
||||
draft?: boolean;
|
||||
};
|
||||
|
||||
export type SweepEntry = {
|
||||
params?: {
|
||||
[key: string]: unknown;
|
||||
};
|
||||
seed?: (number | null);
|
||||
};
|
||||
|
||||
export type Token = {
|
||||
access_token: string;
|
||||
token_type?: string;
|
||||
@@ -808,6 +969,19 @@ export type AlertsTestChannelData = {
|
||||
|
||||
export type AlertsTestChannelResponse = (Message);
|
||||
|
||||
export type ArtifactsPutArtifactData = {
|
||||
mediaType?: string;
|
||||
name?: string;
|
||||
};
|
||||
|
||||
export type ArtifactsPutArtifactResponse = (ArtifactRef);
|
||||
|
||||
export type ArtifactsGetArtifactData = {
|
||||
digest: string;
|
||||
};
|
||||
|
||||
export type ArtifactsGetArtifactResponse = (unknown);
|
||||
|
||||
export type DashboardsReadDashboardsResponse = (DashboardsPublic);
|
||||
|
||||
export type DashboardsReadDashboardData = {
|
||||
@@ -1117,7 +1291,7 @@ export type ObservabilityReadRunsData = {
|
||||
until?: (string | null);
|
||||
};
|
||||
|
||||
export type ObservabilityReadRunsResponse = (Array<RunRow>);
|
||||
export type ObservabilityReadRunsResponse = (Array<app__api__routes__observability__RunRow>);
|
||||
|
||||
export type ObservabilityReadEventsData = {
|
||||
flow?: (string | null);
|
||||
@@ -1141,6 +1315,57 @@ export type PrivateCreateUserData = {
|
||||
|
||||
export type PrivateCreateUserResponse = (UserPublic);
|
||||
|
||||
export type RunsCreateRunData = {
|
||||
name: string;
|
||||
requestBody: RunCreate;
|
||||
};
|
||||
|
||||
export type RunsCreateRunResponse = (app__api__routes__runs__RunRow);
|
||||
|
||||
export type RunsCreateSweepData = {
|
||||
name: string;
|
||||
requestBody: SweepCreate;
|
||||
};
|
||||
|
||||
export type RunsCreateSweepResponse = (Array<app__api__routes__runs__RunRow>);
|
||||
|
||||
export type RunsReadRunsData = {
|
||||
digest?: (string | null);
|
||||
flow?: (string | null);
|
||||
group?: (string | null);
|
||||
limit?: number;
|
||||
status?: (string | null);
|
||||
};
|
||||
|
||||
export type RunsReadRunsResponse = (Array<app__api__routes__runs__RunRow>);
|
||||
|
||||
export type RunsReadRunData = {
|
||||
runId: string;
|
||||
};
|
||||
|
||||
export type RunsReadRunResponse = (RunDetail);
|
||||
|
||||
export type RunsCancelRunData = {
|
||||
runId: string;
|
||||
};
|
||||
|
||||
export type RunsCancelRunResponse = (app__api__routes__runs__RunRow);
|
||||
|
||||
export type RunsReadMetricsData = {
|
||||
name: string;
|
||||
runId: string;
|
||||
stride?: number;
|
||||
};
|
||||
|
||||
export type RunsReadMetricsResponse = (Array<MetricPoint>);
|
||||
|
||||
export type RunsCompareMetricData = {
|
||||
ids: string;
|
||||
metric: string;
|
||||
};
|
||||
|
||||
export type RunsCompareMetricResponse = (SeriesAnswer);
|
||||
|
||||
export type SecretsReadSecretsResponse = (SecretNames);
|
||||
|
||||
export type SecretsSaveSecretData = {
|
||||
|
||||
Reference in New Issue
Block a user