mirror of
https://github.com/mudler/LocalAI.git
synced 2026-09-12 14:22:11 -04:00
Backend processes shared the host temporary directory, so crashes could leave request images and audio behind until the filesystem filled. Give each process a locked LocalAI-owned runtime, remove scratch on exit, and sweep only marked abandoned runtimes at the next start. Also close known request error-path leaks in the Python media backends, CrispASR, LongCat Video, and stable-diffusion.cpp. Assisted-by: Codex:gpt-5 Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
37 lines
915 B
Python
37 lines
915 B
Python
import base64
|
|
import contextlib
|
|
import os
|
|
import tempfile
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def materialize_base64(data, suffix=""):
|
|
"""Materialize base64 data for a path-only library and always remove it."""
|
|
descriptor, path = tempfile.mkstemp(prefix="localai-media-", suffix=suffix)
|
|
try:
|
|
with os.fdopen(descriptor, "wb") as output:
|
|
descriptor = None
|
|
output.write(base64.b64decode(data))
|
|
yield path
|
|
finally:
|
|
if descriptor is not None:
|
|
os.close(descriptor)
|
|
try:
|
|
os.remove(path)
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def cleanup_paths():
|
|
"""Collect temporary paths and remove them on success or failure."""
|
|
paths = []
|
|
try:
|
|
yield paths
|
|
finally:
|
|
for path in paths:
|
|
try:
|
|
os.remove(path)
|
|
except OSError:
|
|
pass
|