Add structured logging for Docker; support LOG_LEVEL env and --log-level
This commit is contained in:
+35
-4
@@ -9,9 +9,10 @@ This version is adapted for LocalAI-based transcription and diarization.
|
||||
|
||||
import os
|
||||
import json
|
||||
import logging
|
||||
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
|
||||
from .autotranscript import Scraibe
|
||||
from .misc import set_threads
|
||||
from .misc import set_threads, setup_logging
|
||||
|
||||
|
||||
def cli():
|
||||
@@ -20,6 +21,11 @@ def cli():
|
||||
and diarize audio files via a LocalAI server.
|
||||
"""
|
||||
|
||||
# Initialize logging (can be overridden via --log-level)
|
||||
setup_logging(level=os.getenv("LOG_LEVEL", "INFO"))
|
||||
|
||||
logger = logging.getLogger("scraibe.cli")
|
||||
|
||||
def str2bool(string):
|
||||
str2val = {"True": True, "False": False}
|
||||
if string in str2val:
|
||||
@@ -181,18 +187,34 @@ def cli():
|
||||
help="Number of speakers in the audio.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--log-level",
|
||||
type=str,
|
||||
default=None,
|
||||
choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
|
||||
help="Override LOG_LEVEL env var for logging verbosity.",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Apply log-level override if provided
|
||||
log_level = args.log_level or os.getenv("LOG_LEVEL", "INFO")
|
||||
setup_logging(level=log_level)
|
||||
logger.info("CLI starting with log_level=%s", log_level)
|
||||
|
||||
arg_dict = vars(args)
|
||||
|
||||
# configure output
|
||||
out_folder = arg_dict.pop("output_directory")
|
||||
os.makedirs(out_folder, exist_ok=True)
|
||||
logger.info("Output directory: %s", out_folder)
|
||||
|
||||
out_format = arg_dict.pop("output_format")
|
||||
|
||||
task = arg_dict.pop("task")
|
||||
|
||||
logger.info("Task: %s", task)
|
||||
logger.info("Output format: %s", out_format)
|
||||
|
||||
set_threads(arg_dict.pop("num_threads"))
|
||||
|
||||
# Build kwargs for Scraibe (LocalAI-backed)
|
||||
@@ -208,13 +230,18 @@ def cli():
|
||||
"verbose": arg_dict.pop("verbose_output"),
|
||||
}
|
||||
|
||||
logger.info("LocalAI API URL: %s", class_kwargs["api_url"] or os.getenv("LOCALAI_API_URL", "<not set>"))
|
||||
logger.info("LocalAI Model: %s", class_kwargs["model"] or os.getenv("LOCALAI_MODEL", "<not set>"))
|
||||
|
||||
model = Scraibe(**class_kwargs)
|
||||
|
||||
if arg_dict["audio_files"]:
|
||||
audio_files = arg_dict.pop("audio_files")
|
||||
logger.info("Audio files: %s", audio_files)
|
||||
|
||||
if task == "transcribe":
|
||||
for audio in audio_files:
|
||||
logger.info("Starting 'transcribe' for: %s", audio)
|
||||
out = model.transcribe(
|
||||
audio,
|
||||
language=arg_dict.pop("language"),
|
||||
@@ -223,12 +250,14 @@ def cli():
|
||||
)
|
||||
basename = audio.split("/")[-1].split(".")[0]
|
||||
path = os.path.join(out_folder, f"{basename}.{out_format}")
|
||||
print(f"Saving {basename}.{out_format} to {out_folder}")
|
||||
logger.info("Saving transcript to: %s", path)
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write(out)
|
||||
logger.info("Transcript saved: %s", path)
|
||||
|
||||
elif task == "transcript_and_summarize":
|
||||
for audio in audio_files:
|
||||
logger.info("Starting 'transcript_and_summarize' for: %s", audio)
|
||||
result = model.transcript_and_summarize(
|
||||
audio,
|
||||
summarizer_api_url=arg_dict.pop("summarizer_api_url"),
|
||||
@@ -246,7 +275,7 @@ def cli():
|
||||
|
||||
# Always use .md for transcript_and_summarize
|
||||
md_path = os.path.join(out_folder, f"{basename}.md")
|
||||
print(f"Saving {basename}.md (transcript + summary) to {out_folder}")
|
||||
logger.info("Saving transcript + summary to: %s", md_path)
|
||||
|
||||
with open(md_path, "w", encoding="utf-8") as f:
|
||||
f.write("# Transcript\n\n")
|
||||
@@ -254,5 +283,7 @@ def cli():
|
||||
f.write("\n\n# Summary\n\n")
|
||||
f.write(summary_text)
|
||||
|
||||
logger.info("Transcript + summary saved: %s", md_path)
|
||||
|
||||
if __name__ == "__main__":
|
||||
cli()
|
||||
|
||||
Reference in New Issue
Block a user