perf: cherry-pick PR #172 性能优化(不含 orjson)

- tiktoken 编码器改为 @lru_cache 全局缓存,避免多实例重复初始化
- 前缀匹配按长度排序,避免短前缀抢先匹配
- AuthService 更新 last_used_at 时临时关闭 expire_on_commit,减少额外 SELECT
- UsageService.record_usage_batch 改用 bulk_insert_mappings 批量插入
- 已有记录查询增加 selectinload 预加载,避免 N+1
- Gemini normalizer 长行格式化

Co-Authored-By: AAEE86 <33052466+AAEE86@users.noreply.github.com>
This commit is contained in:
fawney19
2026-02-12 10:58:14 +08:00
parent f80deea110
commit 483d536e2c
7 changed files with 296 additions and 56 deletions

View File

@@ -692,10 +692,18 @@ class GeminiNormalizer(FormatNormalizer):
# 关闭前面的 thinking/text block如果还开着
if ss.get("thinking_block_started") and not ss.get("thinking_block_stopped"):
ss["thinking_block_stopped"] = True
events.append(ContentBlockStopEvent(block_index=_reserve_block_index("thinking_block_index")))
events.append(
ContentBlockStopEvent(
block_index=_reserve_block_index("thinking_block_index")
)
)
if ss.get("text_block_started") and not ss.get("text_block_stopped"):
ss["text_block_stopped"] = True
events.append(ContentBlockStopEvent(block_index=_reserve_block_index("text_block_index")))
events.append(
ContentBlockStopEvent(
block_index=_reserve_block_index("text_block_index")
)
)
name = str(func_call.get("name") or "")
args = func_call.get("args")
@@ -766,10 +774,14 @@ class GeminiNormalizer(FormatNormalizer):
# 先补齐 content_block_stop所有已开启的 block再发送 MessageStop
if ss.get("thinking_block_started") and not ss.get("thinking_block_stopped"):
ss["thinking_block_stopped"] = True
events.append(ContentBlockStopEvent(block_index=_reserve_block_index("thinking_block_index")))
events.append(
ContentBlockStopEvent(block_index=_reserve_block_index("thinking_block_index"))
)
if ss.get("text_block_started") and not ss.get("text_block_stopped"):
ss["text_block_stopped"] = True
events.append(ContentBlockStopEvent(block_index=_reserve_block_index("text_block_index")))
events.append(
ContentBlockStopEvent(block_index=_reserve_block_index("text_block_index"))
)
events.append(MessageStopEvent(stop_reason=stop_reason, usage=usage_info))
if "error" in chunk: