dv-pipecat-ai 0.0.52.dev86__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.
- dv_pipecat_ai-0.0.52.dev86.dist-info/LICENSE +24 -0
- dv_pipecat_ai-0.0.52.dev86.dist-info/METADATA +359 -0
- dv_pipecat_ai-0.0.52.dev86.dist-info/RECORD +153 -0
- dv_pipecat_ai-0.0.52.dev86.dist-info/WHEEL +5 -0
- dv_pipecat_ai-0.0.52.dev86.dist-info/top_level.txt +1 -0
- pipecat/__init__.py +0 -0
- pipecat/audio/__init__.py +0 -0
- pipecat/audio/filters/__init__.py +0 -0
- pipecat/audio/filters/base_audio_filter.py +47 -0
- pipecat/audio/filters/krisp_filter.py +78 -0
- pipecat/audio/filters/noisereduce_filter.py +54 -0
- pipecat/audio/mixers/__init__.py +0 -0
- pipecat/audio/mixers/base_audio_mixer.py +53 -0
- pipecat/audio/mixers/soundfile_mixer.py +146 -0
- pipecat/audio/utils.py +94 -0
- pipecat/audio/vad/__init__.py +0 -0
- pipecat/audio/vad/data/__init__.py +0 -0
- pipecat/audio/vad/data/silero_vad.onnx +0 -0
- pipecat/audio/vad/silero.py +164 -0
- pipecat/audio/vad/vad_analyzer.py +138 -0
- pipecat/clocks/__init__.py +0 -0
- pipecat/clocks/base_clock.py +17 -0
- pipecat/clocks/system_clock.py +20 -0
- pipecat/frames/__init__.py +0 -0
- pipecat/frames/frames.proto +44 -0
- pipecat/frames/frames.py +658 -0
- pipecat/frames/protobufs/frames_pb2.py +32 -0
- pipecat/metrics/__init__.py +0 -0
- pipecat/metrics/metrics.py +31 -0
- pipecat/pipeline/__init__.py +0 -0
- pipecat/pipeline/base_pipeline.py +20 -0
- pipecat/pipeline/parallel_pipeline.py +167 -0
- pipecat/pipeline/pipeline.py +94 -0
- pipecat/pipeline/runner.py +55 -0
- pipecat/pipeline/sync_parallel_pipeline.py +164 -0
- pipecat/pipeline/task.py +210 -0
- pipecat/pipeline/to_be_updated/merge_pipeline.py +22 -0
- pipecat/processors/__init__.py +0 -0
- pipecat/processors/aggregators/__init__.py +0 -0
- pipecat/processors/aggregators/gated.py +87 -0
- pipecat/processors/aggregators/gated_openai_llm_context.py +55 -0
- pipecat/processors/aggregators/llm_response.py +320 -0
- pipecat/processors/aggregators/openai_llm_context.py +247 -0
- pipecat/processors/aggregators/sentence.py +52 -0
- pipecat/processors/aggregators/user_response.py +157 -0
- pipecat/processors/aggregators/vision_image_frame.py +49 -0
- pipecat/processors/async_generator.py +44 -0
- pipecat/processors/audio/__init__.py +0 -0
- pipecat/processors/audio/audio_buffer_processor.py +102 -0
- pipecat/processors/audio/vad/__init__.py +0 -0
- pipecat/processors/audio/vad/silero.py +91 -0
- pipecat/processors/filters/__init__.py +0 -0
- pipecat/processors/filters/frame_filter.py +32 -0
- pipecat/processors/filters/function_filter.py +37 -0
- pipecat/processors/filters/identity_filter.py +30 -0
- pipecat/processors/filters/null_filter.py +14 -0
- pipecat/processors/filters/stt_mute_filter.py +157 -0
- pipecat/processors/filters/wake_check_filter.py +89 -0
- pipecat/processors/filters/wake_notifier_filter.py +40 -0
- pipecat/processors/frame_processor.py +342 -0
- pipecat/processors/frameworks/__init__.py +0 -0
- pipecat/processors/frameworks/langchain.py +75 -0
- pipecat/processors/frameworks/rtvi.py +854 -0
- pipecat/processors/gstreamer/__init__.py +0 -0
- pipecat/processors/gstreamer/pipeline_source.py +209 -0
- pipecat/processors/idle_frame_processor.py +68 -0
- pipecat/processors/logger.py +39 -0
- pipecat/processors/metrics/__init__.py +0 -0
- pipecat/processors/metrics/frame_processor_metrics.py +80 -0
- pipecat/processors/metrics/sentry.py +55 -0
- pipecat/processors/text_transformer.py +38 -0
- pipecat/processors/user_idle_processor.py +85 -0
- pipecat/serializers/__init__.py +0 -0
- pipecat/serializers/base_serializer.py +30 -0
- pipecat/serializers/livekit.py +45 -0
- pipecat/serializers/plivo.py +64 -0
- pipecat/serializers/protobuf.py +114 -0
- pipecat/serializers/twilio.py +63 -0
- pipecat/services/__init__.py +0 -0
- pipecat/services/ai_services.py +626 -0
- pipecat/services/anthropic.py +755 -0
- pipecat/services/assemblyai.py +152 -0
- pipecat/services/aws.py +246 -0
- pipecat/services/azure.py +765 -0
- pipecat/services/canonical.py +204 -0
- pipecat/services/cartesia.py +434 -0
- pipecat/services/deepgram.py +234 -0
- pipecat/services/elevenlabs.py +438 -0
- pipecat/services/fal.py +84 -0
- pipecat/services/fireworks.py +76 -0
- pipecat/services/gemini_multimodal_live/__init__.py +1 -0
- pipecat/services/gemini_multimodal_live/audio_transcriber.py +100 -0
- pipecat/services/gemini_multimodal_live/events.py +151 -0
- pipecat/services/gemini_multimodal_live/gemini.py +660 -0
- pipecat/services/gladia.py +238 -0
- pipecat/services/google.py +843 -0
- pipecat/services/grok.py +103 -0
- pipecat/services/groq.py +39 -0
- pipecat/services/lmnt.py +229 -0
- pipecat/services/moondream.py +90 -0
- pipecat/services/nim.py +97 -0
- pipecat/services/ollama.py +12 -0
- pipecat/services/openai.py +605 -0
- pipecat/services/openai_realtime_beta/__init__.py +2 -0
- pipecat/services/openai_realtime_beta/context.py +223 -0
- pipecat/services/openai_realtime_beta/events.py +433 -0
- pipecat/services/openai_realtime_beta/frames.py +19 -0
- pipecat/services/openai_realtime_beta/openai.py +553 -0
- pipecat/services/openpipe.py +66 -0
- pipecat/services/playht.py +413 -0
- pipecat/services/rime.py +101 -0
- pipecat/services/riva.py +266 -0
- pipecat/services/simli.py +137 -0
- pipecat/services/tavus.py +137 -0
- pipecat/services/to_be_updated/__init__.py +0 -0
- pipecat/services/to_be_updated/cloudflare_ai_service.py +68 -0
- pipecat/services/to_be_updated/google_ai_service.py +29 -0
- pipecat/services/to_be_updated/huggingface_ai_service.py +33 -0
- pipecat/services/to_be_updated/mock_ai_service.py +27 -0
- pipecat/services/together.py +39 -0
- pipecat/services/whisper.py +97 -0
- pipecat/services/xtts.py +177 -0
- pipecat/sync/__init__.py +0 -0
- pipecat/sync/base_notifier.py +17 -0
- pipecat/sync/event_notifier.py +21 -0
- pipecat/transcriptions/__init__.py +0 -0
- pipecat/transcriptions/language.py +429 -0
- pipecat/transports/__init__.py +0 -0
- pipecat/transports/base_input.py +195 -0
- pipecat/transports/base_output.py +473 -0
- pipecat/transports/base_transport.py +94 -0
- pipecat/transports/local/__init__.py +0 -0
- pipecat/transports/local/audio.py +118 -0
- pipecat/transports/local/tk.py +149 -0
- pipecat/transports/network/__init__.py +0 -0
- pipecat/transports/network/fastapi_websocket.py +204 -0
- pipecat/transports/network/websocket_server.py +249 -0
- pipecat/transports/services/__init__.py +0 -0
- pipecat/transports/services/daily.py +1114 -0
- pipecat/transports/services/helpers/__init__.py +0 -0
- pipecat/transports/services/helpers/daily_rest.py +156 -0
- pipecat/transports/services/livekit.py +595 -0
- pipecat/utils/__init__.py +0 -0
- pipecat/utils/string.py +25 -0
- pipecat/utils/test_frame_processor.py +45 -0
- pipecat/utils/text/__init__.py +0 -0
- pipecat/utils/text/base_text_filter.py +26 -0
- pipecat/utils/text/markdown_text_filter.py +216 -0
- pipecat/utils/time.py +28 -0
- pipecat/utils/utils.py +38 -0
- pipecat/vad/__init__.py +0 -0
- pipecat/vad/silero.py +16 -0
- pipecat/vad/vad_analyzer.py +15 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
BSD 2-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024, Daily
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
19
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
20
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
21
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
22
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
23
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
24
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: dv-pipecat-ai
|
|
3
|
+
Version: 0.0.52.dev86
|
|
4
|
+
Summary: An open source framework for voice (and multimodal) assistants
|
|
5
|
+
License: BSD 2-Clause License
|
|
6
|
+
Project-URL: Source, https://github.com/pipecat-ai/pipecat
|
|
7
|
+
Project-URL: Website, https://pipecat.ai
|
|
8
|
+
Keywords: webrtc,audio,video,ai
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
12
|
+
Classifier: Topic :: Communications :: Conferencing
|
|
13
|
+
Classifier: Topic :: Multimedia :: Sound/Audio
|
|
14
|
+
Classifier: Topic :: Multimedia :: Video
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: aiohttp~=3.11.9
|
|
20
|
+
Requires-Dist: loguru~=0.7.2
|
|
21
|
+
Requires-Dist: Markdown~=3.7
|
|
22
|
+
Requires-Dist: numpy~=1.26.4
|
|
23
|
+
Requires-Dist: Pillow~=10.4.0
|
|
24
|
+
Requires-Dist: protobuf~=5.29.1
|
|
25
|
+
Requires-Dist: pydantic~=2.8.2
|
|
26
|
+
Requires-Dist: pyloudnorm~=0.1.1
|
|
27
|
+
Requires-Dist: resampy~=0.4.3
|
|
28
|
+
Requires-Dist: tenacity~=9.0.0
|
|
29
|
+
Provides-Extra: anthropic
|
|
30
|
+
Requires-Dist: anthropic~=0.40.0; extra == "anthropic"
|
|
31
|
+
Provides-Extra: assemblyai
|
|
32
|
+
Requires-Dist: assemblyai~=0.34.0; extra == "assemblyai"
|
|
33
|
+
Provides-Extra: aws
|
|
34
|
+
Requires-Dist: boto3~=1.35.27; extra == "aws"
|
|
35
|
+
Provides-Extra: azure
|
|
36
|
+
Requires-Dist: azure-cognitiveservices-speech~=1.41.1; extra == "azure"
|
|
37
|
+
Requires-Dist: openai~=1.50.2; extra == "azure"
|
|
38
|
+
Provides-Extra: canonical
|
|
39
|
+
Requires-Dist: aiofiles~=24.1.0; extra == "canonical"
|
|
40
|
+
Provides-Extra: cartesia
|
|
41
|
+
Requires-Dist: cartesia~=1.0.13; extra == "cartesia"
|
|
42
|
+
Requires-Dist: websockets~=13.1; extra == "cartesia"
|
|
43
|
+
Provides-Extra: daily
|
|
44
|
+
Requires-Dist: daily-python~=0.13.0; extra == "daily"
|
|
45
|
+
Provides-Extra: deepgram
|
|
46
|
+
Requires-Dist: deepgram-sdk~=3.7.7; extra == "deepgram"
|
|
47
|
+
Provides-Extra: elevenlabs
|
|
48
|
+
Requires-Dist: websockets~=13.1; extra == "elevenlabs"
|
|
49
|
+
Provides-Extra: examples
|
|
50
|
+
Requires-Dist: python-dotenv~=1.0.1; extra == "examples"
|
|
51
|
+
Requires-Dist: flask~=3.0.3; extra == "examples"
|
|
52
|
+
Requires-Dist: flask_cors~=4.0.1; extra == "examples"
|
|
53
|
+
Provides-Extra: fal
|
|
54
|
+
Requires-Dist: fal-client~=0.4.1; extra == "fal"
|
|
55
|
+
Provides-Extra: gladia
|
|
56
|
+
Requires-Dist: websockets~=13.1; extra == "gladia"
|
|
57
|
+
Provides-Extra: google
|
|
58
|
+
Requires-Dist: google-generativeai~=0.8.3; extra == "google"
|
|
59
|
+
Requires-Dist: google-cloud-texttospeech~=2.21.1; extra == "google"
|
|
60
|
+
Provides-Extra: grok
|
|
61
|
+
Requires-Dist: openai~=1.50.2; extra == "grok"
|
|
62
|
+
Provides-Extra: groq
|
|
63
|
+
Requires-Dist: openai~=1.50.2; extra == "groq"
|
|
64
|
+
Provides-Extra: gstreamer
|
|
65
|
+
Requires-Dist: pygobject~=3.48.2; extra == "gstreamer"
|
|
66
|
+
Provides-Extra: fireworks
|
|
67
|
+
Requires-Dist: openai~=1.50.2; extra == "fireworks"
|
|
68
|
+
Provides-Extra: krisp
|
|
69
|
+
Requires-Dist: pipecat-ai-krisp~=0.3.0; extra == "krisp"
|
|
70
|
+
Provides-Extra: langchain
|
|
71
|
+
Requires-Dist: langchain~=0.2.14; extra == "langchain"
|
|
72
|
+
Requires-Dist: langchain-community~=0.2.12; extra == "langchain"
|
|
73
|
+
Requires-Dist: langchain-openai~=0.1.20; extra == "langchain"
|
|
74
|
+
Provides-Extra: livekit
|
|
75
|
+
Requires-Dist: livekit~=0.17.5; extra == "livekit"
|
|
76
|
+
Requires-Dist: livekit-api~=0.7.1; extra == "livekit"
|
|
77
|
+
Provides-Extra: lmnt
|
|
78
|
+
Requires-Dist: lmnt~=1.1.4; extra == "lmnt"
|
|
79
|
+
Provides-Extra: local
|
|
80
|
+
Requires-Dist: pyaudio~=0.2.14; extra == "local"
|
|
81
|
+
Provides-Extra: moondream
|
|
82
|
+
Requires-Dist: einops~=0.8.0; extra == "moondream"
|
|
83
|
+
Requires-Dist: timm~=1.0.8; extra == "moondream"
|
|
84
|
+
Requires-Dist: transformers~=4.44.0; extra == "moondream"
|
|
85
|
+
Provides-Extra: nim
|
|
86
|
+
Requires-Dist: openai~=1.50.2; extra == "nim"
|
|
87
|
+
Provides-Extra: noisereduce
|
|
88
|
+
Requires-Dist: noisereduce~=3.0.3; extra == "noisereduce"
|
|
89
|
+
Provides-Extra: openai
|
|
90
|
+
Requires-Dist: openai~=1.50.2; extra == "openai"
|
|
91
|
+
Requires-Dist: websockets~=13.1; extra == "openai"
|
|
92
|
+
Requires-Dist: python-deepcompare~=1.0.1; extra == "openai"
|
|
93
|
+
Provides-Extra: openpipe
|
|
94
|
+
Requires-Dist: openpipe~=4.38.0; extra == "openpipe"
|
|
95
|
+
Provides-Extra: playht
|
|
96
|
+
Requires-Dist: pyht~=0.1.8; extra == "playht"
|
|
97
|
+
Requires-Dist: websockets~=13.1; extra == "playht"
|
|
98
|
+
Provides-Extra: riva
|
|
99
|
+
Requires-Dist: nvidia-riva-client~=2.17.0; extra == "riva"
|
|
100
|
+
Provides-Extra: silero
|
|
101
|
+
Requires-Dist: onnxruntime~=1.20.1; extra == "silero"
|
|
102
|
+
Provides-Extra: soundfile
|
|
103
|
+
Requires-Dist: soundfile~=0.12.1; extra == "soundfile"
|
|
104
|
+
Provides-Extra: together
|
|
105
|
+
Requires-Dist: openai~=1.50.2; extra == "together"
|
|
106
|
+
Provides-Extra: websocket
|
|
107
|
+
Requires-Dist: websockets~=13.1; extra == "websocket"
|
|
108
|
+
Requires-Dist: fastapi~=0.115.0; extra == "websocket"
|
|
109
|
+
Provides-Extra: whisper
|
|
110
|
+
Requires-Dist: faster-whisper~=1.1.0; extra == "whisper"
|
|
111
|
+
Provides-Extra: simli
|
|
112
|
+
Requires-Dist: simli-ai~=0.1.7; extra == "simli"
|
|
113
|
+
|
|
114
|
+
<h1><div align="center">
|
|
115
|
+
<img alt="pipecat" width="300px" height="auto" src="https://raw.githubusercontent.com/pipecat-ai/pipecat/main/pipecat.png">
|
|
116
|
+
</div></h1>
|
|
117
|
+
|
|
118
|
+
[](https://pypi.org/project/pipecat-ai) [](https://discord.gg/pipecat) <a href="https://app.commanddash.io/agent/github_pipecat-ai_pipecat"><img src="https://img.shields.io/badge/AI-Code%20Agent-EB9FDA"></a>
|
|
119
|
+
|
|
120
|
+
Pipecat is an open source Python framework for building voice and multimodal conversational agents. It handles the complex orchestration of AI services, network transport, audio processing, and multimodal interactions, letting you focus on creating engaging experiences.
|
|
121
|
+
|
|
122
|
+
## What you can build
|
|
123
|
+
|
|
124
|
+
- **Voice Assistants**: [Natural, real-time conversations with AI](https://demo.dailybots.ai/)
|
|
125
|
+
- **Interactive Agents**: Personal coaches and meeting assistants
|
|
126
|
+
- **Multimodal Apps**: Combine voice, video, images, and text
|
|
127
|
+
- **Creative Tools**: [Story-telling experiences](https://storytelling-chatbot.fly.dev/) and social companions
|
|
128
|
+
- **Business Solutions**: [Customer intake flows](https://www.youtube.com/watch?v=lDevgsp9vn0) and support bots
|
|
129
|
+
- **Complex conversational flows**: [Refer to Pipecat Flows](https://github.com/pipecat-ai/pipecat-flows) to learn more
|
|
130
|
+
|
|
131
|
+
## See it in action
|
|
132
|
+
|
|
133
|
+
<p float="left">
|
|
134
|
+
<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="280" /></a>
|
|
135
|
+
<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="280" /></a>
|
|
136
|
+
<br/>
|
|
137
|
+
<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="280" /></a>
|
|
138
|
+
<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="280" /></a>
|
|
139
|
+
</p>
|
|
140
|
+
|
|
141
|
+
## Key features
|
|
142
|
+
|
|
143
|
+
- **Voice-first Design**: Built-in speech recognition, TTS, and conversation handling
|
|
144
|
+
- **Flexible Integration**: Works with popular AI services (OpenAI, ElevenLabs, etc.)
|
|
145
|
+
- **Pipeline Architecture**: Build complex apps from simple, reusable components
|
|
146
|
+
- **Real-time Processing**: Frame-based pipeline architecture for fluid interactions
|
|
147
|
+
- **Production Ready**: Enterprise-grade WebRTC and Websocket support
|
|
148
|
+
|
|
149
|
+
💡 Looking to build structured conversations? Check out [Pipecat Flows](https://github.com/pipecat-ai/pipecat-flows) for managing complex conversational states and transitions.
|
|
150
|
+
|
|
151
|
+
## Getting started
|
|
152
|
+
|
|
153
|
+
You can get started with Pipecat running on your local machine, then move your agent processes to the cloud when you’re ready. You can also add a 📞 telephone number, 🖼️ image output, 📺 video input, use different LLMs, and more.
|
|
154
|
+
|
|
155
|
+
```shell
|
|
156
|
+
# Install the module
|
|
157
|
+
pip install pipecat-ai
|
|
158
|
+
|
|
159
|
+
# Set up your environment
|
|
160
|
+
cp dot-env.template .env
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
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:
|
|
164
|
+
|
|
165
|
+
```shell
|
|
166
|
+
pip install "pipecat-ai[option,...]"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Available options include:
|
|
170
|
+
|
|
171
|
+
| Category | Services | Install Command Example |
|
|
172
|
+
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
|
|
173
|
+
| Speech-to-Text | [AssemblyAI](https://docs.pipecat.ai/api-reference/services/stt/assemblyai), [Azure](https://docs.pipecat.ai/api-reference/services/stt/azure), [Deepgram](https://docs.pipecat.ai/api-reference/services/stt/deepgram), [Gladia](https://docs.pipecat.ai/api-reference/services/stt/gladia), [Whisper](https://docs.pipecat.ai/api-reference/services/stt/whisper) | `pip install "pipecat-ai[deepgram]"` |
|
|
174
|
+
| LLMs | [Anthropic](https://docs.pipecat.ai/api-reference/services/llm/anthropic), [Azure](https://docs.pipecat.ai/api-reference/services/llm/azure), [Fireworks AI](https://docs.pipecat.ai/api-reference/services/llm/fireworks), [Gemini](https://docs.pipecat.ai/api-reference/services/llm/gemini), [Grok](https://docs.pipecat.ai/api-reference/services/llm/grok), [Groq](https://docs.pipecat.ai/api-reference/services/llm/groq), [NVIDIA NIM](https://docs.pipecat.ai/api-reference/services/llm/nim), [Ollama](https://docs.pipecat.ai/api-reference/services/llm/ollama), [OpenAI](https://docs.pipecat.ai/api-reference/services/llm/openai), [Together AI](https://docs.pipecat.ai/api-reference/services/llm/together) | `pip install "pipecat-ai[openai]"` |
|
|
175
|
+
| Text-to-Speech | [AWS](https://docs.pipecat.ai/api-reference/services/tts/aws), [Azure](https://docs.pipecat.ai/api-reference/services/tts/azure), [Cartesia](https://docs.pipecat.ai/api-reference/services/tts/cartesia), [Deepgram](https://docs.pipecat.ai/api-reference/services/tts/deepgram), [ElevenLabs](https://docs.pipecat.ai/api-reference/services/tts/elevenlabs), [Google](https://docs.pipecat.ai/api-reference/services/tts/google), [LMNT](https://docs.pipecat.ai/api-reference/services/tts/lmnt), [OpenAI](https://docs.pipecat.ai/api-reference/services/tts/openai), [PlayHT](https://docs.pipecat.ai/api-reference/services/tts/playht), [Rime](https://docs.pipecat.ai/api-reference/services/tts/rime), [XTTS](https://docs.pipecat.ai/api-reference/services/tts/xtts) | `pip install "pipecat-ai[cartesia]"` |
|
|
176
|
+
| Speech-to-Speech | [Gemini Multimodal Live](https://docs.pipecat.ai/server/services/s2s/gemini), [OpenAI Realtime](https://docs.pipecat.ai/api-reference/services/s2s/openai) | `pip install "pipecat-ai[openai]"` |
|
|
177
|
+
| Transport | [Daily (WebRTC)](https://docs.pipecat.ai/api-reference/services/transport/daily), WebSocket, Local | `pip install "pipecat-ai[daily]"` |
|
|
178
|
+
| Video | [Tavus](https://docs.pipecat.ai/api-reference/services/video/tavus), [Simli](https://docs.pipecat.ai/api-reference/services/video/simli) | `pip install "pipecat-ai[tavus,simli]"` |
|
|
179
|
+
| Vision & Image | [Moondream](https://docs.pipecat.ai/api-reference/services/vision/moondream), [fal](https://docs.pipecat.ai/api-reference/services/image-generation/fal) | `pip install "pipecat-ai[moondream]"` |
|
|
180
|
+
| Audio Processing | [Silero VAD](https://docs.pipecat.ai/api-reference/utilities/audio/silero-vad-analyzer), [Krisp](https://docs.pipecat.ai/api-reference/utilities/audio/krisp-filter), [Noisereduce](https://docs.pipecat.ai/api-reference/utilities/audio/noisereduce-filter) | `pip install "pipecat-ai[silero]"` |
|
|
181
|
+
| Analytics & Metrics | [Canonical AI](https://docs.pipecat.ai/api-reference/services/analytics/canonical), [Sentry](https://docs.pipecat.ai/api-reference/services/analytics/sentry) | `pip install "pipecat-ai[canonical]"` |
|
|
182
|
+
|
|
183
|
+
📚 [View full services documentation →](https://docs.pipecat.ai/api-reference/services/supported-services)
|
|
184
|
+
|
|
185
|
+
## Code examples
|
|
186
|
+
|
|
187
|
+
- [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
|
|
188
|
+
- [Example apps](https://github.com/pipecat-ai/pipecat/tree/main/examples/) — complete applications that you can use as starting points for development
|
|
189
|
+
|
|
190
|
+
## A simple voice agent running locally
|
|
191
|
+
|
|
192
|
+
Here is a very basic Pipecat bot that greets a user when they join a real-time session. We'll use [Daily](https://daily.co) for real-time media transport, and [Cartesia](https://cartesia.ai/) for text-to-speech.
|
|
193
|
+
|
|
194
|
+
```python
|
|
195
|
+
import asyncio
|
|
196
|
+
|
|
197
|
+
from pipecat.frames.frames import EndFrame, TextFrame
|
|
198
|
+
from pipecat.pipeline.pipeline import Pipeline
|
|
199
|
+
from pipecat.pipeline.task import PipelineTask
|
|
200
|
+
from pipecat.pipeline.runner import PipelineRunner
|
|
201
|
+
from pipecat.services.cartesia import CartesiaTTSService
|
|
202
|
+
from pipecat.transports.services.daily import DailyParams, DailyTransport
|
|
203
|
+
|
|
204
|
+
async def main():
|
|
205
|
+
# Use Daily as a real-time media transport (WebRTC)
|
|
206
|
+
transport = DailyTransport(
|
|
207
|
+
room_url=...,
|
|
208
|
+
token="", # leave empty. Note: token is _not_ your api key
|
|
209
|
+
bot_name="Bot Name",
|
|
210
|
+
params=DailyParams(audio_out_enabled=True))
|
|
211
|
+
|
|
212
|
+
# Use Cartesia for Text-to-Speech
|
|
213
|
+
tts = CartesiaTTSService(
|
|
214
|
+
api_key=...,
|
|
215
|
+
voice_id=...
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
# Simple pipeline that will process text to speech and output the result
|
|
219
|
+
pipeline = Pipeline([tts, transport.output()])
|
|
220
|
+
|
|
221
|
+
# Create Pipecat processor that can run one or more pipelines tasks
|
|
222
|
+
runner = PipelineRunner()
|
|
223
|
+
|
|
224
|
+
# Assign the task callable to run the pipeline
|
|
225
|
+
task = PipelineTask(pipeline)
|
|
226
|
+
|
|
227
|
+
# Register an event handler to play audio when a
|
|
228
|
+
# participant joins the transport WebRTC session
|
|
229
|
+
@transport.event_handler("on_first_participant_joined")
|
|
230
|
+
async def on_first_participant_joined(transport, participant):
|
|
231
|
+
participant_name = participant.get("info", {}).get("userName", "")
|
|
232
|
+
# Queue a TextFrame that will get spoken by the TTS service (Cartesia)
|
|
233
|
+
await task.queue_frame(TextFrame(f"Hello there, {participant_name}!"))
|
|
234
|
+
|
|
235
|
+
# Register an event handler to exit the application when the user leaves.
|
|
236
|
+
@transport.event_handler("on_participant_left")
|
|
237
|
+
async def on_participant_left(transport, participant, reason):
|
|
238
|
+
await task.queue_frame(EndFrame())
|
|
239
|
+
|
|
240
|
+
# Run the pipeline task
|
|
241
|
+
await runner.run(task)
|
|
242
|
+
|
|
243
|
+
if __name__ == "__main__":
|
|
244
|
+
asyncio.run(main())
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Run it with:
|
|
248
|
+
|
|
249
|
+
```shell
|
|
250
|
+
python app.py
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Daily provides a prebuilt WebRTC user interface. While the app is running, you can visit at `https://<yourdomain>.daily.co/<room_url>` and listen to the bot say hello!
|
|
254
|
+
|
|
255
|
+
## WebRTC for production use
|
|
256
|
+
|
|
257
|
+
WebSockets are fine for server-to-server communication or for initial development. But for production use, you’ll need client-server audio to use a protocol designed for real-time media transport. (For an explanation of the difference between WebSockets and WebRTC, see [this post.](https://www.daily.co/blog/how-to-talk-to-an-llm-with-your-voice/#webrtc))
|
|
258
|
+
|
|
259
|
+
One way to get up and running quickly with WebRTC is to sign up for a Daily developer account. Daily gives you SDKs and global infrastructure for audio (and video) routing. Every account gets 10,000 audio/video/transcription minutes free each month.
|
|
260
|
+
|
|
261
|
+
Sign up [here](https://dashboard.daily.co/u/signup) and [create a room](https://docs.daily.co/reference/rest-api/rooms) in the developer Dashboard.
|
|
262
|
+
|
|
263
|
+
## Hacking on the framework itself
|
|
264
|
+
|
|
265
|
+
_Note that you may need to set up a virtual environment before following the instructions below. For instance, you might need to run the following from the root of the repo:_
|
|
266
|
+
|
|
267
|
+
```shell
|
|
268
|
+
python3 -m venv venv
|
|
269
|
+
source venv/bin/activate
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
From the root of this repo, run the following:
|
|
273
|
+
|
|
274
|
+
```shell
|
|
275
|
+
pip install -r dev-requirements.txt
|
|
276
|
+
python -m build
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
This builds the package. To use the package locally (e.g. to run sample files), run
|
|
280
|
+
|
|
281
|
+
```shell
|
|
282
|
+
pip install --editable ".[option,...]"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
If you want to use this package from another directory, you can run:
|
|
286
|
+
|
|
287
|
+
```shell
|
|
288
|
+
pip install "path_to_this_repo[option,...]"
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Running tests
|
|
292
|
+
|
|
293
|
+
From the root directory, run:
|
|
294
|
+
|
|
295
|
+
```shell
|
|
296
|
+
pytest --doctest-modules --ignore-glob="*to_be_updated*" --ignore-glob=*pipeline_source* src tests
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Setting up your editor
|
|
300
|
+
|
|
301
|
+
This project uses strict [PEP 8](https://peps.python.org/pep-0008/) formatting via [Ruff](https://github.com/astral-sh/ruff).
|
|
302
|
+
|
|
303
|
+
### Emacs
|
|
304
|
+
|
|
305
|
+
You can use [use-package](https://github.com/jwiegley/use-package) to install [emacs-lazy-ruff](https://github.com/christophermadsen/emacs-lazy-ruff) package and configure `ruff` arguments:
|
|
306
|
+
|
|
307
|
+
```elisp
|
|
308
|
+
(use-package lazy-ruff
|
|
309
|
+
:ensure t
|
|
310
|
+
:hook ((python-mode . lazy-ruff-mode))
|
|
311
|
+
:config
|
|
312
|
+
(setq lazy-ruff-format-command "ruff format")
|
|
313
|
+
(setq lazy-ruff-only-format-block t)
|
|
314
|
+
(setq lazy-ruff-only-format-region t)
|
|
315
|
+
(setq lazy-ruff-only-format-buffer t))
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
`ruff` was installed in the `venv` environment described before, so you should be able to use [pyvenv-auto](https://github.com/ryotaro612/pyvenv-auto) to automatically load that environment inside Emacs.
|
|
319
|
+
|
|
320
|
+
```elisp
|
|
321
|
+
(use-package pyvenv-auto
|
|
322
|
+
:ensure t
|
|
323
|
+
:defer t
|
|
324
|
+
:hook ((python-mode . pyvenv-auto-run)))
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Visual Studio Code
|
|
329
|
+
|
|
330
|
+
Install the
|
|
331
|
+
[Ruff](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff) extension. Then edit the user settings (_Ctrl-Shift-P_ `Open User Settings (JSON)`) and set it as the default Python formatter, and enable formatting on save:
|
|
332
|
+
|
|
333
|
+
```json
|
|
334
|
+
"[python]": {
|
|
335
|
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
336
|
+
"editor.formatOnSave": true
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## Contributing
|
|
341
|
+
|
|
342
|
+
We welcome contributions from the community! Whether you're fixing bugs, improving documentation, or adding new features, here's how you can help:
|
|
343
|
+
|
|
344
|
+
- **Found a bug?** Open an [issue](https://github.com/pipecat-ai/pipecat/issues)
|
|
345
|
+
- **Have a feature idea?** Start a [discussion](https://discord.gg/pipecat)
|
|
346
|
+
- **Want to contribute code?** Check our [CONTRIBUTING.md](CONTRIBUTING.md) guide
|
|
347
|
+
- **Documentation improvements?** [Docs](https://github.com/pipecat-ai/docs) PRs are always welcome
|
|
348
|
+
|
|
349
|
+
Before submitting a pull request, please check existing issues and PRs to avoid duplicates.
|
|
350
|
+
|
|
351
|
+
We aim to review all contributions promptly and provide constructive feedback to help get your changes merged.
|
|
352
|
+
|
|
353
|
+
## Getting help
|
|
354
|
+
|
|
355
|
+
➡️ [Join our Discord](https://discord.gg/pipecat)
|
|
356
|
+
|
|
357
|
+
➡️ [Read the docs](https://docs.pipecat.ai)
|
|
358
|
+
|
|
359
|
+
➡️ [Reach us on X](https://x.com/pipecat_ai)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
pipecat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
pipecat/audio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
pipecat/audio/utils.py,sha256=UMo9_zAUE-dS75UX5RTDPgnQas37K6AEHp9SwCjdD4g,2909
|
|
4
|
+
pipecat/audio/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
pipecat/audio/filters/base_audio_filter.py,sha256=SRQwf_ZOP2cKYYPJVTQkLEP2TbMGLSca6wWtxM0YpOw,1301
|
|
6
|
+
pipecat/audio/filters/krisp_filter.py,sha256=WuS8KZKZqRqZN5f7e8r3Z4A8yIwkudZD3ZQzMY4qky0,2709
|
|
7
|
+
pipecat/audio/filters/noisereduce_filter.py,sha256=Tuly7Mm8jykDVlPbGn6N_xlyuKKZWB2gH_on-tmZ4h4,1455
|
|
8
|
+
pipecat/audio/mixers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
pipecat/audio/mixers/base_audio_mixer.py,sha256=_faWavHQC-XGhOAiegUQbh3botw7MqslgrNQT_urJXQ,1522
|
|
10
|
+
pipecat/audio/mixers/soundfile_mixer.py,sha256=jifiZrlQBhZFSCl8qzqk2Wx1hfbzDLEKNZG0IVhku5E,4876
|
|
11
|
+
pipecat/audio/vad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
pipecat/audio/vad/silero.py,sha256=WI78R-zSNJz3e24Mevsn66EnZdxnZkDzuoiRS7jMSfI,5542
|
|
13
|
+
pipecat/audio/vad/vad_analyzer.py,sha256=Po_Vv1_DjQ5is1znyNLjxaZXlSAKmjB1hioVz09QwoU,4169
|
|
14
|
+
pipecat/audio/vad/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
pipecat/audio/vad/data/silero_vad.onnx,sha256=JiOilT9v89LB5hdAxs23FoEzR5smff7xFKSjzFvdeI8,2327524
|
|
16
|
+
pipecat/clocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
pipecat/clocks/base_clock.py,sha256=Mke96PKUFHEo-LB5h8YT0XsnLgKFsLGFeIfPA2KmSe8,262
|
|
18
|
+
pipecat/clocks/system_clock.py,sha256=O-nTI-UQWSwog_0NFyuZcreRFe89nOhwA3PCE0psZNE,391
|
|
19
|
+
pipecat/frames/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
pipecat/frames/frames.proto,sha256=R4MFMP2ATfKzD1aflBkSmitsBeCBTHcN3vwgLAi2Hjw,755
|
|
21
|
+
pipecat/frames/frames.py,sha256=yCaZrsoUbnKJVOcTAhr1_PLqN7Iz_yY_0XZij9vAc70,15503
|
|
22
|
+
pipecat/frames/protobufs/frames_pb2.py,sha256=OPOOg10K3LgARwWgzqK4OKx8lyLsZBra85qpCVDRKFI,2123
|
|
23
|
+
pipecat/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
pipecat/metrics/metrics.py,sha256=Bvk1JOwpwWdFhFEMZwlh2AXYWSmEarAuwnk4SS3lJtM,592
|
|
25
|
+
pipecat/pipeline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
pipecat/pipeline/base_pipeline.py,sha256=cSx_zNTH9GBVGddg6ol-HYwD41NJnlY47-z7zCm7B-k,388
|
|
27
|
+
pipecat/pipeline/parallel_pipeline.py,sha256=k_D4avomh61lGkcIWa0xiVvyMKV7PhEcrck64S1CT50,5828
|
|
28
|
+
pipecat/pipeline/pipeline.py,sha256=TJUijiEPRxzdf01xYxDyff6WOXwyeG2yKoBaSobA5zg,3099
|
|
29
|
+
pipecat/pipeline/runner.py,sha256=BTF4gO4XtCHaFYkAAxMT-K3PhWan3VVvAZTG9aszSiI,1669
|
|
30
|
+
pipecat/pipeline/sync_parallel_pipeline.py,sha256=tNPqEsQMUMcywNI1UopY9fhh_LpWwof01XA4zi_UW6o,6011
|
|
31
|
+
pipecat/pipeline/task.py,sha256=vJn88leSzk5YmzOzOUwuqGfTp0foN9MvXREhCSVdirE,7517
|
|
32
|
+
pipecat/pipeline/to_be_updated/merge_pipeline.py,sha256=S8-wv7AAKY1a2Jrvq2pKY5KHOOFK0Rhk2hlsscRKjXo,802
|
|
33
|
+
pipecat/processors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
pipecat/processors/async_generator.py,sha256=plvmwGKc5et_8i2NjQemSkh-5uXS-IaIgrp_NNsKwSQ,1252
|
|
35
|
+
pipecat/processors/frame_processor.py,sha256=IkqQahfvs6BHJglXYHuxJBISb2epsDflBYqW-xeJJP8,12241
|
|
36
|
+
pipecat/processors/idle_frame_processor.py,sha256=Nc41iRIFKmb_c8bewEbM0rzZH4So287mTf9zXkiBQWk,2029
|
|
37
|
+
pipecat/processors/logger.py,sha256=7M1SuF4kjbLqiekjlr0atboKX_UidVcGZwnqI9m3glo,1258
|
|
38
|
+
pipecat/processors/text_transformer.py,sha256=Vn2JpruI05Ci4JEqz3Qo3yu3yG1Vu0GD9OkPj_QOQb8,1211
|
|
39
|
+
pipecat/processors/user_idle_processor.py,sha256=PkJgbvXaBt_1oUYk02WpXf0yvbRP_oWfFdMgwERwTyY,2757
|
|
40
|
+
pipecat/processors/aggregators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
+
pipecat/processors/aggregators/gated.py,sha256=RH6Om7SG2-KYLLKqGWDylEeZy85l9EodIAb0XTugyn0,3011
|
|
42
|
+
pipecat/processors/aggregators/gated_openai_llm_context.py,sha256=fxZHyomKxN_QZKtLH7WqEzZU6u4D8v92vEEd9IGsZ2k,1859
|
|
43
|
+
pipecat/processors/aggregators/llm_response.py,sha256=UOkF_NSpaXE26hvdKResRLxaqcHoaDhPOjnUlFXU-nA,10599
|
|
44
|
+
pipecat/processors/aggregators/openai_llm_context.py,sha256=ld-fWY6GYbDET2kk7OuAXWPWRgYN-KUyiZ_nUfNdOEo,9349
|
|
45
|
+
pipecat/processors/aggregators/sentence.py,sha256=_h1N6DGd_bQCaZz0bSiEpiDWg2dTwBh7lajm99R1NtY,1803
|
|
46
|
+
pipecat/processors/aggregators/user_response.py,sha256=Jl4Gb-HjyomX57RZgmMcm5H_znVTuV119gOIHjCm7bM,5385
|
|
47
|
+
pipecat/processors/aggregators/vision_image_frame.py,sha256=mJ4CGj0U5yeOVvoho3OWmDLu_TmmQS3JC21UM8g-TmQ,1749
|
|
48
|
+
pipecat/processors/audio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
+
pipecat/processors/audio/audio_buffer_processor.py,sha256=JGlQ7kkbMc0tOj2tnTEQQDVN7QNr7WBgIw5FYleBT68,3831
|
|
50
|
+
pipecat/processors/audio/vad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
pipecat/processors/audio/vad/silero.py,sha256=tqrbear_8hKg9oGMdFmq0XgOADJW8ebwwnR_-lZvDvo,3047
|
|
52
|
+
pipecat/processors/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
|
+
pipecat/processors/filters/frame_filter.py,sha256=GM-PeTe51WZEnarDxAGKBUF-_7ZIeT-K1LHuHbkOgtk,870
|
|
54
|
+
pipecat/processors/filters/function_filter.py,sha256=9V6yrafhEzXcnsbFsJ5oZQgbw9MacWB1c_p1-pfv1T8,1136
|
|
55
|
+
pipecat/processors/filters/identity_filter.py,sha256=ovVoVcsnUbbuTegG_fzhMSBugagu0h3BMxM3aBab2Ok,916
|
|
56
|
+
pipecat/processors/filters/null_filter.py,sha256=H3YPJxpYK0u4orTJPuH5RldcWnr7prHWezf2HUoU0YU,324
|
|
57
|
+
pipecat/processors/filters/stt_mute_filter.py,sha256=qMRT3NdB_2VqXZXAGIBbPYwteezNqTNlDvXvlUfbFGU,5790
|
|
58
|
+
pipecat/processors/filters/wake_check_filter.py,sha256=dAUb6RWgb_kmDYQG2EKmk7r45ToJMgcw-cFOCyIK0nE,3509
|
|
59
|
+
pipecat/processors/filters/wake_notifier_filter.py,sha256=ekaDy3WRPT4ee_LK9E9UZb7G_yXO0IFC3dR4jfDUTqQ,1188
|
|
60
|
+
pipecat/processors/frameworks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
|
+
pipecat/processors/frameworks/langchain.py,sha256=y0byUCW8QMo9BkO0W3FDTLADC8or4yVID5v4ZYeu-UU,2575
|
|
62
|
+
pipecat/processors/frameworks/rtvi.py,sha256=NVxL--TpLh9lF1tKTz1s4mrxqNQfaUZXq3ENA-fNQR8,28829
|
|
63
|
+
pipecat/processors/gstreamer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
+
pipecat/processors/gstreamer/pipeline_source.py,sha256=gI2AE1M3_2yadBL-iizpra1yy7aCZSb9IBwc41h2E7s,7740
|
|
65
|
+
pipecat/processors/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
|
+
pipecat/processors/metrics/frame_processor_metrics.py,sha256=bNJs99ALWrZEVL_A52hNRQR9LHsYmG4CkVXQnsjYppM,2731
|
|
67
|
+
pipecat/processors/metrics/sentry.py,sha256=fuNqejr54NqkvjyJQ6YLGr09qMSJFODduzrcBNK7WKc,2202
|
|
68
|
+
pipecat/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
+
pipecat/serializers/base_serializer.py,sha256=HieCGvoKnaUQ-AzbBuQJOgOQjJx6YVzeSBmxlKhC5XU,568
|
|
70
|
+
pipecat/serializers/livekit.py,sha256=OI6CVuDb_OFKBuyRRcBi5DI493l4xW7GK5m0HmVBmoE,1443
|
|
71
|
+
pipecat/serializers/plivo.py,sha256=_dHD32XsiLtR4Ai9uNQOOFf37DwOIhEdx-LkhfCzYlI,2289
|
|
72
|
+
pipecat/serializers/protobuf.py,sha256=32ZaQ4ovQ2hxSsf20vOB_l55Mfiiebx6OcMVocz3uPo,3925
|
|
73
|
+
pipecat/serializers/twilio.py,sha256=AR-A7RyLV9P0BR8fqmnTTh0VFVipzw9RtQTuJakireI,2078
|
|
74
|
+
pipecat/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
pipecat/services/ai_services.py,sha256=POR-rt4Cd9PjRvhCjG1hVgQ85j_rgZCScXtH2RpZl54,23442
|
|
76
|
+
pipecat/services/anthropic.py,sha256=nqjgL0QZFmsfY46d-4neWDm4xB9OYfwqxXGXYw8k_zo,32198
|
|
77
|
+
pipecat/services/assemblyai.py,sha256=gwenDDjMHBSQuye-K-wh6sPEwPvzgxBT54Mym2hrU5E,5368
|
|
78
|
+
pipecat/services/aws.py,sha256=VJ7sdPx9BhJFVlXJUL2XVH0RMuQqm6ZYdzG_36ZhNms,7399
|
|
79
|
+
pipecat/services/azure.py,sha256=_loJO24efqKULh-YXSooe0dBJiu8-9lXBaoa_flskH0,24987
|
|
80
|
+
pipecat/services/canonical.py,sha256=3i4aiG8gxWqu_2mopglDEECviBuVF_DEpJlaPFyAWGc,7838
|
|
81
|
+
pipecat/services/cartesia.py,sha256=jl0Mbq_WigbTQRsaJDRg05WlKdCsF1lK17IDlX6wYKw,15516
|
|
82
|
+
pipecat/services/deepgram.py,sha256=KXBmmMKJv-C7DEedYS40MX9mRcNq8ANAwTWnp9QD_Lc,7698
|
|
83
|
+
pipecat/services/elevenlabs.py,sha256=BADk7f2SAroX2uqWOjrVnYjAJ6mBt6CFFin-EsGiynY,16547
|
|
84
|
+
pipecat/services/fal.py,sha256=izvF-ybmDpdY3mpUHCP8TA1lWZ9nMPerxqde1ZJW0HA,2561
|
|
85
|
+
pipecat/services/fireworks.py,sha256=S9rPyAQ73uFwC47UkDhkSs4-6NvrJHcVtEAr4awX9lk,2803
|
|
86
|
+
pipecat/services/gladia.py,sha256=lMJBOJjnpnOgATK4_lMYhpsOqH_mNVZ-TQpHd5f4hoA,7744
|
|
87
|
+
pipecat/services/google.py,sha256=fbm3lGMxsbFI_ryz9wpNJ1HApBuxo_qoI0aNwyaN9lY,30320
|
|
88
|
+
pipecat/services/grok.py,sha256=A0Lz1gi6zZX2h5tRKuKJre2nppcYCACN6lC9MjZWY44,4214
|
|
89
|
+
pipecat/services/groq.py,sha256=CzK9JmFwJP90HMbo_gQiqxbBsl4y2qfgAAlzNiU7RmI,1363
|
|
90
|
+
pipecat/services/lmnt.py,sha256=DxvcgFxOWylFr2kDI66BJOMPG0M1GfVHxFhrVsj3dWs,7653
|
|
91
|
+
pipecat/services/moondream.py,sha256=Z0qwwHyX8sg9lBx9AiJDbwVXYM2RGjf6k_esGM134p0,2776
|
|
92
|
+
pipecat/services/nim.py,sha256=z6D6i0LJdawJofeJoS8Aj6FIernWLpGTtRBGRkqAqLI,4120
|
|
93
|
+
pipecat/services/ollama.py,sha256=l327hP4cBozd7JUWeTQkOJIXXZ08FcAhM5W2BO2hQfw,358
|
|
94
|
+
pipecat/services/openai.py,sha256=4OatBk5-ARG1zw4e2-ix8JSZ5G7QTW_NtRX3rDkzw5E,24004
|
|
95
|
+
pipecat/services/openpipe.py,sha256=nKdRn8Wmaeugol9kStWm2YjHG-IK9FdYP9Qjj_G64_Q,2173
|
|
96
|
+
pipecat/services/playht.py,sha256=RNjTW7kIdupwdz8Xacmasd2TJCpMda6F0EG7rVA2zW0,14383
|
|
97
|
+
pipecat/services/rime.py,sha256=2XaYfWhE1x7SIKI-ouh-6NpD4syXBJclNP4Xt4JLEM4,3293
|
|
98
|
+
pipecat/services/riva.py,sha256=EOct5084KjvKLqQ0vbNNpEGHAiPRbduPpdll4DptR3c,8713
|
|
99
|
+
pipecat/services/simli.py,sha256=N5nk6KMdH2-7ZbL92P132bTgPf13QonbhdEwxcSaLH8,5165
|
|
100
|
+
pipecat/services/tavus.py,sha256=NA7cUpLpzUIj6NrRVzcdhxMNsCdC6nZJu2uQWTCqvW8,4957
|
|
101
|
+
pipecat/services/together.py,sha256=wxQet_kmmi2r7_l67DR3p6G4CTnom8NUCPCLfCtA3gM,1443
|
|
102
|
+
pipecat/services/whisper.py,sha256=d5sBACD_GLgNcUUK27OjpKCfuHo5HHyqSbFhCEzGTx0,3128
|
|
103
|
+
pipecat/services/xtts.py,sha256=7IqnowUeEQrA514uCcagsptbmLQrfqIB-1HHFQZjbxk,6160
|
|
104
|
+
pipecat/services/gemini_multimodal_live/__init__.py,sha256=plwz4rIx_O6YPKKcS8hK_jTkwQsODGWjdkLTNvfhdaY,51
|
|
105
|
+
pipecat/services/gemini_multimodal_live/audio_transcriber.py,sha256=8QUxjeRxD3rxZ_u2J2Kpu1LGPoGurMzzLnv2_Zk6MQQ,4106
|
|
106
|
+
pipecat/services/gemini_multimodal_live/events.py,sha256=F3UKDW8Ah6Top0uvgHAiBf5x1wsByo6H9HfA3F636Yk,3150
|
|
107
|
+
pipecat/services/gemini_multimodal_live/gemini.py,sha256=cM4C59VJmE4DShD28X3dHdsOFd2IvhwAla0mpWj9Yps,25707
|
|
108
|
+
pipecat/services/openai_realtime_beta/__init__.py,sha256=G7D7LAuhMKPm3EwVfW0LrGYsbZ6ApGZ547JD_JM3ea8,127
|
|
109
|
+
pipecat/services/openai_realtime_beta/context.py,sha256=h9wbr7wuf2guGPx0z0nhVLgvUH1ONY6tV-gZLMHrdl8,9105
|
|
110
|
+
pipecat/services/openai_realtime_beta/events.py,sha256=Z26QOJNFNyJqj82yaQxyUmVlJ9DRXpdKKGqN1r1h2Qs,11995
|
|
111
|
+
pipecat/services/openai_realtime_beta/frames.py,sha256=d_L9AEIuN46qkGZ9t4310VimCeb99-2Bdy3VfaP_OHY,391
|
|
112
|
+
pipecat/services/openai_realtime_beta/openai.py,sha256=j-GbmZnJncq-F3ijaRHT73325itwcc1Q7XDk3ChGSio,22917
|
|
113
|
+
pipecat/services/to_be_updated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
114
|
+
pipecat/services/to_be_updated/cloudflare_ai_service.py,sha256=eidELybOojcA9e08_UWwrKJk-8KCtOafagl-gVVmDaQ,2664
|
|
115
|
+
pipecat/services/to_be_updated/google_ai_service.py,sha256=jUHq0QoBdTXBTzd7rkPfpPiAIgZyeyMYcYSD61VBAeE,964
|
|
116
|
+
pipecat/services/to_be_updated/huggingface_ai_service.py,sha256=zfu3ESBiVsYKy6J6EGkAmedoXpZROnYUyPakwYgabmY,1200
|
|
117
|
+
pipecat/services/to_be_updated/mock_ai_service.py,sha256=dZGH3sIT5zayV8gPXaFHxezbunz_0CFoBqEtkiAOWp8,853
|
|
118
|
+
pipecat/sync/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
+
pipecat/sync/base_notifier.py,sha256=P61yJZqxeXYbemYJwUT9npla8gz1odp7_5dt7tt9DlM,267
|
|
120
|
+
pipecat/sync/event_notifier.py,sha256=CTnV1X3GNxh7oyZRps8UKHa0DFVaO6YghVPUcxlkmiY,393
|
|
121
|
+
pipecat/transcriptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
|
+
pipecat/transcriptions/language.py,sha256=zQ0Ned7CqNUjNs49GigjuqYYFEgdBaexLDzADGrIv5g,6104
|
|
123
|
+
pipecat/transports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
124
|
+
pipecat/transports/base_input.py,sha256=gOhIIw-ahBJSVRoleyr9LrLqcOTMyELMUWgtkbtfgG4,7380
|
|
125
|
+
pipecat/transports/base_output.py,sha256=qFwcMf2eJf_TCbvY6BerSAkxGdzq-4eWjh5CtoSwWYU,18696
|
|
126
|
+
pipecat/transports/base_transport.py,sha256=aVO945fVmaabClvYPSV3T64ZbkbPmBTQmO33DIB0S94,3041
|
|
127
|
+
pipecat/transports/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
+
pipecat/transports/local/audio.py,sha256=By-u4iJ92Z0J_NW2CE7YXc8v9K4kKLO8_LVX_frrle8,3890
|
|
129
|
+
pipecat/transports/local/tk.py,sha256=zQIRI77PolKW8PnFwb2VOKVfN-IaQUjg7dbIhv0FjQU,5124
|
|
130
|
+
pipecat/transports/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
|
+
pipecat/transports/network/fastapi_websocket.py,sha256=b5X2OlUJonhzQpCxE_KsNpypeZ67l-7u4YvX2Njun08,6885
|
|
132
|
+
pipecat/transports/network/websocket_server.py,sha256=iPfzhWb1M0VGi9T8JYj9eqq1qoFVPiSK1lYeMpufgZM,8709
|
|
133
|
+
pipecat/transports/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
|
+
pipecat/transports/services/daily.py,sha256=s90U1CmLVJwvoWyeeGFrVIU4e-zYouYDuf1E4UPeGWM,40787
|
|
135
|
+
pipecat/transports/services/livekit.py,sha256=YOqY62BRYfJ16nvNStFA-VOVzlZI1ALzCbcbtM6maEU,23697
|
|
136
|
+
pipecat/transports/services/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
137
|
+
pipecat/transports/services/helpers/daily_rest.py,sha256=kr-fujlWtR0c3jtSZgP0GDHF1F-NCtF1eWjm62XnfGU,4894
|
|
138
|
+
pipecat/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
|
+
pipecat/utils/string.py,sha256=2b9DI0GTBUd3sD8oTcPUbI0-s_6RMo7qWrM7qqZ8wYE,1095
|
|
140
|
+
pipecat/utils/test_frame_processor.py,sha256=0_hd6OA9lMSXjuUHFiRk12a0fWPyh2nzR83nPOLzjJo,1847
|
|
141
|
+
pipecat/utils/time.py,sha256=BpAUt-HE7u3o0iCI7aY2j1joR2ct2AlJlFf07qwsMHM,783
|
|
142
|
+
pipecat/utils/utils.py,sha256=uZGB8eJHu9i9MemtCJ9cScpiZcB9KQnWhfHJgeDS9Y0,648
|
|
143
|
+
pipecat/utils/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
144
|
+
pipecat/utils/text/base_text_filter.py,sha256=3B8rnWlf2CcsrtM72tlgIi9YLLnFZ12OlTpibfzoG6E,484
|
|
145
|
+
pipecat/utils/text/markdown_text_filter.py,sha256=EukJPMocBCKUql9Vg3uAcwIC7w5ImGOgJJ78A95FMos,8002
|
|
146
|
+
pipecat/vad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
|
+
pipecat/vad/silero.py,sha256=6xknDDha4_UJFQRAONQIiiKQcAUNSLMz2oFl6WNetzA,394
|
|
148
|
+
pipecat/vad/vad_analyzer.py,sha256=pg7GKAmtnsE2CWpWPD5UsX6MPGd4p_E2qsCwyK5qKOk,363
|
|
149
|
+
dv_pipecat_ai-0.0.52.dev86.dist-info/LICENSE,sha256=P3rk7-qdiAA_vtQKg2KVaFyPWCxjvvI5zcRm3-mSQ30,1294
|
|
150
|
+
dv_pipecat_ai-0.0.52.dev86.dist-info/METADATA,sha256=WDDXKNoyobrig-31Ql7XKqS3Wmk-znvhroWIVemiM8I,23603
|
|
151
|
+
dv_pipecat_ai-0.0.52.dev86.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
152
|
+
dv_pipecat_ai-0.0.52.dev86.dist-info/top_level.txt,sha256=kQzG20CxGf-nSsHmtXHx3hY2-8zHA3jYg8jk0TajqXc,8
|
|
153
|
+
dv_pipecat_ai-0.0.52.dev86.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pipecat
|
pipecat/__init__.py
ADDED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2024, Daily
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD 2-Clause License
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
from abc import ABC, abstractmethod
|
|
8
|
+
|
|
9
|
+
from pipecat.frames.frames import FilterControlFrame
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class BaseAudioFilter(ABC):
|
|
13
|
+
"""This is a base class for input transport audio filters. If an audio
|
|
14
|
+
filter is provided to the input transport it will be used to process audio
|
|
15
|
+
before VAD and before pushing it downstream. There are control frames to
|
|
16
|
+
update filter settings or to enable or disable the filter at runtime.
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
@abstractmethod
|
|
21
|
+
async def start(self, sample_rate: int):
|
|
22
|
+
"""This will be called from the input transport when the transport is
|
|
23
|
+
started. It can be used to initialize the filter. The input transport
|
|
24
|
+
sample rate is provided so the filter can adjust to that sample rate.
|
|
25
|
+
|
|
26
|
+
"""
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
@abstractmethod
|
|
30
|
+
async def stop(self):
|
|
31
|
+
"""This will be called from the input transport when the transport is
|
|
32
|
+
stopping.
|
|
33
|
+
|
|
34
|
+
"""
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
@abstractmethod
|
|
38
|
+
async def process_frame(self, frame: FilterControlFrame):
|
|
39
|
+
"""This will be called when the input transport receives a
|
|
40
|
+
FilterControlFrame.
|
|
41
|
+
|
|
42
|
+
"""
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
@abstractmethod
|
|
46
|
+
async def filter(self, audio: bytes) -> bytes:
|
|
47
|
+
pass
|