Files
scribe/scraibe/misc.py
T
admin 2ea46ada42
Mirror and run GitLab CI / build (push) Has been cancelled
Ruff / ruff (push) Has been cancelled
Add structured logging for Docker; support LOG_LEVEL env and --log-level
2026-06-13 17:46:25 +00:00

85 lines
2.6 KiB
Python

import os
import logging
from argparse import Action
from ast import literal_eval
CACHE_DIR = os.getenv(
"AUTOT_CACHE",
os.path.expanduser("~/.cache/torch/models"),
)
# Legacy paths kept for backward compatibility (ignored by LocalAI client)
WHISPER_DEFAULT_PATH = os.path.join(CACHE_DIR, "whisper")
PYANNOTE_DEFAULT_PATH = os.path.join(CACHE_DIR, "pyannote")
PYANNOTE_DEFAULT_CONFIG = os.path.join(PYANNOTE_DEFAULT_PATH, "config.yaml")
def setup_logging(level: str = "INFO"):
"""
Configure root logger to write to stdout so Docker can capture logs.
Args:
level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).
"""
numeric_level = getattr(logging, level.upper(), logging.INFO)
if not isinstance(numeric_level, int):
numeric_level = logging.INFO
logging.basicConfig(
level=numeric_level,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
datefmt="%Y-%m-%dT%H:%M:%S%z",
force=True,
)
def set_threads(parse_threads=None, yaml_threads=None):
"""
Configure number of threads.
In LocalAI mode, this is mainly kept for backward compatibility.
"""
chosen = None
if parse_threads is not None:
if not isinstance(parse_threads, int):
raise ValueError(
f"Type of --num-threads must be int, but the type is {type(parse_threads)}"
)
elif parse_threads < 1:
raise ValueError(
f"Number of threads must be a positive integer, {parse_threads} was given"
)
else:
chosen = parse_threads
elif yaml_threads is not None:
if not isinstance(yaml_threads, int):
raise ValueError(
f"Type of num_threads must be int, but the type is {type(yaml_threads)}"
)
elif yaml_threads < 1:
raise ValueError(
f"Number of threads must be a positive integer, {yaml_threads} was given"
)
else:
chosen = yaml_threads
if chosen is not None:
os.environ["OMP_NUM_THREADS"] = str(chosen)
os.environ["MKL_NUM_THREADS"] = str(chosen)
class ParseKwargs(Action):
"""
Custom argparse action to parse keyword arguments.
"""
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, dict())
for value in values:
key, value = value.split("=")
try:
value = literal_eval(value)
except:
pass
getattr(namespace, self.dest)[key] = value