Skip to content

Comments

Enhance GatewayClient #1603

Open
vincentye38 wants to merge 2 commits intojupyter-server:mainfrom
vincentye38:main-apple-oss
Open

Enhance GatewayClient #1603
vincentye38 wants to merge 2 commits intojupyter-server:mainfrom
vincentye38:main-apple-oss

Conversation

@vincentye38
Copy link

@vincentye38 vincentye38 commented Feb 19, 2026

  • Removed kernel_id parameter from GatewayClient ctor because its supper class's ctor doesn't have this parameter. When a kernel manager try to instantiate an object of it, it doesn't know GatewayClient is the concrete class and It need to pass kernel_id to the ctor. Thus, It fails with the following error message. kernel_id is only for constructing ws_url (gateway websocket url.) Replace kernel_id with ws_url property. So the kernel manager can set ws_url instead of kernel id.
    The kernel_id parameter caused the following exception when the ctor is called by self.kernel_client = self.client(session=self.session) in KernelManager.init
[W 2026-02-18 18:31:50.832 ServerApp] wrote error: "GatewayKernelClient.__init__() missing 1 required positional argument: 'kernel_id'"
    Traceback (most recent call last):
      File "/Users/xiang_ye/github/aiml-jupyter-server/jupyter_server/services/sessions/handlers.py", line 90, in post
        s_model = await sm.create_session(
                  ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/jupyter_server_documents/session_manager.py", line 249, in create_session
        session_model = await super().create_session(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/github/aiml-jupyter-server/jupyter_server/services/sessions/sessionmanager.py", line 286, in create_session
        kernel_id = await self.start_kernel_for_session(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/github/aiml-jupyter-server/jupyter_server/services/sessions/sessionmanager.py", line 359, in start_kernel_for_session
        kernel_id = await self.kernel_manager.start_kernel(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/github/aiml-jupyter-server/jupyter_server/services/kernels/kernelmanager.py", line 233, in _async_start_kernel
        kernel_id = await self.pinned_superclass._async_start_kernel(self, **kwargs)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/jupyter_client/multikernelmanager.py", line 263, in _async_start_kernel
        km, kernel_name, kernel_id = self.pre_start_kernel(kernel_name, kwargs)
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/jupyter_client/multikernelmanager.py", line 209, in pre_start_kernel
        km = self.kernel_manager_factory(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/jupyter_client/multikernelmanager.py", line 87, in create_kernel_manager
        km = kernel_manager_ctor(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/nextgen_kernels_api/services/kernels/kernelmanager.py", line 47, in __init__
        self.kernel_client = self.client(session=self.session)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/jupyter_client/manager.py", line 740, in client
        return super().client(**kwargs)  # type:ignore[return-value]
               ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/jupyter_client/manager.py", line 277, in client
        return self.client_factory(**kw)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/jupyter_server_documents/kernel_client.py", line 46, in __init__
        super().__init__(*args, **kwargs)
      File "/Users/xiang_ye/.conda/envs/saturn/lib/python3.11/site-packages/nextgen_kernels_api/services/kernels/client.py", line 87, in __init__
        super().__init__(*args, **kwargs)
    TypeError: GatewayKernelClient.__init__() missing 1 required positional argument: 'kernel_id'
  • added an logic to reconnect to remote gateway if the connection dropped.

Vincent Ye added 2 commits February 16, 2026 13:30
def __init__(self, **kwargs):
"""Initialize a gateway kernel client."""
super().__init__(**kwargs)
self.kernel_id = kernel_id
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: kernel_id is only used for constructing gateway websocket url.

GatewayClient.instance().kernels_endpoint,
url_escape(self.kernel_id),
"channels",
)
Copy link
Author

@vincentye38 vincentye38 Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: I proposed to move ws_url initialization to kernel manager, and make ws_url as a property of kernel client. Because kernel manager is responsible to start kernel process, instantiate a kernel client to connect o the process. So it knows information of how to connect to the kernel process.
Kernel manager will set ws_url of kernel client after it creates the kernel client.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant