roomkit 0.1.1__py3-none-any.whl → 0.2.1__py3-none-any.whl
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/AGENTS.md +17 -0
- roomkit/__init__.py +45 -0
- roomkit/_version.py +1 -1
- roomkit/channels/voice.py +728 -0
- roomkit/core/_channel_ops.py +7 -0
- roomkit/core/_inbound.py +4 -0
- roomkit/core/framework.py +177 -1
- roomkit/core/hooks.py +32 -6
- roomkit/llms.txt +4 -2
- roomkit/models/enums.py +12 -0
- roomkit/sources/__init__.py +4 -4
- roomkit/sources/sse.py +226 -0
- roomkit/voice/__init__.py +99 -0
- roomkit/voice/backends/__init__.py +1 -0
- roomkit/voice/backends/base.py +264 -0
- roomkit/voice/backends/fastrtc.py +467 -0
- roomkit/voice/backends/mock.py +302 -0
- roomkit/voice/base.py +115 -0
- roomkit/voice/events.py +140 -0
- roomkit/voice/stt/__init__.py +1 -0
- roomkit/voice/stt/base.py +58 -0
- roomkit/voice/stt/deepgram.py +214 -0
- roomkit/voice/stt/mock.py +40 -0
- roomkit/voice/tts/__init__.py +1 -0
- roomkit/voice/tts/base.py +58 -0
- roomkit/voice/tts/elevenlabs.py +329 -0
- roomkit/voice/tts/mock.py +51 -0
- {roomkit-0.1.1.dist-info → roomkit-0.2.1.dist-info}/METADATA +26 -6
- {roomkit-0.1.1.dist-info → roomkit-0.2.1.dist-info}/RECORD +31 -14
- {roomkit-0.1.1.dist-info → roomkit-0.2.1.dist-info}/WHEEL +1 -1
- {roomkit-0.1.1.dist-info → roomkit-0.2.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roomkit
|
|
3
|
-
Version: 0.
|
|
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
|
|
@@ -30,6 +30,7 @@ Requires-Dist: anthropic>=0.30; extra == 'anthropic'
|
|
|
30
30
|
Provides-Extra: dev
|
|
31
31
|
Requires-Dist: anthropic>=0.30; extra == 'dev'
|
|
32
32
|
Requires-Dist: google-genai>=1.0.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: httpx-sse>=0.4; extra == 'dev'
|
|
33
34
|
Requires-Dist: httpx>=0.27; extra == 'dev'
|
|
34
35
|
Requires-Dist: mkdocs-material>=9.5; extra == 'dev'
|
|
35
36
|
Requires-Dist: mkdocs>=1.6; extra == 'dev'
|
|
@@ -49,6 +50,9 @@ Provides-Extra: docs
|
|
|
49
50
|
Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
|
|
50
51
|
Requires-Dist: mkdocs>=1.6; extra == 'docs'
|
|
51
52
|
Requires-Dist: mkdocstrings[python]>=0.27; extra == 'docs'
|
|
53
|
+
Provides-Extra: fastrtc
|
|
54
|
+
Requires-Dist: fastrtc; extra == 'fastrtc'
|
|
55
|
+
Requires-Dist: numpy; extra == 'fastrtc'
|
|
52
56
|
Provides-Extra: gemini
|
|
53
57
|
Requires-Dist: google-genai>=1.0.0; extra == 'gemini'
|
|
54
58
|
Provides-Extra: httpx
|
|
@@ -68,7 +72,12 @@ Requires-Dist: pydantic-ai>=0.1; extra == 'pydantic-ai'
|
|
|
68
72
|
Provides-Extra: pynacl
|
|
69
73
|
Requires-Dist: pynacl>=1.5; extra == 'pynacl'
|
|
70
74
|
Provides-Extra: sources
|
|
75
|
+
Requires-Dist: httpx-sse>=0.4; extra == 'sources'
|
|
76
|
+
Requires-Dist: httpx>=0.27; extra == 'sources'
|
|
71
77
|
Requires-Dist: websockets>=13.0; extra == 'sources'
|
|
78
|
+
Provides-Extra: sse
|
|
79
|
+
Requires-Dist: httpx-sse>=0.4; extra == 'sse'
|
|
80
|
+
Requires-Dist: httpx>=0.27; extra == 'sse'
|
|
72
81
|
Provides-Extra: twilio
|
|
73
82
|
Requires-Dist: twilio>=9.0; extra == 'twilio'
|
|
74
83
|
Provides-Extra: websocket
|
|
@@ -83,14 +92,14 @@ Description-Content-Type: text/markdown
|
|
|
83
92
|
|
|
84
93
|
Pure async Python 3.12+ library for multi-channel conversations.
|
|
85
94
|
|
|
86
|
-
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.
|
|
87
96
|
|
|
88
97
|
```
|
|
89
98
|
Inbound ──► Hook pipeline ──► Store ──► Broadcast to all channels
|
|
90
99
|
│
|
|
91
|
-
|
|
92
|
-
▼ ▼ ▼ ▼ ▼ ▼
|
|
93
|
-
SMS/RCS WebSocket Email Messenger
|
|
100
|
+
┌──────────┬──────────┬────────┼────────┬────────┬────────┐
|
|
101
|
+
▼ ▼ ▼ ▼ ▼ ▼ ▼
|
|
102
|
+
SMS/RCS WebSocket Email Messenger Voice AI Webhook
|
|
94
103
|
```
|
|
95
104
|
|
|
96
105
|
**Website:** [www.roomkit.live](https://www.roomkit.live) | **Docs:** [www.roomkit.live/docs](https://www.roomkit.live/docs/)
|
|
@@ -157,6 +166,7 @@ pip install roomkit[websocket] # WebSocket event source
|
|
|
157
166
|
pip install roomkit[anthropic] # Anthropic Claude AI
|
|
158
167
|
pip install roomkit[openai] # OpenAI GPT
|
|
159
168
|
pip install roomkit[gemini] # Google Gemini AI
|
|
169
|
+
pip install roomkit[fastrtc] # FastRTC voice backend
|
|
160
170
|
pip install roomkit[providers] # all transport providers
|
|
161
171
|
pip install roomkit[all] # everything
|
|
162
172
|
```
|
|
@@ -184,10 +194,11 @@ Each channel is a thin adapter between the room and an external transport. All c
|
|
|
184
194
|
| **WebSocket** | `websocket` | text, rich, media | Real-time with typing, reactions |
|
|
185
195
|
| **Messenger** | `messenger` | text, rich, media, template | Buttons, quick replies |
|
|
186
196
|
| **WhatsApp** | `whatsapp` | text, rich, media, location, template | Buttons, templates |
|
|
197
|
+
| **Voice** | `voice` | audio, text | STT/TTS, barge-in, FastRTC streaming |
|
|
187
198
|
| **HTTP** | `webhook` | text, rich | Generic webhook for any system |
|
|
188
199
|
| **AI** | `ai` | text, rich | Intelligence layer (not transport) |
|
|
189
200
|
|
|
190
|
-
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.
|
|
191
202
|
|
|
192
203
|
## Providers
|
|
193
204
|
|
|
@@ -217,6 +228,14 @@ Providers handle the actual API calls. Every provider has a mock counterpart for
|
|
|
217
228
|
| `OpenAIAIProvider` | GPT-4, vision, tools | `roomkit[openai]` |
|
|
218
229
|
| `GeminiAIProvider` | Gemini, vision, tools | `roomkit[gemini]` |
|
|
219
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
|
+
|
|
220
239
|
### Other Providers
|
|
221
240
|
|
|
222
241
|
| Provider | Channel | Dependency |
|
|
@@ -542,6 +561,7 @@ src/roomkit/
|
|
|
542
561
|
realtime/ Ephemeral events (typing, presence, read receipts)
|
|
543
562
|
sources/ Event-driven sources (WebSocket, custom)
|
|
544
563
|
store/ Storage abstraction and in-memory implementation
|
|
564
|
+
voice/ Voice subsystem (stt/, tts/, backends/)
|
|
545
565
|
```
|
|
546
566
|
|
|
547
567
|
## Documentation
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
roomkit/__init__.py,sha256=
|
|
2
|
-
roomkit/_version.py,sha256=
|
|
1
|
+
roomkit/__init__.py,sha256=B66rQGsO7QhuLoO56fCWy0x0mmO-s8AkCDiv4QbqEzc,11236
|
|
2
|
+
roomkit/_version.py,sha256=HfjVOrpTnmZ-xVFCYSVmX50EXaBQeJteUHG-PD6iQs8,22
|
|
3
3
|
roomkit/ai_docs.py,sha256=mnKnwraTD5J38vm7Rm_q-2BYPBh2vXQ7OgT8i-B_niY,2336
|
|
4
4
|
roomkit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
roomkit/channels/__init__.py,sha256=FQYB5c_y8dxyB7Os0l7o157-LVlneQrGltxF18HMugk,5023
|
|
6
6
|
roomkit/channels/ai.py,sha256=7RK-PXsPwHw4ADhJL2Z1MGlCXseKpdg8-J1bls-AoMM,8330
|
|
7
7
|
roomkit/channels/base.py,sha256=rS7vUOzLFZwjd8ulB3iihlbLQ1FhgTjj8OmYAYWhETM,2137
|
|
8
8
|
roomkit/channels/transport.py,sha256=2bnAxv1-J6h-CZcoizKd5gZghmQZms5Pyspo4pB1RuY,4744
|
|
9
|
+
roomkit/channels/voice.py,sha256=p5LxoQAbFEsMv_-9JTBQWuuRmC4FWq0DjnG7jNonLvw,26179
|
|
9
10
|
roomkit/channels/websocket.py,sha256=CfidIKW_DK7Q6yljjlN5mR79OTHOIgX67IUU5Bj7CPE,2954
|
|
10
11
|
roomkit/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
roomkit/core/_channel_ops.py,sha256=
|
|
12
|
+
roomkit/core/_channel_ops.py,sha256=empqLlx8JBPf8-TdSUFcQ4nCrfR3slOi5QhQGKjZmTw,10563
|
|
12
13
|
roomkit/core/_helpers.py,sha256=-PxREqVe-cV3mZhPaCsechuQs5bUfVqNHSKdu2EM8j8,11270
|
|
13
|
-
roomkit/core/_inbound.py,sha256
|
|
14
|
+
roomkit/core/_inbound.py,sha256=-5voeN1sAQEXLcEl32o1shvgbNg8vcdh8QAMfWYkTJ8,18316
|
|
14
15
|
roomkit/core/_room_lifecycle.py,sha256=xo2UwDZLuZA1xXXGeg85qdj1j3_-fJNM2B_J3E5DRJU,10661
|
|
15
16
|
roomkit/core/circuit_breaker.py,sha256=kEXEI8EEkD5LZyegAaFZb5U4mrX2IDnAjI0avv46exs,2873
|
|
16
17
|
roomkit/core/event_router.py,sha256=TNweMDuzG0OPk3qvJ-CiQgtcANCMJD5FdNAtTtIRPSo,16634
|
|
17
|
-
roomkit/core/framework.py,sha256=
|
|
18
|
-
roomkit/core/hooks.py,sha256=
|
|
18
|
+
roomkit/core/framework.py,sha256=PCtCjdwTaYo4uIvslWsfOu1mT68FqfPGvONxGYPE-3s,35482
|
|
19
|
+
roomkit/core/hooks.py,sha256=dsUU_RLdVWOxSwJeF2Q94CpaXL0pBMRH-QOM4qaeEOs,9615
|
|
19
20
|
roomkit/core/inbound_router.py,sha256=QvuFAjWedeV02tJC6xU8JQGWk-qlhKnQl58JOL6crw4,1773
|
|
20
21
|
roomkit/core/locks.py,sha256=_2hqKbCjtWVyeKiiXD_StAHYdghW_Daw0VIPeiNfoJA,2060
|
|
21
22
|
roomkit/core/rate_limiter.py,sha256=u6AEyB4LVy85fWSOPk5FbBvV9KyRUYV87D-X7FFwaCE,2624
|
|
@@ -29,7 +30,7 @@ roomkit/models/__init__.py,sha256=1xjIztFpQnOsWa6CteMIz5NaEuAr_0leq00nFdk7NDc,22
|
|
|
29
30
|
roomkit/models/channel.py,sha256=70Jxynrsi-LSMtrWgtbpzysEUIFS9H_MXzjRfmyECa8,3525
|
|
30
31
|
roomkit/models/context.py,sha256=1AoTwUBhff_eSCD6tGv66Gj7qoIeGeuvjH3ZFaxsgwA,1335
|
|
31
32
|
roomkit/models/delivery.py,sha256=0HEGvkymYjocfWY52DX1kYO7pFNIEQ7rdHwhlx6WQTQ,2242
|
|
32
|
-
roomkit/models/enums.py,sha256=
|
|
33
|
+
roomkit/models/enums.py,sha256=y5PDvxmifhIOB9SGhoOzOykk83UwKNZGxizqJ1E8PJ0,4217
|
|
33
34
|
roomkit/models/event.py,sha256=n6fgTR-KWDMA2E9YE8tsAiWlltT8jCgbd5aoI0vJW_A,5887
|
|
34
35
|
roomkit/models/framework_event.py,sha256=ZVJPXymC8VjiG4pKaKw2zHq9XimJE0jOYVUw1yLY500,509
|
|
35
36
|
roomkit/models/hook.py,sha256=MnVmh5gjVBeiBZhWzpz9pmOPslQZ_N4xpzHAc7h5TPY,2192
|
|
@@ -100,15 +101,31 @@ roomkit/providers/whatsapp/mock.py,sha256=i4wtsVMsBpx6LXjQpgvK7aoOEH2dMxu5W9SWaG
|
|
|
100
101
|
roomkit/realtime/__init__.py,sha256=unS1HPdMmfYSMf1WVo9mvMDuw3ceP4bkyB60cCTcT8w,360
|
|
101
102
|
roomkit/realtime/base.py,sha256=8savEf_efHVLkmuPDwwX1IVbXru_GMhVtlfVbP1qMTg,3476
|
|
102
103
|
roomkit/realtime/memory.py,sha256=aIh2dy2g9V6n_VhEtSuzcYpB7UtDMQR6dpXK-B91Ne8,5128
|
|
103
|
-
roomkit/sources/__init__.py,sha256=
|
|
104
|
+
roomkit/sources/__init__.py,sha256=qAVf85Sv1FDYf47bSBvc2IoDS-d18U-xcyI5wBYWngY,808
|
|
104
105
|
roomkit/sources/base.py,sha256=8oHjw0vdcOMYxwtenN-dwuBwCx42bmMdfC_KZwriAaE,6637
|
|
106
|
+
roomkit/sources/sse.py,sha256=RzoEqLZIdC3PjbSd6O8aisG6DTyl7OQUMqzVhJEpsHM,7342
|
|
105
107
|
roomkit/sources/websocket.py,sha256=j60gsILNutqJNPdVqyOBbQ5sUV3XOes2LwhLMKZIOE0,8521
|
|
106
108
|
roomkit/store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
109
|
roomkit/store/base.py,sha256=Q5p-lOQmWJqiBd7jD-1inee6qoYBhlb-C06Z2bzJ8mI,6781
|
|
108
110
|
roomkit/store/memory.py,sha256=_cAUBuC7BUwOKEa6aomr4aG7t-J0CuiK7izagQ-Daig,11932
|
|
109
|
-
roomkit/
|
|
110
|
-
roomkit/
|
|
111
|
-
roomkit
|
|
112
|
-
roomkit
|
|
113
|
-
roomkit
|
|
114
|
-
roomkit
|
|
111
|
+
roomkit/voice/__init__.py,sha256=nBA7vF9E4Sm0wwiVjZ2fQnGNN0VzX2tkdzo7F8zhOb4,2502
|
|
112
|
+
roomkit/voice/base.py,sha256=HzE2U2LSt4-u56Rob8GPvLfXpreukbFq0SQetEkGTQs,3202
|
|
113
|
+
roomkit/voice/events.py,sha256=zPP9GPG0_2owGwFnoytL_x-PdBYdZaxPSjuxbMccTF8,3931
|
|
114
|
+
roomkit/voice/backends/__init__.py,sha256=PVZmFgTRFue2MYOpiYz9j_SbsJ-Dv5mwD3JsN3Bn-uI,32
|
|
115
|
+
roomkit/voice/backends/base.py,sha256=mq8CXGU10e6phJplNtAbItt-Au3mEE1k6suCsqGxAMY,8143
|
|
116
|
+
roomkit/voice/backends/fastrtc.py,sha256=pEahq2VqwaoxDCyDMJ25rTi_48QfXRSTLQBXSyR4V5Q,17070
|
|
117
|
+
roomkit/voice/backends/mock.py,sha256=9ODvnS014li6aPwr__iEuo5kPVK3hvPDZgZ1QdTiCWE,10648
|
|
118
|
+
roomkit/voice/stt/__init__.py,sha256=QQqVP_D8S-VsxItmObtj5s9H5S-un_yfL1csLJyeHmg,32
|
|
119
|
+
roomkit/voice/stt/base.py,sha256=d-PG1wRR6XmT5WKd3Bto3QpTAA6CFfyobTA8nfib5zE,1720
|
|
120
|
+
roomkit/voice/stt/deepgram.py,sha256=j0d1Rd2sodkMdNpPGM9GbNhPBMjIKORc9xJTf44zRdQ,7658
|
|
121
|
+
roomkit/voice/stt/mock.py,sha256=dCX8W6giVTpbAo1J0WZmfzE74-OOimm5QwK0QBAvIco,1290
|
|
122
|
+
roomkit/voice/tts/__init__.py,sha256=rv-e3wk_w7XU-mtHx3c2QeM4u6NWmDlXhIhiLltEe0A,32
|
|
123
|
+
roomkit/voice/tts/base.py,sha256=kvY5YgjxZzz_G0V1wNregR_ZpjMjCnjpy3cYQg-6S2M,1696
|
|
124
|
+
roomkit/voice/tts/elevenlabs.py,sha256=Y9iS7hZw1xEMZWLX_iIdmQUJOU8Xl7SB9eviFd0zrXc,10870
|
|
125
|
+
roomkit/voice/tts/mock.py,sha256=NUxqmwOepIZAtDV3YYg15G7t8GaMOJdwsQ0ORJmbWBY,1654
|
|
126
|
+
roomkit/AGENTS.md,sha256=tT_A7GSFhX03s665mUoDhpH-41g6ZLHe5hwQHfjq1Mw,11467
|
|
127
|
+
roomkit/llms.txt,sha256=w2ktaQsxhTtuoGF17_x_xJj_VrRQrxA_BBJNXxowGVU,4390
|
|
128
|
+
roomkit-0.2.1.dist-info/METADATA,sha256=7NzG2a9e6sAmlqmAXlOAupmHdaAA2u0h28JrvAdAP38,20359
|
|
129
|
+
roomkit-0.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
130
|
+
roomkit-0.2.1.dist-info/licenses/LICENSE,sha256=GIXnbN1bOyI_7Ydnf7EXBxrFi344wlsdVV4acemzRcE,1070
|
|
131
|
+
roomkit-0.2.1.dist-info/RECORD,,
|
|
File without changes
|