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:
@@ -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{}",
|
||||
|
||||
Reference in New Issue
Block a user