from __future__ import annotations import asyncio import importlib import unittest from pathlib import Path from unittest.mock import AsyncMock, patch rlm_module = importlib.import_module("rlm") PAYLOAD = { "active_session_id": "active-root", "session_id": "session-root", "name": "researcher", "session_file": "/tmp/sessions/researcher/session.jsonl", "model": "prime-inference/deepseek/deepseek-v4-flash", } class RlmCreateSessionTest(unittest.TestCase): def test_returns_typed_handle_and_forwards_options(self) -> None: host_request = AsyncMock(return_value=PAYLOAD) with patch.object(rlm_module, "host_request", host_request): handle = asyncio.run( rlm_module.rlm.create_session( "analyze shard 1", name="researcher", model="prime-inference/deepseek/deepseek-v4-flash", thinking="off", cwd="/tmp/project", ) ) host_request.assert_awaited_once_with( "rlm.create_session", { "prompt": "analyze shard 1", "kwargs": { "name": "researcher", "model": "prime-inference/deepseek/deepseek-v4-flash", "thinking": "off", "cwd": "/tmp/project", }, }, ) self.assertEqual( handle, rlm_module.RLMCreateSessionHandle( active_session_id="active-root", session_id="session-root", name="researcher", session_file=Path("/tmp/sessions/researcher/session.jsonl"), model="prime-inference/deepseek/deepseek-v4-flash", ), ) def test_omits_unset_options(self) -> None: host_request = AsyncMock(return_value=PAYLOAD) with patch.object(rlm_module, "host_request", host_request): asyncio.run(rlm_module.create_session("check status")) host_request.assert_awaited_once_with( "rlm.create_session", {"prompt": "check status", "kwargs": {}}, ) def test_rejects_non_string_prompt(self) -> None: with self.assertRaisesRegex(TypeError, "prompt must be str"): asyncio.run(rlm_module.create_session(42)) # type: ignore[arg-type] def test_rejects_invalid_host_payload(self) -> None: host_request = AsyncMock(return_value={**PAYLOAD, "session_file": ""}) with patch.object(rlm_module, "host_request", host_request): with self.assertRaisesRegex(RuntimeError, "invalid payload"): asyncio.run(rlm_module.create_session("test")) if __name__ == "__main__": unittest.main()