fix: 修复代码审查中的问题

1. processor.py: 标签过滤逻辑基于 filter_tags 配置而非硬编码 grok:render
2. chat.py: VALID_ROLES 移除 function(它是 tool 的别名)
3. chat.py: validate_stream 对未识别值抛出错误而非转为 True
4. retry.py: extract_status 回退到 status_code 属性
This commit is contained in:
piexian committed 2026-02-04 05:22:56 +08:00
1 parent 2a50326517
commit d605e0338f
3 files changed
+24 -10

No files matched your search

+10 -4
View File
@@ -16,8 +16,8 @@ from app.core.exceptions import ValidationException
router = APIRouter(tags=["Chat"])
VALID_ROLES = ["developer", "system", "user", "assistant", "tool", "function"]
# 角色别名映射 (OpenAI 兼容)
VALID_ROLES = ["developer", "system", "user", "assistant", "tool"]
# 角色别名映射 (OpenAI 兼容: function -> tool)
ROLE_ALIASES = {"function": "tool"}
USER_CONTENT_TYPES = ["text", "image_url", "input_audio", "file"]
@@ -123,8 +123,14 @@ class ChatCompletionRequest(BaseModel):
return True
if v.lower() in ("false", "0", "no"):
return False
# 其他情况尝试转换
return bool(v)
# 未识别的字符串值抛出错误
raise ValueError(
f"Invalid stream value '{v}'. Must be a boolean or one of: true, false, 1, 0, yes, no"
)
# 非布尔非字符串类型抛出错误
raise ValueError(
f"Invalid stream value type '{type(v).__name__}'. Must be a boolean or string."
)
model_config = {
"extra": "ignore"
+10 -5
View File
@@ -179,14 +179,19 @@ class StreamProcessor(BaseProcessor):
self._tag_buffer += char
# 检查是否到达结束标签
if char == '>':
# 检查是否是自闭合标签或结束标签
if '/>' in self._tag_buffer or '</grok:render>' in self._tag_buffer:
# 检查是否是自闭合标签
if '/>' in self._tag_buffer:
self._in_filter_tag = False
self._tag_buffer = ""
# 检查是否是开始标签结束(非自闭合)
elif self._tag_buffer.startswith('<grok:render') and '>' in self._tag_buffer:
else:
# 检查是否是结束标签 </{tag}>
for tag in self.filter_tags:
if f'</{tag}>' in self._tag_buffer:
self._in_filter_tag = False
self._tag_buffer = ""
break
# 如果不是结束标签,检查是否是开始标签结束(非自闭合)
# 继续等待结束标签
pass
i += 1
continue
+4 -1
View File
@@ -188,7 +188,10 @@ async def retry_on_status(
if extract_status is None:
def extract_status(e: Exception) -> Optional[int]:
if isinstance(e, UpstreamException):
return e.details.get("status") if e.details else None
# 优先从 details 获取,回退到 status_code 属性
if e.details and "status" in e.details:
return e.details["status"]
return getattr(e, "status_code", None)
return None
while ctx.attempt <= ctx.max_retry: