diff --git a/src/vitals/core/database.py b/src/vitals/core/database.py index b85b3de..11ccad9 100644 --- a/src/vitals/core/database.py +++ b/src/vitals/core/database.py @@ -531,13 +531,20 @@ def add_user(user: User) -> int: return cursor.lastrowid -def _parse_datetime(value) -> datetime: +def _parse_datetime(value) -> Optional[datetime]: """将字符串或 datetime 转换为 datetime 对象""" if value is None: return None if isinstance(value, datetime): return value - return datetime.fromisoformat(value) + # MySQL 可能返回 date 类型 + if isinstance(value, date): + return datetime.combine(value, datetime.min.time()) + # 尝试解析字符串 + try: + return datetime.fromisoformat(value) + except (TypeError, ValueError): + return None def _parse_date(value) -> date: diff --git a/src/vitals/vision/providers/qwen.py b/src/vitals/vision/providers/qwen.py index c2837b0..1f9aab7 100644 --- a/src/vitals/vision/providers/qwen.py +++ b/src/vitals/vision/providers/qwen.py @@ -79,6 +79,12 @@ class QwenVisionAnalyzer: headers=headers, json=payload, ) + # 处理认证错误 + if response.status_code == 401: + raise ValueError( + "API Key 无效或已过期。请检查 DashScope API Key 是否正确配置。" + "可以在管理页面设置 API Key,或通过环境变量 DASHSCOPE_API_KEY 配置。" + ) response.raise_for_status() result = response.json() @@ -135,6 +141,12 @@ class QwenVisionAnalyzer: headers=headers, json=payload, ) + # 处理认证错误 + if response.status_code == 401: + raise ValueError( + "API Key 无效或已过期。请检查 DashScope API Key 是否正确配置。" + "可以在管理页面设置 API Key,或通过环境变量 DASHSCOPE_API_KEY 配置。" + ) response.raise_for_status() result = response.json()