Немного отступлю, изоляции процессов сейчас действительно нет. Изначально, как я говорил выше, проект задумывался под webview специфику: на macOS WKWebView обязан жить на главном потоке внутри NSApplication, а состыковкой такого цикла с js циклом занимается модуль bffi_event_loop с блокирующим run() и пошаговым pump(). Отсюда и однопроцессная архитектура: если нативный код падает, падает весь Bun.
Ваш комментарий подсказал, чего в bffi не хватает, чтобы закрыть вашу проблему. В планах добавить изоляцию процессов (натив работает в отдельном перезапускаемом процессе, его падение не трогает Bun, а VRAM гарантированно возвращается при рестарте :) ) и доработать менеджмент жизненного цикла хэндлов.
В целом, уже сейчас длинные вызовы можно не гонять через блокировку, async задачи уходят в нативный пул воркеров и возвращаются промисами, а генерация LLM стримится как async итератор.
Также, если несложно, подскажите, что у вас за стек? llama.cpp, ONNX или что то своё на CUDA? У большинства таких библиотек есть C API, поэтому в целом можно сделать обёртка на Rust. Оставьте сообщение в issues или discussions в репозитории gh: помогу набросать пример обёртки под вашу задачу, а если он окажется полезен и другим, добавим его в bffi-examples.
Добрый вечер. Спасибо за отзыв.
Немного отступлю, изоляции процессов сейчас действительно нет. Изначально, как я говорил выше, проект задумывался под webview специфику: на macOS
WKWebViewобязан жить на главном потоке внутриNSApplication, а состыковкой такого цикла с js циклом занимается модульbffi_event_loopс блокирующимrun()и пошаговымpump(). Отсюда и однопроцессная архитектура: если нативный код падает, падает весь Bun.Ваш комментарий подсказал, чего в bffi не хватает, чтобы закрыть вашу проблему. В планах добавить изоляцию процессов (натив работает в отдельном перезапускаемом процессе, его падение не трогает Bun, а VRAM гарантированно возвращается при рестарте :) ) и доработать менеджмент жизненного цикла хэндлов.
В целом, уже сейчас длинные вызовы можно не гонять через блокировку, async задачи уходят в нативный пул воркеров и возвращаются промисами, а генерация LLM стримится как async итератор.
Также, если несложно, подскажите, что у вас за стек?
llama.cpp,ONNXили что то своё наCUDA? У большинства таких библиотек есть C API, поэтому в целом можно сделать обёртка на Rust. Оставьте сообщение в issues или discussions в репозитории gh: помогу набросать пример обёртки под вашу задачу, а если он окажется полезен и другим, добавим его вbffi-examples.Надеюсь я правильно вас понял)