- scheduler: ffmpeg 异步线程 + GPU 串行调度 + 模型复用(2N→2 次加载) - pipeline: 阶段拆分(extract/asr/translate),中间数据存 Task 字段 - translate_service: 长度排序批处理,padding 浪费减少 91% - model_manager: ASR/翻译不共驻,BatchedInferencePipeline 批量解码 - 日志分级: INFO=任务流转里程碑,DEBUG=进度详情;默认 INFO - 前端: 日志最新在上+滚动感知+退避轮询;24h 时间;上传中状态显示 - /health: 返回完整 Whisper/NLLB 配置 - upload_service: 单事务 complete + 扩展名白名单 - task_router: 合并 UploadSession 虚拟任务到列表 - Dockerfile: CPU/GPU 独立构建链,deps 缓存稳定 - prefetch_models: 安装时预下载模型权重
32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
"""日志路由:查询内存日志缓冲,供 /logs 页面消费。
|
||
|
||
分层语义:
|
||
- debug:进度详情(任务 [status pct%]、转写逐段统计、翻译逐批进度、ffmpeg 命令)
|
||
- info:任务流转里程碑(音频提取/ASR/翻译 的开始与完成、模型加载与卸载、批次汇总)
|
||
- warning / error:异常与失败,error 含完整 traceback
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from fastapi import APIRouter, Query
|
||
|
||
from ..services.log_buffer import get_log_buffer
|
||
|
||
router = APIRouter(prefix="/api/logs", tags=["logs"])
|
||
|
||
|
||
@router.get("", summary="查询日志(按级别过滤)")
|
||
def get_logs(
|
||
level: str = Query("info", pattern="^(debug|info|warning|error)$",
|
||
description="最小级别:debug=详细, info=简略, error=仅错误"),
|
||
tail: int = Query(200, ge=1, le=2000, description="最多返回条数"),
|
||
) -> dict:
|
||
records = get_log_buffer().get_records(level=level, tail=tail)
|
||
return {"level": level, "tail": tail, "count": len(records), "logs": records}
|
||
|
||
|
||
@router.delete("", summary="清空日志缓冲")
|
||
def clear_logs() -> dict:
|
||
get_log_buffer().clear()
|
||
return {"status": "cleared"}
|