Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Livebook hangs when handling large source smart cells #2916

Open
fahchen opened this issue Jan 25, 2025 · 1 comment
Open

Livebook hangs when handling large source smart cells #2916

fahchen opened this issue Jan 25, 2025 · 1 comment

Comments

@fahchen
Copy link

fahchen commented Jan 25, 2025

Hey guys, thank you for the amazing work you’re doing here. I really appreciate it!

I recently created a kino smart cell that allows to draw excalidraw graphs in the Livebook. You can check it out at https://github.com/fahchen/kino_excalidraw. However, I’ve run into an issue where the Livebook sometimes hangs. After some investigation, I found that Livebook.Text.Delta.diff/2 takes a significant amount of time to compute, especially as increasing as the source of the smart cell grows larger. Actually, I embed the excalidraw file which is in JSON format, into the notebook. Here’s the relevant part of the code:

delta = Livebook.Text.Delta.diff(cell.source, source)

I’d like to ask for your help with following:

  1. is this a proper way to embed the excalidraw into the livebook notebook?
  2. wow can I address this issue? My current solution is to add an option to generate Kino.nothing() as the source.

livebook-diff-issue.md (GitHub doesn’t allow uploading .livemd files, so I changed it to .md.)
Here’s an example livebook note that embeds an excalidraw graph, alternatively you can find an example from the kino_excaildraw document(https://hexdocs.pm/kino_excalidraw/components.html).

To reproduce this issue, you can open the example notebook from the above, draw a complex graph, and then Livebook will hang.

Thanks in advance for any help or suggestions.

@jonatanklosko
Copy link
Member

@fahchen what code is the smart cell supposed to generate? Looking at the source I see the generate code does KinoExcalidraw.SmartCell.new, but then you implement Kino.Render for that struct that renders nothing. Is it for use later?

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

No branches or pull requests

2 participants