roomkit 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {roomkit-0.2.0 → roomkit-0.2.1}/AGENTS.md +17 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/PKG-INFO +17 -6
- {roomkit-0.2.0 → roomkit-0.2.1}/README.md +16 -5
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/llms.txt +4 -2
- {roomkit-0.2.0 → roomkit-0.2.1}/llms.txt +4 -2
- roomkit-0.2.1/src/roomkit/_version.py +1 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_public_api.py +1 -1
- roomkit-0.2.0/src/roomkit/_version.py +0 -1
- {roomkit-0.2.0 → roomkit-0.2.1}/.gitignore +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/LICENSE +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/ai-integration.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/channel-models.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/channel.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/channels.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/delivery.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/enums.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/events.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/hook-models.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/hooks.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/identity.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/index.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-ai.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-email.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-http.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-messenger.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-rcs.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-sms.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-voice.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/providers-whatsapp.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/realtime.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/room.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/roomkit.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/routing.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/sources.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/api/store.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/architecture.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/cpaas-comparison.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/faq.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/features.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/index.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/mcp.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/roomkit-rfc.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/docs/technical.md +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/pyproject.toml +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/ai_docs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/channels/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/channels/ai.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/channels/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/channels/transport.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/channels/voice.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/channels/websocket.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/_channel_ops.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/_helpers.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/_inbound.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/_room_lifecycle.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/circuit_breaker.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/event_router.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/framework.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/hooks.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/inbound_router.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/locks.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/rate_limiter.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/retry.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/router.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/core/transcoder.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/identity/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/identity/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/identity/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/channel.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/context.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/delivery.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/enums.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/event.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/framework_event.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/hook.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/identity.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/participant.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/room.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/models/task.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/ai/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/ai/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/ai/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/anthropic/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/anthropic/ai.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/anthropic/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/elasticemail/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/elasticemail/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/elasticemail/email.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/email/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/email/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/email/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/gemini/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/gemini/ai.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/gemini/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/http/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/http/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/http/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/http/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/http/provider.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/http/webhook.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/messenger/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/messenger/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/messenger/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/messenger/facebook.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/messenger/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/messenger/webhook.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/openai/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/openai/ai.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/openai/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/pydantic_ai/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/pydantic_ai/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/rcs/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/rcs/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/rcs/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sendgrid/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sendgrid/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sinch/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sinch/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sinch/sms.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sms/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sms/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sms/meta.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sms/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/sms/phone.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/telnyx/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/telnyx/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/telnyx/rcs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/telnyx/sms.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/twilio/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/twilio/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/twilio/rcs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/twilio/sms.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/voicemeup/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/voicemeup/config.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/voicemeup/sms.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/whatsapp/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/whatsapp/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/providers/whatsapp/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/py.typed +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/realtime/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/realtime/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/realtime/memory.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/sources/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/sources/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/sources/sse.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/sources/websocket.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/store/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/store/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/store/memory.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/backends/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/backends/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/backends/fastrtc.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/backends/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/events.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/stt/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/stt/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/stt/deepgram.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/stt/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/tts/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/tts/base.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/tts/elevenlabs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/src/roomkit/voice/tts/mock.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/conftest.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_ai_docs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channel_abc.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/test_ai.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/test_email.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/test_http.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/test_messenger.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/test_sms.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/test_websocket.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_channels/test_whatsapp.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_circuit_breaker.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_configs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_enums.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_framework.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_framework_events.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_framework_queries.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_hook_side_effects.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_hooks.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_identity_hooks.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_identity_pipeline.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_inbound_routing.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_ai_assistant.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_ai_chain_depth.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_cross_channel.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_dynamic_channels.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_human_ai.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_identity_resolution.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_observer.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_integration/test_sin_scanning.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_lifecycle_hooks.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_locks.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_mock_providers.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_models.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_observability.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/__init__.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_anthropic.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_elasticemail.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_gemini.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_http.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_messenger.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_openai.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_phone.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_rcs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_sinch.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_sms_utils.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_telnyx.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_telnyx_rcs.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_twilio.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_providers/test_voicemeup.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_realtime.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_resilience.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_router.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_sources.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_sources_sse.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_sources_websocket.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_store_memory.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_voice.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_voice_fastrtc.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_voice_integration.py +0 -0
- {roomkit-0.2.0 → roomkit-0.2.1}/tests/test_websocket_lifecycle.py +0 -0
|
@@ -44,6 +44,7 @@ src/roomkit/
|
|
|
44
44
|
│ ├── base.py # Channel ABC
|
|
45
45
|
│ ├── transport.py # TransportChannel (SMS, Email, etc.)
|
|
46
46
|
│ ├── ai.py # AIChannel (intelligence layer)
|
|
47
|
+
│ ├── voice.py # VoiceChannel (real-time audio)
|
|
47
48
|
│ └── websocket.py # WebSocketChannel
|
|
48
49
|
├── providers/
|
|
49
50
|
│ ├── ai/base.py # AIProvider ABC, AIContext, AIResponse
|
|
@@ -66,6 +67,22 @@ src/roomkit/
|
|
|
66
67
|
├── realtime/
|
|
67
68
|
│ ├── base.py # RealtimeBackend ABC, EphemeralEvent
|
|
68
69
|
│ └── memory.py # InMemoryRealtime
|
|
70
|
+
├── voice/
|
|
71
|
+
│ ├── __init__.py # Voice subsystem exports
|
|
72
|
+
│ ├── base.py # Shared types (AudioChunk, VoiceSession, callbacks)
|
|
73
|
+
│ ├── events.py # Voice-specific events
|
|
74
|
+
│ ├── stt/ # Speech-to-text providers
|
|
75
|
+
│ │ ├── base.py # STTProvider ABC
|
|
76
|
+
│ │ ├── mock.py # MockSTTProvider
|
|
77
|
+
│ │ └── deepgram.py # DeepgramSTTProvider
|
|
78
|
+
│ ├── tts/ # Text-to-speech providers
|
|
79
|
+
│ │ ├── base.py # TTSProvider ABC
|
|
80
|
+
│ │ ├── mock.py # MockTTSProvider
|
|
81
|
+
│ │ └── elevenlabs.py # ElevenLabsTTSProvider
|
|
82
|
+
│ └── backends/ # Voice transport backends
|
|
83
|
+
│ ├── base.py # VoiceBackend ABC
|
|
84
|
+
│ ├── mock.py # MockVoiceBackend, MockVoiceCall
|
|
85
|
+
│ └── fastrtc.py # FastRTCVoiceBackend (WebRTC)
|
|
69
86
|
└── identity/
|
|
70
87
|
├── base.py # IdentityResolver ABC
|
|
71
88
|
└── mock.py # MockIdentityResolver
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roomkit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Pure async Python library for multi-channel conversations
|
|
5
5
|
Project-URL: Homepage, https://roomkit.live
|
|
6
6
|
Project-URL: Repository, https://github.com/sboily/roomkit
|
|
@@ -92,14 +92,14 @@ Description-Content-Type: text/markdown
|
|
|
92
92
|
|
|
93
93
|
Pure async Python 3.12+ library for multi-channel conversations.
|
|
94
94
|
|
|
95
|
-
RoomKit gives you a single abstraction — the **room** — to orchestrate messages across SMS, RCS, Email, WhatsApp, Messenger, WebSocket, HTTP webhooks, and AI channels. Events flow in through any channel, get validated by hooks, and broadcast to every other channel in the room with automatic content transcoding.
|
|
95
|
+
RoomKit gives you a single abstraction — the **room** — to orchestrate messages across SMS, RCS, Email, WhatsApp, Messenger, Voice, WebSocket, HTTP webhooks, and AI channels. Events flow in through any channel, get validated by hooks, and broadcast to every other channel in the room with automatic content transcoding.
|
|
96
96
|
|
|
97
97
|
```
|
|
98
98
|
Inbound ──► Hook pipeline ──► Store ──► Broadcast to all channels
|
|
99
99
|
│
|
|
100
|
-
|
|
101
|
-
▼ ▼ ▼ ▼ ▼ ▼
|
|
102
|
-
SMS/RCS WebSocket Email Messenger
|
|
100
|
+
┌──────────┬──────────┬────────┼────────┬────────┬────────┐
|
|
101
|
+
▼ ▼ ▼ ▼ ▼ ▼ ▼
|
|
102
|
+
SMS/RCS WebSocket Email Messenger Voice AI Webhook
|
|
103
103
|
```
|
|
104
104
|
|
|
105
105
|
**Website:** [www.roomkit.live](https://www.roomkit.live) | **Docs:** [www.roomkit.live/docs](https://www.roomkit.live/docs/)
|
|
@@ -166,6 +166,7 @@ pip install roomkit[websocket] # WebSocket event source
|
|
|
166
166
|
pip install roomkit[anthropic] # Anthropic Claude AI
|
|
167
167
|
pip install roomkit[openai] # OpenAI GPT
|
|
168
168
|
pip install roomkit[gemini] # Google Gemini AI
|
|
169
|
+
pip install roomkit[fastrtc] # FastRTC voice backend
|
|
169
170
|
pip install roomkit[providers] # all transport providers
|
|
170
171
|
pip install roomkit[all] # everything
|
|
171
172
|
```
|
|
@@ -193,10 +194,11 @@ Each channel is a thin adapter between the room and an external transport. All c
|
|
|
193
194
|
| **WebSocket** | `websocket` | text, rich, media | Real-time with typing, reactions |
|
|
194
195
|
| **Messenger** | `messenger` | text, rich, media, template | Buttons, quick replies |
|
|
195
196
|
| **WhatsApp** | `whatsapp` | text, rich, media, location, template | Buttons, templates |
|
|
197
|
+
| **Voice** | `voice` | audio, text | STT/TTS, barge-in, FastRTC streaming |
|
|
196
198
|
| **HTTP** | `webhook` | text, rich | Generic webhook for any system |
|
|
197
199
|
| **AI** | `ai` | text, rich | Intelligence layer (not transport) |
|
|
198
200
|
|
|
199
|
-
Channels have two categories: **transport** (delivers to external systems) and **intelligence** (generates content, like AI).
|
|
201
|
+
Channels have two categories: **transport** (delivers to external systems) and **intelligence** (generates content, like AI). The Voice channel bridges real-time audio with the room-based conversation model.
|
|
200
202
|
|
|
201
203
|
## Providers
|
|
202
204
|
|
|
@@ -226,6 +228,14 @@ Providers handle the actual API calls. Every provider has a mock counterpart for
|
|
|
226
228
|
| `OpenAIAIProvider` | GPT-4, vision, tools | `roomkit[openai]` |
|
|
227
229
|
| `GeminiAIProvider` | Gemini, vision, tools | `roomkit[gemini]` |
|
|
228
230
|
|
|
231
|
+
### Voice Providers
|
|
232
|
+
|
|
233
|
+
| Provider | Role | Dependency |
|
|
234
|
+
|----------|------|------------|
|
|
235
|
+
| `DeepgramSTTProvider` | Speech-to-text | `roomkit[httpx]` |
|
|
236
|
+
| `ElevenLabsTTSProvider` | Text-to-speech | `roomkit[httpx]` |
|
|
237
|
+
| `FastRTCVoiceBackend` | WebRTC audio transport | `roomkit[fastrtc]` |
|
|
238
|
+
|
|
229
239
|
### Other Providers
|
|
230
240
|
|
|
231
241
|
| Provider | Channel | Dependency |
|
|
@@ -551,6 +561,7 @@ src/roomkit/
|
|
|
551
561
|
realtime/ Ephemeral events (typing, presence, read receipts)
|
|
552
562
|
sources/ Event-driven sources (WebSocket, custom)
|
|
553
563
|
store/ Storage abstraction and in-memory implementation
|
|
564
|
+
voice/ Voice subsystem (stt/, tts/, backends/)
|
|
554
565
|
```
|
|
555
566
|
|
|
556
567
|
## Documentation
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
Pure async Python 3.12+ library for multi-channel conversations.
|
|
8
8
|
|
|
9
|
-
RoomKit gives you a single abstraction — the **room** — to orchestrate messages across SMS, RCS, Email, WhatsApp, Messenger, WebSocket, HTTP webhooks, and AI channels. Events flow in through any channel, get validated by hooks, and broadcast to every other channel in the room with automatic content transcoding.
|
|
9
|
+
RoomKit gives you a single abstraction — the **room** — to orchestrate messages across SMS, RCS, Email, WhatsApp, Messenger, Voice, WebSocket, HTTP webhooks, and AI channels. Events flow in through any channel, get validated by hooks, and broadcast to every other channel in the room with automatic content transcoding.
|
|
10
10
|
|
|
11
11
|
```
|
|
12
12
|
Inbound ──► Hook pipeline ──► Store ──► Broadcast to all channels
|
|
13
13
|
│
|
|
14
|
-
|
|
15
|
-
▼ ▼ ▼ ▼ ▼ ▼
|
|
16
|
-
SMS/RCS WebSocket Email Messenger
|
|
14
|
+
┌──────────┬──────────┬────────┼────────┬────────┬────────┐
|
|
15
|
+
▼ ▼ ▼ ▼ ▼ ▼ ▼
|
|
16
|
+
SMS/RCS WebSocket Email Messenger Voice AI Webhook
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
**Website:** [www.roomkit.live](https://www.roomkit.live) | **Docs:** [www.roomkit.live/docs](https://www.roomkit.live/docs/)
|
|
@@ -80,6 +80,7 @@ pip install roomkit[websocket] # WebSocket event source
|
|
|
80
80
|
pip install roomkit[anthropic] # Anthropic Claude AI
|
|
81
81
|
pip install roomkit[openai] # OpenAI GPT
|
|
82
82
|
pip install roomkit[gemini] # Google Gemini AI
|
|
83
|
+
pip install roomkit[fastrtc] # FastRTC voice backend
|
|
83
84
|
pip install roomkit[providers] # all transport providers
|
|
84
85
|
pip install roomkit[all] # everything
|
|
85
86
|
```
|
|
@@ -107,10 +108,11 @@ Each channel is a thin adapter between the room and an external transport. All c
|
|
|
107
108
|
| **WebSocket** | `websocket` | text, rich, media | Real-time with typing, reactions |
|
|
108
109
|
| **Messenger** | `messenger` | text, rich, media, template | Buttons, quick replies |
|
|
109
110
|
| **WhatsApp** | `whatsapp` | text, rich, media, location, template | Buttons, templates |
|
|
111
|
+
| **Voice** | `voice` | audio, text | STT/TTS, barge-in, FastRTC streaming |
|
|
110
112
|
| **HTTP** | `webhook` | text, rich | Generic webhook for any system |
|
|
111
113
|
| **AI** | `ai` | text, rich | Intelligence layer (not transport) |
|
|
112
114
|
|
|
113
|
-
Channels have two categories: **transport** (delivers to external systems) and **intelligence** (generates content, like AI).
|
|
115
|
+
Channels have two categories: **transport** (delivers to external systems) and **intelligence** (generates content, like AI). The Voice channel bridges real-time audio with the room-based conversation model.
|
|
114
116
|
|
|
115
117
|
## Providers
|
|
116
118
|
|
|
@@ -140,6 +142,14 @@ Providers handle the actual API calls. Every provider has a mock counterpart for
|
|
|
140
142
|
| `OpenAIAIProvider` | GPT-4, vision, tools | `roomkit[openai]` |
|
|
141
143
|
| `GeminiAIProvider` | Gemini, vision, tools | `roomkit[gemini]` |
|
|
142
144
|
|
|
145
|
+
### Voice Providers
|
|
146
|
+
|
|
147
|
+
| Provider | Role | Dependency |
|
|
148
|
+
|----------|------|------------|
|
|
149
|
+
| `DeepgramSTTProvider` | Speech-to-text | `roomkit[httpx]` |
|
|
150
|
+
| `ElevenLabsTTSProvider` | Text-to-speech | `roomkit[httpx]` |
|
|
151
|
+
| `FastRTCVoiceBackend` | WebRTC audio transport | `roomkit[fastrtc]` |
|
|
152
|
+
|
|
143
153
|
### Other Providers
|
|
144
154
|
|
|
145
155
|
| Provider | Channel | Dependency |
|
|
@@ -465,6 +475,7 @@ src/roomkit/
|
|
|
465
475
|
realtime/ Ephemeral events (typing, presence, read receipts)
|
|
466
476
|
sources/ Event-driven sources (WebSocket, custom)
|
|
467
477
|
store/ Storage abstraction and in-memory implementation
|
|
478
|
+
voice/ Voice subsystem (stt/, tts/, backends/)
|
|
468
479
|
```
|
|
469
480
|
|
|
470
481
|
## Documentation
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# RoomKit
|
|
2
2
|
|
|
3
3
|
> RoomKit is a pure async Python library for building multi-channel conversation systems.
|
|
4
|
-
> It provides room-based abstractions for managing conversations across SMS, Email, WebSocket,
|
|
4
|
+
> It provides room-based abstractions for managing conversations across SMS, Email, Voice, WebSocket,
|
|
5
5
|
> AI, and other channels with pluggable storage, identity resolution, hooks, and realtime events.
|
|
6
6
|
> Python 3.12+, Pydantic 2.x, fully typed, zero required dependencies beyond Pydantic.
|
|
7
7
|
|
|
@@ -25,7 +25,8 @@ with distributed implementations (Redis, PostgreSQL, etc.) for production deploy
|
|
|
25
25
|
## Channels
|
|
26
26
|
|
|
27
27
|
- [Channel ABC](api/channel.md): Base class for all channels - handle_inbound, deliver, on_event, capabilities
|
|
28
|
-
- [Built-in Channels](api/channels.md): SMSChannel, EmailChannel, AIChannel, WebSocketChannel, MessengerChannel, HTTPChannel, WhatsAppChannel
|
|
28
|
+
- [Built-in Channels](api/channels.md): SMSChannel, EmailChannel, AIChannel, WebSocketChannel, VoiceChannel, MessengerChannel, HTTPChannel, WhatsAppChannel
|
|
29
|
+
- [Voice Channel](api/providers-voice.md): VoiceBackend ABC, STTProvider, TTSProvider, DeepgramSTTProvider, ElevenLabsTTSProvider, FastRTCVoiceBackend - real-time voice with barge-in support
|
|
29
30
|
|
|
30
31
|
## Models
|
|
31
32
|
|
|
@@ -43,6 +44,7 @@ with distributed implementations (Redis, PostgreSQL, etc.) for production deploy
|
|
|
43
44
|
- [Email Providers](api/providers-email.md): EmailProvider ABC, ElasticEmailProvider
|
|
44
45
|
- [HTTP Providers](api/providers-http.md): HTTPProvider ABC, WebhookHTTPProvider - generic webhook integration
|
|
45
46
|
- [Messenger Providers](api/providers-messenger.md): MessengerProvider ABC, FacebookMessengerProvider
|
|
47
|
+
- [Voice Providers](api/providers-voice.md): VoiceBackend, STTProvider (Deepgram), TTSProvider (ElevenLabs), FastRTCVoiceBackend
|
|
46
48
|
|
|
47
49
|
## Optional
|
|
48
50
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# RoomKit
|
|
2
2
|
|
|
3
3
|
> RoomKit is a pure async Python library for building multi-channel conversation systems.
|
|
4
|
-
> It provides room-based abstractions for managing conversations across SMS, Email, WebSocket,
|
|
4
|
+
> It provides room-based abstractions for managing conversations across SMS, Email, Voice, WebSocket,
|
|
5
5
|
> AI, and other channels with pluggable storage, identity resolution, hooks, and realtime events.
|
|
6
6
|
> Python 3.12+, Pydantic 2.x, fully typed, zero required dependencies beyond Pydantic.
|
|
7
7
|
|
|
@@ -25,7 +25,8 @@ with distributed implementations (Redis, PostgreSQL, etc.) for production deploy
|
|
|
25
25
|
## Channels
|
|
26
26
|
|
|
27
27
|
- [Channel ABC](docs/api/channel.md): Base class for all channels - handle_inbound, deliver, on_event, capabilities
|
|
28
|
-
- [Built-in Channels](docs/api/channels.md): SMSChannel, EmailChannel, AIChannel, WebSocketChannel, MessengerChannel, HTTPChannel, WhatsAppChannel
|
|
28
|
+
- [Built-in Channels](docs/api/channels.md): SMSChannel, EmailChannel, AIChannel, WebSocketChannel, VoiceChannel, MessengerChannel, HTTPChannel, WhatsAppChannel
|
|
29
|
+
- [Voice Channel](docs/api/providers-voice.md): VoiceBackend ABC, STTProvider, TTSProvider, DeepgramSTTProvider, ElevenLabsTTSProvider, FastRTCVoiceBackend - real-time voice with barge-in support
|
|
29
30
|
|
|
30
31
|
## Models
|
|
31
32
|
|
|
@@ -43,6 +44,7 @@ with distributed implementations (Redis, PostgreSQL, etc.) for production deploy
|
|
|
43
44
|
- [Email Providers](docs/api/providers-email.md): EmailProvider ABC, ElasticEmailProvider
|
|
44
45
|
- [HTTP Providers](docs/api/providers-http.md): HTTPProvider ABC, WebhookHTTPProvider - generic webhook integration
|
|
45
46
|
- [Messenger Providers](docs/api/providers-messenger.md): MessengerProvider ABC, FacebookMessengerProvider
|
|
47
|
+
- [Voice Providers](docs/api/providers-voice.md): VoiceBackend, STTProvider (Deepgram), TTSProvider (ElevenLabs), FastRTCVoiceBackend
|
|
46
48
|
|
|
47
49
|
## Optional
|
|
48
50
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.1"
|
|
@@ -8,7 +8,7 @@ import roomkit
|
|
|
8
8
|
class TestPublicAPI:
|
|
9
9
|
def test_version_string(self) -> None:
|
|
10
10
|
assert isinstance(roomkit.__version__, str)
|
|
11
|
-
assert roomkit.__version__ == "0.
|
|
11
|
+
assert roomkit.__version__ == "0.2.1"
|
|
12
12
|
|
|
13
13
|
def test_all_names_importable(self) -> None:
|
|
14
14
|
for name in roomkit.__all__:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|