Skip to content

[Bug] 轮询任务状态偶发 NaN 导致 JSON 序列化崩溃,建议改用 ORJSONResponse #462

Open

Description

@xunyuyou

受影响的工作区

Web 前端 (BillNote_frontend/)

版本

V2.4.5

部署方式

源码运行

复现步骤

报错现象

在处理长视频或向量索引阶段(如 向量索引完成: task_id=..., chunks=...),前端轮询调用 /api/task_status/{task_id} 接口时,控制台抛出以下异常导致任务返回 500,前端页面中断并提示生成失败:

File ".../app/routers/note.py", line 264, in get_task_status
    return R.success({...})
File ".../app/utils/response.py", line 12, in success
    return JSONResponse(content={...})
...
ValueError: Out of range float values are not JSON compliant: nan


### 期望行为

任务处理(如构建向量索引)过程中,前端轮询 `/api/task_status/{task_id}` 接口能始终正常返回 HTTP 200 及进度状态,不因内部浮点数计算异常而导致接口序列化崩溃,笔记能顺利生成完毕。


### 实际行为

在处理向量索引阶段,接口调用抛出 `ValueError: Out of range float values are not JSON compliant: nan` 异常,返回 500 状态码,前端页面直接提示生成失败。

**后台完整报错日志:**
```text
File ".../app/routers/note.py", line 264, in get_task_status
    return R.success({...})
File ".../app/utils/response.py", line 12, in success
    return JSONResponse(content={...})
File ".../site-packages/starlette/responses.py", line 193, in render
    return json.dumps(...)
ValueError: Out of range float values are not JSON compliant: nan
---
建议修改方案:
改用 fastapi.responses.ORJSONResponse 替换 JSONResponse,其天然支持容错序列化且基于 Rust 拥有极高的性能提升:

1. backend/app/utils/response.py 改为:

from fastapi.responses import ORJSONResponse
from app.utils.status_code import StatusCode
from pydantic import BaseModel
from typing import Optional, Any

class ResponseWrapper:
    @staticmethod
    def success(data=None, msg="success", code=0):
        return ORJSONResponse(content={
            "code": code,
            "msg": msg,
            "data": data
        })

    @staticmethod
    def error(msg="error", code=500, data=None):
        return ORJSONResponse(content={
            "code": code,
            "msg": str(msg),
            "data": data
        })


2. 在 backend/requirements.txt 中补充依赖:orjson>=3.9.0


### 运行环境

OS: macOS 15.8.1
- Python: 3.12

### 日志 / 堆栈

```text

提交前自查

  • 我已搜索过 Issues,确认不是重复问题
  • 我提供的日志中不包含 API key、cookie、SESSDATA 等敏感信息

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions