From a82bf87273cea7acb65bd2ce36582ba43f46b68b Mon Sep 17 00:00:00 2001 From: orenzhang Date: Mon, 3 Mar 2025 15:51:42 +0800 Subject: [PATCH] feat(model): add usage log --- backend/apps/usage/models.py | 12 ++++++++---- backend/apps/usage/views.py | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/apps/usage/models.py b/backend/apps/usage/models.py index 44acd7d..593789a 100644 --- a/backend/apps/usage/models.py +++ b/backend/apps/usage/models.py @@ -4,6 +4,7 @@ from django.db.models import F from django.utils.translation import gettext_lazy from ovinc_client.core.constants import MAX_CHAR_LENGTH +from ovinc_client.core.logger import logger from ovinc_client.core.models import BaseModel, ForeignKey, UniqIDField @@ -89,6 +90,7 @@ def record( prompt_tokens: int, completion_tokens: int, usage: dict, + user_info: dict, ) -> "UsageLog": log = cls.objects.create( user_id=user_id, @@ -101,10 +103,12 @@ def record( usage=usage, ) # pylint: disable=E1101 - UserBalance.objects.filter(user_id=user_id).update( - balance=F("balance") - - (prompt_tokens * model.prompt_price / 1000 / 1000) - - (completion_tokens * model.completion_price / 1000 / 1000) + prompt_price = prompt_tokens * model.prompt_price / 1000 / 1000 + completion_price = completion_tokens * model.completion_price / 1000 / 1000 + total_price = prompt_price + completion_price + UserBalance.objects.filter(user_id=user_id).update(balance=F("balance") - total_price) + logger.info( + "[usage log] user: %s, tokens: %d/%s, cost: %.4f", user_info, prompt_tokens, completion_tokens, total_price ) return log diff --git a/backend/apps/usage/views.py b/backend/apps/usage/views.py index 5c5bb9a..180a052 100644 --- a/backend/apps/usage/views.py +++ b/backend/apps/usage/views.py @@ -39,6 +39,7 @@ def outlet(self, request: Request, *args, **kwargs) -> Response: prompt_tokens=usage.get("prompt_tokens", 0), completion_tokens=usage.get("completion_tokens", 0), usage=usage, + user_info=req_data["user"], ) balance = UserBalance.get_balance( user_id=req_data["user"]["id"], user_name=req_data["user"]["name"], email=req_data["user"]["email"]