mirror of
https://github.com/NCBM/plyngent.git
synced 2026-07-23 05:55:16 +08:00
core/cli: interactive continue prompts for loop and PTY limits
on_limit raises tool-round allowance; PTY session/budget limits can prompt to raise; MaxRoundsEvent.continued marks extended runs.
This commit is contained in:
@@ -155,10 +155,53 @@ async def test_max_rounds() -> None:
|
||||
client = ScriptedClient([forever, forever, forever])
|
||||
messages: list[AnyChatMessage] = [UserChatMessage(content="x")]
|
||||
events = [e async for e in run_chat_loop(client, messages, model="m", tools=registry, max_rounds=2)]
|
||||
assert any(isinstance(e, MaxRoundsEvent) and e.rounds == 2 for e in events) # noqa: PLR2004
|
||||
assert any(isinstance(e, MaxRoundsEvent) and e.rounds == 2 and not e.continued for e in events) # noqa: PLR2004
|
||||
assert len(client.calls) == 2 # noqa: PLR2004
|
||||
|
||||
|
||||
async def test_max_rounds_continue_hook() -> None:
|
||||
@tool
|
||||
def ping() -> str:
|
||||
return "pong"
|
||||
|
||||
registry = ToolRegistry([ping])
|
||||
forever = _response(
|
||||
AssistantChatMessage(
|
||||
content="",
|
||||
tool_calls=[
|
||||
AssistantFunctionToolCall(
|
||||
id="c",
|
||||
function=AssistantFunctionTool(name="ping", arguments="{}"),
|
||||
)
|
||||
],
|
||||
)
|
||||
)
|
||||
final = _response(AssistantChatMessage(content="done"))
|
||||
client = ScriptedClient([forever, forever, final])
|
||||
messages: list[AnyChatMessage] = [UserChatMessage(content="x")]
|
||||
asks: list[str] = []
|
||||
|
||||
def on_limit(reason: str) -> bool:
|
||||
asks.append(reason)
|
||||
return len(asks) == 1
|
||||
|
||||
events = [
|
||||
e
|
||||
async for e in run_chat_loop(
|
||||
client,
|
||||
messages,
|
||||
model="m",
|
||||
tools=registry,
|
||||
max_rounds=2,
|
||||
on_limit=on_limit,
|
||||
)
|
||||
]
|
||||
assert len(asks) == 1
|
||||
assert any(isinstance(e, MaxRoundsEvent) and e.continued for e in events)
|
||||
assert any(isinstance(e, TextDeltaEvent) and e.content == "done" for e in events)
|
||||
assert len(client.calls) == 3 # noqa: PLR2004
|
||||
|
||||
|
||||
async def test_default_max_rounds_is_generous() -> None:
|
||||
from plyngent.agent.loop import DEFAULT_MAX_ROUNDS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user