fix: converge non-numeric selector scores to ValueError
This commit is contained in:
@@ -188,7 +188,11 @@ async def _score_options(
|
|||||||
if not isinstance(scores_raw, list) or len(scores_raw) != len(options):
|
if not isinstance(scores_raw, list) or len(scores_raw) != len(options):
|
||||||
msg = f"打分数量({len(scores_raw) if isinstance(scores_raw, list) else 'NA'}) != 选项数({len(options)})"
|
msg = f"打分数量({len(scores_raw) if isinstance(scores_raw, list) else 'NA'}) != 选项数({len(options)})"
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
try:
|
||||||
return [max(0.0, min(1.0, float(s))) for s in scores_raw]
|
return [max(0.0, min(1.0, float(s))) for s in scores_raw]
|
||||||
|
except (TypeError, ValueError) as e:
|
||||||
|
msg = f"打分含非数值元素: {e}"
|
||||||
|
raise ValueError(msg) from e
|
||||||
|
|
||||||
|
|
||||||
async def build_grounded_options(
|
async def build_grounded_options(
|
||||||
|
|||||||
@@ -63,6 +63,14 @@ async def test_generate_pool_degrades_on_malformed_response():
|
|||||||
assert out == []
|
assert out == []
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_score_options_raises_valueerror_on_non_numeric():
|
||||||
|
from app.question_gen.distractor_selector import _score_options
|
||||||
|
vlm = _FakeVLM(['{"scores": [0.9, null, 0.5]}']) # null 不是数值
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
await _score_options(vlm, "?", ["蒸", "炒", "煮"], _Material(), session_id="s")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_build_grounded_options_happy_path():
|
async def test_build_grounded_options_happy_path():
|
||||||
pool = '{"distractors": ["炒", "煮", "炸", "烤"]}'
|
pool = '{"distractors": ["炒", "煮", "炸", "烤"]}'
|
||||||
|
|||||||
Reference in New Issue
Block a user