feat: parse EXTRA_BODY as a JSON object per source
This commit is contained in:
@@ -103,6 +103,35 @@ class TestSourceAggregation:
|
||||
GatewaySettings.from_env("LLM", env=env)
|
||||
|
||||
|
||||
class TestExtraBodyParsing:
|
||||
"""配置级采样参数的 env 解析(issue #4 Task 2)。"""
|
||||
|
||||
def test_json_object_parsed(self):
|
||||
env = _env(**{"LLM__QWEN__1__EXTRA_BODY": '{"temperature": 0, "seed": 42}'})
|
||||
s = GatewaySettings.from_env("LLM", env=env)
|
||||
assert s.sources[0].extra_body == {"temperature": 0, "seed": 42}
|
||||
|
||||
def test_absent_defaults_to_empty(self):
|
||||
assert GatewaySettings.from_env("LLM", env=_env()).sources[0].extra_body == {}
|
||||
|
||||
def test_invalid_json_fails_loudly(self):
|
||||
env = _env(**{"LLM__QWEN__1__EXTRA_BODY": "{invalid"})
|
||||
with pytest.raises(ValueError, match="EXTRA_BODY"):
|
||||
GatewaySettings.from_env("LLM", env=env)
|
||||
|
||||
def test_non_object_json_fails(self):
|
||||
"""数组/标量都不是请求体片段,静默接受会让参数悄悄不生效。"""
|
||||
env = _env(**{"LLM__QWEN__1__EXTRA_BODY": "[1, 2]"})
|
||||
with pytest.raises(ValueError, match="JSON 对象"):
|
||||
GatewaySettings.from_env("LLM", env=env)
|
||||
|
||||
def test_protected_key_rejected_through_assembly(self):
|
||||
"""校验确实挂在装配路径上(而非只在 types.py 里孤立存在)。"""
|
||||
env = _env(**{"LLM__QWEN__1__EXTRA_BODY": '{"model": "sneaky"}'})
|
||||
with pytest.raises(ValueError, match="model"):
|
||||
GatewaySettings.from_env("LLM", env=env)
|
||||
|
||||
|
||||
class TestResilienceKeys:
|
||||
def test_flat_legacy_keys(self):
|
||||
s = GatewaySettings.from_env("LLM", env=_env())
|
||||
|
||||
Reference in New Issue
Block a user