dv-pipecat-ai 0.0.74.dev770__py3-none-any.whl โ†’ 0.0.82.dev776__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.

Potentially problematic release.


This version of dv-pipecat-ai might be problematic. Click here for more details.

Files changed (244) hide show
  1. {dv_pipecat_ai-0.0.74.dev770.dist-info โ†’ dv_pipecat_ai-0.0.82.dev776.dist-info}/METADATA +137 -93
  2. dv_pipecat_ai-0.0.82.dev776.dist-info/RECORD +340 -0
  3. pipecat/__init__.py +17 -0
  4. pipecat/adapters/base_llm_adapter.py +36 -1
  5. pipecat/adapters/schemas/direct_function.py +296 -0
  6. pipecat/adapters/schemas/function_schema.py +15 -6
  7. pipecat/adapters/schemas/tools_schema.py +55 -7
  8. pipecat/adapters/services/anthropic_adapter.py +22 -3
  9. pipecat/adapters/services/aws_nova_sonic_adapter.py +23 -3
  10. pipecat/adapters/services/bedrock_adapter.py +22 -3
  11. pipecat/adapters/services/gemini_adapter.py +16 -3
  12. pipecat/adapters/services/open_ai_adapter.py +17 -2
  13. pipecat/adapters/services/open_ai_realtime_adapter.py +23 -3
  14. pipecat/audio/filters/base_audio_filter.py +30 -6
  15. pipecat/audio/filters/koala_filter.py +37 -2
  16. pipecat/audio/filters/krisp_filter.py +59 -6
  17. pipecat/audio/filters/noisereduce_filter.py +37 -0
  18. pipecat/audio/interruptions/base_interruption_strategy.py +25 -5
  19. pipecat/audio/interruptions/min_words_interruption_strategy.py +21 -4
  20. pipecat/audio/mixers/base_audio_mixer.py +30 -7
  21. pipecat/audio/mixers/soundfile_mixer.py +53 -6
  22. pipecat/audio/resamplers/base_audio_resampler.py +17 -9
  23. pipecat/audio/resamplers/resampy_resampler.py +26 -1
  24. pipecat/audio/resamplers/soxr_resampler.py +32 -1
  25. pipecat/audio/resamplers/soxr_stream_resampler.py +101 -0
  26. pipecat/audio/utils.py +194 -1
  27. pipecat/audio/vad/silero.py +60 -3
  28. pipecat/audio/vad/vad_analyzer.py +114 -30
  29. pipecat/clocks/base_clock.py +19 -0
  30. pipecat/clocks/system_clock.py +25 -0
  31. pipecat/extensions/voicemail/__init__.py +0 -0
  32. pipecat/extensions/voicemail/voicemail_detector.py +707 -0
  33. pipecat/frames/frames.py +590 -156
  34. pipecat/metrics/metrics.py +64 -1
  35. pipecat/observers/base_observer.py +58 -19
  36. pipecat/observers/loggers/debug_log_observer.py +56 -64
  37. pipecat/observers/loggers/llm_log_observer.py +8 -1
  38. pipecat/observers/loggers/transcription_log_observer.py +19 -7
  39. pipecat/observers/loggers/user_bot_latency_log_observer.py +32 -5
  40. pipecat/observers/turn_tracking_observer.py +26 -1
  41. pipecat/pipeline/base_pipeline.py +5 -7
  42. pipecat/pipeline/base_task.py +52 -9
  43. pipecat/pipeline/parallel_pipeline.py +121 -177
  44. pipecat/pipeline/pipeline.py +129 -20
  45. pipecat/pipeline/runner.py +50 -1
  46. pipecat/pipeline/sync_parallel_pipeline.py +132 -32
  47. pipecat/pipeline/task.py +263 -280
  48. pipecat/pipeline/task_observer.py +85 -34
  49. pipecat/pipeline/to_be_updated/merge_pipeline.py +32 -2
  50. pipecat/processors/aggregators/dtmf_aggregator.py +29 -22
  51. pipecat/processors/aggregators/gated.py +25 -24
  52. pipecat/processors/aggregators/gated_openai_llm_context.py +22 -2
  53. pipecat/processors/aggregators/llm_response.py +398 -89
  54. pipecat/processors/aggregators/openai_llm_context.py +161 -13
  55. pipecat/processors/aggregators/sentence.py +25 -14
  56. pipecat/processors/aggregators/user_response.py +28 -3
  57. pipecat/processors/aggregators/vision_image_frame.py +24 -14
  58. pipecat/processors/async_generator.py +28 -0
  59. pipecat/processors/audio/audio_buffer_processor.py +78 -37
  60. pipecat/processors/consumer_processor.py +25 -6
  61. pipecat/processors/filters/frame_filter.py +23 -0
  62. pipecat/processors/filters/function_filter.py +30 -0
  63. pipecat/processors/filters/identity_filter.py +17 -2
  64. pipecat/processors/filters/null_filter.py +24 -1
  65. pipecat/processors/filters/stt_mute_filter.py +56 -21
  66. pipecat/processors/filters/wake_check_filter.py +46 -3
  67. pipecat/processors/filters/wake_notifier_filter.py +21 -3
  68. pipecat/processors/frame_processor.py +488 -131
  69. pipecat/processors/frameworks/langchain.py +38 -3
  70. pipecat/processors/frameworks/rtvi.py +719 -34
  71. pipecat/processors/gstreamer/pipeline_source.py +41 -0
  72. pipecat/processors/idle_frame_processor.py +26 -3
  73. pipecat/processors/logger.py +23 -0
  74. pipecat/processors/metrics/frame_processor_metrics.py +77 -4
  75. pipecat/processors/metrics/sentry.py +42 -4
  76. pipecat/processors/producer_processor.py +34 -14
  77. pipecat/processors/text_transformer.py +22 -10
  78. pipecat/processors/transcript_processor.py +48 -29
  79. pipecat/processors/user_idle_processor.py +31 -21
  80. pipecat/runner/__init__.py +1 -0
  81. pipecat/runner/daily.py +132 -0
  82. pipecat/runner/livekit.py +148 -0
  83. pipecat/runner/run.py +543 -0
  84. pipecat/runner/types.py +67 -0
  85. pipecat/runner/utils.py +515 -0
  86. pipecat/serializers/base_serializer.py +42 -0
  87. pipecat/serializers/exotel.py +17 -6
  88. pipecat/serializers/genesys.py +95 -0
  89. pipecat/serializers/livekit.py +33 -0
  90. pipecat/serializers/plivo.py +16 -15
  91. pipecat/serializers/protobuf.py +37 -1
  92. pipecat/serializers/telnyx.py +18 -17
  93. pipecat/serializers/twilio.py +32 -16
  94. pipecat/services/ai_service.py +5 -3
  95. pipecat/services/anthropic/llm.py +113 -43
  96. pipecat/services/assemblyai/models.py +63 -5
  97. pipecat/services/assemblyai/stt.py +64 -11
  98. pipecat/services/asyncai/__init__.py +0 -0
  99. pipecat/services/asyncai/tts.py +501 -0
  100. pipecat/services/aws/llm.py +185 -111
  101. pipecat/services/aws/stt.py +217 -23
  102. pipecat/services/aws/tts.py +118 -52
  103. pipecat/services/aws/utils.py +101 -5
  104. pipecat/services/aws_nova_sonic/aws.py +82 -64
  105. pipecat/services/aws_nova_sonic/context.py +15 -6
  106. pipecat/services/azure/common.py +10 -2
  107. pipecat/services/azure/image.py +32 -0
  108. pipecat/services/azure/llm.py +9 -7
  109. pipecat/services/azure/stt.py +65 -2
  110. pipecat/services/azure/tts.py +154 -23
  111. pipecat/services/cartesia/stt.py +125 -8
  112. pipecat/services/cartesia/tts.py +102 -38
  113. pipecat/services/cerebras/llm.py +15 -23
  114. pipecat/services/deepgram/stt.py +19 -11
  115. pipecat/services/deepgram/tts.py +36 -0
  116. pipecat/services/deepseek/llm.py +14 -23
  117. pipecat/services/elevenlabs/tts.py +330 -64
  118. pipecat/services/fal/image.py +43 -0
  119. pipecat/services/fal/stt.py +48 -10
  120. pipecat/services/fireworks/llm.py +14 -21
  121. pipecat/services/fish/tts.py +109 -9
  122. pipecat/services/gemini_multimodal_live/__init__.py +1 -0
  123. pipecat/services/gemini_multimodal_live/events.py +83 -2
  124. pipecat/services/gemini_multimodal_live/file_api.py +189 -0
  125. pipecat/services/gemini_multimodal_live/gemini.py +218 -21
  126. pipecat/services/gladia/config.py +17 -10
  127. pipecat/services/gladia/stt.py +82 -36
  128. pipecat/services/google/frames.py +40 -0
  129. pipecat/services/google/google.py +2 -0
  130. pipecat/services/google/image.py +39 -2
  131. pipecat/services/google/llm.py +176 -58
  132. pipecat/services/google/llm_openai.py +26 -4
  133. pipecat/services/google/llm_vertex.py +37 -15
  134. pipecat/services/google/rtvi.py +41 -0
  135. pipecat/services/google/stt.py +65 -17
  136. pipecat/services/google/test-google-chirp.py +45 -0
  137. pipecat/services/google/tts.py +390 -19
  138. pipecat/services/grok/llm.py +8 -6
  139. pipecat/services/groq/llm.py +8 -6
  140. pipecat/services/groq/stt.py +13 -9
  141. pipecat/services/groq/tts.py +40 -0
  142. pipecat/services/hamsa/__init__.py +9 -0
  143. pipecat/services/hamsa/stt.py +241 -0
  144. pipecat/services/heygen/__init__.py +5 -0
  145. pipecat/services/heygen/api.py +281 -0
  146. pipecat/services/heygen/client.py +620 -0
  147. pipecat/services/heygen/video.py +338 -0
  148. pipecat/services/image_service.py +5 -3
  149. pipecat/services/inworld/__init__.py +1 -0
  150. pipecat/services/inworld/tts.py +592 -0
  151. pipecat/services/llm_service.py +127 -45
  152. pipecat/services/lmnt/tts.py +80 -7
  153. pipecat/services/mcp_service.py +85 -44
  154. pipecat/services/mem0/memory.py +42 -13
  155. pipecat/services/minimax/tts.py +74 -15
  156. pipecat/services/mistral/__init__.py +0 -0
  157. pipecat/services/mistral/llm.py +185 -0
  158. pipecat/services/moondream/vision.py +55 -10
  159. pipecat/services/neuphonic/tts.py +275 -48
  160. pipecat/services/nim/llm.py +8 -6
  161. pipecat/services/ollama/llm.py +27 -7
  162. pipecat/services/openai/base_llm.py +54 -16
  163. pipecat/services/openai/image.py +30 -0
  164. pipecat/services/openai/llm.py +7 -5
  165. pipecat/services/openai/stt.py +13 -9
  166. pipecat/services/openai/tts.py +42 -10
  167. pipecat/services/openai_realtime_beta/azure.py +11 -9
  168. pipecat/services/openai_realtime_beta/context.py +7 -5
  169. pipecat/services/openai_realtime_beta/events.py +10 -7
  170. pipecat/services/openai_realtime_beta/openai.py +37 -18
  171. pipecat/services/openpipe/llm.py +30 -24
  172. pipecat/services/openrouter/llm.py +9 -7
  173. pipecat/services/perplexity/llm.py +15 -19
  174. pipecat/services/piper/tts.py +26 -12
  175. pipecat/services/playht/tts.py +227 -65
  176. pipecat/services/qwen/llm.py +8 -6
  177. pipecat/services/rime/tts.py +128 -17
  178. pipecat/services/riva/stt.py +160 -22
  179. pipecat/services/riva/tts.py +67 -2
  180. pipecat/services/sambanova/llm.py +19 -17
  181. pipecat/services/sambanova/stt.py +14 -8
  182. pipecat/services/sarvam/tts.py +60 -13
  183. pipecat/services/simli/video.py +82 -21
  184. pipecat/services/soniox/__init__.py +0 -0
  185. pipecat/services/soniox/stt.py +398 -0
  186. pipecat/services/speechmatics/stt.py +29 -17
  187. pipecat/services/stt_service.py +47 -11
  188. pipecat/services/tavus/video.py +94 -25
  189. pipecat/services/together/llm.py +8 -6
  190. pipecat/services/tts_service.py +77 -53
  191. pipecat/services/ultravox/stt.py +46 -43
  192. pipecat/services/vision_service.py +5 -3
  193. pipecat/services/websocket_service.py +12 -11
  194. pipecat/services/whisper/base_stt.py +58 -12
  195. pipecat/services/whisper/stt.py +69 -58
  196. pipecat/services/xtts/tts.py +59 -2
  197. pipecat/sync/base_notifier.py +19 -0
  198. pipecat/sync/event_notifier.py +24 -0
  199. pipecat/tests/utils.py +73 -5
  200. pipecat/transcriptions/language.py +24 -0
  201. pipecat/transports/base_input.py +112 -8
  202. pipecat/transports/base_output.py +235 -13
  203. pipecat/transports/base_transport.py +119 -0
  204. pipecat/transports/local/audio.py +76 -0
  205. pipecat/transports/local/tk.py +84 -0
  206. pipecat/transports/network/fastapi_websocket.py +174 -15
  207. pipecat/transports/network/small_webrtc.py +383 -39
  208. pipecat/transports/network/webrtc_connection.py +214 -8
  209. pipecat/transports/network/websocket_client.py +171 -1
  210. pipecat/transports/network/websocket_server.py +147 -9
  211. pipecat/transports/services/daily.py +792 -70
  212. pipecat/transports/services/helpers/daily_rest.py +122 -129
  213. pipecat/transports/services/livekit.py +339 -4
  214. pipecat/transports/services/tavus.py +273 -38
  215. pipecat/utils/asyncio/task_manager.py +92 -186
  216. pipecat/utils/base_object.py +83 -1
  217. pipecat/utils/network.py +2 -0
  218. pipecat/utils/string.py +114 -58
  219. pipecat/utils/text/base_text_aggregator.py +44 -13
  220. pipecat/utils/text/base_text_filter.py +46 -0
  221. pipecat/utils/text/markdown_text_filter.py +70 -14
  222. pipecat/utils/text/pattern_pair_aggregator.py +18 -14
  223. pipecat/utils/text/simple_text_aggregator.py +43 -2
  224. pipecat/utils/text/skip_tags_aggregator.py +21 -13
  225. pipecat/utils/time.py +36 -0
  226. pipecat/utils/tracing/class_decorators.py +32 -7
  227. pipecat/utils/tracing/conversation_context_provider.py +12 -2
  228. pipecat/utils/tracing/service_attributes.py +80 -64
  229. pipecat/utils/tracing/service_decorators.py +48 -21
  230. pipecat/utils/tracing/setup.py +13 -7
  231. pipecat/utils/tracing/turn_context_provider.py +12 -2
  232. pipecat/utils/tracing/turn_trace_observer.py +27 -0
  233. pipecat/utils/utils.py +14 -14
  234. dv_pipecat_ai-0.0.74.dev770.dist-info/RECORD +0 -319
  235. pipecat/examples/daily_runner.py +0 -64
  236. pipecat/examples/run.py +0 -265
  237. pipecat/utils/asyncio/watchdog_async_iterator.py +0 -72
  238. pipecat/utils/asyncio/watchdog_event.py +0 -42
  239. pipecat/utils/asyncio/watchdog_priority_queue.py +0 -48
  240. pipecat/utils/asyncio/watchdog_queue.py +0 -48
  241. {dv_pipecat_ai-0.0.74.dev770.dist-info โ†’ dv_pipecat_ai-0.0.82.dev776.dist-info}/WHEEL +0 -0
  242. {dv_pipecat_ai-0.0.74.dev770.dist-info โ†’ dv_pipecat_ai-0.0.82.dev776.dist-info}/licenses/LICENSE +0 -0
  243. {dv_pipecat_ai-0.0.74.dev770.dist-info โ†’ dv_pipecat_ai-0.0.82.dev776.dist-info}/top_level.txt +0 -0
  244. /pipecat/{examples โ†’ extensions}/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.74.dev770
3
+ Version: 0.0.82.dev776
4
4
  Summary: An open source framework for voice (and multimodal) assistants
5
5
  License-Expression: BSD-2-Clause
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat
@@ -15,58 +15,68 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
15
15
  Requires-Python: >=3.10
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
- Requires-Dist: aiohttp~=3.11.12
18
+ Requires-Dist: aiohttp<4,>=3.11.12
19
19
  Requires-Dist: audioop-lts~=0.2.1; python_version >= "3.13"
20
+ Requires-Dist: docstring_parser~=0.16
20
21
  Requires-Dist: loguru~=0.7.3
21
- Requires-Dist: Markdown~=3.7
22
- Requires-Dist: numpy~=1.26.4
23
- Requires-Dist: Pillow~=11.1.0
22
+ Requires-Dist: Markdown<4,>=3.7
23
+ Requires-Dist: nltk<4,>=3.9.1
24
+ Requires-Dist: numpy<3,>=1.26.4
25
+ Requires-Dist: Pillow<12,>=11.1.0
24
26
  Requires-Dist: protobuf~=5.29.3
25
- Requires-Dist: pydantic~=2.10.6
27
+ Requires-Dist: pydantic<3,>=2.10.6
26
28
  Requires-Dist: pyloudnorm~=0.1.1
27
29
  Requires-Dist: resampy~=0.4.3
28
30
  Requires-Dist: soxr~=0.5.0
29
- Requires-Dist: openai~=1.70.0
31
+ Requires-Dist: openai<=1.99.1,>=1.74.0
32
+ Requires-Dist: numba==0.61.2
33
+ Requires-Dist: wait_for2>=0.4.1; python_version < "3.12"
30
34
  Provides-Extra: anthropic
31
35
  Requires-Dist: anthropic~=0.49.0; extra == "anthropic"
32
36
  Provides-Extra: assemblyai
33
- Requires-Dist: websockets~=13.1; extra == "assemblyai"
37
+ Requires-Dist: websockets<15.0,>=13.1; extra == "assemblyai"
38
+ Provides-Extra: asyncai
39
+ Requires-Dist: websockets<15.0,>=13.1; extra == "asyncai"
34
40
  Provides-Extra: aws
35
- Requires-Dist: boto3~=1.37.16; extra == "aws"
36
- Requires-Dist: websockets~=13.1; extra == "aws"
41
+ Requires-Dist: aioboto3~=15.0.0; extra == "aws"
42
+ Requires-Dist: websockets<15.0,>=13.1; extra == "aws"
37
43
  Provides-Extra: aws-nova-sonic
38
- Requires-Dist: aws_sdk_bedrock_runtime~=0.0.2; extra == "aws-nova-sonic"
44
+ Requires-Dist: aws_sdk_bedrock_runtime~=0.0.2; python_version >= "3.12" and extra == "aws-nova-sonic"
39
45
  Provides-Extra: azure
40
46
  Requires-Dist: azure-cognitiveservices-speech~=1.42.0; extra == "azure"
41
47
  Provides-Extra: cartesia
42
48
  Requires-Dist: cartesia~=2.0.3; extra == "cartesia"
43
- Requires-Dist: websockets~=13.1; extra == "cartesia"
49
+ Requires-Dist: websockets<15.0,>=13.1; extra == "cartesia"
44
50
  Provides-Extra: cerebras
45
51
  Provides-Extra: deepseek
46
52
  Provides-Extra: daily
47
- Requires-Dist: daily-python~=0.19.3; extra == "daily"
53
+ Requires-Dist: daily-python~=0.19.7; extra == "daily"
48
54
  Provides-Extra: deepgram
49
- Requires-Dist: deepgram-sdk~=4.1.0; extra == "deepgram"
55
+ Requires-Dist: deepgram-sdk~=4.7.0; extra == "deepgram"
50
56
  Provides-Extra: elevenlabs
51
- Requires-Dist: websockets~=13.1; extra == "elevenlabs"
57
+ Requires-Dist: websockets<15.0,>=13.1; extra == "elevenlabs"
52
58
  Provides-Extra: fal
53
59
  Requires-Dist: fal-client~=0.5.9; extra == "fal"
54
60
  Provides-Extra: fireworks
55
61
  Provides-Extra: fish
56
62
  Requires-Dist: ormsgpack~=1.7.0; extra == "fish"
57
- Requires-Dist: websockets~=13.1; extra == "fish"
63
+ Requires-Dist: websockets<15.0,>=13.1; extra == "fish"
58
64
  Provides-Extra: gladia
59
- Requires-Dist: websockets~=13.1; extra == "gladia"
65
+ Requires-Dist: websockets<15.0,>=13.1; extra == "gladia"
60
66
  Provides-Extra: google
61
67
  Requires-Dist: google-cloud-speech~=2.32.0; extra == "google"
62
68
  Requires-Dist: google-cloud-texttospeech~=2.26.0; extra == "google"
63
- Requires-Dist: google-genai~=1.14.0; extra == "google"
64
- Requires-Dist: websockets~=13.1; extra == "google"
69
+ Requires-Dist: google-genai~=1.24.0; extra == "google"
70
+ Requires-Dist: websockets<15.0,>=13.1; extra == "google"
65
71
  Provides-Extra: grok
66
72
  Provides-Extra: groq
67
73
  Requires-Dist: groq~=0.23.0; extra == "groq"
68
74
  Provides-Extra: gstreamer
69
75
  Requires-Dist: pygobject~=3.50.0; extra == "gstreamer"
76
+ Provides-Extra: heygen
77
+ Requires-Dist: livekit>=0.22.0; extra == "heygen"
78
+ Requires-Dist: websockets<15.0,>=13.1; extra == "heygen"
79
+ Provides-Extra: inworld
70
80
  Provides-Extra: krisp
71
81
  Requires-Dist: pipecat-ai-krisp~=0.4.0; extra == "krisp"
72
82
  Provides-Extra: koala
@@ -78,41 +88,47 @@ Requires-Dist: langchain-openai~=0.3.9; extra == "langchain"
78
88
  Provides-Extra: livekit
79
89
  Requires-Dist: livekit~=0.22.0; extra == "livekit"
80
90
  Requires-Dist: livekit-api~=0.8.2; extra == "livekit"
81
- Requires-Dist: tenacity~=9.0.0; extra == "livekit"
91
+ Requires-Dist: tenacity<10.0.0,>=8.2.3; extra == "livekit"
82
92
  Provides-Extra: lmnt
83
- Requires-Dist: websockets~=13.1; extra == "lmnt"
93
+ Requires-Dist: websockets<15.0,>=13.1; extra == "lmnt"
84
94
  Provides-Extra: local
85
95
  Requires-Dist: pyaudio~=0.2.14; extra == "local"
86
96
  Provides-Extra: mcp
87
97
  Requires-Dist: mcp[cli]~=1.9.4; extra == "mcp"
88
98
  Provides-Extra: mem0
89
99
  Requires-Dist: mem0ai~=0.1.94; extra == "mem0"
100
+ Provides-Extra: mistral
90
101
  Provides-Extra: mlx-whisper
91
102
  Requires-Dist: mlx-whisper~=0.4.2; extra == "mlx-whisper"
92
103
  Provides-Extra: moondream
104
+ Requires-Dist: accelerate~=1.10.0; extra == "moondream"
93
105
  Requires-Dist: einops~=0.8.0; extra == "moondream"
106
+ Requires-Dist: pyvips[binary]~=3.0.0; extra == "moondream"
94
107
  Requires-Dist: timm~=1.0.13; extra == "moondream"
95
- Requires-Dist: transformers~=4.48.0; extra == "moondream"
108
+ Requires-Dist: transformers>=4.48.0; extra == "moondream"
96
109
  Provides-Extra: nim
97
110
  Provides-Extra: neuphonic
98
- Requires-Dist: pyneuphonic~=1.5.13; extra == "neuphonic"
99
- Requires-Dist: websockets~=13.1; extra == "neuphonic"
111
+ Requires-Dist: websockets<15.0,>=13.1; extra == "neuphonic"
100
112
  Provides-Extra: noisereduce
101
113
  Requires-Dist: noisereduce~=3.0.3; extra == "noisereduce"
102
114
  Provides-Extra: openai
103
- Requires-Dist: websockets~=13.1; extra == "openai"
115
+ Requires-Dist: websockets<15.0,>=13.1; extra == "openai"
104
116
  Provides-Extra: openpipe
105
117
  Requires-Dist: openpipe~=4.50.0; extra == "openpipe"
106
118
  Provides-Extra: openrouter
107
119
  Provides-Extra: perplexity
108
120
  Provides-Extra: playht
109
- Requires-Dist: pyht~=0.1.12; extra == "playht"
110
- Requires-Dist: websockets~=13.1; extra == "playht"
121
+ Requires-Dist: websockets<15.0,>=13.1; extra == "playht"
111
122
  Provides-Extra: qwen
112
123
  Provides-Extra: rime
113
- Requires-Dist: websockets~=13.1; extra == "rime"
124
+ Requires-Dist: websockets<15.0,>=13.1; extra == "rime"
114
125
  Provides-Extra: riva
115
- Requires-Dist: nvidia-riva-client~=2.19.1; extra == "riva"
126
+ Requires-Dist: nvidia-riva-client~=2.21.1; extra == "riva"
127
+ Provides-Extra: runner
128
+ Requires-Dist: python-dotenv<2.0.0,>=1.0.0; extra == "runner"
129
+ Requires-Dist: uvicorn<1.0.0,>=0.32.0; extra == "runner"
130
+ Requires-Dist: fastapi<0.117.0,>=0.115.6; extra == "runner"
131
+ Requires-Dist: pipecat-ai-small-webrtc-prebuilt>=1.0.0; extra == "runner"
116
132
  Provides-Extra: sambanova
117
133
  Provides-Extra: sentry
118
134
  Requires-Dist: sentry-sdk~=2.23.1; extra == "sentry"
@@ -126,6 +142,8 @@ Provides-Extra: silero
126
142
  Requires-Dist: onnxruntime~=1.20.1; extra == "silero"
127
143
  Provides-Extra: simli
128
144
  Requires-Dist: simli-ai~=0.1.10; extra == "simli"
145
+ Provides-Extra: soniox
146
+ Requires-Dist: websockets<15.0,>=13.1; extra == "soniox"
129
147
  Provides-Extra: soundfile
130
148
  Requires-Dist: soundfile~=0.13.0; extra == "soundfile"
131
149
  Provides-Extra: speechmatics
@@ -137,14 +155,14 @@ Requires-Dist: opentelemetry-sdk>=1.33.0; extra == "tracing"
137
155
  Requires-Dist: opentelemetry-api>=1.33.0; extra == "tracing"
138
156
  Requires-Dist: opentelemetry-instrumentation>=0.54b0; extra == "tracing"
139
157
  Provides-Extra: ultravox
140
- Requires-Dist: transformers~=4.48.0; extra == "ultravox"
141
- Requires-Dist: vllm~=0.7.3; extra == "ultravox"
158
+ Requires-Dist: transformers>=4.48.0; extra == "ultravox"
159
+ Requires-Dist: vllm>=0.9.0; extra == "ultravox"
142
160
  Provides-Extra: webrtc
143
161
  Requires-Dist: aiortc~=1.11.0; extra == "webrtc"
144
162
  Requires-Dist: opencv-python~=4.11.0.86; extra == "webrtc"
145
163
  Provides-Extra: websocket
146
- Requires-Dist: websockets~=13.1; extra == "websocket"
147
- Requires-Dist: fastapi~=0.115.6; extra == "websocket"
164
+ Requires-Dist: websockets<15.0,>=13.1; extra == "websocket"
165
+ Requires-Dist: fastapi<0.117.0,>=0.115.6; extra == "websocket"
148
166
  Provides-Extra: whisper
149
167
  Requires-Dist: faster-whisper~=1.1.1; extra == "whisper"
150
168
  Dynamic: license-file
@@ -159,7 +177,7 @@ Dynamic: license-file
159
177
 
160
178
  **Pipecat** is an open-source Python framework for building real-time voice and multimodal conversational agents. Orchestrate audio and video, AI services, different transports, and conversation pipelines effortlesslyโ€”so you can focus on what makes your agent unique
161
179
 
162
- > Want to dive right in? [Install Pipecat](https://docs.pipecat.ai/getting-started/installation) then try the [quickstart](https://docs.pipecat.ai/getting-started/quickstart).
180
+ > Want to dive right in? Try the [quickstart](https://docs.pipecat.ai/getting-started/quickstart).
163
181
 
164
182
  ## ๐Ÿš€ What You Can Build
165
183
 
@@ -182,11 +200,11 @@ Dynamic: license-file
182
200
  ## ๐ŸŽฌ See it in action
183
201
 
184
202
  <p float="left">
185
- <a href="https://github.com/pipecat-ai/pipecat/tree/main/examples/simple-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat/main/examples/simple-chatbot/image.png" width="400" /></a>&nbsp;
186
- <a href="https://github.com/pipecat-ai/pipecat/tree/main/examples/storytelling-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat/main/examples/storytelling-chatbot/image.png" width="400" /></a>
203
+ <a href="https://github.com/pipecat-ai/pipecat-examples/tree/main/simple-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat-examples/main/simple-chatbot/image.png" width="400" /></a>&nbsp;
204
+ <a href="https://github.com/pipecat-ai/pipecat-examples/tree/main/storytelling-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat-examples/main/storytelling-chatbot/image.png" width="400" /></a>
187
205
  <br/>
188
- <a href="https://github.com/pipecat-ai/pipecat/tree/main/examples/translation-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat/main/examples/translation-chatbot/image.png" width="400" /></a>&nbsp;
189
- <a href="https://github.com/pipecat-ai/pipecat/tree/main/examples/moondream-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat/main/examples/moondream-chatbot/image.png" width="400" /></a>
206
+ <a href="https://github.com/pipecat-ai/pipecat-examples/tree/main/translation-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat-examples/main/translation-chatbot/image.png" width="400" /></a>&nbsp;
207
+ <a href="https://github.com/pipecat-ai/pipecat-examples/tree/main/moondream-chatbot"><img src="https://raw.githubusercontent.com/pipecat-ai/pipecat-examples/main/moondream-chatbot/image.png" width="400" /></a>
190
208
  </p>
191
209
 
192
210
  ## ๐Ÿ“ฑ Client SDKs
@@ -202,98 +220,124 @@ You can connect to Pipecat from any platform using our official SDKs:
202
220
 
203
221
  ## ๐Ÿงฉ Available services
204
222
 
205
- | Category | Services |
206
- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
207
- | Speech-to-Text | [AssemblyAI](https://docs.pipecat.ai/server/services/stt/assemblyai), [AWS](https://docs.pipecat.ai/server/services/stt/aws), [Azure](https://docs.pipecat.ai/server/services/stt/azure), [Cartesia](https://docs.pipecat.ai/server/services/stt/cartesia), [Deepgram](https://docs.pipecat.ai/server/services/stt/deepgram), [Fal Wizper](https://docs.pipecat.ai/server/services/stt/fal), [Gladia](https://docs.pipecat.ai/server/services/stt/gladia), [Google](https://docs.pipecat.ai/server/services/stt/google), [Groq (Whisper)](https://docs.pipecat.ai/server/services/stt/groq), [OpenAI (Whisper)](https://docs.pipecat.ai/server/services/stt/openai), [Parakeet (NVIDIA)](https://docs.pipecat.ai/server/services/stt/parakeet), [SambaNova (Whisper)](https://docs.pipecat.ai/server/services/stt/sambanova) [Ultravox](https://docs.pipecat.ai/server/services/stt/ultravox), [Whisper](https://docs.pipecat.ai/server/services/stt/whisper) |
208
- | LLMs | [Anthropic](https://docs.pipecat.ai/server/services/llm/anthropic), [AWS](https://docs.pipecat.ai/server/services/llm/aws), [Azure](https://docs.pipecat.ai/server/services/llm/azure), [Cerebras](https://docs.pipecat.ai/server/services/llm/cerebras), [DeepSeek](https://docs.pipecat.ai/server/services/llm/deepseek), [Fireworks AI](https://docs.pipecat.ai/server/services/llm/fireworks), [Gemini](https://docs.pipecat.ai/server/services/llm/gemini), [Grok](https://docs.pipecat.ai/server/services/llm/grok), [Groq](https://docs.pipecat.ai/server/services/llm/groq), [NVIDIA NIM](https://docs.pipecat.ai/server/services/llm/nim), [Ollama](https://docs.pipecat.ai/server/services/llm/ollama), [OpenAI](https://docs.pipecat.ai/server/services/llm/openai), [OpenRouter](https://docs.pipecat.ai/server/services/llm/openrouter), [Perplexity](https://docs.pipecat.ai/server/services/llm/perplexity), [Qwen](https://docs.pipecat.ai/server/services/llm/qwen), [SambaNova](https://docs.pipecat.ai/server/services/llm/sambanova) [Together AI](https://docs.pipecat.ai/server/services/llm/together) |
209
- | Text-to-Speech | [AWS](https://docs.pipecat.ai/server/services/tts/aws), [Azure](https://docs.pipecat.ai/server/services/tts/azure), [Cartesia](https://docs.pipecat.ai/server/services/tts/cartesia), [Deepgram](https://docs.pipecat.ai/server/services/tts/deepgram), [ElevenLabs](https://docs.pipecat.ai/server/services/tts/elevenlabs), [FastPitch (NVIDIA)](https://docs.pipecat.ai/server/services/tts/fastpitch), [Fish](https://docs.pipecat.ai/server/services/tts/fish), [Google](https://docs.pipecat.ai/server/services/tts/google), [LMNT](https://docs.pipecat.ai/server/services/tts/lmnt), [MiniMax](https://docs.pipecat.ai/server/services/tts/minimax), [Neuphonic](https://docs.pipecat.ai/server/services/tts/neuphonic), [OpenAI](https://docs.pipecat.ai/server/services/tts/openai), [Piper](https://docs.pipecat.ai/server/services/tts/piper), [PlayHT](https://docs.pipecat.ai/server/services/tts/playht), [Rime](https://docs.pipecat.ai/server/services/tts/rime), [Sarvam](https://docs.pipecat.ai/server/services/tts/sarvam), [XTTS](https://docs.pipecat.ai/server/services/tts/xtts) |
210
- | Speech-to-Speech | [AWS Nova Sonic](https://docs.pipecat.ai/server/services/s2s/aws), [Gemini Multimodal Live](https://docs.pipecat.ai/server/services/s2s/gemini), [OpenAI Realtime](https://docs.pipecat.ai/server/services/s2s/openai) |
211
- | Transport | [Daily (WebRTC)](https://docs.pipecat.ai/server/services/transport/daily), [FastAPI Websocket](https://docs.pipecat.ai/server/services/transport/fastapi-websocket), [SmallWebRTCTransport](https://docs.pipecat.ai/server/services/transport/small-webrtc), [WebSocket Server](https://docs.pipecat.ai/server/services/transport/websocket-server), Local |
212
- | Serializers | [Plivo](https://docs.pipecat.ai/server/utilities/serializers/plivo), [Twilio](https://docs.pipecat.ai/server/utilities/serializers/twilio), [Telnyx](https://docs.pipecat.ai/server/utilities/serializers/telnyx) |
213
- | Video | [Tavus](https://docs.pipecat.ai/server/services/video/tavus), [Simli](https://docs.pipecat.ai/server/services/video/simli) |
214
- | Memory | [mem0](https://docs.pipecat.ai/server/services/memory/mem0) |
215
- | Vision & Image | [fal](https://docs.pipecat.ai/server/services/image-generation/fal), [Google Imagen](https://docs.pipecat.ai/server/services/image-generation/fal), [Moondream](https://docs.pipecat.ai/server/services/vision/moondream) |
216
- | Audio Processing | [Silero VAD](https://docs.pipecat.ai/server/utilities/audio/silero-vad-analyzer), [Krisp](https://docs.pipecat.ai/server/utilities/audio/krisp-filter), [Koala](https://docs.pipecat.ai/server/utilities/audio/koala-filter), [Noisereduce](https://docs.pipecat.ai/server/utilities/audio/noisereduce-filter) |
217
- | Analytics & Metrics | [OpenTelemetry](https://docs.pipecat.ai/server/utilities/opentelemetry), [Sentry](https://docs.pipecat.ai/server/services/analytics/sentry) |
223
+ | Category | Services |
224
+ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
225
+ | Speech-to-Text | [AssemblyAI](https://docs.pipecat.ai/server/services/stt/assemblyai), [AWS](https://docs.pipecat.ai/server/services/stt/aws), [Azure](https://docs.pipecat.ai/server/services/stt/azure), [Cartesia](https://docs.pipecat.ai/server/services/stt/cartesia), [Deepgram](https://docs.pipecat.ai/server/services/stt/deepgram), [Fal Wizper](https://docs.pipecat.ai/server/services/stt/fal), [Gladia](https://docs.pipecat.ai/server/services/stt/gladia), [Google](https://docs.pipecat.ai/server/services/stt/google), [Groq (Whisper)](https://docs.pipecat.ai/server/services/stt/groq), [NVIDIA Riva](https://docs.pipecat.ai/server/services/stt/riva), [OpenAI (Whisper)](https://docs.pipecat.ai/server/services/stt/openai), [SambaNova (Whisper)](https://docs.pipecat.ai/server/services/stt/sambanova), [Soniox](https://docs.pipecat.ai/server/services/stt/soniox), [Speechmatics](https://docs.pipecat.ai/server/services/stt/speechmatics), [Ultravox](https://docs.pipecat.ai/server/services/stt/ultravox), [Whisper](https://docs.pipecat.ai/server/services/stt/whisper) |
226
+ | LLMs | [Anthropic](https://docs.pipecat.ai/server/services/llm/anthropic), [AWS](https://docs.pipecat.ai/server/services/llm/aws), [Azure](https://docs.pipecat.ai/server/services/llm/azure), [Cerebras](https://docs.pipecat.ai/server/services/llm/cerebras), [DeepSeek](https://docs.pipecat.ai/server/services/llm/deepseek), [Fireworks AI](https://docs.pipecat.ai/server/services/llm/fireworks), [Gemini](https://docs.pipecat.ai/server/services/llm/gemini), [Grok](https://docs.pipecat.ai/server/services/llm/grok), [Groq](https://docs.pipecat.ai/server/services/llm/groq), [Mistral](https://docs.pipecat.ai/server/services/llm/mistral), [NVIDIA NIM](https://docs.pipecat.ai/server/services/llm/nim), [Ollama](https://docs.pipecat.ai/server/services/llm/ollama), [OpenAI](https://docs.pipecat.ai/server/services/llm/openai), [OpenRouter](https://docs.pipecat.ai/server/services/llm/openrouter), [Perplexity](https://docs.pipecat.ai/server/services/llm/perplexity), [Qwen](https://docs.pipecat.ai/server/services/llm/qwen), [SambaNova](https://docs.pipecat.ai/server/services/llm/sambanova) [Together AI](https://docs.pipecat.ai/server/services/llm/together) |
227
+ | Text-to-Speech | [Async](https://docs.pipecat.ai/server/services/tts/asyncai), [AWS](https://docs.pipecat.ai/server/services/tts/aws), [Azure](https://docs.pipecat.ai/server/services/tts/azure), [Cartesia](https://docs.pipecat.ai/server/services/tts/cartesia), [Deepgram](https://docs.pipecat.ai/server/services/tts/deepgram), [ElevenLabs](https://docs.pipecat.ai/server/services/tts/elevenlabs), [Fish](https://docs.pipecat.ai/server/services/tts/fish), [Google](https://docs.pipecat.ai/server/services/tts/google), [Groq](https://docs.pipecat.ai/server/services/tts/groq), [Inworld](https://docs.pipecat.ai/server/services/tts/inworld), [LMNT](https://docs.pipecat.ai/server/services/tts/lmnt), [MiniMax](https://docs.pipecat.ai/server/services/tts/minimax), [Neuphonic](https://docs.pipecat.ai/server/services/tts/neuphonic), [NVIDIA Riva](https://docs.pipecat.ai/server/services/tts/riva), [OpenAI](https://docs.pipecat.ai/server/services/tts/openai), [Piper](https://docs.pipecat.ai/server/services/tts/piper), [PlayHT](https://docs.pipecat.ai/server/services/tts/playht), [Rime](https://docs.pipecat.ai/server/services/tts/rime), [Sarvam](https://docs.pipecat.ai/server/services/tts/sarvam), [XTTS](https://docs.pipecat.ai/server/services/tts/xtts) |
228
+ | Speech-to-Speech | [AWS Nova Sonic](https://docs.pipecat.ai/server/services/s2s/aws), [Gemini Multimodal Live](https://docs.pipecat.ai/server/services/s2s/gemini), [OpenAI Realtime](https://docs.pipecat.ai/server/services/s2s/openai) |
229
+ | Transport | [Daily (WebRTC)](https://docs.pipecat.ai/server/services/transport/daily), [FastAPI Websocket](https://docs.pipecat.ai/server/services/transport/fastapi-websocket), [SmallWebRTCTransport](https://docs.pipecat.ai/server/services/transport/small-webrtc), [WebSocket Server](https://docs.pipecat.ai/server/services/transport/websocket-server), Local |
230
+ | Serializers | [Plivo](https://docs.pipecat.ai/server/utilities/serializers/plivo), [Twilio](https://docs.pipecat.ai/server/utilities/serializers/twilio), [Telnyx](https://docs.pipecat.ai/server/utilities/serializers/telnyx) |
231
+ | Video | [HeyGen](https://docs.pipecat.ai/server/services/video/heygen), [Tavus](https://docs.pipecat.ai/server/services/video/tavus), [Simli](https://docs.pipecat.ai/server/services/video/simli) |
232
+ | Memory | [mem0](https://docs.pipecat.ai/server/services/memory/mem0) |
233
+ | Vision & Image | [fal](https://docs.pipecat.ai/server/services/image-generation/fal), [Google Imagen](https://docs.pipecat.ai/server/services/image-generation/fal), [Moondream](https://docs.pipecat.ai/server/services/vision/moondream) |
234
+ | Audio Processing | [Silero VAD](https://docs.pipecat.ai/server/utilities/audio/silero-vad-analyzer), [Krisp](https://docs.pipecat.ai/server/utilities/audio/krisp-filter), [Koala](https://docs.pipecat.ai/server/utilities/audio/koala-filter), [Noisereduce](https://docs.pipecat.ai/server/utilities/audio/noisereduce-filter) |
235
+ | Analytics & Metrics | [OpenTelemetry](https://docs.pipecat.ai/server/utilities/opentelemetry), [Sentry](https://docs.pipecat.ai/server/services/analytics/sentry) |
218
236
 
219
237
  ๐Ÿ“š [View full services documentation โ†’](https://docs.pipecat.ai/server/services/supported-services)
220
238
 
221
239
  ## โšก Getting started
222
240
 
223
- You can get started with Pipecat running on your local machine, then move your agent processes to the cloud when youโ€™re ready.
241
+ You can get started with Pipecat running on your local machine, then move your agent processes to the cloud when you're ready.
224
242
 
225
- ```shell
226
- # Install the module
227
- pip install pipecat-ai
243
+ 1. Install uv
228
244
 
229
- # Set up your environment
230
- cp dot-env.template .env
231
- ```
245
+ ```bash
246
+ curl -LsSf https://astral.sh/uv/install.sh | sh
247
+ ```
232
248
 
233
- To keep things lightweight, only the core framework is included by default. If you need support for third-party AI services, you can add the necessary dependencies with:
249
+ > **Need help?** Refer to the [uv install documentation](https://docs.astral.sh/uv/getting-started/installation/).
234
250
 
235
- ```shell
236
- pip install "pipecat-ai[option,...]"
237
- ```
251
+ 2. Install the module
252
+
253
+ ```bash
254
+ # For new projects
255
+ uv init my-pipecat-app
256
+ cd my-pipecat-app
257
+ uv add pipecat-ai
258
+
259
+ # Or for existing projects
260
+ uv add pipecat-ai
261
+ ```
262
+
263
+ 3. Set up your environment
264
+
265
+ ```bash
266
+ cp env.example .env
267
+ ```
268
+
269
+ 4. To keep things lightweight, only the core framework is included by default. If you need support for third-party AI services, you can add the necessary dependencies with:
270
+
271
+ ```bash
272
+ uv add "pipecat-ai[option,...]"
273
+ ```
274
+
275
+ > **Using pip?** You can still use `pip install pipecat-ai` and `pip install "pipecat-ai[option,...]"` to get set up.
238
276
 
239
277
  ## ๐Ÿงช Code examples
240
278
 
241
279
  - [Foundational](https://github.com/pipecat-ai/pipecat/tree/main/examples/foundational) โ€” small snippets that build on each other, introducing one or two concepts at a time
242
- - [Example apps](https://github.com/pipecat-ai/pipecat/tree/main/examples/) โ€” complete applications that you can use as starting points for development
280
+ - [Example apps](https://github.com/pipecat-ai/pipecat-examples) โ€” complete applications that you can use as starting points for development
243
281
 
244
- ## ๐Ÿ› ๏ธ Hacking on the framework itself
282
+ ## ๐Ÿ› ๏ธ Contributing to the framework
245
283
 
246
- 1. Set up a virtual environment before following these instructions. From the root of the repo:
284
+ ### Prerequisites
247
285
 
248
- ```shell
249
- python3 -m venv venv
250
- source venv/bin/activate
251
- ```
286
+ **Minimum Python Version:** 3.10
287
+ **Recommended Python Version:** 3.12
252
288
 
253
- 2. Install the development dependencies:
289
+ ### Setup Steps
254
290
 
255
- ```shell
256
- pip install -r dev-requirements.txt
291
+ 1. Clone the repository and navigate to it:
292
+
293
+ ```bash
294
+ git clone https://github.com/pipecat-ai/pipecat.git
295
+ cd pipecat
257
296
  ```
258
297
 
259
- 3. Install the git pre-commit hooks (these help ensure your code follows project rules):
298
+ 2. Install development and testing dependencies:
260
299
 
261
- ```shell
262
- pre-commit install
300
+ ```bash
301
+ uv sync --group dev --all-extras --no-extra gstreamer --no-extra krisp --no-extra local
263
302
  ```
264
303
 
265
- 4. Install the `pipecat-ai` package locally in editable mode:
304
+ 3. Install the git pre-commit hooks:
266
305
 
267
- ```shell
268
- pip install -e .
306
+ ```bash
307
+ uv run pre-commit install
269
308
  ```
270
309
 
271
- > The `-e` or `--editable` option allows you to modify the code without reinstalling.
310
+ ### Python 3.13+ Compatibility
272
311
 
273
- 5. Include optional dependencies as needed. For example:
312
+ Some features require PyTorch, which doesn't yet support Python 3.13+. Install using:
274
313
 
275
- ```shell
276
- pip install -e ".[daily,deepgram,cartesia,openai,silero]"
277
- ```
314
+ ```bash
315
+ uv sync --group dev --all-extras \
316
+ --no-extra gstreamer \
317
+ --no-extra krisp \
318
+ --no-extra local \
319
+ --no-extra local-smart-turn \
320
+ --no-extra mlx-whisper \
321
+ --no-extra moondream \
322
+ --no-extra ultravox
323
+ ```
278
324
 
279
- 6. (Optional) If you want to use this package from another directory:
325
+ > **Tip:** For full compatibility, use Python 3.12: `uv python pin 3.12`
280
326
 
281
- ```shell
282
- pip install "path_to_this_repo[option,...]"
283
- ```
327
+ > **Note**: Some extras (local, gstreamer) require system dependencies. See documentation if you encounter build errors.
284
328
 
285
329
  ### Running tests
286
330
 
287
- Install the test dependencies:
331
+ To run all tests, from the root directory:
288
332
 
289
- ```shell
290
- pip install -r test-requirements.txt
333
+ ```bash
334
+ uv run pytest
291
335
  ```
292
336
 
293
- From the root directory, run:
337
+ Run a specific test suite:
294
338
 
295
- ```shell
296
- pytest
339
+ ```bash
340
+ uv run pytest tests/test_name.py
297
341
  ```
298
342
 
299
343
  ### Setting up your editor