Fix research context limits and preserve output correction audits
This commit is contained in:
1 parent
2cc5598ebd
commit
80a1aa389c
6 files changed
+233
-10
No files matched your search
@@ -36,3 +36,38 @@ def test_context_budget_includes_unicode_and_tool_schema(risk):
|
||||
from types import SimpleNamespace
|
||||
provider = SimpleNamespace(max_tokens=256, context_window=3500)
|
||||
assert not risk.fits_context(provider, '只使用原文证据', {'content': '风'*1000}, IndexResult)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('context_window', [250000, 1000000])
|
||||
def test_news_context_is_capped_at_250k_including_output(risk, monkeypatch, context_window):
|
||||
from pydantic import BaseModel
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
class Result(BaseModel):
|
||||
facts: str
|
||||
|
||||
provider = SimpleNamespace(max_tokens=32000, context_window=context_window)
|
||||
assert risk.fits_context(provider, '', {'content': 'x' * 200000}, Result)
|
||||
stream = AsyncMock()
|
||||
monkeypatch.setattr(risk.llm, 'stream', stream)
|
||||
with pytest.raises(ValueError, match='超出模型上下文'):
|
||||
asyncio.run(risk.complete(provider, '', {'content': 'x' * 220000}, Result))
|
||||
stream.assert_not_called()
|
||||
|
||||
|
||||
def test_research_reserves_tool_room_within_250k_cap(risk):
|
||||
from alphapulse.news_research.tools import Research
|
||||
from pydantic import BaseModel
|
||||
from types import SimpleNamespace
|
||||
|
||||
class Result(BaseModel):
|
||||
facts: str
|
||||
|
||||
reader = Research()
|
||||
payload = {'content': 'x' * 190000}
|
||||
for context_window in (250000, 1000000):
|
||||
provider = SimpleNamespace(max_tokens=32000, context_window=context_window)
|
||||
assert risk.fits_context(provider, '', payload, Result)
|
||||
assert not reader.fits(provider, '', payload, Result)
|
||||
assert provider.context_window == context_window
|
||||
Reference in new issue
Block a user