fix(inference): 模板渲染兜底修正——原生jinja2.Environment无renders方法(独立脚本环境崩溃);诊断改print(模块logger未接应用日志管道)

This commit is contained in:
yumoqing 2026-09-04 18:26:17 +08:00
parent 26d083bdd2
commit 31a5c73225

View File

@ -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):