diff --git a/pipeline_llm/inference.py b/pipeline_llm/inference.py index 0fea1e8..2ad37d5 100644 --- a/pipeline_llm/inference.py +++ b/pipeline_llm/inference.py @@ -192,14 +192,18 @@ async def _render_tmpl(tmplstr, ns): te = getattr(ServerEnv(), 'tmpl_engine', None) except Exception: te = None - if te is None or not callable(getattr(te, 'renders', None)): - try: - from jinja2 import Environment - te = Environment(enable_async=True) - except Exception: - raise GovernError('模板引擎不可用:jinja2 未安装或未初始化,无法组包上游请求') - _tmpl_engine_cache = te - return await te.renders(tmplstr, ns) + if te is not None and callable(getattr(te, 'renders', None)): + _tmpl_engine_cache = te + return await te.renders(tmplstr, ns) + # 兜底:原生 jinja2.Environment 没有 renders 方法,用 from_string+render_async + try: + from jinja2 import Environment + env = Environment(enable_async=True) + _tmpl_engine_cache = None # 原生引擎不缓存(避免掩盖后续真正的引擎注入) + t = env.from_string(tmplstr) + return await t.render_async(ns) + except Exception as e: + raise GovernError('模板渲染失败(组包不可用):%s' % str(e)[:200]) async def _render_headers(tmpl, ns): @@ -274,10 +278,11 @@ async def _call_upstream_chat(ctx, payload): headers = await _render_headers(profile.get('headers', ''), ns) body = await _build_upstream_body(ctx, payload) timeout = int(_fnum(ctx.get('timeout')) or _TOTAL_TIMEOUT) - # 可诊断性:只记长度不记值(真 key 不落日志) - logger.info("inference: 组包 url=%s auth头长度=%d body字段=%s", - url.split('?')[0], len(headers.get('Authorization', '') or ''), - sorted(body.keys())) + # 可诊断性:只记长度不记值(真 key 不落日志)。print 确保进应用日志 + # (模块 logging.getLogger 的 handler 未接应用日志管道,2026-09-04 实测) + print("[inference] 组包 url=%s auth头长度=%d body字段=%s" % ( + url.split('?')[0], len(headers.get('Authorization', '') or ''), + sorted(body.keys()))) last = None for attempt in range(_MAX_ATTEMPTS):