From c7c57461ca526b5254cf4cc9e1b5575e5d6e507d Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Fri, 26 Sep 2025 21:59:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(llm=5Fmodels):=20=E5=B0=86=E7=94=A8?= =?UTF-8?q?=E9=87=8F=E8=AE=B0=E5=BD=95=E5=87=BD=E6=95=B0=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E4=BB=A5=E6=94=AF=E6=8C=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 `LLMUsageRecorder` 中的 `record_usage_to_database` 和 `LLMRequest` 中的 `_record_usage` 方法从同步转换为异步。 此项重构是为了支持异步数据库操作,避免在记录模型用量时阻塞事件循环,从而提升应用的整体性能和响应能力。 --- src/llm_models/utils.py | 4 ++-- src/llm_models/utils_model.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/llm_models/utils.py b/src/llm_models/utils.py index bf23f144a..f08ce2092 100644 --- a/src/llm_models/utils.py +++ b/src/llm_models/utils.py @@ -145,9 +145,9 @@ class LLMUsageRecorder: LLM使用情况记录器(SQLAlchemy版本) """ - @staticmethod async def record_usage_to_database( - model_info: ModelInfo, + self, + model_info: ModelInfo, model_usage: UsageRecord, user_id: str, request_type: str, diff --git a/src/llm_models/utils_model.py b/src/llm_models/utils_model.py index 3ea94c1e1..cf2a7cb1c 100644 --- a/src/llm_models/utils_model.py +++ b/src/llm_models/utils_model.py @@ -891,7 +891,7 @@ class LLMRequest: max_tokens=self.model_for_task.max_tokens if max_tokens is None else max_tokens, ) - self._record_usage(model_info, response.usage, time.time() - start_time, "/chat/completions") + await self._record_usage(model_info, response.usage, time.time() - start_time, "/chat/completions") if not response.content and not response.tool_calls: if raise_when_empty: @@ -916,14 +916,14 @@ class LLMRequest: embedding_input=embedding_input ) - self._record_usage(model_info, response.usage, time.time() - start_time, "/embeddings") + await self._record_usage(model_info, response.usage, time.time() - start_time, "/embeddings") if not response.embedding: raise RuntimeError("获取embedding失败") return response.embedding, model_info.name - def _record_usage(self, model_info: ModelInfo, usage: Optional[UsageRecord], time_cost: float, endpoint: str): + async def _record_usage(self, model_info: ModelInfo, usage: Optional[UsageRecord], time_cost: float, endpoint: str): """ 记录模型使用情况。