Fix research context limits and preserve output correction audits
Development CI / check-and-build (push) Successful in 3m20s
GitHub Git mirror / mirror (push) Successful in 5s
Development CI / deploy-development (push) Successful in 2m29s

This commit is contained in:
eezd committed 2026-11-06 11:24:43 +08:00
1 parent 2cc5598ebd
commit 80a1aa389c
6 files changed
+233 -10

No files matched your search

+35
View File
@@ -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