feat: preserve Jupyter MIME output in Streamlit

This commit is contained in:
lda committed 2026-08-31 00:52:34 +07:00 Verified
1 parent 6a8546cb0f
commit 0754cb2508
16 files changed
+1315 -75

No files matched your search

+7 -3
View File
@@ -7,7 +7,7 @@ from fastapi import Body, FastAPI, HTTPException, Path, Response
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
from ipython_shell.jupyter import InputRequest, JupyterApp, KernelMessage
from ipython_shell.jupyter import InputRequest, JupyterApp, ParsedJupyterMessage
app = FastAPI(title="IPython Jupyter Web App", version="0.1.0")
shell_app = JupyterApp()
@@ -19,7 +19,7 @@ class InputReply(BaseModel):
value: str
def serialize_event(event: KernelMessage | InputRequest) -> dict[str, object]:
def serialize_event(event: ParsedJupyterMessage | InputRequest) -> dict[str, object]:
"""Turn a shell event into JSON-safe data for a web client."""
if isinstance(event, InputRequest):
return {
@@ -31,11 +31,15 @@ def serialize_event(event: KernelMessage | InputRequest) -> dict[str, object]:
# Some Jupyter messages keep binary payloads in message buffers. Base64
# makes those buffers safe to carry beside JSON MIME data in the stream.
content = event.content
if isinstance(content, BaseModel):
content = content.model_dump(mode="json")
return {
"type": "kernel_message",
"msg_type": event.msg_type,
"parent_id": event.parent_id,
"content": event.content,
"content": content,
"buffers": [
base64.b64encode(buffer).decode("ascii") for buffer in event.buffers
],