diff --git a/autogpt_platform/backend/backend/copilot/token_tracking.py b/autogpt_platform/backend/backend/copilot/token_tracking.py index f48749e712..b71fc10fa0 100644 --- a/autogpt_platform/backend/backend/copilot/token_tracking.py +++ b/autogpt_platform/backend/backend/copilot/token_tracking.py @@ -15,6 +15,8 @@ import math import re import threading +from prisma.errors import DataError + from backend.data.db_accessors import platform_cost_db from backend.data.platform_cost import PlatformCostEntry, usd_to_microdollars @@ -50,6 +52,18 @@ def _schedule_cost_log(entry: PlatformCostEntry) -> None: async with _get_log_semaphore(): try: await platform_cost_db().log_platform_cost(entry) + except DataError as e: + # Prisma DataError typically means the DB manager pod is running a + # stale Prisma client (e.g. during a rolling deploy after a schema + # migration). Log at WARNING so Sentry is not spammed. + logger.warning( + "Skipping platform cost log (schema mismatch?) for " + "user=%s provider=%s block=%s: %s", + entry.user_id, + entry.provider, + entry.block_name, + e, + ) except Exception: logger.exception( "Failed to log platform cost for user=%s provider=%s block=%s", diff --git a/autogpt_platform/backend/backend/data/platform_cost.py b/autogpt_platform/backend/backend/data/platform_cost.py index aebbbe1d99..abbfb684e4 100644 --- a/autogpt_platform/backend/backend/data/platform_cost.py +++ b/autogpt_platform/backend/backend/data/platform_cost.py @@ -3,6 +3,7 @@ import logging from datetime import datetime, timedelta, timezone from typing import Any +from prisma.errors import DataError from prisma.models import PlatformCostLog as PrismaLog from pydantic import BaseModel @@ -87,6 +88,18 @@ async def log_platform_cost_safe(entry: PlatformCostEntry) -> None: try: async with _log_semaphore: await log_platform_cost(entry) + except DataError as e: + # Prisma DataError typically means the DB manager pod is running a stale + # Prisma client (e.g. during a rolling deploy after a schema migration). + # Log at WARNING so Sentry is not spammed. + logger.warning( + "Skipping platform cost log (schema mismatch?) for " + "user=%s provider=%s block=%s: %s", + entry.user_id, + entry.provider, + entry.block_name, + e, + ) except Exception: logger.exception( "Failed to log platform cost for user=%s provider=%s block=%s",