Errors¶
RoomKitError ¶
Bases: Exception
Base exception for all RoomKit errors.
IdentityNotFoundError ¶
Bases: RoomKitError
Identity not found.
ParticipantNotFoundError ¶
Bases: RoomKitError
Participant not found in room.
VoiceNotConfiguredError ¶
Bases: RoomKitError
Raised when voice operation attempted without configured provider.
VoiceBackendNotConfiguredError ¶
Bases: RoomKitError
Raised when voice backend operation attempted without configured backend.
RoomNotAttachedError ¶
Bases: RoomKitError
Raised when a channel acts on a room it is no longer attached to.
Detaching leaves the conference running for the humans in it, so backend callbacks keep arriving. Acting on them would reconnect a bot nobody asked for.
ParticipantNotAdmittedError ¶
Bases: RoomKitError
Raised when a room's participant is barred from what was asked for them.
Distinct from :class:ParticipantNotFoundError, which says the room has
never heard of them. This one says it has, and the answer is still no —
BANNED is "removed and blocked" (RFC section 5.5), and a caller told
"not found" would reasonably create the participant and try again.
ConferenceAlreadyAttachedError ¶
Bases: RoomKitError
Raised when a second conference channel is attached to a room.
A conference maps 1:1 to a Room (RFC section 12.10.1, principle 2), and the attachment is where that is enforceable: a second conference channel is a second bot session, a second transcription of every utterance and a second AI voice speaking the same deliveries — duplicates the roster, the transcript and the meeting have no way to express. Re-attaching the same conference channel is an ordinary attach and is not refused.
ConferenceCapabilityError ¶
Bases: RoomKitError
Raised when a conference operation needs a capability the backend lacks.
Refusing at the boundary rather than degrading silently: a moderation UI that offers an unmute the SFU will reject, or a recording that never materialises, is worse than a configuration that fails immediately.
ConferenceCloseError ¶
Bases: RoomKitError
Raised when a conference channel did not close all of its resources.
Raised at the very end of ConferenceChannel.close(), after every step
has run. It names sessions that could not be taken out, joins or lanes
retained past their budget, and backend or provider shutdown calls that
failed. Sessions remain on the channel's books, where info() reports
them; resources still used by an abandoned task remain alive until that
task settles. Raised rather than summarised into a log because a clean
return would misreport potentially live conference media as released.
RoomKit.close() collects it into its ExceptionGroup instead of
letting it stop the other channels' closes.
issues carries the structured report the message was rendered from —
one entry per step that failed, timed out, was abandoned, or left a
resource retained — so operator tooling can match on component and
status without parsing prose.