Implement `SessionV2` strawberry GQL mutations
- Dominant language
- Python
- Stars
- 670
- Forks
- 183
- Avg merge
- 17h 7m
- Merged PRs (30d)
- 358
Description
## Title
Add Strawberry GraphQL mutation stubs for SessionV2 API
## Story Points
1
## Description
### Objective
Define all session action mutations as Strawberry GraphQL stubs (raising `NotImplementedError`) under the `SessionV2GQL`
schema. This establishes the mutation interface contract so that actual implementations (processor calls) can be wired in
follow-up PRs.
### Background & Context
The [http://Backend.AI](http://Backend.AI) session-related GraphQL API is being migrated from Graphene to Strawberry. The legacy Graphene schema currently
only exposes 2 mutations (`ModifyComputeSession`, `CheckAndTransitStatus`), while most session operations (create, destroy,
restart, etc.) are only available via REST API.
This task adds 15 mutation stubs covering all session actions suitable for GraphQL, following the same patterns established in
the user module's Strawberry migration (e.g., `user/resolver/mutation.py`, `user/types/inputs.py`, `user/types/payloads.py`).
Related parent issue: BA-3919 (Session V2 Schema)
### Scope
**15 mutations to add:**
|#|Mutation|Action Class|Description|
|---|---|---|---|
|| `admin_modify_session| `ModifySessionAction| Modify session name/priorit|
|| `check_and_transit_session_status| `CheckAndTransitStatusAction| Check and transit session statu|
|| `destroy_session| `DestroySessionAction| Terminate/delete sessio|
|| `restart_session| `RestartSessionAction| Restart sessio|
|| `rename_session| `RenameSessionAction| Rename sessio|
|| `interrupt_session| `InterruptSessionAction| Interrupt session executio|
|| `execute_in_session| `ExecuteSessionAction| Execute code in sessio|
|| `commit_session| `CommitSessionAction| Commit session stat|
|| `convert_session_to_image| `ConvertSessionToImageAction| Convert session to imag|
| 1| `start_session_service| `StartServiceAction| Start app servic|
| 1| `shutdown_session_service| `ShutdownServiceAction| Shutdown app servic|
| 1| `complete_session_code| `CompleteAction| Code auto-completio|
| 1| `create_session_from_params| `CreateFromParamsAction| Create session from parameter|
| 1| `create_session_from_template| `CreateFromTemplateAction| Create session from templat|
| 1| `create_session_cluster| `CreateClusterAction| Create cluster sessio|
**Excluded from scope (with reasons):**
- File transfer actions (`download_file`, `upload_files`, etc.) — binary data unsuitable for GraphQL, kept as REST-only
- Read-only actions (`get_container_logs`, `get_status_history`, etc.) — to be provided as Query fields in a separate PR
- Search actions (`match_sessions`, `search_kernel`) — to be provided as Query fields in a separate PR
### Files to Create/Modify
- **New:** `src/ai/backend/manager/api/gql/session/inputs.py` — `@strawberry.input` types for each mutation
- **New:** `src/ai/backend/manager/api/gql/session/payloads.py` — `@strawberry.type` payload types for each mutation
- **New:** `src/ai/backend/manager/api/gql/session/resolver/mutation.py` — Mutation resolver functions (all raise
`NotImplementedError`)
- **Modify:** `src/ai/backend/manager/api/gql/session/resolver/__init__.py` — Export mutation resolvers
- **Modify:** `src/ai/backend/manager/api/gql/session/__init__.py` — Export new types
- **Modify:** `src/ai/backend/manager/api/gql/schema.py` — Register mutations in the `Mutation` class
### Acceptance Criteria
- [ ] All 15 mutations are defined with correct input/payload types
- [ ] All mutation resolvers raise `NotImplementedError` with a descriptive message
- [ ] Mutations are registered in the Strawberry schema and appear in the generated GraphQL schema
- [ ] Input types follow naming convention: `{Name}V2Input` (Strawberry name) / `{Name}InputGQL` (Python class)
- [ ] Payload types follow naming convention: `{Name}V2Payload` (Strawberry name) / `{Name}PayloadGQL` (Python class)
- [ ] `pants lint`, `pants check`, and `pants test` pass with no regressions
- [ ] Patterns are consistent with existing user module Strawberry mutations
### Reference Files
- `src/ai/backend/manager/api/gql/user/resolver/mutation.py` — Mutation resolver pattern
- `src/ai/backend/manager/api/gql/user/types/inputs.py` — Input type pattern
- `src/ai/backend/manager/api/gql/user/types/payloads.py` — Payload type pattern
- `src/ai/backend/manager/api/gql/session/types.py` — Existing SessionV2GQL type
- `src/ai/backend/manager/services/session/actions/*.py` — Action input/output types
JIRA Issue: BA-4386
Contributor guide
Assessment
This issue has not been assessed yet.