mirror of
https://github.com/NCBM/plyngent.git
synced 2026-07-23 05:55:16 +08:00
core/agent+cli: treat last-request prompt_tokens as context size
context_tokens prefers API usage from the last model call; char est. is only a pre-call fallback. Clarify billed turn/session totals in UI.
This commit is contained in:
@@ -273,6 +273,21 @@ async def test_chat_agent_turn_usage_sums_tool_rounds() -> None:
|
||||
assert agent.last_request_usage.prompt_tokens == 200
|
||||
assert agent.last_turn_usage.prompt_tokens == 300
|
||||
assert agent.last_turn_usage.total_tokens == 308
|
||||
# Context size is last request prompt, not billed sum
|
||||
assert agent.context_tokens == 200
|
||||
assert agent.context_tokens_source == "api"
|
||||
|
||||
|
||||
async def test_context_tokens_falls_back_to_message_estimate() -> None:
|
||||
agent = ChatAgent(
|
||||
ScriptedClient([]),
|
||||
model="m",
|
||||
stream=False,
|
||||
messages=[UserChatMessage(content="12345678")],
|
||||
)
|
||||
assert agent.last_request_usage.is_zero()
|
||||
assert agent.context_tokens_source == "estimate"
|
||||
assert agent.context_tokens >= 1
|
||||
|
||||
|
||||
async def test_stream_yields_deltas_incrementally() -> None:
|
||||
|
||||
@@ -145,12 +145,25 @@ async def test_rounds(state: ReplState) -> None:
|
||||
async def test_status_shows_context_tokens(
|
||||
state: ReplState, capsys: pytest.CaptureFixture[str]
|
||||
) -> None:
|
||||
from plyngent.agent.usage import TokenUsage
|
||||
from plyngent.lmproto.openai_compatible.model import UserChatMessage
|
||||
|
||||
state.agent.messages = [UserChatMessage(content="hello")]
|
||||
assert await handle_slash(state, "/status") is True
|
||||
out = capsys.readouterr().out
|
||||
assert "context_tokens~=" in out
|
||||
assert "context_tokens=" in out
|
||||
assert "(est)" in out # no API usage yet
|
||||
assert "context_chars=" in out
|
||||
assert "tool_result_max=" in out
|
||||
assert str(state.workspace) in out
|
||||
|
||||
state.agent.last_request_usage = TokenUsage(
|
||||
prompt_tokens=1234,
|
||||
completion_tokens=10,
|
||||
total_tokens=1244,
|
||||
source="api",
|
||||
)
|
||||
assert await handle_slash(state, "/status") is True
|
||||
out2 = capsys.readouterr().out
|
||||
assert "context_tokens=1234/" in out2
|
||||
assert "(api)" in out2
|
||||
|
||||
Reference in New Issue
Block a user