OCR:recognize_text 不校验服务响应的 success 字段,服务端内部失败会被当成「合法无文字」 #36
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
#34 的设计调研(research-wiki/designs/2026-10-21-issue34-ocr-document-design.md §1 E13)读 MonkeyOCR 服务源码发现:
/ocr/text内部抛异常时返回的是 HTTP 200,而不是错误状态码:api/main.py:622-629:捕获所有异常后返回TaskResponse(success=False, content="", message="OCR task failed: ...")。现状与后果
transports/monkey_ocr.py:240-247的recognize_text只校验content是str,不看success,空串又是合法的「无文字」。所以服务端任何内部失败(OOM、模型异常等)都会被库当成「这张图没有文字」,熔断还记成功,下游完全无感。对照:同文件
parse_layout(:262-270)对success is not True会抛RequestRejectedError并附status_code=200,两个端点不对称。证据与未证实部分
~/Code/MonkeyOCR,提交a4d853f,版本 1.1.0,与线上样本的_version_name一致)。/ocr/text,得到的是success:true+ 幻觉文本"The image contains a single character: 1"(同一输入打/parse才是 500),没有触发到success:false分支。所以「内部异常→200+success:false」是源码推断,需要先找到能稳定触发该分支的输入再确认。/ocr/text会返回success:true的幻觉文本,这是服务行为,库侧只能靠输入预检缓解。本 issue 要决定的
success:false分支在线上是否可触发。recognize_text在success is not True时抛RequestRejectedError(附status_code=200,与parse_layout对称)。这会改变医院线既有行为,需走 brainstorming。recognize_text加输入预检(无法识别的字节本地拒绝)。