refactor(api): TOML 配置 SSOT、统一错误契约、Auth/事务加固与可观测性 (#33)

配置 SSOT(TOML + .env)
统一错误契约
Auth 与事务边界
Redis / Celery 可靠性:业务 Redis(DB/0)与 Celery broker/backend(DB/1)显式拆分;连接池、sync client
可观测性(OpenTelemetry + LGTM)
This commit is contained in:
Sully
2026-05-22 13:44:50 +08:00
committed by GitHub
parent f09ae248f9
commit 53e0065e3e
298 changed files with 15247 additions and 4344 deletions

View File

@@ -29,6 +29,7 @@ from opentelemetry.trace import Status, StatusCode
from app.core.config import settings
from app.core.telemetry import get_tracer
from app.core.runtime_constants import agent_log_defaults
_dedup_lock = threading.Lock()
_last_prompt_sha256_by_label: dict[str, str] = {}
@@ -52,14 +53,14 @@ def agent_summary_enabled() -> bool:
"""是否输出单行 INFO 摘要(耗时、规模等),不依赖全局 DEBUG。"""
if agent_verbose_enabled():
return True
return bool(settings.log_agent_verbose)
return bool(agent_log_defaults.agent_verbose)
def truncate_for_log(text: str | None, *, max_chars: int | None = None) -> str:
"""截断过长文本避免日志爆量。max_chars / AGENT_LOG_MAX_CHARS 为 0 表示不截断。"""
if text is None:
return ""
max_c = max_chars if max_chars is not None else settings.agent_log_max_chars
max_c = max_chars if max_chars is not None else agent_log_defaults.max_chars
s = str(text)
if max_c <= 0 or len(s) <= max_c:
return s
@@ -105,7 +106,7 @@ def agent_span(
def _log_end(ms: float) -> None:
if agent_verbose_enabled():
logger.debug("agent_span_end {} duration_ms={:.2f} {}", operation, ms, ctx)
elif settings.log_agent_verbose:
elif agent_log_defaults.agent_verbose:
logger.info("agent_span {} duration_ms={:.2f} {}", operation, ms, ctx)
if settings.otel_enabled:
@@ -153,7 +154,7 @@ def log_agent_payload(
sha12 = digest[:12]
is_prompt = label.endswith(".prompt")
if is_prompt and settings.agent_log_prompt_dedup:
if is_prompt and agent_log_defaults.prompt_dedup:
with _dedup_lock:
if _last_prompt_sha256_by_label.get(label) == digest:
logger.debug(
@@ -169,14 +170,14 @@ def log_agent_payload(
extra_note = ""
if (
is_prompt
and settings.agent_log_json_prompt_prefix_chars > 0
and total_len > settings.agent_log_json_prompt_prefix_only_if_len_gt
and agent_log_defaults.json_prompt_prefix_chars > 0
and total_len > agent_log_defaults.json_prompt_prefix_only_if_len_gt
):
skip = settings.agent_log_json_prompt_prefix_chars
skip = agent_log_defaults.json_prompt_prefix_chars
preview_source = raw[skip:]
extra_note = f" skipped_prefix_chars={skip}"
mode = (settings.agent_log_prompt_mode or "preview").strip().lower()
mode = (agent_log_defaults.prompt_mode or "preview").strip().lower()
if is_prompt and mode == "hash_only":
logger.debug(
"agent_payload label={} total_len={} sha12={} mode=hash_only{}",