RoomKit¶
RoomKit ¶
RoomKit(store=None, identity_resolver=None, identity_channel_types=None, inbound_router=None, lock_manager=None, realtime=None, max_chain_depth=5, identity_timeout=10.0, process_timeout=30.0, stt=None, tts=None, voice=None, task_runner=None, delivery_strategy=None, delivery_backend=None, status_bus=None, telemetry=None, inbound_rate_limit=None, orchestration=None)
Central orchestrator tying rooms, channels, hooks, and storage.
Initialise the RoomKit orchestrator.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
store
|
ConversationStore | None
|
Persistent storage backend. Defaults to |
None
|
identity_resolver
|
IdentityResolver | None
|
Optional resolver for identifying inbound senders. |
None
|
identity_channel_types
|
set[ChannelType] | None
|
Restrict identity resolution to specific channel
types. If |
None
|
inbound_router
|
InboundRoomRouter | None
|
Strategy for routing inbound messages to rooms.
Defaults to |
None
|
lock_manager
|
RoomLockManager | None
|
Per-room locking backend. Defaults to
|
None
|
realtime
|
RealtimeBackend | None
|
Realtime backend for ephemeral events (typing, presence).
Defaults to |
None
|
max_chain_depth
|
int
|
Maximum reentry chain depth to prevent infinite loops. |
5
|
identity_timeout
|
float
|
Timeout in seconds for identity resolution calls. |
10.0
|
process_timeout
|
float
|
Timeout in seconds for the locked processing phase. |
30.0
|
stt
|
STTProvider | None
|
Optional speech-to-text provider for transcription. |
None
|
tts
|
TTSProvider | None
|
Optional text-to-speech provider for synthesis. |
None
|
voice
|
VoiceBackend | None
|
Optional voice backend for real-time audio transport. |
None
|
task_runner
|
TaskRunner | None
|
Pluggable backend for delegated background tasks.
Defaults to |
None
|
delivery_strategy
|
DeliveryStrategy | str | None
|
Controls proactive delivery of background task
results. When set, |
None
|
delivery_backend
|
DeliveryBackend | None
|
Persistent delivery backend. When set,
|
None
|
status_bus
|
StatusBus | None
|
Shared status bus for multi-agent coordination.
Defaults to a |
None
|
telemetry
|
TelemetryConfig | TelemetryProvider | None
|
Optional telemetry provider or config for span/metric
collection. Accepts a |
None
|
inbound_rate_limit
|
RateLimit | None
|
Optional rate limit applied to all inbound
messages before any processing. Messages exceeding the limit
are dropped with |
None
|
orchestration
|
Orchestration | None
|
Default orchestration strategy applied to rooms
created via |
None
|
get_timeline
async
¶
get_timeline(room_id, offset=0, limit=50, visibility_filter=None, *, after_index=None, before_index=None)
Query the event timeline for a room.
Supports offset-based (offset/limit) and cursor-based
(after_index/before_index) pagination. When a cursor
parameter is set, offset is ignored.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
room_id
|
str
|
Room to query. |
required |
offset
|
int
|
Number of events to skip (offset-based mode). |
0
|
limit
|
int
|
Maximum number of events to return. |
50
|
visibility_filter
|
str | None
|
Optional visibility value to filter by. |
None
|
after_index
|
int | None
|
Return events with |
None
|
before_index
|
int | None
|
Return events with |
None
|
list_tasks
async
¶
List tasks for a room, optionally filtered by status.
send_event
async
¶
send_event(room_id, channel_id, content, event_type=MESSAGE, chain_depth=0, participant_id=None, metadata=None, visibility='all', provider=None, response_visibility=None)
Send an event directly into a room from a channel.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
room_id
|
str
|
Target room ID |
required |
channel_id
|
str
|
Source channel ID |
required |
content
|
Any
|
Event content (TextContent, RichContent, etc.) |
required |
event_type
|
EventType
|
Type of event (default MESSAGE) |
MESSAGE
|
chain_depth
|
int
|
Depth in response chain (for loop prevention) |
0
|
participant_id
|
str | None
|
Optional participant/sender ID for the event source |
None
|
metadata
|
dict[str, Any] | None
|
Optional event metadata |
None
|
visibility
|
str
|
Event visibility ("all" or "internal") |
'all'
|
provider
|
str | None
|
Optional provider/backend name for event attribution |
None
|
response_visibility
|
str | None
|
Controls where the AI's response is delivered. Uses the same vocabulary as visibility. None means no restriction. |
None
|
connect_websocket
async
¶
Register a WebSocket connection and emit framework event.
disconnect_websocket
async
¶
Unregister a WebSocket connection and emit framework event.
Exceptions¶
RoomNotFoundError ¶
Bases: RoomKitError
Room does not exist.
ChannelNotFoundError ¶
Bases: RoomKitError
Channel binding not found in room.
ChannelNotRegisteredError ¶
Bases: RoomKitError
Channel type not registered.
Infrastructure¶
RoomLockManager ¶
Bases: ABC
Abstract base for per-room locking.
Implement this to plug in any locking backend (Redis, Postgres
advisory locks, etc.). The library ships with InMemoryLockManager
for single-process deployments.
Implementations should be reentrant within the same execution
context (including child tasks spawned by asyncio.gather): if
a coroutine already holds the lock for a room and awaits code that
tries to acquire the same room lock, the inner acquisition must
succeed without deadlocking. This is required because tool handlers
(e.g. handoff) may update room state while the inbound pipeline
already holds the room lock.
InMemoryLockManager ¶
Bases: RoomLockManager
In-process per-room asyncio locks with LRU eviction.
Reentrant within the same execution context: if the current context
already holds the lock for a given room (including child tasks
spawned by asyncio.gather), locked() yields immediately
instead of deadlocking.
Suitable for single-process deployments. For multi-process or
distributed setups, provide a custom RoomLockManager backed by
Redis, Postgres advisory locks, or similar.
AuthCallback
module-attribute
¶
Async callback for transport authentication.
Receives the connection context (e.g. WebSocket, HTTP request) and returns
a metadata dict on success or None to reject the connection.