Skip to content

Commit 6a8bfd0

Browse files
committed
Added handler to fix ui tests
1 parent 74d8ebf commit 6a8bfd0

File tree

3 files changed

+31
-36
lines changed

3 files changed

+31
-36
lines changed

jupyter_ai_router/extension.py

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,59 @@
22
import time
33
from jupyter_events import EventLogger
44
from jupyter_server.extension.application import ExtensionApp
5-
from jupyter_server.serverapp import ServerApp
5+
6+
from jupyter_ai_router.handlers import RouteHandler
67

78
from .router import MessageRouter
89

910
# Check jupyter-collaboration version for compatibility
1011
try:
1112
from jupyter_collaboration import __version__ as jupyter_collaboration_version
13+
1214
JCOLLAB_VERSION = int(jupyter_collaboration_version[0])
1315
if JCOLLAB_VERSION >= 3:
1416
from jupyter_server_ydoc.utils import JUPYTER_COLLABORATION_EVENTS_URI
1517
else:
1618
from jupyter_collaboration.utils import JUPYTER_COLLABORATION_EVENTS_URI
1719
except ImportError:
1820
# Fallback if jupyter-collaboration is not available
19-
JUPYTER_COLLABORATION_EVENTS_URI = "https://events.jupyter.org/jupyter_collaboration"
21+
JUPYTER_COLLABORATION_EVENTS_URI = (
22+
"https://events.jupyter.org/jupyter_collaboration"
23+
)
2024

2125

2226
class RouterExtension(ExtensionApp):
2327
"""
2428
Jupyter AI Router Extension
2529
"""
26-
30+
2731
name = "jupyter_ai_router"
28-
handlers = [] # No HTTP handlers needed
29-
32+
handlers = [
33+
(r"jupyter-ai-router/health/?", RouteHandler),
34+
]
35+
3036
def initialize_settings(self):
3137
"""Initialize router settings and event listeners."""
3238
start = time.time()
33-
39+
3440
# Create MessageRouter instance
3541
self.router = MessageRouter(parent=self)
36-
42+
3743
# Make router available to other extensions
38-
if 'jupyter-ai' not in self.settings:
39-
self.settings['jupyter-ai'] = {}
40-
self.settings['jupyter-ai']['router'] = self.router
41-
44+
if "jupyter-ai" not in self.settings:
45+
self.settings["jupyter-ai"] = {}
46+
self.settings["jupyter-ai"]["router"] = self.router
47+
4248
# Listen for new chat room events
4349
if self.serverapp is not None:
4450
self.event_logger = self.serverapp.web_app.settings["event_logger"]
4551
self.event_logger.add_listener(
46-
schema_id=JUPYTER_COLLABORATION_EVENTS_URI,
47-
listener=self._on_chat_event
52+
schema_id=JUPYTER_COLLABORATION_EVENTS_URI, listener=self._on_chat_event
4853
)
49-
54+
5055
elapsed = time.time() - start
5156
self.log.info(f"Initialized RouterExtension in {elapsed:.2f}s")
52-
57+
5358
async def _on_chat_event(
5459
self, logger: EventLogger, schema_id: str, data: dict
5560
) -> None:
@@ -61,24 +66,24 @@ async def _on_chat_event(
6166
and data["msg"] == "Room initialized"
6267
):
6368
return
64-
69+
6570
room_id = data["room"]
6671
self.log.info(f"New chat room detected: {room_id}")
67-
72+
6873
# Get YChat document for the room
6974
ychat = await self._get_chat(room_id)
7075
if ychat is None:
7176
self.log.error(f"Failed to get YChat for room {room_id}")
7277
return
73-
78+
7479
# Connect chat to router
7580
self.router.connect_chat(room_id, ychat)
76-
81+
7782
async def _get_chat(self, room_id: str):
7883
"""Get YChat instance for a room ID."""
7984
if not self.serverapp:
8085
return None
81-
86+
8287
try:
8388
if JCOLLAB_VERSION >= 3:
8489
collaboration = self.serverapp.web_app.settings["jupyter_server_ydoc"]
@@ -88,16 +93,16 @@ async def _get_chat(self, room_id: str):
8893
server = collaboration.ywebsocket_server
8994
room = await server.get_room(room_id)
9095
document = room._document
91-
96+
9297
return document
9398
except Exception as e:
9499
self.log.error(f"Error getting chat document for {room_id}: {e}")
95100
return None
96-
101+
97102
def stop_extension(self):
98103
"""Clean up router when extension stops."""
99104
try:
100-
if hasattr(self, 'router'):
105+
if hasattr(self, "router"):
101106
self.router.cleanup()
102107
except Exception as e:
103-
self.log.error(f"Error during router cleanup: {e}")
108+
self.log.error(f"Error during router cleanup: {e}")

jupyter_ai_router/handlers.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import json
22

33
from jupyter_server.base.handlers import APIHandler
4-
from jupyter_server.utils import url_path_join
54
import tornado
65

76
class RouteHandler(APIHandler):
@@ -11,14 +10,5 @@ class RouteHandler(APIHandler):
1110
@tornado.web.authenticated
1211
def get(self):
1312
self.finish(json.dumps({
14-
"data": "This is /jupyter-ai-router/get-example endpoint!"
13+
"data": "JupyterLab extension @jupyter-ai/router is activated!"
1514
}))
16-
17-
18-
def setup_handlers(web_app):
19-
host_pattern = ".*$"
20-
21-
base_url = web_app.settings["base_url"]
22-
route_pattern = url_path_join(base_url, "jupyter-ai-router", "get-example")
23-
handlers = [(route_pattern, RouteHandler)]
24-
web_app.add_handlers(host_pattern, handlers)

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
1515
activate: (app: JupyterFrontEnd) => {
1616
console.log('JupyterLab extension @jupyter-ai/router is activated!');
1717

18-
requestAPI<any>('get-example')
18+
requestAPI<any>('health')
1919
.then(data => {
2020
console.log(data);
2121
})

0 commit comments

Comments
 (0)