Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
"""Tests for the in-process hosted room session adapter."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import threading
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
from gateway.hosted_room_driver import TaskIdentity
|
||||
from tui_gateway.hosted_room_server_rpc import (
|
||||
HostedRoomServerRPC,
|
||||
HostedRoomSessionError,
|
||||
)
|
||||
|
||||
|
||||
def _server():
|
||||
sessions = {}
|
||||
calls = []
|
||||
|
||||
def method(name, result):
|
||||
def handler(rid, params):
|
||||
calls.append((name, params))
|
||||
value = result(params) if callable(result) else result
|
||||
return {"id": rid, **value}
|
||||
|
||||
return handler
|
||||
|
||||
methods = {
|
||||
"session.list": method(
|
||||
"session.list",
|
||||
{"result": {"sessions": [{"id": "stored", "resolved_id": "tip", "title": "Group: room"}]}},
|
||||
),
|
||||
"session.create": method("session.create", {"result": {"session_id": "runtime"}}),
|
||||
"session.resume": method("session.resume", {"result": {"session_id": "runtime"}}),
|
||||
"session.history": method("session.history", {"result": {"messages": [{"role": "assistant"}]}}),
|
||||
"session.interrupt": method("session.interrupt", {"result": {"interrupted": True}}),
|
||||
"approval.respond": method("approval.respond", {"result": {"resolved": 1}}),
|
||||
"prompt.submit": method("prompt.submit", {"result": {"status": "streaming"}}),
|
||||
}
|
||||
server = SimpleNamespace(
|
||||
_methods=methods,
|
||||
_sessions=sessions,
|
||||
_sessions_lock=threading.Lock(),
|
||||
_pending_approval_request_payload=lambda _session_key: None,
|
||||
)
|
||||
return server, calls
|
||||
|
||||
|
||||
def test_routes_exact_hidden_session_and_internal_task_proof():
|
||||
server, calls = _server()
|
||||
rpc = HostedRoomServerRPC(server)
|
||||
task = TaskIdentity("room", "task", "thread", "turn")
|
||||
callback = lambda _receipt: None
|
||||
|
||||
assert rpc.resolve_exact(profile="ops", title="Group: room", source="bot_room")["session_id"] == "tip"
|
||||
assert rpc.create(profile="ops", title="Group: room", source="bot_room")["session_id"] == "runtime"
|
||||
rpc.submit(
|
||||
profile="ops",
|
||||
session_id="runtime",
|
||||
prompt="Do the work",
|
||||
source="bot_room",
|
||||
task=task,
|
||||
execution_generation=2,
|
||||
on_terminal=callback,
|
||||
)
|
||||
|
||||
create = next(params for method, params in calls if method == "session.create")
|
||||
submit = next(params for method, params in calls if method == "prompt.submit")
|
||||
assert create["hidden"] is True
|
||||
assert create["room_plumbing"] is True
|
||||
assert create["follow_profile_config"] is True
|
||||
assert create["close_on_disconnect"] is False
|
||||
assert submit["_hosted_task"] == {
|
||||
"room_id": "room",
|
||||
"task_id": "task",
|
||||
"thread_id": "thread",
|
||||
"turn_id": "turn",
|
||||
"execution_generation": 2,
|
||||
}
|
||||
assert submit["_hosted_terminal_callback"] is callback
|
||||
|
||||
rpc.resume(profile="ops", session_id="stored", source="bot_room")
|
||||
resume = next(params for method, params in calls if method == "session.resume")
|
||||
assert resume["source"] == "bot_room"
|
||||
|
||||
|
||||
def test_info_and_interrupt_are_exact_task_scoped():
|
||||
server, calls = _server()
|
||||
lock = threading.Lock()
|
||||
server._sessions["runtime"] = {
|
||||
"history_lock": lock,
|
||||
"running": True,
|
||||
"_hosted_room_task": {"task_id": "task-a"},
|
||||
}
|
||||
rpc = HostedRoomServerRPC(server)
|
||||
|
||||
assert rpc.info(profile="ops", session_id="runtime", source="bot_room") == {
|
||||
"active": True,
|
||||
"task_id": "task-a",
|
||||
}
|
||||
rpc.interrupt(
|
||||
profile="ops",
|
||||
session_id="runtime",
|
||||
source="bot_room",
|
||||
expected_task_id="task-a",
|
||||
)
|
||||
params = next(params for method, params in calls if method == "session.interrupt")
|
||||
assert params["expected_hosted_task_id"] == "task-a"
|
||||
|
||||
|
||||
def test_local_approval_snapshot_and_response_use_exact_request():
|
||||
server, calls = _server()
|
||||
server._pending_approval_request_payload = lambda session_key: {
|
||||
"request_id": "approval-1",
|
||||
"command": "pytest -q tests/focused",
|
||||
"choices": ["once", "deny"],
|
||||
} if session_key == "stored-session" else None
|
||||
server._sessions["runtime"] = {
|
||||
"history_lock": threading.Lock(),
|
||||
"running": True,
|
||||
"session_key": "stored-session",
|
||||
"_hosted_room_task": {"task_id": "task-a"},
|
||||
}
|
||||
rpc = HostedRoomServerRPC(server)
|
||||
|
||||
info = rpc.info(profile="ops", session_id="runtime", source="bot_room")
|
||||
assert info["status"] == "waiting_for_approval"
|
||||
assert info["pending_approval"]["request_id"] == "approval-1"
|
||||
assert rpc.approve(
|
||||
session_id="runtime",
|
||||
request_id="approval-1",
|
||||
choice="once",
|
||||
) == {"resolved": 1}
|
||||
params = next(params for method, params in calls if method == "approval.respond")
|
||||
assert params == {
|
||||
"session_id": "runtime",
|
||||
"request_id": "approval-1",
|
||||
"choice": "once",
|
||||
"all": False,
|
||||
}
|
||||
|
||||
|
||||
def test_rpc_errors_are_typed():
|
||||
server, _calls = _server()
|
||||
server._methods["session.list"] = lambda rid, _params: {
|
||||
"id": rid,
|
||||
"error": {"code": 4007, "message": "not found"},
|
||||
}
|
||||
rpc = HostedRoomServerRPC(server)
|
||||
|
||||
with pytest.raises(HostedRoomSessionError) as exc:
|
||||
rpc.resolve_exact(profile="ops", title="Group: room", source="bot_room")
|
||||
assert exc.value.code == 4007
|
||||
|
||||
|
||||
def test_prompt_rejection_is_proven_not_admitted():
|
||||
server, _calls = _server()
|
||||
server._methods["prompt.submit"] = lambda rid, _params: {
|
||||
"id": rid,
|
||||
"error": {"code": 4121, "message": "session is already busy"},
|
||||
}
|
||||
rpc = HostedRoomServerRPC(server)
|
||||
|
||||
with pytest.raises(HostedRoomSessionError) as exc:
|
||||
rpc.submit(
|
||||
profile="ops",
|
||||
session_id="runtime",
|
||||
prompt="Do the work",
|
||||
source="bot_room",
|
||||
task=TaskIdentity("room", "task", "thread", "turn"),
|
||||
execution_generation=1,
|
||||
on_terminal=lambda _receipt: None,
|
||||
)
|
||||
|
||||
assert exc.value.code == 4121
|
||||
assert exc.value.not_admitted is True
|
||||
Reference in New Issue
Block a user