Files
opensquilla--opensquilla/tests/test_engine/test_runtime_pending_input_provider_threading.py
2026-07-13 13:12:33 +08:00

76 lines
2.2 KiB
Python

from __future__ import annotations
from collections.abc import AsyncIterator
from types import MethodType
from typing import Any
import pytest
from opensquilla.cli.tui import turn_bridge
from opensquilla.engine.agent_injection import ListPendingInputProvider
from opensquilla.engine.runtime import TurnRunner
from opensquilla.engine.types import DoneEvent
from opensquilla.tools.types import ToolContext
@pytest.mark.asyncio
async def test_turnrunner_run_threads_pending_input_provider_to_run_turn() -> None:
runner = TurnRunner(provider_selector=None, config=None)
pending = ListPendingInputProvider()
pending.append("later")
seen_kwargs: list[dict[str, Any]] = []
async def _recording_run_turn(
self: TurnRunner,
*args: Any,
**kwargs: Any,
) -> AsyncIterator[Any]:
del self, args
seen_kwargs.append(kwargs)
yield DoneEvent(text="ok")
runner._run_turn = MethodType(_recording_run_turn, runner) # type: ignore[method-assign]
async for _event in runner.run(
message="hi",
session_key="agent:main:pending-thread-test",
tool_context=ToolContext(session_key="agent:main:pending-thread-test"),
pending_input_provider=pending,
):
pass
assert seen_kwargs[0]["pending_input_provider"] is pending
@pytest.mark.asyncio
async def test_tui_turn_bridge_threads_pending_input_provider_to_turnrunner_run() -> None:
runner = TurnRunner(provider_selector=None, config=None)
pending = ListPendingInputProvider()
pending.append("later")
seen_kwargs: list[dict[str, Any]] = []
def _recording_run(
self: TurnRunner,
*args: Any,
**kwargs: Any,
) -> AsyncIterator[Any]:
del self, args
seen_kwargs.append(kwargs)
async def _iter() -> AsyncIterator[Any]:
yield DoneEvent(text="ok")
return _iter()
runner.run = MethodType(_recording_run, runner) # type: ignore[method-assign]
await turn_bridge.stream_response_turnrunner(
runner,
"agent:main:tui-pending-thread-test",
ToolContext(session_key="agent:main:tui-pending-thread-test"),
"hi",
pending_input_provider=pending,
)
assert seen_kwargs[0]["pending_input_provider"] is pending