diff --git a/react/data/schema.graphql b/react/data/schema.graphql
index cfdf9a29ea..ef6082a94b 100644
--- a/react/data/schema.graphql
+++ b/react/data/schema.graphql
@@ -170,7 +170,9 @@ type Queries {
"""Added in 24.09.0."""
compute_session_nodes(
- """Added in 24.12.0."""
+ """
+ Added in 24.12.0. Default value `system` queries across the entire system.
+ """
scope_id: ScopeField
"""Added in 24.09.0."""
@@ -606,6 +608,14 @@ type KernelNode implements Node {
cluster_hostname: String
session_id: UUID
image: ImageNode
+
+ """Added in 24.12.0."""
+ image_reference: String
+
+ """
+ Added in 24.12.0. The architecture that the image of this kernel requires
+ """
+ architecture: String
status: String
status_changed: DateTime
status_info: String
@@ -1221,6 +1231,12 @@ type ComputeSessionNode implements Node {
vfolder_mounts: [String]
occupied_slots: JSONString
requested_slots: JSONString
+
+ """Added in 24.12.0."""
+ image_references: [String]
+
+ """Added in 24.12.0."""
+ vfolder_nodes(filter: String, order: String, offset: Int, before: String, after: String, first: Int, last: Int): VirtualFolderConnection
num_queries: BigInt
inference_metrics: JSONString
kernel_nodes(filter: String, order: String, offset: Int, before: String, after: String, first: Int, last: Int): KernelConnection
@@ -1471,6 +1487,7 @@ type QuotaDetails {
hard_limit_bytes: BigInt
}
+"""Deprecated since 24.09.0. use `ContainerRegistryNode` instead"""
type ContainerRegistry implements Node {
"""The ID of the object"""
id: ID!
@@ -1478,6 +1495,7 @@ type ContainerRegistry implements Node {
config: ContainerRegistryConfig
}
+"""Deprecated since 24.09.0."""
type ContainerRegistryConfig {
url: String!
type: String!
@@ -1848,8 +1866,14 @@ type Mutations {
"""Object id. Can be either global id or object id. Added in 24.09.0."""
id: String!
): DeleteContainerRegistryNode
+
+ """Deprecated since 24.09.0. use `CreateContainerRegistryNode` instead"""
create_container_registry(hostname: String!, props: CreateContainerRegistryInput!): CreateContainerRegistry
+
+ """Deprecated since 24.09.0. use `ModifyContainerRegistryNode` instead"""
modify_container_registry(hostname: String!, props: ModifyContainerRegistryInput!): ModifyContainerRegistry
+
+ """Deprecated since 24.09.0. use `DeleteContainerRegistryNode` instead"""
delete_container_registry(hostname: String!): DeleteContainerRegistry
modify_endpoint(endpoint_id: UUID!, props: ModifyEndpointInput!): ModifyEndpoint
@@ -2581,10 +2605,12 @@ type DeleteContainerRegistryNode {
container_registry: ContainerRegistryNode
}
+"""Deprecated since 24.09.0. use `CreateContainerRegistryNode` instead"""
type CreateContainerRegistry {
container_registry: ContainerRegistry
}
+"""Deprecated since 24.09.0."""
input CreateContainerRegistryInput {
url: String!
type: String!
@@ -2597,10 +2623,12 @@ input CreateContainerRegistryInput {
is_global: Boolean
}
+"""Deprecated since 24.09.0. use `ModifyContainerRegistryNode` instead"""
type ModifyContainerRegistry {
container_registry: ContainerRegistry
}
+"""Deprecated since 24.09.0."""
input ModifyContainerRegistryInput {
url: String
type: String
@@ -2613,6 +2641,7 @@ input ModifyContainerRegistryInput {
is_global: Boolean
}
+"""Deprecated since 24.09.0. use `DeleteContainerRegistryNode` instead"""
type DeleteContainerRegistry {
container_registry: ContainerRegistry
}
diff --git a/react/src/components/SessionDetailContent.tsx b/react/src/components/SessionDetailContent.tsx
index 7e1ff331a4..9b798a116e 100644
--- a/react/src/components/SessionDetailContent.tsx
+++ b/react/src/components/SessionDetailContent.tsx
@@ -1,5 +1,6 @@
import SessionKernelTags from '../components/ImageTags';
import { toGlobalId } from '../helper';
+import { useSuspendedBackendaiClient } from '../hooks';
import { useCurrentUserRole } from '../hooks/backendai';
import { useCurrentProjectValue } from '../hooks/useCurrentProject';
import { ResourceNumbersOfSession } from '../pages/SessionLauncherPage';
@@ -40,6 +41,7 @@ const SessionDetailContent: React.FC<{
const { open } = useFolderExplorerOpener();
const currentProject = useCurrentProjectValue();
const userRole = useCurrentUserRole();
+ const baiClient = useSuspendedBackendaiClient();
const { md } = Grid.useBreakpoint();
// TODO: remove and refactor this waterfall request after v24.12.0
@@ -91,6 +93,16 @@ const SessionDetailContent: React.FC<{
}
}
vfolder_mounts
+ vfolder_nodes @since(version: "24.12.0") {
+ edges {
+ node {
+ id
+ row_id
+ name
+ }
+ }
+ count
+ }
created_at @required(action: NONE)
terminated_at
scaling_group
@@ -193,25 +205,44 @@ const SessionDetailContent: React.FC<{
)}
- {_.map(
- _.zip(legacy_session?.mounts, session?.vfolder_mounts),
- (mountInfo) => {
- const [name, id] = mountInfo;
- return (
- }
- onClick={() => {
- open(id ?? '');
- }}
- >
- {name}
-
- );
- },
- )}
+ {baiClient.supports('vfolder-nodes')
+ ? _.map(session?.vfolder_nodes?.edges, (vfolder) => {
+ return (
+ }
+ onClick={() => {
+ open(vfolder?.node?.row_id ?? '');
+ }}
+ >
+ {vfolder?.node?.name}
+
+ );
+ })
+ : _.map(
+ // compute_session_node query's vfolder_mounts is not include name.
+ // To provide vfolder name in compute_session_node, schema must be changed.
+ // legacy_session.mounts (name) and session.vfolder_mounts (id) give vfolder information in same order.
+ _.zip(legacy_session?.mounts, session?.vfolder_mounts),
+ (mountInfo) => {
+ const [name, id] = mountInfo;
+ return (
+ }
+ onClick={() => {
+ open(id ?? '');
+ }}
+ >
+ {name}
+
+ );
+ },
+ )}
diff --git a/src/lib/backend.ai-client-esm.ts b/src/lib/backend.ai-client-esm.ts
index 0418f6fced..bee026d534 100644
--- a/src/lib/backend.ai-client-esm.ts
+++ b/src/lib/backend.ai-client-esm.ts
@@ -733,6 +733,7 @@ class Client {
this._features['creating-session-status'] = true;
this._features['max_network_count'] = true;
this._features['replicas'] = true;
+ this._features['vfolder-nodes'] = true;
}
if (this.isManagerVersionCompatibleWith(['25.1.0', '24.09.6', '24.03.12'])) {
this._features['vfolder-id-based'] = true;